fix migrate
This commit is contained in:
@@ -47,7 +47,6 @@ class Migration:
|
||||
self.dashboards_to_migrate: List[dict] = []
|
||||
self.db_config_replacement: Optional[dict] = None
|
||||
self._failed_imports: List[dict] = []
|
||||
assert self.logger is not None, "Logger must be instantiated."
|
||||
# [/DEF:Migration.__init__]
|
||||
|
||||
# [DEF:Migration.run:Function]
|
||||
@@ -105,7 +104,8 @@ class Migration:
|
||||
prompt="Исходное окружение:",
|
||||
choices=available_envs,
|
||||
)
|
||||
if rc != 0:
|
||||
if rc != 0 or from_env_name is None:
|
||||
self.logger.info("[select_environments][State] Source environment selection cancelled.")
|
||||
return
|
||||
self.from_c = all_clients[from_env_name]
|
||||
self.logger.info("[select_environments][State] from = %s", from_env_name)
|
||||
@@ -116,7 +116,8 @@ class Migration:
|
||||
prompt="Целевое окружение:",
|
||||
choices=available_envs,
|
||||
)
|
||||
if rc != 0:
|
||||
if rc != 0 or to_env_name is None:
|
||||
self.logger.info("[select_environments][State] Target environment selection cancelled.")
|
||||
return
|
||||
self.to_c = all_clients[to_env_name]
|
||||
self.logger.info("[select_environments][State] to = %s", to_env_name)
|
||||
@@ -131,6 +132,10 @@ class Migration:
|
||||
# @RELATION: CALLS -> checklist
|
||||
def select_dashboards(self) -> None:
|
||||
self.logger.info("[select_dashboards][Entry] Шаг 2/5: Выбор дашбордов.")
|
||||
if self.from_c is None:
|
||||
self.logger.error("[select_dashboards][Failure] Source client not initialized.")
|
||||
msgbox("Ошибка", "Исходное окружение не выбрано.")
|
||||
return
|
||||
try:
|
||||
_, all_dashboards = self.from_c.get_dashboards()
|
||||
if not all_dashboards:
|
||||
@@ -187,8 +192,25 @@ class Migration:
|
||||
if not old_db or not new_db:
|
||||
self.logger.info("[confirm_db_config_replacement][State] Selection cancelled.")
|
||||
return
|
||||
|
||||
self.db_config_replacement = { "old": {"database_name": old_db["database_name"]}, "new": {"database_name": new_db["database_name"]} }
|
||||
print(f"old_db: {old_db}")
|
||||
old_result = old_db.get("result", {})
|
||||
new_result = new_db.get("result", {})
|
||||
|
||||
self.db_config_replacement = {
|
||||
"old": {
|
||||
"database_name": old_result.get("database_name"),
|
||||
"uuid": old_result.get("uuid"),
|
||||
"database_uuid": old_result.get("uuid"),
|
||||
"id": str(old_db.get("id"))
|
||||
},
|
||||
"new": {
|
||||
"database_name": new_result.get("database_name"),
|
||||
"uuid": new_result.get("uuid"),
|
||||
"database_uuid": new_result.get("uuid"),
|
||||
"id": str(new_db.get("id"))
|
||||
}
|
||||
}
|
||||
|
||||
self.logger.info("[confirm_db_config_replacement][State] Replacement set: %s", self.db_config_replacement)
|
||||
else:
|
||||
self.logger.info("[confirm_db_config_replacement][State] Skipped.")
|
||||
@@ -202,9 +224,14 @@ class Migration:
|
||||
# @RELATION: CALLS -> self.from_c.get_database
|
||||
# @RELATION: CALLS -> self.to_c.get_database
|
||||
# @RELATION: CALLS -> menu
|
||||
def _select_databases(self) -> tuple:
|
||||
def _select_databases(self) -> Tuple[Optional[Dict], Optional[Dict]]:
|
||||
self.logger.info("[_select_databases][Entry] Selecting databases from both environments.")
|
||||
|
||||
if self.from_c is None or self.to_c is None:
|
||||
self.logger.error("[_select_databases][Failure] Source or target client not initialized.")
|
||||
msgbox("Ошибка", "Исходное или целевое окружение не выбрано.")
|
||||
return None, None
|
||||
|
||||
# Получаем список БД из обоих окружений
|
||||
try:
|
||||
_, from_dbs = self.from_c.get_databases()
|
||||
@@ -279,6 +306,11 @@ class Migration:
|
||||
self.logger.debug("[_batch_delete_by_ids][Skip] Empty ID list – nothing to delete.")
|
||||
return
|
||||
|
||||
if self.to_c is None:
|
||||
self.logger.error("[_batch_delete_by_ids][Failure] Target client not initialized.")
|
||||
msgbox("Ошибка", "Целевое окружение не выбрано.")
|
||||
return
|
||||
|
||||
self.logger.info("[_batch_delete_by_ids][Entry] Deleting dashboards IDs: %s", ids)
|
||||
q_param = json.dumps(ids)
|
||||
response = self.to_c.network.request(method="DELETE", endpoint="/dashboard/", params={"q": q_param})
|
||||
@@ -305,6 +337,11 @@ class Migration:
|
||||
msgbox("Информация", "Нет дашбордов для миграции.")
|
||||
return
|
||||
|
||||
if self.from_c is None or self.to_c is None:
|
||||
self.logger.error("[execute_migration][Failure] Source or target client not initialized.")
|
||||
msgbox("Ошибка", "Исходное или целевое окружение не выбрано.")
|
||||
return
|
||||
|
||||
total = len(self.dashboards_to_migrate)
|
||||
self.logger.info("[execute_migration][Entry] Starting migration of %d dashboards.", total)
|
||||
self.to_c.delete_before_reimport = self.enable_delete_on_failure
|
||||
@@ -314,7 +351,7 @@ class Migration:
|
||||
dash_id, dash_slug, title = dash["id"], dash.get("slug"), dash["dashboard_title"]
|
||||
g.set_text(f"Миграция: {title} ({i + 1}/{total})")
|
||||
g.set_percent(int((i / total) * 100))
|
||||
|
||||
exported_content = None # Initialize exported_content
|
||||
try:
|
||||
exported_content, _ = self.from_c.export_dashboard(dash_id)
|
||||
with create_temp_file(content=exported_content, suffix=".zip", logger=self.logger) as tmp_zip_path, \
|
||||
|
||||
Reference in New Issue
Block a user