import asyncio import logging try: from .metrics_collector import MetricsCollector from .message_sender import MessageSender from .prometheus_server import PrometheusServer except ImportError: from metrics_collector import MetricsCollector from message_sender import MessageSender from prometheus_server import PrometheusServer logger = logging.getLogger(__name__) class ServerMonitor: def __init__(self): # Создаем экземпляры модулей self.metrics_collector = MetricsCollector() self.message_sender = MessageSender() self.prometheus_server = PrometheusServer() logger.info(f"Модуль мониторинга сервера запущен на {self.metrics_collector.os_type.upper()}") async def monitor_loop(self): """Основной цикл мониторинга""" logger.info(f"Модуль мониторинга сервера запущен на {self.metrics_collector.os_type.upper()}") # Запускаем Prometheus сервер prometheus_runner = await self.prometheus_server.start() try: while True: try: # Проверка алертов и восстановлений await self.message_sender.process_alerts_and_recoveries() # Проверка необходимости отправки статуса if self.message_sender.should_send_status(): await self.message_sender.send_status_message() # Пауза между проверками (30 секунд) await asyncio.sleep(30) except Exception as e: logger.error(f"Ошибка в цикле мониторинга: {e}") await asyncio.sleep(30) finally: # Останавливаем Prometheus сервер при завершении await self.prometheus_server.stop(prometheus_runner) async def send_startup_status(self): """Отправка статуса при запуске""" if self.message_sender.should_send_startup_status(): await self.message_sender.send_status_message() def get_system_info(self): """Получение информации о системе (для обратной совместимости)""" return self.metrics_collector.get_system_info() def get_metrics_data(self): """Получение данных для метрик Prometheus (для обратной совместимости)""" return self.metrics_collector.get_metrics_data()