reporter
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
# Dropbox Ordinace Backup
|
||||
|
||||
Indexer a zálohovací systém pro Dropbox složku ordinace. Při každém spuštění projde filesystém, porovná stav s databází, zazálohuje nové/změněné soubory do content-addressable storage, vygeneruje Excel report a odešle emailové oznámení.
|
||||
|
||||
## Architektura
|
||||
|
||||
```
|
||||
main.py – hlavní orchestrátor (spouštět přímo)
|
||||
indexer/
|
||||
config.py – načítá .env (DB, cesty, chování)
|
||||
logger.py – setup logování do souboru + konzole
|
||||
scanner.py – rychlý scan filesystému (bez hashování)
|
||||
hasher.py – BLAKE3 hash, detekce cloud placeholderů, hydratace
|
||||
db.py – všechny DB operace (runs, files, events)
|
||||
events.py – batch INSERT do file_events
|
||||
backup.py – AES-256 ZIP content-addressable storage
|
||||
report.py – generuje Excel report z DB
|
||||
recovery.py – obnova souborů ze zálohy
|
||||
reconcile.py – reconciliace DB vs filesystem
|
||||
```
|
||||
|
||||
## Konfigurace (.env)
|
||||
|
||||
```env
|
||||
DRY_RUN=false # true = jen scan, žádná DB ani záloha
|
||||
LOG_LEVEL=INFO
|
||||
LOG_DIR=C:\Reporting\DropboxBackup\logs
|
||||
|
||||
DB_HOST=192.168.1.76
|
||||
DB_PORT=3306
|
||||
DB_NAME=OrdinaceDropBoxBackup
|
||||
DB_USER=root
|
||||
DB_PASSWORD=...
|
||||
|
||||
ROOT_PATH=z:\Dropbox\Ordinace\
|
||||
ROOT_NAME=DropboxOrdinace
|
||||
BATCH_SIZE=1000
|
||||
BACKUP_PATH=w:\OneDrive\DropBoxBackupClaude\
|
||||
BACKUP_PASSWORD=...
|
||||
```
|
||||
|
||||
## Spuštění
|
||||
|
||||
```
|
||||
cd C:\Reporting\DropboxBackup
|
||||
C:\Reporting\Python\python.exe main.py
|
||||
```
|
||||
|
||||
Nebo přes Task Scheduler:
|
||||
- Program: `C:\Reporting\Python\python.exe`
|
||||
- Argumenty: `C:\Reporting\DropboxBackup\main.py`
|
||||
- Spustit v: `C:\Reporting\DropboxBackup`
|
||||
|
||||
## Co dělá jeden run
|
||||
|
||||
1. **Scan** – projde `ROOT_PATH`, zaznamená velikost a mtime každého souboru
|
||||
2. **Diff** – porovná s DB: nové / změněné / smazané / beze změny
|
||||
3. **Hashování** – BLAKE3 pro nové a změněné soubory
|
||||
- Cloud placeholdery (Dropbox Smart Sync) – automaticky hydratuje (čeká max 120 s na stažení)
|
||||
4. **DB update** – batch INSERT/UPDATE souborů a eventů
|
||||
5. **Backup** – AES-256 ZIP do content-addressable storage (`BACKUP_PATH/ab/cd/<blake3hash>.zip`), deduplikace hashem
|
||||
6. **Report** – Excel soubor do `z:\Dropbox\!!!Days\Downloads Z230\`
|
||||
7. **Email** – HTML shrnutí + přiložený `backup.log` na `vladimir.buzalka@buzalka.cz`
|
||||
|
||||
## Logy
|
||||
|
||||
Rotující denní log: `LOG_DIR\backup.log` (history 90 dní).
|
||||
|
||||
## Záloha — storage formát
|
||||
|
||||
Každý unikátní obsah je uložen jednou jako:
|
||||
```
|
||||
BACKUP_PATH/
|
||||
ab/
|
||||
cd/
|
||||
abcdef...zip ← AES-256 ZIP s názvem <blake3hex>.blob uvnitř
|
||||
```
|
||||
|
||||
Deduplikace je automatická — soubory se stejným obsahem sdílí jeden ZIP.
|
||||
|
||||
## Databáze
|
||||
|
||||
MySQL databáze `OrdinaceDropBoxBackup` na `192.168.1.76`:
|
||||
|
||||
| Tabulka | Popis |
|
||||
|---|---|
|
||||
| `runs` | Každé spuštění indexeru (status, statistiky) |
|
||||
| `files` | Aktuální stav všech souborů (`exists_now`, hash, velikost) |
|
||||
| `file_events` | Historie změn (CREATED / MODIFIED / DELETED) |
|
||||
|
||||
## Závislosti
|
||||
|
||||
```
|
||||
blake3
|
||||
pymysql
|
||||
python-dotenv
|
||||
pyzipper
|
||||
openpyxl
|
||||
msal
|
||||
requests
|
||||
```
|
||||
|
||||
Instalace: `C:\Reporting\Python\python.exe -m pip install -r requirements.txt`
|
||||
|
||||
## Projekty
|
||||
|
||||
- Produkce: `C:\Reporting\DropboxBackup\`
|
||||
- Vývoj: `C:\Users\vlado\PycharmProjects\drobboxordinacebackup\`
|
||||
|
||||
Reference in New Issue
Block a user