- Зачем: - старый state и ручной live-генератор могли тихо писать события в новый мир данных. - Что: - добавлена общая проверка чистого стенда для Airflow и host-путей. - защищены backfill, import, continue и clean-start сценарии live-generator. - описан миграционный отказ старого state. - Проверка: - make generator-test; docker compose config --quiet; py_compile; bash -n.
93 lines
2.9 KiB
Bash
93 lines
2.9 KiB
Bash
#!/usr/bin/env bash
|
|
#
|
|
# Запускает генератор через понятные глаголы поверх старых env-переменных.
|
|
|
|
set -euo pipefail
|
|
|
|
if [[ $# -ne 1 ]]; then
|
|
echo "Использование: $0 backfill|continue|reset" >&2
|
|
exit 2
|
|
fi
|
|
|
|
VERB="$1"
|
|
case "${VERB}" in
|
|
backfill|continue|reset) ;;
|
|
*)
|
|
echo "Ошибка: неизвестный глагол запуска: ${VERB}" >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
|
|
COMPOSE_BIN="${COMPOSE_BIN:-docker compose}"
|
|
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 \
|
|
"${VERB}" \
|
|
--profile "${PROFILE}" \
|
|
"${duration_args[@]}"
|
|
)"
|
|
eval "${launch_env}"
|
|
|
|
echo "=== Запуск генератора: ${GEN_LAUNCH_VERB} ==="
|
|
echo "GEN_LAUNCH_PROFILE=${GEN_LAUNCH_PROFILE}"
|
|
if [[ -n "${GEN_HISTORY_DURATION:-}" ]]; then
|
|
echo "GEN_HISTORY_DURATION=${GEN_HISTORY_DURATION}"
|
|
fi
|
|
echo "GEN_RUN_MODE=${GEN_RUN_MODE}"
|
|
echo "GEN_STATE_RESET=${GEN_STATE_RESET}"
|
|
if [[ -n "${GEN_MODEL_T_END:-}" ]]; then
|
|
echo "GEN_MODEL_T_END=${GEN_MODEL_T_END}"
|
|
fi
|
|
echo ""
|
|
|
|
if [[ "${VERB}" == "backfill" ]]; then
|
|
echo "Шаг 1: запуск Kafka и ClickHouse"
|
|
${COMPOSE_BIN} up -d kafka clickhouse
|
|
|
|
echo "Шаг 2: предпроверка чистого стенда"
|
|
bash "${SCRIPT_DIR}/assert_stand_clean.sh" clean
|
|
|
|
echo "Шаг 3: сборка образа генератора"
|
|
${COMPOSE_BIN} build generator
|
|
|
|
echo "Шаг 4: backfill стартовой истории"
|
|
${COMPOSE_BIN} run --rm --no-deps \
|
|
-e GEN_RUN_MODE="${GEN_RUN_MODE}" \
|
|
-e GEN_STATE_RESET="${GEN_STATE_RESET}" \
|
|
-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
|
|
elif [[ "${VERB}" == "continue" ]]; then
|
|
echo "Шаг 1: запуск Kafka и ClickHouse"
|
|
${COMPOSE_BIN} up -d kafka clickhouse
|
|
|
|
echo "Шаг 2: проверка state или чистого стенда"
|
|
bash "${SCRIPT_DIR}/assert_stand_clean.sh" continue
|
|
|
|
echo "Шаг 3: запуск live-генератора"
|
|
${COMPOSE_BIN} up -d --build generator
|
|
else
|
|
echo "Шаг 1: запуск live-генератора"
|
|
${COMPOSE_BIN} up -d --build generator
|
|
fi
|