add function to remove old entries
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 18s
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 18s
This commit is contained in:
@@ -4,15 +4,12 @@ CONFIG_DIR="/config"
|
||||
CONFIG_FILE="$CONFIG_DIR/watchdog.conf"
|
||||
STATE_FILE="$CONFIG_DIR/watch_state.json"
|
||||
|
||||
# Initialisierung: Existiert die Datei UND ist sie valides JSON?
|
||||
# Falls nein (oder leer/korrupt), schreiben wir {} hinein.
|
||||
if [ ! -f "$STATE_FILE" ] || ! jq -e . "$STATE_FILE" >/dev/null 2>&1; then
|
||||
echo "⚠️ State-Datei war ungültig oder leer. Setze Reset auf {}."
|
||||
echo "{}" > "$STATE_FILE"
|
||||
fi
|
||||
|
||||
while true; do
|
||||
# 1. Config laden
|
||||
if [ -f "$CONFIG_FILE" ]; then
|
||||
source "$CONFIG_FILE"
|
||||
else
|
||||
@@ -20,8 +17,6 @@ while true; do
|
||||
sleep 60; continue
|
||||
fi
|
||||
|
||||
# 2. HIER NEU: msmtp Konfiguration IMMER neu schreiben
|
||||
# Damit ist sie immer verfügbar für Tests und Updates
|
||||
cat <<EOF > /etc/msmtprc
|
||||
defaults
|
||||
auth on
|
||||
@@ -47,7 +42,6 @@ EOF
|
||||
IFS="|" read -r TYPE REPO EXTRA <<< "$entry"
|
||||
KEY="${TYPE}_${REPO//[\/\.]/_}_${EXTRA}"
|
||||
|
||||
# Aktuellen Wert aus Datei lesen
|
||||
OLD_VAL=$(jq -r ".[\"$KEY\"] // empty" "$STATE_FILE")
|
||||
NEW_VAL=""
|
||||
|
||||
@@ -96,7 +90,6 @@ EOF
|
||||
continue
|
||||
fi
|
||||
|
||||
# Logik: Wenn kein alter Wert da ist ODER der neue Wert anders ist
|
||||
if [ -z "$OLD_VAL" ] || [ "$OLD_VAL" != "$NEW_VAL" ]; then
|
||||
if [ -z "$OLD_VAL" ]; then
|
||||
echo " 🆕 Erstaufnahme in Datenbank."
|
||||
@@ -105,19 +98,16 @@ EOF
|
||||
UPDATES_FOUND="${UPDATES_FOUND}Update fuer $REPO ($EXTRA)\n"
|
||||
fi
|
||||
|
||||
# Wir generieren das neue JSON
|
||||
NEW_JSON_CONTENT=$(jq ".[\"$KEY\"] = \"$NEW_VAL\"" "$STATE_FILE" 2>&1)
|
||||
JQ_EXIT_CODE=$?
|
||||
|
||||
if [ $JQ_EXIT_CODE -eq 0 ] && [ -n "$NEW_JSON_CONTENT" ]; then
|
||||
# Nur schreiben, wenn jq Erfolg hatte UND Inhalt da ist
|
||||
echo "$NEW_JSON_CONTENT" > "${STATE_FILE}.tmp" && mv "${STATE_FILE}.tmp" "$STATE_FILE"
|
||||
echo " 💾 gespeichert."
|
||||
else
|
||||
echo " ❌ FEHLER BEIM SPEICHERN!"
|
||||
echo " jq Exit Code: $JQ_EXIT_CODE"
|
||||
echo " jq Output: $NEW_JSON_CONTENT"
|
||||
# Notfall-Reset, falls die Datei korrupt ist, damit es beim nächsten Mal wieder geht
|
||||
if ! jq -e . "$STATE_FILE" >/dev/null 2>&1; then
|
||||
echo "{}" > "$STATE_FILE"
|
||||
fi
|
||||
@@ -127,7 +117,18 @@ EOF
|
||||
fi
|
||||
done
|
||||
|
||||
# E-Mail Versand
|
||||
echo "Säubere veraltete Einträge aus der Datenbank..."
|
||||
VALID_KEYS=()
|
||||
for entry in "${TARGETS[@]}"; do
|
||||
IFS="|" read -r TYPE REPO EXTRA <<< "$entry"
|
||||
VALID_KEYS+=("${TYPE}_${REPO//[\/\.]/_}_${EXTRA}")
|
||||
done
|
||||
VALID_KEYS_JSON=$(printf '%s\n' "${VALID_KEYS[@]}" | jq -R . | jq -s .)
|
||||
CLEAN_JSON=$(jq "with_entries(select(.key as \$k | $VALID_KEYS_JSON | index(\$k)))" "$STATE_FILE")
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "$CLEAN_JSON" > "${STATE_FILE}.tmp" && mv "${STATE_FILE}.tmp" "$STATE_FILE"
|
||||
fi
|
||||
|
||||
if [ -n "$UPDATES_FOUND" ]; then
|
||||
echo " 📧 Versuche E-Mail zu senden an $EMAIL_TO..."
|
||||
if echo -e "Subject: Watchdog Alert\n\n$UPDATES_FOUND" | timeout 20s msmtp --debug "$EMAIL_TO" 2>&1; then
|
||||
|
||||
Reference in New Issue
Block a user