This commit is contained in:
2025-07-20 09:47:12 +03:00
parent c59dff3397
commit 69e90bd4f2

View File

@@ -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
# <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"):
# <CORE_LOGIC>
self.stats['start_time'] = datetime.now()