Fix: seed-testdata ohne bash4 assoc arrays (macOS kompatibel)
This commit is contained in:
parent
e30bef40ea
commit
d1b2d41fd9
1 changed files with 140 additions and 0 deletions
140
scripts/seed-testdata.sh
Executable file
140
scripts/seed-testdata.sh
Executable 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"
|
||||
Loading…
Add table
Add a link
Reference in a new issue