1
This commit is contained in:
@@ -60,7 +60,55 @@ class AppOrchestrator:
|
|||||||
self.logger = logging.getLogger(self.__class__.__name__)
|
self.logger = logging.getLogger(self.__class__.__name__)
|
||||||
self._setup()
|
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
|
||||||
|
|
||||||
|
# <CONTRACT for="_log_error_details">
|
||||||
|
# description: "Логирует расширенную информацию об ошибке для упрощения диагностики."
|
||||||
|
# </CONTRACT>
|
||||||
|
# <HELPER name="_log_error_details">
|
||||||
|
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}")
|
||||||
|
# </HELPER>
|
||||||
|
|
||||||
|
# <CONTRACT for="_setup">
|
||||||
|
# description: "Шаг 0: Инициализация всех систем (БД, логирование, RabbitMQ)."
|
||||||
|
# </CONTRACT>
|
||||||
|
# <ACTION name="_setup">
|
||||||
|
def _setup(self):
|
||||||
|
"""Инициализация всех систем перед началом парсинга."""
|
||||||
with self._error_context("setup"):
|
with self._error_context("setup"):
|
||||||
# <CORE_LOGIC>
|
# <CORE_LOGIC>
|
||||||
self.stats['start_time'] = datetime.now()
|
self.stats['start_time'] = datetime.now()
|
||||||
|
|||||||
Reference in New Issue
Block a user