93 lines
3.3 KiB
Bash
Executable file
93 lines
3.3 KiB
Bash
Executable file
#!/bin/bash
|
|
# Löscht heutige Demo-Einträge und erstellt frische für die letzte Stunde.
|
|
# Cron: jede Stunde via DSM Task Scheduler oder crontab
|
|
|
|
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=... ./demo-refresh.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')
|
|
|
|
TENANT_ID="mengbzc3ajxpccz"
|
|
NOW=$(date +"%Y-%m-%d %H:00:00")
|
|
TODAY=$(date +"%Y-%m-%d")
|
|
|
|
# Alle heutigen Demo-Einträge löschen
|
|
EXISTING=$(curl -sf \
|
|
"$PB_URL/api/collections/check_logs/records?filter=tenant%3D'$TENANT_ID'%26%26created%3E%3D'$TODAY%2000%3A00%3A00'&perPage=200" \
|
|
-H "Authorization: $TOKEN" | jq -r '.items[].id')
|
|
|
|
COUNT_DEL=0
|
|
for id in $EXISTING; do
|
|
curl -sf -X DELETE "$PB_URL/api/collections/check_logs/records/$id" \
|
|
-H "Authorization: $TOKEN" > /dev/null
|
|
COUNT_DEL=$((COUNT_DEL + 1))
|
|
done
|
|
echo "→ $COUNT_DEL alte Einträge gelöscht"
|
|
|
|
# Stationen laden
|
|
STATIONS=$(curl -sf "$PB_URL/api/collections/stations/records?filter=tenant%3D'$TENANT_ID'%26%26active%3Dtrue&perPage=50" \
|
|
-H "Authorization: $TOKEN")
|
|
STATION_COUNT=$(echo "$STATIONS" | jq '.items | length')
|
|
|
|
NAMES=("Maria S." "Klaus B." "Sandra M." "Tobias R." "Anna K." "Michael F.")
|
|
NOTES_ABW=("Tür stand leicht offen" "Dichtung prüfen" "Temperatur leicht erhöht")
|
|
NOTES_KRIT=("Tür war 2h offen" "Kompressor ausgefallen" "Sofortmaßnahme eingeleitet")
|
|
|
|
rand_between() { echo $(( $1 + RANDOM % ($2 - $1 + 1) )); }
|
|
|
|
create_log() {
|
|
curl -sf -X POST "$PB_URL/api/collections/check_logs/records" \
|
|
-H "Authorization: $TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{
|
|
\"station\": \"$1\",
|
|
\"tenant\": \"$TENANT_ID\",
|
|
\"temperature\": $2,
|
|
\"status\": \"$3\",
|
|
\"notes\": \"$4\",
|
|
\"checked_by\": \"$5\",
|
|
\"created\": \"$6\",
|
|
\"updated\": \"$6\"
|
|
}" > /dev/null
|
|
}
|
|
|
|
# Für jede vergangene Stunde seit 7:00 Einträge erstellen
|
|
CURRENT_HOUR=$(date +"%H")
|
|
COUNT_NEW=0
|
|
|
|
for HOUR in $(seq 7 $CURRENT_HOUR); do
|
|
for i in $(seq 0 $((STATION_COUNT - 1))); do
|
|
SID=$(echo "$STATIONS" | jq -r ".items[$i].id")
|
|
TYPE=$(echo "$STATIONS" | jq -r ".items[$i].type")
|
|
TMIN=$(echo "$STATIONS" | jq -r ".items[$i].target_temp_min // 0")
|
|
TMAX=$(echo "$STATIONS" | jq -r ".items[$i].target_temp_max // 0")
|
|
PERSON=${NAMES[$((RANDOM % ${#NAMES[@]}))]}
|
|
MIN=$(rand_between 0 59)
|
|
TIME="$TODAY $(printf "%02d" $HOUR):$(printf "%02d" $MIN):00"
|
|
|
|
if [ "$TYPE" = "hygiene" ] && [ "$HOUR" != "9" ]; then continue; fi
|
|
|
|
RAND=$((RANDOM % 100))
|
|
if [ $RAND -lt 88 ]; then
|
|
TEMP=$(rand_between $TMIN $TMAX)
|
|
create_log "$SID" "$TEMP" "ok" "" "$PERSON" "$TIME"
|
|
elif [ $RAND -lt 96 ]; then
|
|
TEMP=$((TMAX + 1 + RANDOM % 3))
|
|
NOTE=${NOTES_ABW[$((RANDOM % ${#NOTES_ABW[@]}))]}
|
|
create_log "$SID" "$TEMP" "abweichung" "$NOTE" "$PERSON" "$TIME"
|
|
else
|
|
TEMP=$((TMAX + 4 + RANDOM % 4))
|
|
NOTE=${NOTES_KRIT[$((RANDOM % ${#NOTES_KRIT[@]}))]}
|
|
create_log "$SID" "$TEMP" "kritisch" "$NOTE" "$PERSON" "$TIME"
|
|
fi
|
|
COUNT_NEW=$((COUNT_NEW + 1))
|
|
done
|
|
done
|
|
|
|
echo "✓ $COUNT_NEW neue Demo-Einträge erstellt (bis $(printf "%02d" $CURRENT_HOUR):00 Uhr)"
|