#!/usr/bin/env bash
# Faehrt den Lasttest Stufe fuer Stufe und sammelt je Stufe ein Ergebnis.
#
#   stufen-fahren.sh [stufe ...]        # Vorgabe: 10 25 50 100 200 400
#
# Warum stufenweise und nicht durchgehend hochfahren: eine Kurve braucht je
# Laststufe EINEN sauberen Messwert. Ein durchgehender Anstieg liefert am
# Ende nur einen Mittelwert ueber alle Stufen - der sagt weder, wo es noch
# gut ging, noch wo es kippte.
#
# Zwischen den Stufen eine Pause: sonst traegt die Warteschlange der
# vorigen Stufe in die naechste hinein und verschiebt die Wand nach unten.
set -uo pipefail

STUFEN=("$@")
[ ${#STUFEN[@]} -eq 0 ] && STUFEN=(10 25 50 100 200 400)
DAUER="${DAUER:-90s}"
PAUSE="${PAUSE:-20}"

cd "$(dirname "$0")"
[ -f lage.json ] || { echo "lage.json fehlt - erst vorbereiten.php laufen lassen."; exit 1; }

mkdir -p lauf
rm -f lauf/*.json

# Der Beobachter laeuft ueber die ganze Reihe, damit sich Vorher/Nachher
# je Stufe aus einer einzigen Zeitreihe lesen laesst.
GESAMT=$(( ${#STUFEN[@]} * (${DAUER%s} + PAUSE) + 60 ))
python3 beobachten.py "$GESAMT" verlauf.jsonl > beobachter.log 2>&1 &
BEOBACHTER=$!
trap 'kill $BEOBACHTER 2>/dev/null' EXIT

KENNUNG="lauf-$(date -u +%Y%m%dT%H%M%SZ)"
echo "$KENNUNG"
echo "Stufen: ${STUFEN[*]}  je $DAUER  (Beobachter laeuft $GESAMT s)"
echo

for n in "${STUFEN[@]}"; do
    START=$(date -u +%Y-%m-%dT%H:%M:%SZ)
    printf '== %4s gleichzeitige Einkaeufer ==\n' "$n"
    k6 run -q -e LAGE=lage.json -e VUS="$n" -e DAUER="$DAUER" \
        -e ERGEBNIS="lauf/stufe-$n.json" einkauf.js 2>&1 | sed 's/^/   /'
    ENDE=$(date -u +%Y-%m-%dT%H:%M:%SZ)
    # Zeitfenster der Stufe festhalten, damit die Auswertung die
    # Serverwerte der richtigen Stufe zuordnen kann.
    printf '{"vus":%s,"von":"%s","bis":"%s"}\n' "$n" "$START" "$ENDE" >> lauf/fenster.jsonl
    echo
    sleep "$PAUSE"
done

echo "Fertig $KENNUNG. Ergebnisse in lauf/, Serverwerte in verlauf.jsonl"
