mirror of
https://github.com/FerraSoft/bottohelp.git
synced 2026-08-06 21:55:03 +00:00
8.4 KiB
8.4 KiB
👨💻 Руководство для разработчика
🔧 Поддержка и развитие системы мониторинга
📋 Обзор архитектуры
telegram_bot/
├── core/
│ ├── monitoring.py # 📊 Метрики + Sentry + Логи
│ ├── alerts.py # 🚨 Система алертов
│ └── application.py # 🎯 Главное приложение (обновлено)
├── handlers/ # 🎮 Обработчики (обновлены)
├── tests/ # 🧪 Тесты мониторинга
└── docs/ # 📚 Документация
🚀 Добавление новых метрик
В MetricsCollector (core/monitoring.py):
# Добавьте новую метрику в __init__
self.new_metric = Counter('telegram_bot_new_feature_total', 'Description')
# Используйте в коде
metrics.new_metric.labels(type='example').inc()
В handlers:
# Автоматически через декораторы
@measure_time(metrics, 'api_name')
async def some_api_call(self):
pass
@error_handler(metrics, 'handler_name')
async def risky_operation(self):
pass
🚨 Добавление новых алертов
В AlertManager (core/alerts.py):
# Добавьте правило в __init__
self.alert_rules['new_alert'] = {
'enabled': True,
'threshold': 100,
'cooldown': 300,
'last_alert': None
}
# Добавьте метод проверки
async def _check_new_alert(self):
if some_condition:
await self._trigger_alert('new_alert', 'Message', {'data': value})
Настройка уведомлений:
# Добавьте обработчик в __init__
self.alert_handlers.append(self._send_slack_alert)
# Реализуйте метод
async def _send_slack_alert(self, alert_type, message, extra_data):
# Отправка в Slack
pass
📊 Добавление новых обработчиков
Создание нового handler:
from handlers.base_handler import BaseHandler
class NewHandler(BaseHandler):
def __init__(self, config, metrics, service):
super().__init__(config, metrics) # Передача metrics обязательна!
self.service = service
def get_command_handlers(self):
return {
'new_command': self.handle_new_command
}
Регистрация в Application:
# В core/application.py
from handlers.new_handler import NewHandler
# В _initialize_handlers
handlers['new'] = NewHandler(self.config, self.metrics, NewService())
🧪 Тестирование
Запуск тестов:
# Все тесты мониторинга
pytest tests/test_monitoring.py -v
# Интеграционные тесты
python test_monitoring_integration.py
# Финальное тестирование
python final_test.py
# Автонастройка
python setup_monitoring.py
Добавление новых тестов:
# В tests/test_monitoring.py
def test_new_metric(metrics):
"""Тест новой метрики"""
# Тестовая логика
assert True
📚 Обновление документации
При добавлении функций:
- Обновите
MONITORING.md - Добавьте примеры в
README_MONITORING.md - Обновите
README_SYSTEM.mdс новыми файлами
Структура документации:
MONITORING.md- технические деталиREADME_MONITORING.md- для пользователейGLITCHTIP_SETUP.md- настройкаSTART_MONITORING.md- пошаговое руководство
🔧 Конфигурация
Добавление новых настроек:
# В core/config.py
@dataclass
class BotConfig:
# ... существующие поля
new_feature_enabled: bool = False
# В _load_from_environment
self._config['new_feature_enabled'] = self._str_to_bool(
os.getenv('NEW_FEATURE_ENABLED', 'false')
)
🚀 Развертывание
Продакшен рекомендации:
-
GlitchTip:
docker-compose up -d # Настройка HTTPS, backup, scaling -
Prometheus:
# Отдельный сервер Prometheus # Конфигурация scraping -
Grafana:
docker run -d -p 3000:3000 grafana/grafana # Дашборды для телеграм-бота -
Мониторинг мониторинга:
- Health checks для GlitchTip
- Алерты на недоступность метрик
- Backup конфигурации
🐛 Отладка
Распространенные проблемы:
-
Метрики не собираются:
curl http://localhost:8000/metrics # Проверьте порт и firewall -
GlitchTip не работает:
docker-compose logs glitchtip # Проверьте логи и конфигурацию -
Алерты не приходят:
- Проверьте DEVELOPER_CHAT_ID
- Убедитесь в правах бота
- Проверьте webhook URL
-
Логи не записываются:
tail -f bot.log # Проверьте права на файл
📈 Мониторинг производительности
Оптимизация:
- Используйте sampling для высоконагруженных endpoint'ов
- Настройте retention для метрик
- Мониторьте использование памяти декораторами
Профилирование:
import cProfile
# В коде
pr = cProfile.Profile()
pr.enable()
# Ваш код
pr.disable()
pr.print_stats()
🤝 Лучшие практики
-
Атомарные изменения:
- Тестируйте каждый новый компонент
- Документируйте изменения
- Обновляйте тесты
-
Безопасность:
- Не логируйте чувствительную информацию
- Валидируйте все входные данные
- Используйте HTTPS для webhook
-
Производительность:
- Асинхронные операции для алертов
- Кеширование частых метрик
- Оптимизация запросов к БД
-
Поддерживаемость:
- Следуйте существующей архитектуре
- Добавляйте тесты для новых функций
- Документируйте все изменения
📞 Поддержка команды
Для новых разработчиков:
- Изучите
MONITORING.md - Запустите
setup_monitoring.py - Пройдите
final_test.py - Ознакомьтесь с примерами в коде
Структура кода:
- Каждый модуль имеет четкую ответственность
- Используйте type hints
- Добавляйте docstrings
- Следуйте PEP 8
🎯 Будущие улучшения
- Интеграция с Grafana
- Machine learning для анализа ошибок
- Автоматическое создание дашбордов
- A/B тестирование алертов
- Интеграция с системами CI/CD
📋 Контрольные списки
Перед коммитом:
- Тесты проходят
- Документация обновлена
- Код reviewed
- Никаких TODO в коде
Перед развертыванием:
- Все зависимости установлены
- Конфигурация проверена
- Тесты в staging пройдены
- Backup создан
Система мониторинга готова для развития и поддержки! 🚀
Для разработчиков: следуйте этим рекомендациям для поддержания качества системы