# # import logging import asyncio from datetime import datetime from src.orchestrator import AppOrchestrator from src.core.settings import settings from src.core.logging_config import setup_logging from src.analyzer import DataAnalyzer from src.utils.telegram_sender import send_telegram_notification # # # description: "Главная точка входа для сервиса мониторинга. Запускается по расписанию (cron)." # postconditions: # - "Парсер запускается, данные сохраняются в БД." # - "Если обнаружены изменения, отправляется отчет в Telegram." # # async def main(): """ Основная асинхронная функция, которая запускает парсер, анализирует данные и отправляет уведомление. """ run_id = datetime.now().strftime("%Y%m%d-%H%M%S") setup_logging(run_id=run_id) logger = logging.getLogger(__name__) logger.info(f"🚀 Запуск сервиса мониторинга. Run ID: {run_id}") try: # 1. Запуск парсера logger.info("Начало этапа парсинга...") orchestrator = AppOrchestrator(settings=settings) orchestrator.run() logger.info("Этап парсинга завершен.") # 2. Анализ данных logger.info("Начало этапа анализа данных...") analyzer = DataAnalyzer() report_message = analyzer.analyze() logger.info("Этап анализа данных завершен.") # 3. Отправка отчета if report_message: logger.info("Обнаружены изменения, отправка отчета в Telegram...") await send_telegram_notification(report_message) else: logger.info("Изменений не найдено, отправка отчета не требуется.") except Exception as e: logger.critical(f"💥 Критическая ошибка в сервисе мониторинга: {e}", exc_info=True) # Попытка отправить уведомление об ошибке try: error_message = f"❗️ Критическая ошибка в сервисе мониторинга\n\n
{e}
" await send_telegram_notification(error_message) except Exception as tg_e: logger.error(f"Не удалось даже отправить уведомление об ошибке в Telegram: {tg_e}") logger.info("✅ Сервис мониторинга завершил работу.") # # description: "Стандартный блок для запуска main() при выполнении скрипта." # if __name__ == "__main__": # Используем asyncio.run() для запуска асинхронной функции main asyncio.run(main()) #