#!/bin/bash # /usr/local/bin/duo-master-poller.sh # Master (Agent A): Erkennt unerledigte Tasks nach 3 verpassten Polling-Zyklen (30s) # und markiert ziel_agent als "beliebig" (original_ziel_agent bleibt erhalten). # Nur Master darf diesen Ausfall-Fallback triggern. set -euo pipefail TASKS="/srv/work/tasks" VERPASST=30 # Sekunden, nach denen ein Task als übersehen gilt (3 Zyklen à 10s) NOW=$(date +%s) for f in "$TASKS/offen"/*.json; do [ -f "$f" ] || continue ANLAGE=$(python3 -c "import json;print(json.load(open('$f')).get('anlage_ts',0))" 2>/dev/null || echo 0) AGE=$(( NOW - ANLAGE )) if [ "$AGE" -gt "$VERPASST" ]; then python3 - "$f" << 'PYEOF' import json, sys f = sys.argv[1] t = json.load(open(f)) if t["status"] == "offen": t["original_ziel_agent"] = t.get("original_ziel_agent", t["ziel_agent"]) t["ziel_agent"] = "beliebig" t["ausfall_umgeleitet"] = True json.dump(t, open(f, "w"), indent=2) print(f"Ausfall-Fallback: {t['task_id']} -> ziel_agent='beliebig' (orig: {t['original_ziel_agent']})") PYEOF fi done