Fix: seed-testdata ohne bash4 assoc arrays (macOS kompatibel)

This commit is contained in:
rene 2026-05-17 15:37:14 +02:00
parent e30bef40ea
commit d1b2d41fd9

140
scripts/seed-testdata.sh Executable file
View file

@ -0,0 +1,140 @@
#!/bin/bash
# Generiert realistische HACCP-Testdaten für die letzten 30 Tage
set -euo pipefail
PB_URL="${PB_URL:-https://api.checkflo.de}"
if [ -z "${PB_EMAIL:-}" ] || [ -z "${PB_PASSWORD:-}" ]; then
echo "Aufruf: PB_EMAIL=... PB_PASSWORD=... ./seed-testdata.sh"
exit 1
fi
TOKEN=$(curl -sf -X POST "$PB_URL/api/collections/_superusers/auth-with-password" \
-H "Content-Type: application/json" \
-d "{\"identity\":\"$PB_EMAIL\",\"password\":\"$PB_PASSWORD\"}" | jq -r '.token')
echo "✓ Eingeloggt"
TENANT_ID="mengbzc3ajxpccz"
# Stationen als JSON laden
STATIONS_JSON=$(curl -sf "$PB_URL/api/collections/stations/records?filter=tenant%3D'$TENANT_ID'&perPage=50" \
-H "Authorization: $TOKEN")
STATION_COUNT=$(echo "$STATIONS_JSON" | jq '.items | length')
echo "$STATION_COUNT Stationen gefunden"
NAMES=("Maria S." "Klaus B." "Sandra M." "Tobias R." "Anna K." "Michael F." "Lisa W.")
NOTES_ABW=("Tür stand leicht offen" "Dichtung prüfen" "Kompressor läuft laut" "Temperatur leicht erhöht" "Nach Lieferung noch warm")
NOTES_KRIT=("Tür war 2h offen" "Kompressor ausgefallen" "Sofortmaßnahme eingeleitet" "Produkte aussortiert" "Techniker verständigt")
create_log() {
local station_id=$1
local date_str=$2
local status=$3
local temp=$4
local notes=$5
local person=$6
curl -sf -X POST "$PB_URL/api/collections/check_logs/records" \
-H "Authorization: $TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"station\": \"$station_id\",
\"tenant\": \"$TENANT_ID\",
\"temperature\": $temp,
\"status\": \"$status\",
\"notes\": \"$notes\",
\"checked_by\": \"$person\",
\"created\": \"$date_str\",
\"updated\": \"$date_str\"
}" > /dev/null
}
rand_between() {
local min=$1
local max=$2
echo $(( min + RANDOM % (max - min + 1) ))
}
echo "→ Erstelle Einträge für die letzten 30 Tage..."
COUNT=0
for DAY in $(seq 29 -1 0); do
# Datum berechnen (macOS + Linux kompatibel)
if date -v -${DAY}d +"%Y-%m-%d" > /dev/null 2>&1; then
DATE=$(date -v -${DAY}d +"%Y-%m-%d")
DOW=$(date -v -${DAY}d +"%u")
else
DATE=$(date -d "-${DAY} days" +"%Y-%m-%d")
DOW=$(date -d "-${DAY} days" +"%u")
fi
for i in $(seq 0 $((STATION_COUNT - 1))); do
SID=$(echo "$STATIONS_JSON" | jq -r ".items[$i].id")
TYPE=$(echo "$STATIONS_JSON" | jq -r ".items[$i].type")
TMIN=$(echo "$STATIONS_JSON" | jq -r ".items[$i].target_temp_min // 0")
TMAX=$(echo "$STATIONS_JSON" | jq -r ".items[$i].target_temp_max // 0")
PERSON=${NAMES[$((RANDOM % ${#NAMES[@]}))]}
if [ "$TYPE" = "kuehlschrank" ] || [ "$TYPE" = "tiefkuehl" ]; then
# Morgencheck
HOUR=$(rand_between 7 8)
MIN_T=$(rand_between 0 5)
SEC_T=$(rand_between 0 59)
TIME="${DATE} 0${HOUR}:$(printf "%02d" $MIN_T):$(printf "%02d" $SEC_T)"
RAND=$((RANDOM % 100))
if [ $RAND -lt 90 ]; then
TEMP=$(rand_between $TMIN $TMAX)
create_log "$SID" "$TIME" "ok" "$TEMP" "" "$PERSON"
elif [ $RAND -lt 98 ]; then
TEMP=$(( TMAX + 1 + RANDOM % 3 ))
NOTE=${NOTES_ABW[$((RANDOM % ${#NOTES_ABW[@]}))]}
create_log "$SID" "$TIME" "abweichung" "$TEMP" "$NOTE" "$PERSON"
else
TEMP=$(( TMAX + 4 + RANDOM % 5 ))
NOTE=${NOTES_KRIT[$((RANDOM % ${#NOTES_KRIT[@]}))]}
create_log "$SID" "$TIME" "kritisch" "$TEMP" "$NOTE" "$PERSON"
fi
COUNT=$((COUNT + 1))
# Abendcheck (Mo-Fr)
if [ "$DOW" -lt 6 ]; then
HOUR=$(rand_between 17 19)
TIME="${DATE} ${HOUR}:$(printf "%02d" $(rand_between 0 59)):00"
TEMP=$(rand_between $TMIN $TMAX)
create_log "$SID" "$TIME" "ok" "$TEMP" "" "$PERSON"
COUNT=$((COUNT + 1))
fi
elif [ "$TYPE" = "warmhalte" ]; then
TIME="${DATE} 11:$(printf "%02d" $(rand_between 0 30)):00"
RAND=$((RANDOM % 100))
if [ $RAND -lt 85 ]; then
TEMP=$(rand_between $TMIN $TMAX)
create_log "$SID" "$TIME" "ok" "$TEMP" "" "$PERSON"
else
TEMP=$(( TMIN - 3 - RANDOM % 5 ))
NOTE=${NOTES_ABW[$((RANDOM % ${#NOTES_ABW[@]}))]}
create_log "$SID" "$TIME" "abweichung" "$TEMP" "$NOTE" "$PERSON"
fi
COUNT=$((COUNT + 1))
elif [ "$TYPE" = "hygiene" ]; then
if [ "$DOW" -eq 1 ]; then
TIME="${DATE} 09:$(printf "%02d" $(rand_between 0 30)):00"
create_log "$SID" "$TIME" "ok" "0" "" "$PERSON"
COUNT=$((COUNT + 1))
fi
fi
done
printf " Tag -%02d: %s (%s)..." "$DAY" "$DATE" "DOW $DOW"
echo " OK"
done
echo ""
echo "$COUNT Einträge erstellt"