- Зачем: - запуск генератора должен быть понятным перед будущим DAG-пультом. - Что: - добавлены глаголы запуска backfill, continue и reset. - добавлены профили ci и daily-wave с расчётом длительности истории. - обновлены runbook и документы запуска под профильный интерфейс. - Проверка: - uv run --with-requirements generator/requirements.txt pytest generator/tests -q. - bash -n scripts/run_generator.sh scripts/export_startup_history_artifact.sh scripts/import_startup_history_artifact.sh scripts/run_generated_history_analytics.sh. - PROFILE=daily-wave COMPOSE_BIN=true bash scripts/run_generator.sh backfill.
70 lines
2.3 KiB
Bash
Executable File
70 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Импортирует портативный артефакт стартовой истории в Kafka.
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
|
|
COMPOSE_BIN="${COMPOSE_BIN:-docker compose}"
|
|
ARTIFACT="${ARTIFACT:-/tmp/clickstream-startup-history.json}"
|
|
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 \
|
|
continue \
|
|
--profile "${PROFILE}" \
|
|
"${duration_args[@]}"
|
|
)"
|
|
eval "${launch_env}"
|
|
|
|
if [[ ! -s "${ARTIFACT}" ]]; then
|
|
echo "Ошибка: артефакт не найден или пуст: ${ARTIFACT}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
ARTIFACT_DIR="$(dirname "${ARTIFACT}")"
|
|
ARTIFACT_FILE="$(basename "${ARTIFACT}")"
|
|
|
|
echo "=== Импорт стартовой истории ==="
|
|
echo "ARTIFACT=${ARTIFACT}"
|
|
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 ""
|
|
|
|
echo "Шаг 1: запуск Kafka"
|
|
${COMPOSE_BIN} up -d kafka
|
|
|
|
echo "Шаг 2: сборка образа генератора"
|
|
${COMPOSE_BIN} build generator
|
|
|
|
echo "Шаг 3: воспроизведение артефакта в Kafka"
|
|
${COMPOSE_BIN} run --rm --no-deps \
|
|
-v "${ARTIFACT_DIR}:/startup-artifacts:ro" \
|
|
-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 python -m clickstream_generator.startup_history_artifact import \
|
|
--artifact "/startup-artifacts/${ARTIFACT_FILE}"
|
|
|
|
echo "Готово: артефакт воспроизведён в Kafka."
|