55 lines
1.8 KiB
Bash
55 lines
1.8 KiB
Bash
#!/bin/bash
|
|
# Master-Task-Handler: verifiziert & validiert Tasks im Mesh-Share automatisch.
|
|
# Läuft via Cron: */5 * * * * /path/scripts/master-task-handler.sh
|
|
# Quelle /srv/work — Status=Ordnermodell (todo/inProgress/finished/bugged/completed)
|
|
|
|
set -euo pipefail
|
|
|
|
WORK="/srv/work"
|
|
TODO="$WORK/todo"
|
|
INPROG="$WORK/inProgress"
|
|
FIN="$WORK/finished"
|
|
BUG="$WORK/bugged"
|
|
COMP="$WORK/completed"
|
|
LOCK_TIMEOUT=15 # Minuten
|
|
STALE_TIMEOUT=30 # Minuten
|
|
|
|
mkdir -p "$TODO" "$INPROG" "$FIN" "$BUG" "$COMP"
|
|
|
|
# 1) Verwaiste Locks bereinigen (>15 min)
|
|
find "$INPROG" -name "*.lock" -mmin +$LOCK_TIMEOUT -delete 2>/dev/null || true
|
|
|
|
# 2) Stale Dateien in inProgress (ohne Lock, >30 min) -> zurück nach todo
|
|
for f in "$INPROG"/*.md "$INPROG"/*.json; do
|
|
[ -f "$f" ] || continue
|
|
[ -f "$f.lock" ] && continue
|
|
if [ "$(find "$f" -mmin +$STALE_TIMEOUT 2>/dev/null | wc -l)" -gt 0 ]; then
|
|
mv "$f" "$TODO/" 2>/dev/null && echo "[$(date)] stale -> todo: $f"
|
|
fi
|
|
done
|
|
|
|
# 3) finished/ validieren (Frontmatter + # Ergebnis)
|
|
for f in "$FIN"/*.md; do
|
|
[ -f "$f" ] || continue
|
|
if ! head -20 "$f" | grep -q "^---$" || ! grep -q "^# Ergebnis" "$f"; then
|
|
mv "$f" "$BUG/" 2>/dev/null && echo "[$(date)] formatfehler -> bugged: $f"
|
|
continue
|
|
fi
|
|
# Optional: Artefakt in completed/ spiegeln
|
|
# cp "$f" "$COMP/$(basename "$f")"
|
|
done
|
|
|
|
# 4) bugged/ Retry-Buchhaltung (YAML: retries)
|
|
for f in "$BUG"/*.md; do
|
|
[ -f "$f" ] || continue
|
|
retries=$(grep -m1 "^retries:" "$f" 2>/dev/null | awk '{print $2}' || echo 0)
|
|
retries=${retries:-0}
|
|
if [ "$retries" -gt 0 ]; then
|
|
new=$((retries - 1))
|
|
sed -i "s/^retries: .*/retries: $new/" "$f"
|
|
mv "$f" "$TODO/" 2>/dev/null && echo "[$(date)] retry($new) -> todo: $f"
|
|
else
|
|
echo "[$(date)] bleibt in bugged (retries=0): $f"
|
|
fi
|
|
done
|