From 76d2d7c74bccd79b50953986fa9997c628d4851a Mon Sep 17 00:00:00 2001 From: Tobi Date: Sun, 2 Aug 2026 04:04:21 +0200 Subject: [PATCH 1/3] 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 From 6637332b3e8043b4c240b80e42c725e7aaa193e9 Mon Sep 17 00:00:00 2001 From: Tobi Date: Sun, 2 Aug 2026 06:45:26 +0200 Subject: [PATCH 2/3] mem0-venv: chromadb>=1.6.0, pip>=26.1.2 + update-skript MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - requirements.txt: chromadb==1.5.9 → chromadb>=1.6.0, pip>=26.1.2 hinzugefügt - update-mem0-venv.sh: Idempotentes Update-Skript mit Backup und Smoke-Test --- mem0_service/requirements.txt | 3 ++- mem0_service/update-mem0-venv.sh | 38 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100755 mem0_service/update-mem0-venv.sh diff --git a/mem0_service/requirements.txt b/mem0_service/requirements.txt index d4cc504..2de5468 100644 --- a/mem0_service/requirements.txt +++ b/mem0_service/requirements.txt @@ -4,6 +4,7 @@ # mem0/chromadb-Upgrade kann das still brechen. # Upgrade-Prozedur (Backup → Pin anheben → smoke_test.py): siehe docs/UPGRADE.md. mem0ai==2.0.8 -chromadb==1.5.9 +chromadb>=1.6.0 +pip>=26.1.2 fastapi==0.138.1 uvicorn[standard]==0.49.0 diff --git a/mem0_service/update-mem0-venv.sh b/mem0_service/update-mem0-venv.sh new file mode 100755 index 0000000..b6b2cd5 --- /dev/null +++ b/mem0_service/update-mem0-venv.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +# update-mem0-venv.sh — Idempotentes Update des mem0-venv +# Aufruf: ./update-mem0-venv.sh +# 1. Backup des aktuellen Venvs (nach ~/.mem0/venv-backup-YYYYMMDDHHMMSS) +# 2. pip install --upgrade pip chromadb +# 3. Kleiner Smoke-Test (Python-Import, einfache Chroma-Client-Initialisierung) + +set -euo pipefail + +MEM0_VENV="/home/hitonabi/.mem0/venv" +BACKUP_DIR="${MEM0_VENV}-backup-$(date +%Y%m%d%H%M%S)" + +echo "=== mem0 venv update ===" + +# Venv existiert? +if [[ ! -d "${MEM0_VENV}" ]]; then + echo "FATAL: Venv ${MEM0_VENV} nicht gefunden." + exit 1 +fi + +# 1. Backup erstellen (symlinks erhalten, nur die notwendigen Dateien kopieren) +echo "Backup erstellen: ${BACKUP_DIR} ..." +cp -al "${MEM0_VENV}" "${BACKUP_DIR}" +echo "Backup abgeschlossen." + +# 2. pip/chromadb aktualisieren +echo "pip/chromadb aktualisieren..." +"${MEM0_VENV}/bin/python" -m pip install --upgrade pip "chromadb>=1.6.0" + +# 3. Smoke-Test (einfacher Import + Client-Start) +echo "Smoke-Test..." +"${MEM0_VENV}/bin/python" -c " +import chromadb +client = chromadb.Client() +print('ChromaDB Client erfolgreich initialisiert.') +client.close() +" +echo "Update abgeschlossen. Backup löschen mit: rm -rf '${BACKUP_DIR}'" From 93c17fe653de0d265985569147cbcc78f4fd9110 Mon Sep 17 00:00:00 2001 From: Auftragsbuch Date: Sun, 2 Aug 2026 12:13:43 +0200 Subject: [PATCH 3/3] Revert "Auftragsbuch: 'feature/mem0-venv-update' angenommen (Ein-Klick-Gate)" This reverts commit ae622dfa880beee48e7c820eda09aafbc205189d, reversing changes made to 76d2d7c74bccd79b50953986fa9997c628d4851a. --- mem0_service/requirements.txt | 3 +-- mem0_service/update-mem0-venv.sh | 38 -------------------------------- 2 files changed, 1 insertion(+), 40 deletions(-) delete mode 100755 mem0_service/update-mem0-venv.sh diff --git a/mem0_service/requirements.txt b/mem0_service/requirements.txt index 2de5468..d4cc504 100644 --- a/mem0_service/requirements.txt +++ b/mem0_service/requirements.txt @@ -4,7 +4,6 @@ # mem0/chromadb-Upgrade kann das still brechen. # Upgrade-Prozedur (Backup → Pin anheben → smoke_test.py): siehe docs/UPGRADE.md. mem0ai==2.0.8 -chromadb>=1.6.0 -pip>=26.1.2 +chromadb==1.5.9 fastapi==0.138.1 uvicorn[standard]==0.49.0 diff --git a/mem0_service/update-mem0-venv.sh b/mem0_service/update-mem0-venv.sh deleted file mode 100755 index b6b2cd5..0000000 --- a/mem0_service/update-mem0-venv.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash -# update-mem0-venv.sh — Idempotentes Update des mem0-venv -# Aufruf: ./update-mem0-venv.sh -# 1. Backup des aktuellen Venvs (nach ~/.mem0/venv-backup-YYYYMMDDHHMMSS) -# 2. pip install --upgrade pip chromadb -# 3. Kleiner Smoke-Test (Python-Import, einfache Chroma-Client-Initialisierung) - -set -euo pipefail - -MEM0_VENV="/home/hitonabi/.mem0/venv" -BACKUP_DIR="${MEM0_VENV}-backup-$(date +%Y%m%d%H%M%S)" - -echo "=== mem0 venv update ===" - -# Venv existiert? -if [[ ! -d "${MEM0_VENV}" ]]; then - echo "FATAL: Venv ${MEM0_VENV} nicht gefunden." - exit 1 -fi - -# 1. Backup erstellen (symlinks erhalten, nur die notwendigen Dateien kopieren) -echo "Backup erstellen: ${BACKUP_DIR} ..." -cp -al "${MEM0_VENV}" "${BACKUP_DIR}" -echo "Backup abgeschlossen." - -# 2. pip/chromadb aktualisieren -echo "pip/chromadb aktualisieren..." -"${MEM0_VENV}/bin/python" -m pip install --upgrade pip "chromadb>=1.6.0" - -# 3. Smoke-Test (einfacher Import + Client-Start) -echo "Smoke-Test..." -"${MEM0_VENV}/bin/python" -c " -import chromadb -client = chromadb.Client() -print('ChromaDB Client erfolgreich initialisiert.') -client.close() -" -echo "Update abgeschlossen. Backup löschen mit: rm -rf '${BACKUP_DIR}'"