Files
ddadminandClaude Opus 5 35dc933d29 feat(airflow): пульт мира — работники, выключатель, контейнер
Зачем: модельный день прогонялся только руками, и владельцу нечем было
проверять процессы стенда вживую. Пульт нужен раньше этапа 3 и независимо
от него: он обкатывает то, что приёму заказов понадобится готовым — вызов
генератора из задачи Airflow.

Что: `dags/world_control.py` — три дага по ADR 0009. Работники
`world_next_day` (день пачкой, «сколько дней» параметром) и `world_live_day`
(день в темпе) живут без расписания и без паузы; выключатель `world_live`
создаётся на паузе, тикает раз в 25 минут и дёргает работника живого дня
с ожиданием конца. Генератор зовётся `DockerOperator` в каноническом
контейнере: сокет докера отдан планировщику, потому что при LocalExecutor
задачи исполняет он, а GID группы `docker` уехал в `.env` как локальная
настройка. Позицию на оси ведёт переменная `world_position` — её ставит
сыгравший день работник и только по успеху. Факты стенда — образ, сеть,
брокер, топик, размер стартового мира — даги получают окружением от compose;
внутри compose они названы по разу якорями, иначе разошлись бы с разовой
службой генератора. README получил раздел про пульт с названной вслух платой
за сокет.

Проверка: `make lint`, `make config-test`, `make smoke` (20/0), `make
check-services` (7/0), `make check-clickhouse` (9/9) — зелёные. На чистом
стенде: два прогона `world_next_day` подряд двигают позицию на два дня,
«дней = 3» — на три, все пять дней доехали в ODS; обрыв контейнера позицию
не двигает, повторный запуск играет тот же день с тем же счётом событий.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 13:09:14 +03:00

40 lines
1.7 KiB
Bash

# Имя и внешние порты меняют для второй копии стенда или при конфликте.
COMPOSE_PROJECT_NAME=clickstream-data-platform
CLICKHOUSE_01_HTTP_PORT=28123
CLICKHOUSE_01_TCP_PORT=29000
CLICKHOUSE_02_HTTP_PORT=28124
CLICKHOUSE_02_TCP_PORT=29001
CLICKHOUSE_CLUSTER_SECRET=cluster-26-secret
CLICKHOUSE_DEFAULT_PASSWORD=default-26-local
CLICKHOUSE_ETL_PASSWORD=etl-26-writer
CLICKHOUSE_BI_PASSWORD=bi-26-reader
CLICKHOUSE_ANALYST_PASSWORD=analyst-26-reader
KAFKA_EXTERNAL_PORT=29092
PROMETHEUS_PORT=29090
GRAFANA_PORT=23000
AIRFLOW_PORT=28080
SUPERSET_PORT=28088
# GID группы `docker` на этой машине: без него планировщик Airflow не достучится
# до сокета докера, и пульт мира не поднимет контейнер генератора.
# Подсмотреть свой — `getent group docker`.
DOCKER_GID=127
# Учётные данные и ключи учебного стенда. Для VPS замените значения образца.
GRAFANA_ADMIN_USER=admin
GRAFANA_ADMIN_PASSWORD=admin
POSTGRES_ADMIN_USER=postgres
POSTGRES_ADMIN_PASSWORD=postgres-local
AIRFLOW_METADATA_USER=airflow
AIRFLOW_METADATA_PASSWORD=airflow-local
SUPERSET_METADATA_USER=superset
SUPERSET_METADATA_PASSWORD=superset-local
AIRFLOW_ADMIN_USER=admin
AIRFLOW_ADMIN_PASSWORD=airflow
AIRFLOW_JWT_SECRET=local-only-airflow-jwt-secret-do-not-use
AIRFLOW_API_SECRET_KEY=local-only-airflow-api-secret-do-not-use
AIRFLOW_FERNET_KEY=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
SUPERSET_ADMIN_USER=admin
SUPERSET_ADMIN_PASSWORD=superset
SUPERSET_SECRET_KEY=local-only-superset-secret-do-not-use-outside-this-stand