From 76d2d7c74bccd79b50953986fa9997c628d4851a Mon Sep 17 00:00:00 2001 From: Tobi Date: Sun, 2 Aug 2026 04:04:21 +0200 Subject: [PATCH] deploy: neues Curator-Monitoring-Skript mit 7-Tage-Schwellenwert --- deploy/curator-monitor.sh | 90 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100755 deploy/curator-monitor.sh diff --git a/deploy/curator-monitor.sh b/deploy/curator-monitor.sh new file mode 100755 index 0000000..e3374b5 --- /dev/null +++ b/deploy/curator-monitor.sh @@ -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