reporter
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
# DBrestore – Medicus DB restore na Reporteru
|
||||
|
||||
## Co skript dělá
|
||||
|
||||
`restore.py` automaticky obnovuje Firebird databázi Medicus na počítači REPORTER ze zálohy uložené na NAS.
|
||||
|
||||
### Postup krok za krokem
|
||||
|
||||
1. **Kontrola hostitele** – skript lze spustit pouze na počítači REPORTER
|
||||
2. **Najde nejnovější ZIP** v `\\tower\ordinacesynology\MedicusBackup\` (vzor: `MEDICUS_YYMMDD_HHMM.zip`)
|
||||
3. **Kontrola duplicity** – porovná název ZIPu s `last_restored.txt`; pokud už byl obnoven, skončí bez akce
|
||||
4. **Kontrola přenosu (rsync)** – změří velikost ZIPu, počká 60 sekund, změří znovu; pokud se liší, přenos ještě běží → skončí bez akce
|
||||
5. **Rozbalí ZIP** → extrahuje `.fbk` do `C:\Medicus\restore\`
|
||||
6. **Odpojí aktivní klienty** z Firebird DB (přes `MON$ATTACHMENTS`)
|
||||
7. **Smaže starou DB** `C:\Medicus\medicus.fdb` a spustí `gbak` restore s live výpisem
|
||||
8. **Po úspěšném restore:**
|
||||
- uloží název ZIPu do `last_restored.txt`
|
||||
- smaže ZIP ze záložního adresáře
|
||||
- smaže rozbalený `.fbk`
|
||||
- otestuje DB (počet registrovaných pacientů)
|
||||
9. **Odešle email** na `vladimir.buzalka@buzalka.cz` s výsledkem a logem jako přílohou
|
||||
10. **Smaže log**
|
||||
|
||||
## Konfigurace
|
||||
|
||||
| Proměnná | Hodnota |
|
||||
|---|---|
|
||||
| `BACKUP_DIR` | `\\tower\ordinacesynology\MedicusBackup` |
|
||||
| `EXTRACT_DIR` | `C:\Medicus\restore` |
|
||||
| `TARGET_DB` | `C:\Medicus\medicus.fdb` |
|
||||
| `GBAK` | `C:\Program Files\Firebird\Firebird_2_5_CGM\bin\gbak.exe` |
|
||||
| `LOG_FILE` | `C:\Medicus\restore\restore.log` |
|
||||
| `LAST_RESTORED` | `C:\Medicus\restore\last_restored.txt` |
|
||||
| `EMAIL_TO` | `vladimir.buzalka@buzalka.cz` |
|
||||
|
||||
## Firebird připojení
|
||||
|
||||
```python
|
||||
import fdb
|
||||
conn = fdb.connect(
|
||||
dsn=r'localhost:c:\medicus\medicus.fdb', # lokálně na REPORTERu
|
||||
user='SYSDBA', password='masterkey', charset='win1250'
|
||||
)
|
||||
|
||||
# Z jiných počítačů v síti:
|
||||
conn = fdb.connect(
|
||||
dsn=r'reporter:c:\medicus\medicus.fdb',
|
||||
user='SYSDBA', password='masterkey', charset='win1250'
|
||||
)
|
||||
```
|
||||
|
||||
## Scheduled Task
|
||||
|
||||
- **Spouštěcí program:** `C:\Reporting\Python\python.exe`
|
||||
- **Argumenty:** `C:\Reporting\RestoreNaReporter\restore.py`
|
||||
- **Interval:** každou hodinu
|
||||
- **Uživatel:** vlado (s nejvyššími právy)
|
||||
- **DŮLEŽITÉ:** musí být `python.exe`, ne `pythonw.exe` (jinak stdout/stderr nejdou zachytit)
|
||||
|
||||
## Závislosti
|
||||
|
||||
- `fdb` – Firebird Python driver
|
||||
- `msal`, `requests` – pro odesílání emailu přes Microsoft Graph
|
||||
- `EmailMessagingGraph.py` – knihovna v `C:\Reporting\knihovny\`
|
||||
|
||||
Všechny závislosti jsou v `C:\Reporting\Python\`.
|
||||
|
||||
## Produkční umístění
|
||||
|
||||
| Soubor | Cesta |
|
||||
|---|---|
|
||||
| Skript | `C:\Reporting\RestoreNaReporter\restore.py` |
|
||||
| Python | `C:\Reporting\Python\python.exe` |
|
||||
| Email knihovna | `C:\Reporting\knihovny\EmailMessagingGraph.py` |
|
||||
|
||||
## Firewall
|
||||
|
||||
Port **3050 TCP** otevřen pro příchozí spojení (Firebird) – pravidlo "Firebird 3050".
|
||||
|
||||
## Časová osa nočního procesu
|
||||
|
||||
| Čas | Co se děje |
|
||||
|---|---|
|
||||
| 02:00 | Zálohovací skript v ordinaci vytvoří `.zip` |
|
||||
| ~02:30 | Záloha dokončena, rsync začne přenos na NAS |
|
||||
| ~03:xx | rsync dokončen |
|
||||
| každou hodinu | Scheduled task zkontroluje nový ZIP + velikost |
|
||||
| po stabilizaci | Spustí restore (~10 min), odešle email |
|
||||
Reference in New Issue
Block a user