#!/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