#!/usr/bin/env bash set -euo pipefail OPEN_STAT_BIN=${OPEN_STAT_BIN:-/opt/lingniu-vehicle-platform/current/open-platform-stat} BASE_ENV_FILE=${BASE_ENV_FILE:-/opt/lingniu-go-native/env/base.env} PLATFORM_ENV_FILE=${PLATFORM_ENV_FILE:-/opt/lingniu-vehicle-platform/env/platform.env} LOCK_FILE=${LOCK_FILE:-/run/lock/lingniu-hydrogen-history-replay.lock} test -x "$OPEN_STAT_BIN" || { printf 'open-platform-stat is not executable: %s\n' "$OPEN_STAT_BIN" >&2; exit 1; } test -r "$BASE_ENV_FILE" || { printf 'base environment file is unavailable: %s\n' "$BASE_ENV_FILE" >&2; exit 1; } test -r "$PLATFORM_ENV_FILE" || { printf 'platform environment file is unavailable: %s\n' "$PLATFORM_ENV_FILE" >&2; exit 1; } exec 9>"$LOCK_FILE" flock -n 9 || { printf 'another hydrogen history replay is already running\n' >&2; exit 1; } run_stat() { python3 -c ' import os import sys binary, base_env, platform_env, *args = sys.argv[1:] for path in (base_env, platform_env): with open(path, encoding="utf-8") as handle: for raw_line in handle: line = raw_line.rstrip("\n") if not line.strip() or line.lstrip().startswith("#") or "=" not in line: continue name, value = line.split("=", 1) os.environ[name] = value os.execv(binary, [binary, *args]) ' "$OPEN_STAT_BIN" "$BASE_ENV_FILE" "$PLATFORM_ENV_FILE" "$@" } if test "${1:-}" = "--from"; then test "$#" -eq 4 && test "${3:-}" = "--to" || { printf 'usage: %s --from yyyy-mm-dd --to yyyy-mm-dd\n' "$0" >&2 exit 2 } start_date=$2 end_date=$4 while IFS= read -r replay_date; do printf 'replay_date=%s status=starting\n' "$replay_date" run_stat -date "$replay_date" -lookback-days 1 done < <(python3 -c ' import datetime import sys start = datetime.datetime.strptime(sys.argv[1], "%Y-%m-%d").date() end = datetime.datetime.strptime(sys.argv[2], "%Y-%m-%d").date() if end < start: raise SystemExit("end date must not precede start date") current = start while current <= end: print(current.isoformat()) current += datetime.timedelta(days=1) ' "$start_date" "$end_date") exit 0 fi if test "$#" -eq 0; then run_stat -all-dates else run_stat "$@" fi