Initial commit: Add infrastructure and bot project

This commit is contained in:
2025-08-31 17:55:55 +03:00
commit 7378179d98
21 changed files with 3139 additions and 0 deletions

View 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()