.PHONY: help build up down logs clean restart status deploy backup restore update clean-monitoring monitoring check-deps check-bot-deps check-anonBot-deps help: ## Показать справку @echo "🏗️ Production Infrastructure - Доступные команды:" @echo "" @echo "🔧 Основные команды:" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' @echo "" @echo "📊 Мониторинг:" @echo " Prometheus: http://localhost:9090" @echo " Grafana: http://localhost:3000 (admin/admin)" @echo " Server Monitor: http://localhost:9091/health" @echo " Bot Health: http://localhost:8080/health" @echo " AnonBot Health: http://localhost:8081/health" build: ## Собрать все контейнеры docker-compose build up: ## Запустить все сервисы docker-compose up -d down: ## Остановить все сервисы docker-compose down logs: ## Показать логи всех сервисов docker-compose logs -f logs-monitor: ## Показать логи мониторинга docker-compose logs -f server_monitor logs-prometheus: ## Показать логи Prometheus docker-compose logs -f prometheus logs-grafana: ## Показать логи Grafana docker-compose logs -f grafana logs-bot: ## Показать логи Telegram бота docker-compose logs -f telegram-bot logs-anonBot: ## Показать логи AnonBot docker-compose logs -f anon-bot restart: ## Перезапустить все сервисы docker-compose down docker-compose build --no-cache docker-compose up -d restart-monitor: ## Перезапустить только мониторинг docker-compose restart server_monitor restart-prometheus: ## Перезапустить только Prometheus docker-compose restart prometheus restart-grafana: ## Перезапустить только Grafana docker-compose restart grafana restart-bot: ## Перезапустить только Telegram бота docker-compose restart telegram-bot restart-anonBot: ## Перезапустить только AnonBot docker-compose restart anon-bot status: ## Показать статус контейнеров docker-compose ps health: ## Проверить здоровье сервисов @echo "🏥 Checking service health..." @curl -f http://localhost:8080/health || echo "❌ Bot health check failed" @curl -f http://localhost:8081/health || echo "❌ AnonBot health check failed" @curl -f http://localhost:9090/-/healthy || echo "❌ Prometheus health check failed" @curl -f http://localhost:3000/api/health || echo "❌ Grafana health check failed" @curl -f http://localhost:9091/health || echo "❌ Server monitor health check failed" deploy: ## Полный деплой на продакшен @echo "🚀 Starting production deployment..." @chmod +x scripts/deploy.sh @./scripts/deploy.sh backup: ## Создать backup данных @echo "💾 Creating backup..." @mkdir -p backups @tar -czf "backups/backup-$(date +%Y%m%d-%H%M%S).tar.gz" \ infra/grafana/provisioning/ \ infra/prometheus/ \ infra/monitoring/ \ .env \ docker-compose.yml @echo "✅ Backup created in backups/" restore: ## Восстановить из backup (указать файл: make restore FILE=backup.tar.gz) @echo "🔄 Restoring from backup..." @if [ -z "$(FILE)" ]; then echo "❌ Please specify backup file: make restore FILE=backup.tar.gz"; exit 1; fi @tar -xzf "backups/$(FILE)" -C . @echo "✅ Backup restored" update: ## Обновить инфраструктуру (pull latest code and redeploy) @echo "📥 Pulling latest changes..." @git pull origin main @echo "🔨 Rebuilding and restarting..." @make restart clean: ## Очистить все контейнеры и образы docker-compose down -v --rmi all docker system prune -f clean-monitoring: ## Очистить только данные мониторинга docker-compose down -v docker volume rm prod_prometheus_data prod_grafana_data 2>/dev/null || true security-scan: ## Сканировать образы на уязвимости @echo "🔍 Scanning Docker images for vulnerabilities..." @docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ -v $(PWD):/workspace \ --workdir /workspace \ anchore/grype:latest \ bots_telegram_bot:latest || echo "⚠️ Grype not available, skipping scan" monitoring: ## Открыть мониторинг в браузере @echo "📊 Opening monitoring dashboards..." @open http://localhost:3000 || xdg-open http://localhost:3000 || echo "Please open manually: http://localhost:3000" prometheus: ## Открыть Prometheus в браузере @echo "📈 Opening Prometheus..." @open http://localhost:9090 || xdg-open http://localhost:9090 || echo "Please open manually: http://localhost:9090" start: build up ## Собрать и запустить все сервисы @echo "🏗️ Production Infrastructure запущена!" @echo "📊 Prometheus: http://localhost:9090" @echo "📈 Grafana: http://localhost:3000 (admin/admin)" @echo "🤖 Bot Health: http://localhost:8080/health" @echo "🔒 AnonBot Health: http://localhost:8081/health" @echo "📡 Server Monitor: http://localhost:9091/health" @echo "📝 Логи: make logs" stop: down ## Остановить все сервисы @echo "🛑 Все сервисы остановлены" test: check-deps check-bot-deps check-anonBot-deps ## Запустить все тесты в проекте @echo "🧪 Запускаю все тесты в проекте..." @echo "📊 Тесты инфраструктуры..." @python3 -m pytest tests/infra/ -q --tb=no @echo "🤖 Тесты Telegram бота..." @cd bots/telegram-helper-bot && source .venv/bin/activate && python3 -m pytest tests/ -q --tb=no @echo "🔒 Тесты AnonBot..." @cd bots/AnonBot && python3 -m pytest tests/ -q --tb=no @echo "✅ Все тесты завершены!" @echo "📈 Общая статистика:" @echo " - Инфраструктура: $(shell python3 count_tests.py | head -1) тестов" @echo " - Telegram бот: $(shell python3 count_tests.py | head -2 | tail -1) тестов" @echo " - AnonBot: $(shell python3 count_tests.py | head -3 | tail -1) тестов" @echo " - Всего: $(shell python3 count_tests.py | tail -1) тестов" test-all: ## Запустить все тесты в одном процессе (только для разработчиков) @echo "🧪 Запускаю все тесты в одном процессе..." @echo "⚠️ Примечание: Эта команда может не работать из-за конфликтов импортов" @echo "📊 Рекомендуется использовать 'make test' для обычного запуска" @PYTHONPATH=$(PWD)/bots/telegram-helper-bot:$(PWD) python3 -m pytest tests/infra/ bots/telegram-helper-bot/tests/ -v test-infra: check-deps ## Запустить тесты инфраструктуры @echo "🏗️ Запускаю тесты инфраструктуры..." @python3 -m pytest tests/infra/ -v test-bot: check-bot-deps ## Запустить тесты Telegram бота @echo "🤖 Запускаю тесты Telegram бота..." @cd bots/telegram-helper-bot && source .venv/bin/activate && python3 -m pytest tests/ -v test-anonBot: check-anonBot-deps ## Запустить тесты AnonBot @echo "🔒 Запускаю тесты AnonBot..." @cd bots/AnonBot && python3 -m pytest tests/ -v test-coverage: check-deps check-bot-deps check-anonBot-deps ## Запустить все тесты с отчетом о покрытии @echo "📊 Запускаю все тесты с отчетом о покрытии..." @echo "📈 Покрытие для инфраструктуры..." @python3 -m pytest tests/infra/ --cov=infra --cov-report=term-missing --cov-report=html:htmlcov/infra @echo "🤖 Покрытие для Telegram бота..." @cd bots/telegram-helper-bot && source .venv/bin/activate && python3 -m pytest tests/ --cov=helper_bot --cov-report=term-missing --cov-report=html:htmlcov/bot @echo "🔒 Покрытие для AnonBot..." @cd bots/AnonBot && python3 -m pytest tests/ --cov=. --cov-report=term-missing --cov-report=html:htmlcov/anonbot @echo "📊 Отчеты о покрытии сохранены в htmlcov/" @echo "📈 Общая статистика:" @echo " - Инфраструктура: $(shell python3 count_tests.py | head -1) тестов" @echo " - Telegram бот: $(shell python3 count_tests.py | head -2 | tail -1) тестов" @echo " - AnonBot: $(shell python3 count_tests.py | head -3 | tail -1) тестов" @echo " - Всего: $(shell python3 count_tests.py | tail -1) тестов" test-clean: ## Очистить все файлы тестирования и отчеты @echo "🧹 Очищаю файлы тестирования..." @rm -rf htmlcov/ @rm -rf .coverage @rm -rf .pytest_cache/ @rm -rf tests/.pytest_cache/ @rm -rf bots/telegram-helper-bot/.pytest_cache/ @rm -rf bots/telegram-helper-bot/htmlcov/ @rm -rf bots/telegram-helper-bot/.coverage @rm -rf bots/AnonBot/.pytest_cache/ @rm -rf bots/AnonBot/htmlcov/ @rm -rf bots/AnonBot/.coverage @find . -name "*.pyc" -delete 2>/dev/null || true @find . -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true @echo "✅ Файлы тестирования очищены" check-ports: ## Проверить занятые порты @echo "🔍 Checking occupied ports..." @echo "Port 3000 (Grafana):" @lsof -i :3000 2>/dev/null || echo " Free" @echo "Port 9090 (Prometheus):" @lsof -i :9090 2>/dev/null || echo " Free" @echo "Port 9091 (Server Monitor):" @lsof -i :9091 2>/dev/null || echo " Free" @echo "Port 8080 (Telegram Bot):" @lsof -i :8080 2>/dev/null || echo " Free" @echo "Port 8081 (AnonBot):" @lsof -i :8081 2>/dev/null || echo " Free" check-grafana: ## Проверить состояние Grafana @echo "📊 Checking Grafana status..." @cd infra/monitoring && python3 check_grafana.py check-deps: ## Проверить зависимости инфраструктуры @echo "🔍 Проверяю зависимости инфраструктуры..." @python3 -c "import pytest, prometheus_client, psutil, aiohttp" 2>/dev/null || (echo "❌ Отсутствуют зависимости инфраструктуры. Установите: pip install pytest prometheus-client psutil aiohttp" && exit 1) @echo "✅ Зависимости инфраструктуры установлены" check-bot-deps: ## Проверить зависимости Telegram бота @echo "🔍 Проверяю зависимости Telegram бота..." @cd bots/telegram-helper-bot && source .venv/bin/activate && python3 -c "import aiogram, aiosqlite, pytest" 2>/dev/null || (echo "❌ Отсутствуют зависимости бота. Установите: cd bots/telegram-helper-bot && source .venv/bin/activate && pip install -r requirements.txt" && exit 1) @echo "✅ Зависимости Telegram бота установлены" check-anonBot-deps: ## Проверить зависимости AnonBot @echo "🔍 Проверяю зависимости AnonBot..." @cd bots/AnonBot && python3 -c "import aiogram, aiosqlite, pytest, loguru, pydantic" 2>/dev/null || (echo "❌ Отсутствуют зависимости AnonBot. Установите: cd bots/AnonBot && pip install -r requirements.txt" && exit 1) @echo "✅ Зависимости AnonBot установлены" logs-tail: ## Показать последние логи всех сервисов @echo "📝 Recent logs from all services:" @docker-compose logs --tail=50 logs-errors: ## Показать только ошибки из логов @echo "❌ Error logs from all services:" @docker-compose logs | grep -i error metrics: ## Показать текущие метрики @echo "📊 Current metrics:" @curl -s http://localhost:9091/metrics | head -20 @echo "..." @echo "Full metrics: http://localhost:9091/metrics" reload-prometheus: ## Перезагрузить конфигурацию Prometheus @echo "🔄 Reloading Prometheus configuration..." @curl -X POST http://localhost:9090/-/reload reload-grafana: ## Перезагрузить конфигурацию Grafana @echo "🔄 Reloading Grafana configuration..." @docker-compose restart grafana