fix(generator): исключено смешение миров при запуске
- Зачем: - старый state и ручной live-генератор могли тихо писать события в новый мир данных. - Что: - добавлена общая проверка чистого стенда для Airflow и host-путей. - защищены backfill, import, continue и clean-start сценарии live-generator. - описан миграционный отказ старого state. - Проверка: - make generator-test; docker compose config --quiet; py_compile; bash -n.
This commit is contained in:
Executable
+60
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Проверяет, что новый мир генератора не смешается со старым.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
|
||||
COMPOSE_BIN="${COMPOSE_BIN:-docker compose}"
|
||||
KAFKA_BOOTSTRAP_SERVERS_HOST="${KAFKA_BOOTSTRAP_SERVERS_HOST:-localhost:9092}"
|
||||
GENERATOR_METRICS_URL_HOST="${GENERATOR_METRICS_URL_HOST:-http://localhost:9109/metrics}"
|
||||
CLICKHOUSE_SERVICE="${CLICKHOUSE_SERVICE:-clickhouse}"
|
||||
CLICKHOUSE_DB="${CLICKHOUSE_DB:-default}"
|
||||
CLICKHOUSE_USER="${CLICKHOUSE_USER:-default}"
|
||||
CLICKHOUSE_PASSWORD="${CLICKHOUSE_PASSWORD:-123456}"
|
||||
CHECK_MODE="${1:-clean}"
|
||||
|
||||
cd "${REPO_ROOT}"
|
||||
|
||||
if [[ "${CHECK_MODE}" != "clean" && "${CHECK_MODE}" != "continue" ]]; then
|
||||
echo "Ошибка: неизвестный режим предпроверки: ${CHECK_MODE}" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [[ "${CHECK_MODE}" == "clean" ]]; then
|
||||
echo "Предпроверка: live-генератор не должен быть запущен."
|
||||
PYTHONPATH="${REPO_ROOT}/generator/src" \
|
||||
uv run python -m clickstream_generator.stand_clean \
|
||||
--mode live \
|
||||
--live-metrics-url "${GENERATOR_METRICS_URL_HOST}"
|
||||
fi
|
||||
|
||||
echo "Предпроверка: Kafka data-топики и STG должны быть пустыми или state совместим."
|
||||
|
||||
if ! stg_counts="$(${COMPOSE_BIN} exec -T "${CLICKHOUSE_SERVICE}" clickhouse-client \
|
||||
--user="${CLICKHOUSE_USER}" \
|
||||
--password="${CLICKHOUSE_PASSWORD}" \
|
||||
--database="${CLICKHOUSE_DB}" \
|
||||
--format=TSV \
|
||||
--query "
|
||||
SELECT
|
||||
(SELECT count() FROM stg.browser_raw) AS browser_raw,
|
||||
(SELECT count() FROM stg.location_raw) AS location_raw,
|
||||
(SELECT count() FROM stg.device_raw) AS device_raw,
|
||||
(SELECT count() FROM stg.geo_raw) AS geo_raw
|
||||
")"; then
|
||||
echo "Ошибка: не удалось проверить STG через ClickHouse." >&2
|
||||
echo "Проверьте, что ClickHouse запущен и DDL применён: make ddl" >&2
|
||||
echo "${stg_counts}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
KAFKA_BOOTSTRAP_SERVERS="${KAFKA_BOOTSTRAP_SERVERS_HOST}" \
|
||||
GEN_DATA_DIR="${REPO_ROOT}/data" \
|
||||
PYTHONPATH="${REPO_ROOT}/generator/src" \
|
||||
uv run python -m clickstream_generator.stand_clean \
|
||||
--mode "${CHECK_MODE}" \
|
||||
--kafka-bootstrap-servers "${KAFKA_BOOTSTRAP_SERVERS_HOST}" \
|
||||
--stg-counts "${stg_counts}"
|
||||
Reference in New Issue
Block a user