backup worked
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
import logging
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from dataclasses import dataclass
|
||||
from dataclasses import dataclass,field
|
||||
|
||||
# [IMPORTS] Third-party
|
||||
from requests.exceptions import RequestException
|
||||
@@ -37,17 +37,18 @@ class BackupConfig:
|
||||
consolidate: bool = True
|
||||
rotate_archive: bool = True
|
||||
clean_folders: bool = True
|
||||
retention_policy: RetentionPolicy = RetentionPolicy()
|
||||
retention_policy: RetentionPolicy = field(default_factory=RetentionPolicy)
|
||||
|
||||
# [ENTITY: Function('backup_dashboards')]
|
||||
# CONTRACT:
|
||||
# PURPOSE: Выполняет бэкап всех доступных дашбордов для заданного клиента и окружения.
|
||||
# PURPOSE: Выполняет бэкап всех доступных дашбордов для заданного клиента и окружения, пропуская ошибки экспорта.
|
||||
# PRECONDITIONS:
|
||||
# - `client` должен быть инициализированным экземпляром `SupersetClient`.
|
||||
# - `env_name` должен быть строкой, обозначающей окружение.
|
||||
# - `backup_root` должен быть валидным путем к корневой директории бэкапа.
|
||||
# POSTCONDITIONS:
|
||||
# - Дашборды экспортируются и сохраняются.
|
||||
# - Ошибки экспорта логируются и не приводят к остановке скрипта.
|
||||
# - Возвращает `True` если все дашборды были экспортированы без критических ошибок, `False` иначе.
|
||||
def backup_dashboards(
|
||||
client: SupersetClient,
|
||||
@@ -90,7 +91,9 @@ def backup_dashboards(
|
||||
|
||||
success_count += 1
|
||||
except (SupersetAPIError, RequestException, IOError, OSError) as db_error:
|
||||
logger.error(f"[STATE][backup_dashboards][FAILURE] Failed to export dashboard {dashboard_title}: {db_error}", exc_info=True)
|
||||
logger.error(f"[STATE][backup_dashboards][FAILURE] Failed to export dashboard {dashboard_title} (ID: {dashboard_id}): {db_error}", exc_info=True)
|
||||
# Продолжаем обработку других дашбордов
|
||||
continue
|
||||
|
||||
if config.consolidate:
|
||||
consolidate_archive_folders(backup_root / env_name , logger=logger)
|
||||
@@ -125,13 +128,18 @@ def main() -> int:
|
||||
backup_config = BackupConfig(rotate_archive=True)
|
||||
|
||||
for env in environments:
|
||||
results[env] = backup_dashboards(
|
||||
clients[env],
|
||||
env.upper(),
|
||||
superset_backup_repo,
|
||||
logger=logger,
|
||||
config=backup_config
|
||||
)
|
||||
try:
|
||||
results[env] = backup_dashboards(
|
||||
clients[env],
|
||||
env.upper(),
|
||||
superset_backup_repo,
|
||||
logger=logger,
|
||||
config=backup_config
|
||||
)
|
||||
except Exception as env_error:
|
||||
logger.critical(f"[STATE][main][FAILURE] Critical error for environment {env}: {env_error}", exc_info=True)
|
||||
# Продолжаем обработку других окружений
|
||||
results[env] = False
|
||||
|
||||
if not all(results.values()):
|
||||
exit_code = 1
|
||||
|
||||
Reference in New Issue
Block a user