Backup-Operations-Log + EBUSY-Fix beim Restore
Backup-Seite zeigt zwei neue Log-Panels: links Backup-Erstellung, rechts Backup-Wiederherstellung. Jeder Eintrag mit ✓/✗-Status, Summary, Timestamp + User. Klick öffnet Modal mit vollständigem Verlauf – alle console.log/error/warn/info-Zeilen werden während der Operation in einen Puffer mitgefangen und im fullLog-Feld persistiert. Auto-Refresh alle 5s. Persistenz: neue Tabelle BackupLog mit Migration 20260519100000_backup_log (CREATE TABLE IF NOT EXISTS für Re-Deploys auf DBs mit Vorab-db-push). fullLog auf 1 MB gecappt. Endpoints (settings:update): - GET /api/settings/backup-logs?operation=CREATE|RESTORE&limit=50 - GET /api/settings/backup-logs/:id EBUSY-Fix: Der neue Log-Verlauf hat sofort einen alten Bug sichtbar gemacht. backup.service.restoreBackup rief deleteDirectory(UPLOADS_DIR) auf, dessen finales rmdirSync auf /app/uploads ein EBUSY warf – das Verzeichnis ist im Container ein Bind-Mount und lässt sich nicht aushängen. Fix: neuer Helper emptyDirectory() löscht nur die Inhalte, das Verzeichnis bleibt stehen. Live-verifiziert: 4867 Datensätze + 1 Datei in 13.2s wiederhergestellt; Log-Modal zeigt den vollständigen Verlauf. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -97,6 +97,29 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🆕 Backup-Operations-Log + EBUSY-Fix beim Restore**
|
||||
- Zwei neue Log-Panels auf der DB-Backup-Seite: links
|
||||
"Backup-Erstellung", rechts "Backup-Wiederherstellung". Jeder
|
||||
Eintrag zeigt ✓/✗-Status, Summary, Timestamp und User. Klick
|
||||
öffnet ein Modal mit dem vollständigen Verlauf (alle
|
||||
`console.log/error/warn/info`-Zeilen werden während der
|
||||
Operation in einen Puffer mitgefangen).
|
||||
- Persistiert in neuer Tabelle `BackupLog`
|
||||
(Migration `20260519100000_backup_log` mit `IF NOT EXISTS`).
|
||||
Limit 1 MB pro `fullLog`, Auto-Refresh alle 5s.
|
||||
- Endpoints (settings:update):
|
||||
`GET /api/settings/backup-logs?operation=CREATE|RESTORE`,
|
||||
`GET /api/settings/backup-logs/:id`.
|
||||
- **Bonus**: Das neue Log hat sofort einen alten Bug aufgedeckt –
|
||||
`EBUSY: rmdir '/app/uploads'` beim Restore. Ursache: das
|
||||
Backup-Service rief `deleteDirectory(UPLOADS_DIR)` mit dem
|
||||
finalen `rmdirSync`, aber `/app/uploads` ist ein Bind-Mount,
|
||||
den Linux nicht aushängen lässt. Fix: neuer Helper
|
||||
`emptyDirectory()` löscht nur die Inhalte, das Verzeichnis
|
||||
selbst bleibt stehen.
|
||||
- **Live-verifiziert**: 4867 Datensätze + 1 Datei in 13.2s
|
||||
wiederhergestellt, Log-Modal zeigt den vollständigen Verlauf.
|
||||
|
||||
- [x] **🐛 DSGVO-Rolle: Menüpunkte in den Einstellungen unsichtbar**
|
||||
- Symptom: User mit ausschließlich DSGVO-Rolle sah keinerlei
|
||||
Karten unter Einstellungen → System (DSGVO-Dashboard,
|
||||
|
||||
Reference in New Issue
Block a user