.PHONY: up down clean ddl data transform logs \ generated-history-analytics generated-history-check \ startup-history-export startup-history-import startup-history-check \ reload-monitoring recover-monitoring \ superset-init superset-dashboard superset-ui superset-restart \ generator-up generator-down generator-logs generator-restart \ generator-backfill generator-continue generator-reset \ generator-test generator-test-build generator-test-cov COMPOSE ?= docker compose # ============================================================================ # Основные команды # ============================================================================ up: $(COMPOSE) up -d # Остановить и удалить контейнеры/сети текущего проекта down: $(COMPOSE) --profile live-generator down # Полная очистка окружения проекта (включая volumes) clean: $(COMPOSE) --profile live-generator down -v --remove-orphans logs: $(COMPOSE) logs -f --tail=200 $(service) # ============================================================================ # ETL Pipeline # ============================================================================ ddl: bash ./scripts/apply_clickhouse_ddl.sh data: bash ./scripts/load_kafka_data.sh transform: bash ./scripts/run_batch.sh # Чистый аналитический прогон: стартовая история генератора -> STG -> ODS -> DDS -> DM -> Superset generated-history-analytics: COMPOSE_BIN="$(COMPOSE)" bash ./scripts/run_generated_history_analytics.sh # Повторяемая проверка после прогона стартовой истории generated-history-check: CHECK_LIVE_SEAM="$${CHECK_LIVE_SEAM:-auto}" COMPOSE_BIN="$(COMPOSE)" bash ./scripts/check_generated_analytics.sh # Сгенерировать стартовую историю и сохранить портативный артефакт startup-history-export: COMPOSE_BIN="$(COMPOSE)" bash ./scripts/export_startup_history_artifact.sh # Воспроизвести портативный артефакт стартовой истории в Kafka startup-history-import: COMPOSE_BIN="$(COMPOSE)" bash ./scripts/import_startup_history_artifact.sh # Сверить ClickHouse после импорта с manifest артефакта startup-history-check: COMPOSE_BIN="$(COMPOSE)" bash ./scripts/check_startup_history_manifest.sh # Перезагрузка конфигурации мониторинга (после изменений в provisioning) reload-monitoring: @echo "=== Перезагрузка сервисов мониторинга ===" $(COMPOSE) up -d prometheus grafana kafka-exporter statsd-exporter $(COMPOSE) restart prometheus statsd-exporter @echo "=== Перезагрузка provisioning Grafana ===" @sleep 2 @curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/datasources/reload && echo " [datasources]" @curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/dashboards/reload && echo " [dashboards]" @curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/alerting/reload && echo " [alerting]" @echo "=== Проверка ===" @curl -s http://localhost:9090/api/v1/targets | grep -o '"job":"[^"]*"' | sort | uniq # Восстановление мониторинга после сбоев (например, out of bounds / пустые дашборды) recover-monitoring: @echo "=== Восстановление мониторинга (жесткий режим) ===" $(COMPOSE) rm -sf prometheus statsd-exporter $(COMPOSE) up -d prometheus grafana kafka-exporter statsd-exporter $(COMPOSE) restart airflow-scheduler airflow-webserver @echo "=== Перезагрузка provisioning Grafana ===" @sleep 2 @curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/datasources/reload && echo " [datasources]" @curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/dashboards/reload && echo " [dashboards]" @curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/alerting/reload && echo " [alerting]" @echo "=== Проверка targets ===" @curl -s http://localhost:9090/api/v1/targets | grep -o '"job":"[^"]*"' | sort | uniq @curl -s http://localhost:9090/api/v1/targets | grep -o '"health":"[^"]*"' | sort | uniq -c # ============================================================================ # Superset команды # ============================================================================ # Инициализация Superset (подключение к ClickHouse + датасеты) superset-init: $(COMPOSE) up -d postgres-metadata clickhouse $(COMPOSE) up --abort-on-container-exit --exit-code-from superset-init superset-init $(COMPOSE) up -d --no-deps superset # Создание дашборда с чартами superset-dashboard: $(COMPOSE) exec -T superset bash -c "python /app/superset_init/create_dashboard.py" # Открыть Superset UI superset-ui: @echo "Superset доступен по адресу: http://localhost:8088" @echo "Логин: admin / Пароль: admin" # Перезапуск Superset superset-restart: $(COMPOSE) restart superset # ============================================================================ # Генератор событий (автономный стриминг) # ============================================================================ # Запустить только генератор (полезно для отладки) generator-up: $(COMPOSE) up -d --build generator # Остановить генератор generator-down: $(COMPOSE) stop generator # Логи генератора generator-logs: $(COMPOSE) logs -f --tail=100 generator # Перезапуск генератора с пересборкой generator-restart: $(COMPOSE) up -d --build --force-recreate generator # Промотать стартовую историю через профиль запуска generator-backfill: COMPOSE_BIN="$(COMPOSE)" bash ./scripts/run_generator.sh backfill # Продолжить live-поток из существующего state generator-continue: COMPOSE_BIN="$(COMPOSE)" bash ./scripts/run_generator.sh continue # Запустить live-поток как новый мир generator-reset: COMPOSE_BIN="$(COMPOSE)" bash ./scripts/run_generator.sh reset # Собрать тестовый образ генератора generator-test-build: cd generator && docker build -t generator:test . # Запустить тесты генератора (pytest) generator-test: generator-test-build @echo "=== Запуск тестов генератора ===" docker run --rm -v $(PWD):/workspace -w /workspace/generator generator:test pytest tests/ -v # Запустить тесты с покрытием generator-test-cov: generator-test-build @echo "=== Запуск тестов с покрытием ===" docker run --rm -v $(PWD):/workspace -w /workspace/generator generator:test pytest tests/ -v --cov=. --cov-report=term-missing