mirror of
https://github.com/FerraSoft/bottohelp.git
synced 2026-08-06 21:55:03 +00:00
Подготовка к релизу
This commit is contained in:
@@ -0,0 +1,245 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user