diff --git a/src/orchestrator.py b/src/orchestrator.py index 908c4b4..28c6e14 100644 --- a/src/orchestrator.py +++ b/src/orchestrator.py @@ -20,6 +20,7 @@ from core.database import DatabaseManager, init_database, save_data_to_db from core.rabbitmq import RabbitMQExporter from scraper.engine import Scraper from utils.exporters import save_data_to_csv +from core.logging_config import setup_logging from datetime import datetime import sqlite3 # @@ -56,41 +57,34 @@ class AppOrchestrator: ) # - self.run_id = datetime.now().strftime("%Y%m%d-%H%M%S") self.logger = logging.getLogger(self.__class__.__name__) - self.db_manager: Optional[DatabaseManager] = None - self.rabbitmq_exporter: Optional[RabbitMQExporter] = None - self.scraper = Scraper( - selectors=self.settings.selectors, - base_url=self.settings.base_url - ) 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 - - def _setup(self): - """Контекстный менеджер для обработки ошибок с детальной диагностикой.""" - try: - yield - except Exception as e: - self.logger.error(f"[{operation.upper()}] Ошибка в операции '{operation}': {e}", exc_info=True) - self._log_error_details(operation, e) - raise - # + + with self._error_context("setup"): + # + self.stats['start_time'] = datetime.now() + self.logger.info(f"[ACTION:_setup] Запуск инициализации систем. Run ID: {self.run_id}") + + if self.settings.save_to_db or self.settings.log_to_db: + self.settings.output_dir.mkdir(parents=True, exist_ok=True) + self.db_manager = DatabaseManager(self.settings.db_path) + init_database(self.db_manager.db_path, self.run_id) + + # + setup_logging(self.run_id, self.db_manager) + + if ENABLE_RABBITMQ_EXPORT: + self.rabbitmq_exporter = RabbitMQExporter() + if self.rabbitmq_exporter.connection.connect(): + self.logger.info("[ACTION:_setup] Подключение к RabbitMQ доступно") + else: + self.logger.warning("[ACTION:_setup] Подключение к RabbitMQ недоступно, экспорт будет пропущен") + self.rabbitmq_exporter = None + + self.logger.info(f"[ACTION:_setup] Оркестратор запущен. Архитектура v2.0. Run ID: {self.run_id}") + # + # # # description: "Логирует расширенную информацию об ошибке для упрощения диагностики."