Files
prod/Makefile

226 lines
11 KiB
Makefile
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
.PHONY: help build up down logs clean restart status deploy backup restore update clean-monitoring monitoring check-deps check-bot-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"
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
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
status: ## Показать статус контейнеров
docker-compose ps
health: ## Проверить здоровье сервисов
@echo "🏥 Checking service health..."
@curl -f http://localhost:8080/health || echo "❌ Bot 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 "📡 Server Monitor: http://localhost:9091/health"
@echo "📝 Логи: make logs"
stop: down ## Остановить все сервисы
@echo "🛑 Все сервисы остановлены"
test: check-deps check-bot-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 "✅ Все тесты завершены!"
@echo "📈 Общая статистика:"
@echo " - Инфраструктура: $(shell python3 count_tests.py | head -1) тестов"
@echo " - Telegram бот: $(shell python3 count_tests.py | head -2 | 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-coverage: check-deps check-bot-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 "📊 Отчеты о покрытии сохранены в htmlcov/"
@echo "📈 Общая статистика:"
@echo " - Инфраструктура: $(shell python3 count_tests.py | head -1) тестов"
@echo " - Telegram бот: $(shell python3 count_tests.py | head -2 | 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
@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"
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 бота установлены"
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