Files
prod/infra/monitoring/server_monitor.py

63 lines
2.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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()