# 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/.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 .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\`