#!/usr/bin/env bash # Tenký wrapper nad ems.fn_rebuild_consumption_baseline_stats (kanonické API je v PostgreSQL). # # Použití: # export DATABASE_URL='postgres://…/ems' # LOOKBACK_DAYS=14 ./scripts/rebuild_consumption_baseline_stats.sh 2 # jedna lokality (site.id) # # ./scripts/rebuild_consumption_baseline_stats.sh --all # celá tabulka stats + všichni sites # # MCP / psql přímo (doporučeno v SQL-first režimu): # select * from ems.fn_rebuild_consumption_baseline_stats(2, 30); # select * from ems.fn_rebuild_consumption_baseline_stats(null::int, 30); # # DRY_RUN=1 … — jen řádek count (žádné mazání). set -euo pipefail if [[ -z "${DATABASE_URL:-}" ]] && [[ -z "${PGHOST:-}" ]]; then echo "Nastav DATABASE_URL nebo PG proměnné." >&2 exit 1 fi LOOKBACK="${LOOKBACK_DAYS:-30}" if ! [[ "$LOOKBACK" =~ ^[0-9]+$ ]] || [[ "$LOOKBACK" -lt 1 ]]; then echo "LOOKBACK_DAYS musí být kladné celé číslo." >&2 exit 1 fi PSQL=(psql -v ON_ERROR_STOP=1) if [[ -n "${DATABASE_URL:-}" ]]; then PSQL+=("$DATABASE_URL") else PSQL+=("${PGDATABASE:-ems}") fi MODE="${1:?Chybí argument: site_id (číslo) nebo --all}" DRY="${DRY_RUN:-0}" if [[ "$MODE" == "--all" ]]; then if [[ "$DRY" == "1" ]] || [[ "$DRY" == "true" ]]; then echo "DRY_RUN: consumption_baseline_stats řádků celkem, sites:" "${PSQL[@]}" -c " select count(*) as stats_rows from ems.consumption_baseline_stats; select count(*) as sites from ems.site; " exit 0 fi echo "Volám fn_rebuild_consumption_baseline_stats(null, ${LOOKBACK}) …" "${PSQL[@]}" -c "select * from ems.fn_rebuild_consumption_baseline_stats(null::int, ${LOOKBACK}::int);" else SITE_ID="$MODE" if ! [[ "$SITE_ID" =~ ^[0-9]+$ ]]; then echo "První argument: site_id (číslo) nebo --all." >&2 exit 1 fi if [[ "$DRY" == "1" ]] || [[ "$DRY" == "true" ]]; then "${PSQL[@]}" -c "select count(*) from ems.consumption_baseline_stats where site_id = ${SITE_ID}::int;" exit 0 fi echo "Volám fn_rebuild_consumption_baseline_stats(${SITE_ID}, ${LOOKBACK}) …" "${PSQL[@]}" -c "select * from ems.fn_rebuild_consumption_baseline_stats(${SITE_ID}::int, ${LOOKBACK}::int);" fi echo "Hotovo. Spusť rolling/denní plán nebo počkej na scheduler."