#!/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: запуск Kafka и ClickHouse" ${COMPOSE_BIN} up -d kafka clickhouse echo "Шаг 2: предпроверка чистого стенда" bash "${SCRIPT_DIR}/assert_stand_clean.sh" clean echo "Шаг 3: запуск live-генератора" ${COMPOSE_BIN} up -d --build generator fi