Initial commit: Add infrastructure and bot project
This commit is contained in:
62
infra/monitoring/server_monitor.py
Normal file
62
infra/monitoring/server_monitor.py
Normal file
@@ -0,0 +1,62 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user