177 lines
6.5 KiB
Python
177 lines
6.5 KiB
Python
"""
|
|
Backup Manager - Wrapper für DatabaseBackupManager
|
|
Kompatibilitäts-Wrapper für die vollständige Backup-Implementierung in database_utils.py
|
|
"""
|
|
|
|
from utils.logging_config import get_logger
|
|
from utils.database_utils import DatabaseBackupManager
|
|
|
|
backup_logger = get_logger("backup")
|
|
|
|
class BackupManager:
|
|
"""
|
|
Kompatibilitäts-Wrapper für DatabaseBackupManager.
|
|
Stellt die ursprüngliche API bereit, nutzt aber die vollständige Implementierung.
|
|
"""
|
|
|
|
def __init__(self):
|
|
"""Initialisiert den BackupManager mit vollständiger Funktionalität."""
|
|
try:
|
|
self._db_backup_manager = DatabaseBackupManager()
|
|
self.enabled = True
|
|
backup_logger.info("BackupManager erfolgreich initialisiert mit vollständiger Funktionalität")
|
|
except Exception as e:
|
|
backup_logger.error(f"Fehler bei BackupManager-Initialisierung: {e}")
|
|
self._db_backup_manager = None
|
|
self.enabled = False
|
|
|
|
def create_backup(self, backup_type="manual"):
|
|
"""
|
|
Erstellt ein Backup der Datenbank.
|
|
|
|
Args:
|
|
backup_type (str): Typ des Backups (manual, automatic, emergency)
|
|
|
|
Returns:
|
|
dict: Ergebnis der Backup-Operation mit success/error Status
|
|
"""
|
|
if not self.enabled or not self._db_backup_manager:
|
|
backup_logger.warning("BackupManager nicht verfügbar - Backup-Erstellung fehlgeschlagen")
|
|
return {
|
|
"success": False,
|
|
"message": "Backup-System nicht verfügbar",
|
|
"error": "BackupManager nicht initialisiert"
|
|
}
|
|
|
|
try:
|
|
backup_logger.info(f"Starte Backup-Erstellung: {backup_type}")
|
|
|
|
# Nutze die vollständige DatabaseBackupManager-Implementation
|
|
backup_path = self._db_backup_manager.create_backup(compress=True)
|
|
|
|
backup_logger.info(f"Backup erfolgreich erstellt: {backup_path}")
|
|
return {
|
|
"success": True,
|
|
"message": f"Backup erfolgreich erstellt: {backup_type}",
|
|
"backup_path": backup_path,
|
|
"backup_type": backup_type
|
|
}
|
|
|
|
except Exception as e:
|
|
backup_logger.error(f"Fehler bei Backup-Erstellung ({backup_type}): {str(e)}")
|
|
return {
|
|
"success": False,
|
|
"message": f"Backup-Erstellung fehlgeschlagen: {str(e)}",
|
|
"error": str(e),
|
|
"backup_type": backup_type
|
|
}
|
|
|
|
def restore_backup(self, backup_path):
|
|
"""
|
|
Stellt ein Backup wieder her.
|
|
|
|
Args:
|
|
backup_path (str): Pfad zur Backup-Datei
|
|
|
|
Returns:
|
|
dict: Ergebnis der Restore-Operation
|
|
"""
|
|
if not self.enabled or not self._db_backup_manager:
|
|
backup_logger.warning("BackupManager nicht verfügbar - Restore fehlgeschlagen")
|
|
return {
|
|
"success": False,
|
|
"message": "Backup-System nicht verfügbar",
|
|
"error": "BackupManager nicht initialisiert"
|
|
}
|
|
|
|
try:
|
|
backup_logger.info(f"Starte Backup-Wiederherstellung: {backup_path}")
|
|
|
|
# Nutze die vollständige DatabaseBackupManager-Implementation
|
|
success = self._db_backup_manager.restore_backup(backup_path)
|
|
|
|
if success:
|
|
backup_logger.info(f"Backup erfolgreich wiederhergestellt: {backup_path}")
|
|
return {
|
|
"success": True,
|
|
"message": f"Backup erfolgreich wiederhergestellt",
|
|
"backup_path": backup_path
|
|
}
|
|
else:
|
|
backup_logger.error(f"Backup-Wiederherstellung fehlgeschlagen: {backup_path}")
|
|
return {
|
|
"success": False,
|
|
"message": "Backup-Wiederherstellung fehlgeschlagen",
|
|
"backup_path": backup_path
|
|
}
|
|
|
|
except Exception as e:
|
|
backup_logger.error(f"Fehler bei Backup-Wiederherstellung ({backup_path}): {str(e)}")
|
|
return {
|
|
"success": False,
|
|
"message": f"Restore fehlgeschlagen: {str(e)}",
|
|
"error": str(e),
|
|
"backup_path": backup_path
|
|
}
|
|
|
|
def get_backup_list(self):
|
|
"""
|
|
Holt eine Liste aller verfügbaren Backups.
|
|
|
|
Returns:
|
|
dict: Liste der verfügbaren Backups
|
|
"""
|
|
if not self.enabled or not self._db_backup_manager:
|
|
return {
|
|
"success": False,
|
|
"message": "Backup-System nicht verfügbar",
|
|
"backups": []
|
|
}
|
|
|
|
try:
|
|
backups = self._db_backup_manager.list_backups()
|
|
return {
|
|
"success": True,
|
|
"message": f"{len(backups)} Backups gefunden",
|
|
"backups": backups
|
|
}
|
|
except Exception as e:
|
|
backup_logger.error(f"Fehler beim Abrufen der Backup-Liste: {str(e)}")
|
|
return {
|
|
"success": False,
|
|
"message": f"Fehler beim Abrufen der Backups: {str(e)}",
|
|
"backups": []
|
|
}
|
|
|
|
def cleanup_old_backups(self, keep_count=10):
|
|
"""
|
|
Räumt alte Backups auf und behält nur die neuesten.
|
|
|
|
Args:
|
|
keep_count (int): Anzahl der zu behaltenden Backups
|
|
|
|
Returns:
|
|
dict: Ergebnis der Cleanup-Operation
|
|
"""
|
|
if not self.enabled or not self._db_backup_manager:
|
|
return {
|
|
"success": False,
|
|
"message": "Backup-System nicht verfügbar"
|
|
}
|
|
|
|
try:
|
|
removed_count = self._db_backup_manager.cleanup_old_backups(keep_count)
|
|
backup_logger.info(f"Backup-Cleanup abgeschlossen: {removed_count} alte Backups entfernt")
|
|
return {
|
|
"success": True,
|
|
"message": f"{removed_count} alte Backups entfernt",
|
|
"removed_count": removed_count,
|
|
"kept_count": keep_count
|
|
}
|
|
except Exception as e:
|
|
backup_logger.error(f"Fehler beim Backup-Cleanup: {str(e)}")
|
|
return {
|
|
"success": False,
|
|
"message": f"Cleanup fehlgeschlagen: {str(e)}",
|
|
"error": str(e)
|
|
} |