36 lines
1.3 KiB
Bash
36 lines
1.3 KiB
Bash
#!/bin/bash
|
|
# /usr/local/bin/duo-agent-poller.sh
|
|
# Sub-Agent Poller: Prüft alle 10s tasks/offen auf eigene (oder "beliebig") Tasks.
|
|
# Nutzung: duo-agent-poller.sh <MEINE-ZT-IP> <MEINE-AGENT-ID>
|
|
set -euo pipefail
|
|
|
|
TASKS="/srv/work/tasks"
|
|
MEINE_IP="${1:?Meine ZT-IP fehlt}"
|
|
MEINE_ID="${2:?Meine Agent-ID fehlt}"
|
|
|
|
# Suffix: letzte 2 Oktette der ZT-IP (z.B. 172.24.34.142 -> "34.142" als Präfix)
|
|
OCT=$(echo "$MEINE_IP" | awk -F. '{print $3"."$4}')
|
|
|
|
for f in "$TASKS/offen"/*.json; do
|
|
[ -f "$f" ] || continue
|
|
ZIEL=$(python3 -c "import json;print(json.load(open('$f')).get('ziel_agent',''))" 2>/dev/null || echo "")
|
|
# Nur Tasks für mich oder "beliebig" greifen
|
|
if [ "$ZIEL" = "$MEINE_ID" ] || [ "$ZIEL" = "beliebig" ]; then
|
|
# Atomarer Lock: mv/rename gewinnt, konfliktfrei auf NFS.
|
|
NEW="$TASKS/in_arbeit/${OCT}_$(basename "$f")"
|
|
if mv "$f" "$NEW" 2>/dev/null; then
|
|
python3 - "$NEW" "$MEINE_ID" << 'PYEOF'
|
|
import json, sys, time
|
|
f, agent = sys.argv[1], sys.argv[2]
|
|
t = json.load(open(f))
|
|
t["status"] = "in_arbeit"
|
|
t["in_arbeit_ts"] = str(int(time.time()))
|
|
t["bearbeiter"] = agent
|
|
json.dump(t, open(f, "w"), indent=2)
|
|
print(f"Uebernommen: {t['task_id']} von {agent}")
|
|
PYEOF
|
|
# Bearbeitungslogik ist agentenspezifisch — hier einhängen.
|
|
fi
|
|
fi
|
|
done
|