Files
clickstream-ch-kafka-supers…/Makefile
T
ddadmin 9b0b063fed fix(generator): усилены проверки startup-history
- Зачем:
  - коммит-гейт не запускал корневые контрактные тесты, а часть подтверждённых обходов могла снова смешать разные миры генератора.
- Что:
  - добавлены цели make test, make lint и contract-test с тихим pytest-выводом через Docker.
  - закрыты обходы через generator-reset, неизвестную версию state и fail-open проверку DM-витрин.
  - усилены поведенческие контракты CHECK_LIVE_SEAM, профиля manifest и pause-check etl_pipeline; обновлены документы и issue 19.
- Проверка:
  - make test; make lint; git diff --check.
2026-07-05 22:46:53 +03:00

191 lines
9.0 KiB
Makefile

.PHONY: up down clean ddl data transform logs \
generated-history-analytics generated-history-check generated-history-runtime-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 \
contract-test config-test test lint
COMPOSE ?= docker compose
PROFILE ?= ci
PYTEST_ARGS ?= -q -p no:cacheprovider
PYTHON_CHECK_PATHS := airflow/dags configs generator scripts superset tests
BASH_SCRIPTS := $(shell find scripts -type f -name '*.sh' | sort)
# ============================================================================
# Основные команды
# ============================================================================
up:
$(COMPOSE) up -d --build clickhouse kafka kafka-ui postgres-metadata airflow-webserver airflow-scheduler prometheus grafana kafka-exporter statsd-exporter
# Остановить и удалить контейнеры/сети текущего проекта
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:
PROFILE="$${PROFILE:-$${GEN_LAUNCH_PROFILE:-$(PROFILE)}}" GEN_LAUNCH_PROFILE="$${GEN_LAUNCH_PROFILE:-$${PROFILE:-$(PROFILE)}}" CHECK_LIVE_SEAM="$${CHECK_LIVE_SEAM:-1}" COMPOSE_BIN="$(COMPOSE)" bash ./scripts/check_generated_analytics.sh
# Быстрый runtime gate issue 17: короткий daily-wave backfill + live seam без Superset UI
generated-history-runtime-check:
COMPOSE_BIN="$(COMPOSE)" bash ./scripts/run_generated_history_runtime_check.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/ $(PYTEST_ARGS)
# Запустить тесты с покрытием
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
# Запустить контрактные тесты верхнего уровня
contract-test: generator-test-build
@echo "=== Запуск контрактных тестов репозитория ==="
docker run --rm -v $(PWD):/workspace -w /workspace generator:test pytest tests/ $(PYTEST_ARGS)
# Проверить конфигурацию compose без запуска сервисов
config-test:
$(COMPOSE) config --quiet
# Быстрый предкоммитный набор: тесты генератора, контракты и конфигурация
test: generator-test contract-test config-test
# Статические проверки без запуска стенда
lint: generator-test-build
@echo "=== Проверка синтаксиса Python ==="
docker run --rm -e PYTHONPYCACHEPREFIX=/tmp/pycache -v $(PWD):/workspace -w /workspace generator:test python -m compileall -q $(PYTHON_CHECK_PATHS)
@echo "=== Проверка синтаксиса Bash ==="
bash -n $(BASH_SCRIPTS)
@echo "=== Проверка docker compose ==="
$(COMPOSE) config --quiet
@echo "=== Проверка пробелов в diff ==="
git diff --check