From 69e90bd4f2e018580ede588e789ddb3510449d00 Mon Sep 17 00:00:00 2001 From: busya Date: Sun, 20 Jul 2025 09:47:12 +0300 Subject: [PATCH] 1 --- src/orchestrator.py | 50 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/orchestrator.py b/src/orchestrator.py index 28c6e14..9fa352b 100644 --- a/src/orchestrator.py +++ b/src/orchestrator.py @@ -60,7 +60,55 @@ class AppOrchestrator: self.logger = logging.getLogger(self.__class__.__name__) self._setup() - + def _register_run(self): + """Регистрирует текущий запуск в базе данных.""" + if not self.db_manager: + return + try: + with self.db_manager as conn: + conn.execute( + "INSERT INTO parsing_runs (run_id, start_time) VALUES (?, ?)", + (self.run_id, datetime.now()) + ) + conn.commit() + self.logger.info(f"Запуск {self.run_id} зарегистрирован в БД.") + except sqlite3.Error as e: + self.logger.error(f"Не удалось зарегистрировать запуск {self.run_id} в БД: {e}") + raise + + @contextmanager + def _error_context(self, operation: str): + """Контекстный менеджер для обработки ошибок с детальной диагностикой.""" + try: + yield + except Exception as e: + self.logger.error(f"[{operation.upper()}] Ошибка в операции '{operation}': {e}", exc_info=True) + self._log_error_details(operation, e) + raise + + # + # description: "Логирует расширенную информацию об ошибке для упрощения диагностики." + # + # + def _log_error_details(self, operation: str, error: Exception): + """Логирует детальную информацию об ошибке.""" + error_info = { + 'operation': operation, + 'error_type': type(error).__name__, + 'error_message': str(error), + 'run_id': self.run_id, + 'timestamp': datetime.now().isoformat(), + 'stats': self.stats.copy() + } + self.logger.error(f"[HELPER:_log_error_details] Детали ошибки: {error_info}") + # + + # + # description: "Шаг 0: Инициализация всех систем (БД, логирование, RabbitMQ)." + # + # + def _setup(self): + """Инициализация всех систем перед началом парсинга.""" with self._error_context("setup"): # self.stats['start_time'] = datetime.now()