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"
|
CONFIG_FILE="$CONFIG_DIR/watchdog.conf"
|
||||||
STATE_FILE="$CONFIG_DIR/watch_state.json"
|
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
|
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-Datei war ungültig oder leer. Setze Reset auf {}."
|
||||||
echo "{}" > "$STATE_FILE"
|
echo "{}" > "$STATE_FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
# 1. Config laden
|
|
||||||
if [ -f "$CONFIG_FILE" ]; then
|
if [ -f "$CONFIG_FILE" ]; then
|
||||||
source "$CONFIG_FILE"
|
source "$CONFIG_FILE"
|
||||||
else
|
else
|
||||||
@@ -20,8 +17,6 @@ while true; do
|
|||||||
sleep 60; continue
|
sleep 60; continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 2. HIER NEU: msmtp Konfiguration IMMER neu schreiben
|
|
||||||
# Damit ist sie immer verfügbar für Tests und Updates
|
|
||||||
cat <<EOF > /etc/msmtprc
|
cat <<EOF > /etc/msmtprc
|
||||||
defaults
|
defaults
|
||||||
auth on
|
auth on
|
||||||
@@ -47,7 +42,6 @@ EOF
|
|||||||
IFS="|" read -r TYPE REPO EXTRA <<< "$entry"
|
IFS="|" read -r TYPE REPO EXTRA <<< "$entry"
|
||||||
KEY="${TYPE}_${REPO//[\/\.]/_}_${EXTRA}"
|
KEY="${TYPE}_${REPO//[\/\.]/_}_${EXTRA}"
|
||||||
|
|
||||||
# Aktuellen Wert aus Datei lesen
|
|
||||||
OLD_VAL=$(jq -r ".[\"$KEY\"] // empty" "$STATE_FILE")
|
OLD_VAL=$(jq -r ".[\"$KEY\"] // empty" "$STATE_FILE")
|
||||||
NEW_VAL=""
|
NEW_VAL=""
|
||||||
|
|
||||||
@@ -96,7 +90,6 @@ EOF
|
|||||||
continue
|
continue
|
||||||
fi
|
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" ] || [ "$OLD_VAL" != "$NEW_VAL" ]; then
|
||||||
if [ -z "$OLD_VAL" ]; then
|
if [ -z "$OLD_VAL" ]; then
|
||||||
echo " 🆕 Erstaufnahme in Datenbank."
|
echo " 🆕 Erstaufnahme in Datenbank."
|
||||||
@@ -105,19 +98,16 @@ EOF
|
|||||||
UPDATES_FOUND="${UPDATES_FOUND}Update fuer $REPO ($EXTRA)\n"
|
UPDATES_FOUND="${UPDATES_FOUND}Update fuer $REPO ($EXTRA)\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Wir generieren das neue JSON
|
|
||||||
NEW_JSON_CONTENT=$(jq ".[\"$KEY\"] = \"$NEW_VAL\"" "$STATE_FILE" 2>&1)
|
NEW_JSON_CONTENT=$(jq ".[\"$KEY\"] = \"$NEW_VAL\"" "$STATE_FILE" 2>&1)
|
||||||
JQ_EXIT_CODE=$?
|
JQ_EXIT_CODE=$?
|
||||||
|
|
||||||
if [ $JQ_EXIT_CODE -eq 0 ] && [ -n "$NEW_JSON_CONTENT" ]; then
|
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 "$NEW_JSON_CONTENT" > "${STATE_FILE}.tmp" && mv "${STATE_FILE}.tmp" "$STATE_FILE"
|
||||||
echo " 💾 gespeichert."
|
echo " 💾 gespeichert."
|
||||||
else
|
else
|
||||||
echo " ❌ FEHLER BEIM SPEICHERN!"
|
echo " ❌ FEHLER BEIM SPEICHERN!"
|
||||||
echo " jq Exit Code: $JQ_EXIT_CODE"
|
echo " jq Exit Code: $JQ_EXIT_CODE"
|
||||||
echo " jq Output: $NEW_JSON_CONTENT"
|
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
|
if ! jq -e . "$STATE_FILE" >/dev/null 2>&1; then
|
||||||
echo "{}" > "$STATE_FILE"
|
echo "{}" > "$STATE_FILE"
|
||||||
fi
|
fi
|
||||||
@@ -127,7 +117,18 @@ EOF
|
|||||||
fi
|
fi
|
||||||
done
|
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
|
if [ -n "$UPDATES_FOUND" ]; then
|
||||||
echo " 📧 Versuche E-Mail zu senden an $EMAIL_TO..."
|
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
|
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