126 lines
4.0 KiB
Python
126 lines
4.0 KiB
Python
import logging
|
|
from datetime import datetime
|
|
import shutil
|
|
import os
|
|
import keyring
|
|
from pathlib import Path
|
|
from superset_tool.models import SupersetConfig, DatabaseConfig
|
|
from superset_tool.client import SupersetClient
|
|
from superset_tool.utils.fileio import save_and_unpack_dashboard, archive_exports
|
|
|
|
# Настройка логирования
|
|
LOG_DIR = Path("P:\\Superset\\010 Бекапы\\Logs")
|
|
LOG_DIR.mkdir(exist_ok=True, parents=True)
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format='%(asctime)s - %(levelname)s - %(message)s',
|
|
handlers=[
|
|
logging.FileHandler(LOG_DIR / f"superset_backup_{datetime.now().strftime('%Y%m%d')}.log"),
|
|
logging.StreamHandler()
|
|
]
|
|
)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def setup_clients():
|
|
"""Инициализация клиентов для разных окружений"""
|
|
clients = {}
|
|
try:
|
|
|
|
# Конфигурация для Prod
|
|
prod_config = SupersetConfig(
|
|
base_url="https://prodta.bi.dwh.rusal.com/api/v1",
|
|
auth={
|
|
"provider": "db",
|
|
"username": "migrate_user",
|
|
"password": keyring.get_password("system", "prod migrate"),
|
|
"refresh": True
|
|
},
|
|
verify_ssl=False
|
|
)
|
|
# Конфигурация для Dev
|
|
dev_config = SupersetConfig(
|
|
base_url="https://devta.bi.dwh.rusal.com/api/v1",
|
|
auth={
|
|
"provider": "db",
|
|
"username": "migrate_user",
|
|
"password": keyring.get_password("system", "dev migrate"),
|
|
"refresh": True
|
|
},
|
|
verify_ssl=False
|
|
)
|
|
|
|
|
|
# Конфигурация для Sandbox
|
|
sandbox_config = SupersetConfig(
|
|
base_url="https://sandboxta.bi.dwh.rusal.com/api/v1",
|
|
auth={
|
|
"provider": "db",
|
|
"username": "migrate_user",
|
|
"password": keyring.get_password("system", "sandbox migrate"),
|
|
"refresh": True
|
|
},
|
|
verify_ssl=False
|
|
)
|
|
try:
|
|
clients['dev'] = SupersetClient(dev_config)
|
|
except Exception as e:
|
|
logger.error(f"Ошибка инициализации клиента: {str(e)}")
|
|
try:
|
|
clients['sbx'] = SupersetClient(sandbox_config)
|
|
except Exception as e:
|
|
logger.error(f"Ошибка инициализации клиента: {str(e)}")
|
|
try:
|
|
clients['prod'] = SupersetClient(prod_config)
|
|
except Exception as e:
|
|
logger.error(f"Ошибка инициализации клиента: {str(e)}")
|
|
|
|
return clients
|
|
except Exception as e:
|
|
logger.error(f"Ошибка инициализации клиентов: {str(e)}")
|
|
raise
|
|
|
|
def backup_dashboards(client, env_name, backup_root):
|
|
"""Выполнение бэкапа дашбордов для указанного окружения"""
|
|
#logger.info(f"Начало бэкапа для окружения {env_name}")
|
|
|
|
#print(client.get_dashboards())
|
|
# dashboard_count,dashboard_meta = client.get_dashboards()
|
|
# total = 0
|
|
# success = 0
|
|
# i=1
|
|
# for db in dashboard_meta:
|
|
# #total += 1
|
|
# #print(total)
|
|
# if db['slug']:
|
|
# success+=1
|
|
# print(f"{db['dashboard_title']} {i}. {db['id']}")
|
|
# i+=1
|
|
# for db in dashboard_meta:
|
|
# print(f"DB Id = {db["id"]} DB title = {db["dashboard_title"]} DB SLUG - {db["slug"]}")
|
|
|
|
|
|
|
|
clients = setup_clients()
|
|
superset_backup_repo = Path("P:\\Superset\\010 Бекапы")
|
|
|
|
# Бэкап для DEV
|
|
dev_success = backup_dashboards(
|
|
clients['dev'],
|
|
"DEV",
|
|
superset_backup_repo
|
|
)
|
|
|
|
|
|
# Бэкап для Sandbox
|
|
sbx_success = backup_dashboards(
|
|
clients['sbx'],
|
|
"SBX",
|
|
superset_backup_repo
|
|
)
|
|
|
|
prod_success = backup_dashboards(
|
|
clients['prod'],
|
|
"PROD",
|
|
superset_backup_repo
|
|
)
|