mirror of
https://github.com/FerraSoft/bottohelp.git
synced 2026-08-06 21:55:03 +00:00
245 lines
8.0 KiB
Python
245 lines
8.0 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Автоматическая настройка системы мониторинга.
|
|
Создает конфигурацию и проверяет все компоненты.
|
|
"""
|
|
|
|
import os
|
|
import json
|
|
import sys
|
|
import io
|
|
from pathlib import Path
|
|
|
|
# Установка UTF-8 кодировки
|
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
|
|
|
def print_header(text):
|
|
"""Печатает заголовок с эмодзи"""
|
|
print(f"\n🚀 {text}")
|
|
print("=" * (len(text) + 3))
|
|
|
|
def print_success(text):
|
|
"""Печатает успешное сообщение"""
|
|
print(f"✅ {text}")
|
|
|
|
def print_warning(text):
|
|
"""Печатает предупреждение"""
|
|
print(f"⚠️ {text}")
|
|
|
|
def print_error(text):
|
|
"""Печатает ошибку"""
|
|
print(f"❌ {text}")
|
|
|
|
def check_dependencies():
|
|
"""Проверка зависимостей"""
|
|
print_header("Проверка зависимостей")
|
|
|
|
required_packages = [
|
|
'prometheus_client',
|
|
'sentry-sdk',
|
|
'flask',
|
|
'requests'
|
|
]
|
|
|
|
missing_packages = []
|
|
|
|
for package in required_packages:
|
|
try:
|
|
__import__(package.replace('-', '_'))
|
|
print_success(f"{package} - установлен")
|
|
except ImportError:
|
|
missing_packages.append(package)
|
|
print_error(f"{package} - не установлен")
|
|
|
|
if missing_packages:
|
|
print_warning(f"Установите недостающие пакеты: pip install {' '.join(missing_packages)}")
|
|
return False
|
|
|
|
return True
|
|
|
|
def setup_configuration():
|
|
"""Настройка конфигурации"""
|
|
print_header("Настройка конфигурации")
|
|
|
|
config_path = "config_local.py"
|
|
|
|
if not os.path.exists(config_path):
|
|
print_warning(f"Файл {config_path} не найден. Создайте его на основе config_template.py")
|
|
return False
|
|
|
|
# Проверяем, что в конфигурации есть настройки мониторинга
|
|
with open(config_path, 'r', encoding='utf-8') as f:
|
|
config_content = f.read()
|
|
|
|
monitoring_settings = [
|
|
'ENABLE_SENTRY',
|
|
'SENTRY_DSN',
|
|
'PROMETHEUS_PORT',
|
|
'ENABLE_DEVELOPER_NOTIFICATIONS',
|
|
'DEVELOPER_CHAT_ID'
|
|
]
|
|
|
|
missing_settings = []
|
|
for setting in monitoring_settings:
|
|
if setting not in config_content:
|
|
missing_settings.append(setting)
|
|
|
|
if missing_settings:
|
|
print_warning("Добавьте настройки мониторинга в config_local.py:")
|
|
print("\n# Мониторинг ошибок")
|
|
print("ENABLE_SENTRY = True")
|
|
print('SENTRY_DSN = "http://localhost:8000/api/1/project/your-project/dsn/"')
|
|
print("PROMETHEUS_PORT = 8000")
|
|
print("ENABLE_DEVELOPER_NOTIFICATIONS = True")
|
|
print("DEVELOPER_CHAT_ID = 123456789 # Ваш Telegram ID")
|
|
return False
|
|
|
|
print_success("Конфигурация настроена правильно")
|
|
return True
|
|
|
|
def check_glitchtip_setup():
|
|
"""Проверка настройки GlitchTip"""
|
|
print_header("Проверка GlitchTip")
|
|
|
|
# Проверяем docker-compose.yml
|
|
docker_compose_path = "docker-compose.yml"
|
|
if os.path.exists(docker_compose_path):
|
|
with open(docker_compose_path, 'r', encoding='utf-8') as f:
|
|
content = f.read()
|
|
if 'glitchtip' in content.lower():
|
|
print_success("Docker Compose для GlitchTip настроен")
|
|
else:
|
|
print_warning("GlitchTip не найден в docker-compose.yml")
|
|
else:
|
|
print_warning("docker-compose.yml не найден. Создайте по инструкции в GLITCHTIP_SETUP.md")
|
|
|
|
def test_imports():
|
|
"""Тестирование импорта модулей мониторинга"""
|
|
print_header("Тестирование импорта модулей")
|
|
|
|
modules_to_test = [
|
|
('core.monitoring', 'MetricsCollector'),
|
|
('core.alerts', 'AlertManager'),
|
|
('prometheus_client', 'Counter'),
|
|
('sentry_sdk', 'init')
|
|
]
|
|
|
|
all_good = True
|
|
|
|
for module_name, class_name in modules_to_test:
|
|
try:
|
|
module = __import__(module_name, fromlist=[class_name])
|
|
getattr(module, class_name)
|
|
print_success(f"{module_name}.{class_name} - доступен")
|
|
except (ImportError, AttributeError) as e:
|
|
print_error(f"{module_name}.{class_name} - ошибка: {e}")
|
|
all_good = False
|
|
|
|
return all_good
|
|
|
|
def check_documentation():
|
|
"""Проверка наличия документации"""
|
|
print_header("Проверка документации")
|
|
|
|
required_docs = [
|
|
'MONITORING.md',
|
|
'README_MONITORING.md',
|
|
'GLITCHTIP_SETUP.md',
|
|
'WEBHOOK_ALERTS.md',
|
|
'START_MONITORING.md'
|
|
]
|
|
|
|
all_docs_present = True
|
|
|
|
for doc in required_docs:
|
|
if os.path.exists(doc):
|
|
print_success(f"{doc} - найден")
|
|
else:
|
|
print_error(f"{doc} - отсутствует")
|
|
all_docs_present = False
|
|
|
|
return all_docs_present
|
|
|
|
def create_sample_config():
|
|
"""Создание примера конфигурации"""
|
|
print_header("Создание примера конфигурации мониторинга")
|
|
|
|
sample_config = '''
|
|
# Пример настроек мониторинга для config_local.py
|
|
|
|
# Включение системы мониторинга
|
|
ENABLE_SENTRY = True
|
|
SENTRY_DSN = "http://localhost:8000/api/1/project/your-project-id/dsn/"
|
|
|
|
# Настройки Prometheus
|
|
PROMETHEUS_PORT = 8000
|
|
|
|
# Уведомления разработчиков
|
|
ENABLE_DEVELOPER_NOTIFICATIONS = True
|
|
DEVELOPER_CHAT_ID = 123456789 # Замените на ваш Telegram ID
|
|
|
|
# Логирование
|
|
LOG_CONFIG = {
|
|
"level": "INFO",
|
|
"file": "bot.log",
|
|
"format": "json",
|
|
"max_size": 10*1024*1024,
|
|
"backup_count": 5
|
|
}
|
|
'''
|
|
|
|
config_path = "config_monitoring_sample.py"
|
|
with open(config_path, 'w', encoding='utf-8') as f:
|
|
f.write(sample_config)
|
|
|
|
print_success(f"Пример конфигурации создан: {config_path}")
|
|
|
|
def main():
|
|
"""Главная функция настройки"""
|
|
print("🔧 Автоматическая настройка системы мониторинга")
|
|
print("=" * 50)
|
|
|
|
all_checks_passed = True
|
|
|
|
# Проверяем зависимости
|
|
if not check_dependencies():
|
|
all_checks_passed = False
|
|
|
|
# Проверяем конфигурацию
|
|
if not setup_configuration():
|
|
all_checks_passed = False
|
|
|
|
# Проверяем GlitchTip
|
|
check_glitchtip_setup()
|
|
|
|
# Тестируем импорты
|
|
if not test_imports():
|
|
all_checks_passed = False
|
|
|
|
# Проверяем документацию
|
|
if not check_documentation():
|
|
all_checks_passed = False
|
|
|
|
# Создаем пример конфигурации
|
|
create_sample_config()
|
|
|
|
print("\n" + "=" * 50)
|
|
if all_checks_passed:
|
|
print("🎉 Настройка завершена успешно!")
|
|
print("\n📋 Следующие шаги:")
|
|
print("1. Настройте GlitchTip по инструкции в GLITCHTIP_SETUP.md")
|
|
print("2. Получите DSN и добавьте в config_local.py")
|
|
print("3. Запустите бота: python new_bot.py")
|
|
print("4. Проверьте метрики: http://localhost:8000/metrics")
|
|
else:
|
|
print("⚠️ Требуются дополнительные настройки!")
|
|
print("\n🔧 Исправьте проблемы и запустите настройку снова")
|
|
|
|
print(f"\n📚 Документация в файлах:")
|
|
for file in ['MONITORING.md', 'README_MONITORING.md', 'GLITCHTIP_SETUP.md', 'START_MONITORING.md']:
|
|
if os.path.exists(file):
|
|
print(f"• {file}")
|
|
|
|
if __name__ == "__main__":
|
|
main() |