1
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user