Files
bottohelp/final_test.py
T

119 lines
5.2 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Финальное тестирование всей системы мониторинга.
Проверяет интеграцию всех компонентов.
"""
import asyncio
import json
import logging
import sys
import io
from datetime import datetime
# Установка UTF-8 кодировки
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
print("🚀 Финальное тестирование системы мониторинга...")
async def test_monitoring_integration():
"""Тестирование интеграции мониторинга"""
try:
# Тест 1: Проверка импорта модулей
print("\n📦 Тест импорта модулей...")
from core.monitoring import MetricsCollector, structured_logger
from core.alerts import AlertManager
from core.config import Config
print("✅ Все модули импортированы успешно")
# Тест 2: Проверка конфигурации
print("\n⚙️ Тест конфигурации...")
import os
os.environ['BOT_TOKEN'] = 'test_token_for_monitoring'
os.environ['ADMIN_IDS'] = '123456789'
config = Config()
print("✅ Конфигурация загружена")
# Тест 3: Проверка метрик
print("\n📊 Тест системы метрик...")
metrics = MetricsCollector(config)
# Записываем тестовые метрики
metrics.record_error('TestError', 'test_handler', Exception('Test exception'))
metrics.record_command('start', 'user_handler', 1.2)
metrics.record_message('text')
metrics.update_active_users(100)
metrics.set_bot_status(1)
print("✅ Метрики записаны")
# Тест 4: Проверка логирования
print("\n📝 Тест логирования...")
logger = structured_logger('final_test', config)
# Тестируем разные уровни логирования
logger.info("Test info message", extra={'user_id': 123, 'command': 'test'})
logger.warning("Test warning message", extra={'handler': 'test_handler'})
logger.error("Test error message", extra={'error_type': 'test_error'})
print("✅ Логи записаны в JSON формате")
# Тест 5: Проверка алертов
print("\n🚨 Тест системы алертов...")
alert_manager = AlertManager(config, metrics)
# Имитируем условие для алерта
metrics.error_counter.labels(error_type='TestError', handler='test_handler')._value.set(15)
await alert_manager.check_alerts()
print("✅ Система алертов проверена")
# Тест 6: Проверка файла логов
print("\n📄 Тест файла логов...")
try:
with open('bot.log', 'r', encoding='utf-8') as f:
logs = f.readlines()
if logs:
# Проверяем, что логи в JSON формате
first_log = logs[-1].strip()
try:
json.loads(first_log)
print("✅ Логи записываются в JSON формате")
except json.JSONDecodeError:
print("⚠️ Логи не в JSON формате")
else:
print("⚠️ Лог файл пуст")
except FileNotFoundError:
print("⚠️ Лог файл не найден")
print("\n🎉 Все тесты завершены успешно!")
print("\n📋 Результаты тестирования:")
print("✅ Мониторинг: система работает корректно")
print("✅ Метрики: Prometheus метрики записываются")
print("✅ Логи: структурированные JSON логи")
print("✅ Алерты: система алертов инициализирована")
print("✅ Конфигурация: все настройки загружаются")
print("\n🚀 Система мониторинга готова к использованию!")
print("\n📚 Документация:")
print("• MONITORING.md - подробная документация")
print("• README_MONITORING.md - быстрый старт")
print("• GLITCHTIP_SETUP.md - настройка GlitchTip")
print("• START_MONITORING.md - инструкция по запуску")
return True
except Exception as e:
print(f"❌ Ошибка при тестировании: {e}")
return False
if __name__ == "__main__":
success = asyncio.run(test_monitoring_integration())
if success:
print("\n🏆 Система мониторинга прошла все тесты!")
else:
print("\n💥 В системе мониторинга найдены проблемы!")
sys.exit(1)