Merge branch 'main' of https://git.tobisniceshomelab.ddnsfree.com/Hitonabi/mission-control-v2
This commit is contained in:
Executable
+90
@@ -0,0 +1,90 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# curator-monitor.sh
|
||||||
|
# Prüft den Curator-Idle-Status mit 7-Tage-Schwellenwert.
|
||||||
|
# GIBT AUS: PASS oder FAIL mit Detaillierung.
|
||||||
|
# EXIT 0 = OK (Curator aktiv innerhalb von 7 Tagen)
|
||||||
|
# EXIT 1 = FAIL (Curator >7 Tage idle) –Monitoring-Skript erkannt Problem
|
||||||
|
#
|
||||||
|
# --dry-run DAYS Simuliert eine >DAYS-alte Curator-Auszeit (für Tests)
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
LOG_DIR="/home/hitonabi/.hermes/logs/curator"
|
||||||
|
LOG_FILE="$LOG_DIR/monitor-$(date +%Y%m%d).log"
|
||||||
|
THRESHOLD_DAYS=7
|
||||||
|
|
||||||
|
mkdir -p "$LOG_DIR"
|
||||||
|
|
||||||
|
log() {
|
||||||
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Argumente parsen ---
|
||||||
|
DRY_RUN=false
|
||||||
|
DRY_RUN_DAYS=""
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
--dry-run)
|
||||||
|
DRY_RUN=true
|
||||||
|
if [[ -n "${2:-}" && "$2" =~ ^[0-9]+$ ]]; then
|
||||||
|
DRY_RUN_DAYS="$2"
|
||||||
|
shift
|
||||||
|
else
|
||||||
|
DRY_RUN_DAYS=8 # Default-Testwert
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# --- LIVE-PRÜFUNG oder DRY-RUN ---
|
||||||
|
if [[ "$DRY_RUN" == "true" ]]; then
|
||||||
|
log "DRY-RUN: Simuliere Curator-Auszeit von $DRY_RUN_DAYS Tagen"
|
||||||
|
DAYS_SINCE_LAST_RUN="$DRY_RUN_DAYS"
|
||||||
|
else
|
||||||
|
# Live-Status abfragen
|
||||||
|
STATUS_OUTPUT=$(hermes curator status 2>&1) || {
|
||||||
|
log "FEHLER: hermes curator status fehlgeschlagen"
|
||||||
|
echo "FAIL: hermes curator status fehlgeschlagen"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Prüfen, ob Curator ENABLED ist
|
||||||
|
if ! echo "$STATUS_OUTPUT" | grep -q "^curator: ENABLED$"; then
|
||||||
|
log "INFO: Curator ist nicht ENABLED → überspringe Prüfung"
|
||||||
|
echo "PASS: Curator ist nicht ENABLED (keine Aktivität nötig)"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Letzten Lauf extrahieren
|
||||||
|
LAST_RUN_LINE=$(echo "$STATUS_OUTPUT" | grep "^ last run:" | head -1)
|
||||||
|
if [[ -z "$LAST_RUN_LINE" ]]; then
|
||||||
|
log "FEHLER: Konnte 'last run' nicht aus Status extrahieren"
|
||||||
|
echo "FAIL: Konnte 'last run' nicht extrahieren"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
LAST_RUN_TEXT=$(echo "$LAST_RUN_LINE" | sed 's/^ last run: *//')
|
||||||
|
log "Letzter Curator-Lauf: $LAST_RUN_TEXT"
|
||||||
|
|
||||||
|
# Tage extrahieren
|
||||||
|
if [[ "$LAST_RUN_TEXT" =~ ([0-9]+)d\ ago ]]; then
|
||||||
|
DAYS_SINCE_LAST_RUN="${BASH_REMATCH[1]}"
|
||||||
|
else
|
||||||
|
log "INFO: Kein 'd ago' gefunden (möglicherweise <1d oder nie gelaufen)"
|
||||||
|
echo "PASS: Curator ist aktuell aktiv oder <1 Tag idle"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "Tage seit letztem Lauf: $DAYS_SINCE_LAST_RUN"
|
||||||
|
|
||||||
|
# --- MONITORING-LOGIK (keine Reaktivierung!) ---
|
||||||
|
if (( DAYS_SINCE_LAST_RUN < THRESHOLD_DAYS )); then
|
||||||
|
log "INFO: Curator ist innerhalb des erlaubten Intervalls ($DAYS_SINCE_LAST_RUN < $THRESHOLD_DAYS Tage)"
|
||||||
|
echo "PASS: Curator ist aktiv ($DAYS_SINCE_LAST_RUN Tage idle)"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
log "WARNUNG: Curator ist für $DAYS_SINCE_LAST_RUN Tage idle (>= $THRESHOLD_DAYS)"
|
||||||
|
echo "FAIL: Curator-Cron ist für $DAYS_SINCE_LAST_RUN Tage stumm (>= $THRESHOLD_DAYS-Tage-Schwellenwert)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user