Files
clickstream-ch-kafka-supers…/scripts/run_generated_history_analytics.sh
T
ddadmin 00c97eb063 test(generator): усилены проверки startup-history и Superset
- Зачем:
  - зелёный результат проверок должен означать фактический стык и точный контракт дашборда.
- Что:
  - проверка startup-history читает manifest, требует live seam и непустой ODS.
  - добавлен быстрый runtime gate для daily-wave и live-продолжения.
  - Superset sync ограничен целевым dashboard и сверяет существенные params.
- Проверка:
  - docker target tests; make generator-test; make generated-history-runtime-check.
2026-07-05 21:32:51 +03:00

114 lines
4.0 KiB
Bash

#!/usr/bin/env bash
#
# Чистый прогон аналитического контура от стартовой истории генератора до DM и Superset.
#
# Команда намеренно очищает volumes по умолчанию: так сбрасываются ClickHouse,
# Kafka-топики данных, state и manifest генератора. Это штатный повторяемый путь
# для проверки ADR-0006 на свежем стенде.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
COMPOSE_BIN="${COMPOSE_BIN:-docker compose}"
CLEAN_START="${CLEAN_START:-1}"
WAIT_CLICKHOUSE_SECONDS="${WAIT_CLICKHOUSE_SECONDS:-60}"
WAIT_STG_SECONDS="${WAIT_STG_SECONDS:-10}"
PROFILE="${PROFILE:-${GEN_LAUNCH_PROFILE:-ci}}"
duration_args=()
if [[ -n "${GEN_HISTORY_DURATION:-}" ]]; then
duration_args=(--duration "${GEN_HISTORY_DURATION}")
fi
cd "${REPO_ROOT}"
launch_env="$(
PYTHONPATH="${REPO_ROOT}/generator/src" \
uv run python -m clickstream_generator.launch \
backfill \
--profile "${PROFILE}" \
"${duration_args[@]}"
)"
eval "${launch_env}"
wait_for_clickhouse() {
local deadline
deadline=$((SECONDS + WAIT_CLICKHOUSE_SECONDS))
until ${COMPOSE_BIN} exec -T clickhouse clickhouse-client \
--user=default \
--password=123456 \
--query "SELECT 1" >/dev/null 2>&1; do
if (( SECONDS >= deadline )); then
echo "Ошибка: ClickHouse не ответил за ${WAIT_CLICKHOUSE_SECONDS} сек." >&2
exit 1
fi
sleep 2
done
}
echo "=== Чистый прогон стартовой истории как источника аналитики ==="
echo "GEN_LAUNCH_PROFILE=${GEN_LAUNCH_PROFILE}"
echo "GEN_HISTORY_DURATION=${GEN_HISTORY_DURATION}"
echo "GEN_SEED=${GEN_SEED}"
echo "GEN_MODEL_T0=${GEN_MODEL_T0}"
echo "GEN_MODEL_T_END=${GEN_MODEL_T_END}"
echo "GEN_LAMBDA_BASE_PER_MIN=${GEN_LAMBDA_BASE_PER_MIN}"
echo ""
if [[ "${CLEAN_START}" == "1" ]]; then
echo "Шаг 0: очистка volumes ClickHouse/Kafka/state"
${COMPOSE_BIN} --profile live-generator down -v --remove-orphans
else
echo "Шаг 0: CLEAN_START=0, очистка пропущена"
fi
echo "Шаг 1: запуск ClickHouse и Kafka"
${COMPOSE_BIN} up -d clickhouse kafka
wait_for_clickhouse
echo "Шаг 2: применение DDL"
bash "${SCRIPT_DIR}/apply_clickhouse_ddl.sh"
echo "Шаг 3: сборка образа генератора"
${COMPOSE_BIN} build generator
echo "Шаг 4: backfill стартовой истории в Kafka"
${COMPOSE_BIN} run --rm --no-deps \
-e GEN_RUN_MODE=backfill \
-e GEN_STATE_RESET=true \
-e GEN_LAUNCH_PROFILE="${GEN_LAUNCH_PROFILE}" \
-e GEN_SEED="${GEN_SEED}" \
-e GEN_MODEL_T0="${GEN_MODEL_T0}" \
-e GEN_MODEL_T_END="${GEN_MODEL_T_END}" \
-e GEN_MODEL_TIMEZONE="${GEN_MODEL_TIMEZONE}" \
-e GEN_MODEL_TIME_SPEED="${GEN_MODEL_TIME_SPEED}" \
-e GEN_TICK_SECONDS="${GEN_TICK_SECONDS}" \
-e GEN_LAMBDA_BASE_PER_MIN="${GEN_LAMBDA_BASE_PER_MIN}" \
-e GEN_JITTER_PCT="${GEN_JITTER_PCT}" \
-e GEN_MIN_EVENTS_PER_TICK="${GEN_MIN_EVENTS_PER_TICK}" \
-e GEN_MAX_EVENTS_PER_TICK="${GEN_MAX_EVENTS_PER_TICK}" \
generator
echo "Шаг 5: ожидание чтения Kafka Materialized View (${WAIT_STG_SECONDS} сек.)"
sleep "${WAIT_STG_SECONDS}"
echo "Шаг 6: batch STG -> ODS -> DDS -> DM"
bash "${SCRIPT_DIR}/run_batch.sh"
echo "Шаг 7: инициализация Superset metadata и dashboard"
${COMPOSE_BIN} up -d postgres-metadata clickhouse
${COMPOSE_BIN} up --abort-on-container-exit --exit-code-from superset-init superset-init
${COMPOSE_BIN} up -d --no-deps superset
echo "Шаг 8: техническая проверка аналитического контура"
GEN_MODEL_T0="${GEN_MODEL_T0}" \
GEN_MODEL_T_END="${GEN_MODEL_T_END}" \
CHECK_LIVE_SEAM=0 \
COMPOSE_BIN="${COMPOSE_BIN}" \
bash "${SCRIPT_DIR}/check_generated_analytics.sh"
echo ""
echo "Готово: стартовая история генератора доведена до DM и Superset."