feat: enhance backup functionality and logging

- Updated `createBackup` method to accept a `force` parameter, allowing backups to be created even if no changes are detected.
- Added user alerts in `AdvancedSettingsPageClient` and `BackupSettingsPageClient` for backup status feedback.
- Implemented `getBackupLogs` method in `BackupService` to retrieve backup logs, with a new API route for accessing logs.
- Enhanced UI in `BackupSettingsPageClient` to display backup logs and provide a refresh option.
- Updated `BackupManagerCLI` to support forced backups via command line.
This commit is contained in:
Julien Froidefond
2025-09-21 07:27:23 +02:00
parent 618e774a30
commit 43998425e6
10 changed files with 649 additions and 179 deletions

View File

@@ -21,7 +21,7 @@ class BackupManagerCLI {
🔧 TowerControl Backup Manager
COMMANDES:
create Créer une nouvelle sauvegarde
create [--force] Créer une nouvelle sauvegarde (--force pour ignorer la détection de changements)
list Lister toutes les sauvegardes
delete <filename> Supprimer une sauvegarde
restore <filename> Restaurer une sauvegarde
@@ -35,6 +35,7 @@ COMMANDES:
EXEMPLES:
tsx backup-manager.ts create
tsx backup-manager.ts create --force
tsx backup-manager.ts list
tsx backup-manager.ts delete towercontrol_2025-01-15T10-30-00-000Z.db
tsx backup-manager.ts restore towercontrol_2025-01-15T10-30-00-000Z.db.gz
@@ -105,7 +106,7 @@ OPTIONS:
try {
switch (options.command) {
case 'create':
await this.createBackup();
await this.createBackup(options.force || false);
break;
case 'list':
@@ -167,13 +168,22 @@ OPTIONS:
}
}
private async createBackup(): Promise<void> {
private async createBackup(force: boolean = false): Promise<void> {
console.log('🔄 Création d\'une sauvegarde...');
const result = await backupService.createBackup('manual');
const result = await backupService.createBackup('manual', force);
if (result === null) {
console.log('⏭️ Sauvegarde sautée: Aucun changement détecté depuis la dernière sauvegarde');
console.log(' 💡 Utilisez --force pour créer une sauvegarde malgré tout');
return;
}
if (result.status === 'success') {
console.log(`✅ Sauvegarde créée: ${result.filename}`);
console.log(` Taille: ${this.formatFileSize(result.size)}`);
if (result.databaseHash) {
console.log(` Hash: ${result.databaseHash.substring(0, 12)}...`);
}
} else {
console.error(`❌ Échec de la sauvegarde: ${result.error}`);
process.exit(1);