63 lines
2.8 KiB
Python
63 lines
2.8 KiB
Python
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()
|