Files
clickstream-ch-kafka-supers…/scripts/assert_stand_clean.sh
T
ddadminandClaude Fable 5 10ee1a1cb6 feat(generator): эталонный мир в git и import по умолчанию
- Зачем:
  - менти собирал мир генерацией (минуты и десятки минут CPU); теперь
    готовый трёхдневный мир загружается импортом за ~2 минуты, и числа
    у всех менти совпадают число-в-число (issue #3).
- Что:
  - артефакт data/startup_history/reference-world.json.xz в git:
    3 модельных дня daily-wave, ~850 МБ JSON → 32 МБ xz;
  - чтение и запись артефакта понимают .xz потоково (lzma); пустое поле
    artifact_path в пульте и make startup-history-import читают эталон;
  - длительность профиля daily-wave стала 3d — в тон эталонному миру;
  - предпроверка чистого стенда ставит зависимости генератора через uv;
    экспорт и импорт разведены отдельными переменными Makefile;
  - доки и runbook обновлены; новые контрактные тесты: xz round-trip
    и дефолтные пути артефакта.
- Проверка:
  - make test (210 + 31) и make lint зелёные; импорт на чистом стенде
    за 2м03с, manifest совпал (280437 событий), Superset-проверка
    зелёная; независимое ревью — APPROVED.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 18:49:02 +03:00

63 lines
2.4 KiB
Bash
Executable File

#!/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 --with-requirements generator/requirements.txt \
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 --with-requirements generator/requirements.txt \
python -m clickstream_generator.stand_clean \
--mode "${CHECK_MODE}" \
--kafka-bootstrap-servers "${KAFKA_BOOTSTRAP_SERVERS_HOST}" \
--stg-counts "${stg_counts}"