diff --git a/shell_ntfy_duplicati.env b/shell_ntfy_duplicati.env index d36faed..eb18b94 100644 --- a/shell_ntfy_duplicati.env +++ b/shell_ntfy_duplicati.env @@ -9,10 +9,20 @@ SERVER_NAME=n100 # NTFY Icon (Optional / Leer lassen falls nicht benötigt) ICON=http://192.168.178.25:3030/icons/n100.png -# Zustände, die Benachrichtigungen auslösen -# (Success, Warning, Error, Fatal, Unknown) -SEND_NOTIFICATIONS="Fatal Error Unknown" +# Backup Rückmeldungen die NTFY Benachrichtigungen auslösen sollen +DUPLICATI_SUCCESS=true +DUPLICATI_WARNING=true +DUPLICATI_ERROR=true +DUPLICATI_FATAL=true +DUPLICATI_UNKNOWN=true + +# Welche NTFY Meldungs Prioritäten sollen mitgeschickt werden. +# Erlaubte Werte: min, low, default, high, max +PRIORITY_SUCCESS=default +PRIORITY_WARNING=high +PRIORITY_ERROR=max +PRIORITY_FATAL=max +PRIORITY_UNKNOWN=max # Wählen Sie das Logging level. Möglich Werte: off, normal, debug -# Die Logdatei wird im gleichen Verzeichnis wie das Script selbst gespeichert. LOGGING=off diff --git a/shell_ntfy_duplicati.sh b/shell_ntfy_duplicati.sh index 70135e3..ce933d7 100644 --- a/shell_ntfy_duplicati.sh +++ b/shell_ntfy_duplicati.sh @@ -1,6 +1,5 @@ #!/bin/bash - LOG_FILE="$(dirname "$(realpath "$0")")/$(basename "$0" .sh).log" # Logdatei im gleichen Verzeichnis wie das Script # Funktion zum Loggen @@ -9,14 +8,11 @@ log_message() { case "$LOGGING" in "off") - # Kein Logging ;; "normal") - # Nur normale Logs (keine Debug-Ausgaben) echo "$timestamp - $1" >> "$LOG_FILE" ;; "debug") - # Logs für Debug und normale Nachrichten echo "$timestamp - [DEBUG] $1" >> "$LOG_FILE" ;; *) @@ -28,7 +24,6 @@ log_message() { # Pfad zur .env-Datei dynamisch ermitteln ENV_FILE="$(dirname "$(realpath "$0")")/$(basename "$0" .sh).env" - # Prüfen, ob die .env-Datei existiert if [[ ! -f "$ENV_FILE" ]]; then LOGGING="debug" @@ -37,11 +32,11 @@ if [[ ! -f "$ENV_FILE" ]]; then exit 1 fi - # .env-Datei laden source "$ENV_FILE" log_message "##################### Script gestartet #####################" +log_message "Duplicati meldet ein beendetes Backup. Zustand: '$DUPLICATI__PARSED_RESULT'." # Alle Umgebungsvariablen ins Log schreiben, nur bei Debug-Level if [[ "$LOGGING" == "debug" ]]; then @@ -49,59 +44,96 @@ if [[ "$LOGGING" == "debug" ]]; then env >> "$LOG_FILE" fi -# Zeitstempel in die Logdatei schreiben -log_message "Duplicati Umgebungsvariable DUPLICATI__PARSED_RESULT: $DUPLICATI__PARSED_RESULT" -log_message "SEND_NOTIFICATIONS Variable aus der .env Datei: $SEND_NOTIFICATIONS" - - -# Umwandeln der SEND_NOTIFICATIONS in ein Array, falls es nicht bereits als Array vorliegt -SEND_NOTIFICATIONS=($SEND_NOTIFICATIONS) - # Funktion zum Überprüfen, ob ein Zustand in der Benachrichtigungsliste enthalten ist should_notify() { local state=$1 - for notify_state in "${SEND_NOTIFICATIONS[@]}"; do - if [[ "$state" == "$notify_state" ]]; then - log_message "Benachrichtigung wird gesendet für den Zustand: $state" - return 0 - fi - done - log_message "Keine Benachrichtigung für den Zustand '$state' erforderlich." - return 1 + local variable + + # Variable basierend auf dem Zustand bestimmen + case "$state" in + "Success") variable="$DUPLICATI_SUCCESS" ;; + "Warning") variable="$DUPLICATI_WARNING" ;; + "Error") variable="$DUPLICATI_ERROR" ;; + "Fatal") variable="$DUPLICATI_FATAL" ;; + "Unknown") variable="$DUPLICATI_UNKNOWN" ;; + *) + log_message "Unbekannter Zustand '$state'. Wert wurde auf 'true' gesetzt." + return 0 # Fallback: Standardmäßig true + ;; + esac + + # Prüfen, ob explizit "false" gesetzt wurde + if [[ "${variable,,}" == "false" ]]; then + return 1 + fi + if [[ "${variable,,}" == "true" ]]; then + return 0 + fi + + # Standardmäßig true für alle anderen Werte + log_message "[ERR] Variable 'DUPLICATI_${DUPLICATI__PARSED_RESULT^^}=$variable' ist unzulässig'" + log_message "[ERR] Überprüfen Sie die Einstellungen zu:" + log_message "[ERR] 'Rückmeldungen die NTFY Benachrichtigungen auslösen sollen'" + log_message "[ERR] Sicherheitshalber wird die Variable auf 'true' gesetzt" + return 0 } +# Funktion, um die Priorität basierend auf dem Zustand zu bestimmen +get_priority() { + local state=$1 + case "$state" in + "Success") + echo "${PRIORITY_SUCCESS:-default}" + ;; + "Warning") + echo "${PRIORITY_WARNING:-high}" + ;; + "Error") + echo "${PRIORITY_ERROR:-max}" + ;; + "Fatal") + echo "${PRIORITY_FATAL:-max}" + ;; + "Unknown") + echo "${PRIORITY_UNKNOWN:-max}" + ;; + *) + log_message "Unbekannter Zustand '$state' für Priorität." + echo "low" + ;; + esac +} # Überprüfen, ob Benachrichtigung gesendet werden soll if should_notify "$DUPLICATI__PARSED_RESULT"; then + PRIORITY=$(get_priority "$DUPLICATI__PARSED_RESULT") + + log_message "NTFY für '$DUPLICATI__PARSED_RESULT' wird gesendet. Priorität: '$PRIORITY'" + case "$DUPLICATI__PARSED_RESULT" in "Success") - PRIORITY="default" TAGS="heavy_check_mark" TITLE="Backup abgeschlossen" MESSAGE="Das Backup wurde erfolgreich abgeschlossen" ;; "Warning") - PRIORITY="medium" TAGS="warning" TITLE="Backup abgeschlossen mit Warnungen" MESSAGE="Das Backup wurde abgeschlossen, aber es gab Warnungen" ;; "Error") - PRIORITY="high" TAGS="x" TITLE="Backup fehlgeschlagen" MESSAGE="Es gab ein Problem beim Erstellen des Backups" ;; "Fatal") - PRIORITY="urgent" TAGS="skull" TITLE="Schwerwiegender Fehler beim Backup" MESSAGE="Das Backup konnte aufgrund eines schwerwiegenden Fehlers nicht abgeschlossen werden" ;; *) - PRIORITY="low" TAGS="question" TITLE="Unbekannter Zustand" MESSAGE="Der Zustand des Backups ist unbekannt" @@ -113,13 +145,12 @@ if should_notify "$DUPLICATI__PARSED_RESULT"; then -H \"Authorization: Bearer $AUTH_TOKEN\" \ -H \"Priority: $PRIORITY\" \ -H \"Tags: $TAGS\"" - if [ -n "$ICON" ]; then + if [ -n "$ICON" ]; then CURL_CMD="$CURL_CMD -H \"Icon: $ICON\"" - fi - CURL_CMD="$CURL_CMD -H \"Content-Type: application/json\" \ + fi + CURL_CMD="$CURL_CMD -H \"Content-Type: application/json\" \ -d '{\"topic\": \"Duplicati\", \"title\": \"$TITLE\", \"message\": \"$MESSAGE\\n\\nServer: $SERVER_NAME\\nJobname: $DUPLICATI__backup_name\\nStatus: $DUPLICATI__PARSED_RESULT\", \"click\": \"\", \"actions\": [{ \"action\": \"view\", \"label\": \"Duplicati öffnen\", \"url\": \"$DUPLICATI_URL\" }]}'" - # Log den curl-Befehl if [[ "$LOGGING" == "debug" ]]; then log_message "curl Befehl: $CURL_CMD" @@ -127,6 +158,10 @@ if should_notify "$DUPLICATI__PARSED_RESULT"; then # Benachrichtigung senden /bin/bash -c "$CURL_CMD" +else + log_message "Keine NTFY Benachrichtigung für den Zustand '$DUPLICATI__PARSED_RESULT' erwünscht." fi +log_message "########################### ENDE ##########################" + exit 0