2
This commit is contained in:
@@ -62,43 +62,59 @@ def setup_clients(logger: SupersetLogger):
|
||||
logger.error(f"Ошибка инициализации клиентов: {str(e)}")
|
||||
raise
|
||||
|
||||
def backup_dashboards(client,
|
||||
env_name,
|
||||
backup_root,
|
||||
logger: SupersetLogger ):
|
||||
"""Выполнение бэкапа дашбордов для указанного окружения"""
|
||||
def backup_dashboards(client, env_name, backup_root, logger):
|
||||
"""Выполнение бэкапа дашбордов с детальным логированием ошибок"""
|
||||
try:
|
||||
dashboard_count, dashboard_meta = client.get_dashboards()
|
||||
total = 0
|
||||
if dashboard_count == 0:
|
||||
logger.warning(f"Нет дашбордов для экспорта в {env_name}")
|
||||
return True
|
||||
|
||||
success = 0
|
||||
errors = []
|
||||
|
||||
for db in dashboard_meta:
|
||||
if db['slug']:
|
||||
total += 1
|
||||
if not db.get('slug'):
|
||||
continue
|
||||
|
||||
try:
|
||||
dashboard_title = db['dashboard_title']
|
||||
dashboard_dir = Path(backup_root) / env_name / sanitize_filename(dashboard_title)
|
||||
dashboard_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
zip_content, filename = client.export_dashboard(db['id'])
|
||||
save_and_unpack_dashboard(
|
||||
zip_content=zip_content,
|
||||
original_filename=filename,
|
||||
output_dir=dashboard_dir,
|
||||
unpack=False
|
||||
)
|
||||
|
||||
# Архивирование старых бэкапов
|
||||
try:
|
||||
dashboard_dir = Path(backup_root , env_name , sanitize_filename(dashboard_title))
|
||||
dashboard_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
zip_content, filename = client.export_dashboard(db['id'])
|
||||
zip_path = save_and_unpack_dashboard(
|
||||
zip_content=zip_content,
|
||||
original_filename=filename,
|
||||
output_dir=dashboard_dir,
|
||||
unpack=False
|
||||
)
|
||||
|
||||
success += 1
|
||||
#Очистка старых бэкапов
|
||||
try:
|
||||
archive_exports(dashboard_dir)
|
||||
except Exception as cleanup_error:
|
||||
raise cleanup_error
|
||||
|
||||
except Exception as db_error:
|
||||
raise db_error
|
||||
return success == total
|
||||
archive_exports(dashboard_dir)
|
||||
except Exception as cleanup_error:
|
||||
logger.warning(f"Ошибка очистки архива: {cleanup_error}")
|
||||
|
||||
success += 1
|
||||
|
||||
except Exception as db_error:
|
||||
error_info = {
|
||||
'dashboard': db.get('dashboard_title'),
|
||||
'error': str(db_error),
|
||||
'env': env_name
|
||||
}
|
||||
errors.append(error_info)
|
||||
logger.error("Ошибка экспорта дашборда", extra=error_info)
|
||||
|
||||
if errors:
|
||||
logger.error(f"Итоги экспорта для {env_name}",
|
||||
extra={'success': success, 'errors': errors, 'total': dashboard_count})
|
||||
|
||||
return len(errors) == 0
|
||||
|
||||
except Exception as e:
|
||||
logger.critical(f"Фатальная ошибка бэкапа {env_name}: {str(e)}", exc_info=True)
|
||||
return False
|
||||
|
||||
def main():
|
||||
|
||||
Reference in New Issue
Block a user