#!/bin/bash LOG_FILE="$(dirname "$(realpath "$0")")/$(basename "$0" .sh).log" # Logdatei im gleichen Verzeichnis wie das Script # Funktion zum Loggen log_message() { timestamp=$(date +"%Y-%m-%d %H:%M:%S") case "$LOGGING" in "off") ;; "normal") echo "$timestamp - $1" >> "$LOG_FILE" ;; "debug") echo "$timestamp - [DEBUG] $1" >> "$LOG_FILE" ;; *) echo "Ungültiges Logging-Level: $LOGGING" >> "$LOG_FILE" ;; esac } # 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" echo "Fehler: Konfigurationsdatei $ENV_FILE nicht gefunden." log_message "Fehler: Konfigurationsdatei $ENV_FILE nicht gefunden." 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 log_message "Umgebungsvariablen von Duplicati:" env >> "$LOG_FILE" fi # Funktion zum Überprüfen, ob ein Zustand in der Benachrichtigungsliste enthalten ist should_notify() { local state=$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") TAGS="heavy_check_mark" TITLE="Backup abgeschlossen" MESSAGE="Das Backup wurde erfolgreich abgeschlossen" ;; "Warning") TAGS="warning" TITLE="Backup abgeschlossen mit Warnungen" MESSAGE="Das Backup wurde abgeschlossen, aber es gab Warnungen" ;; "Error") TAGS="x" TITLE="Backup fehlgeschlagen" MESSAGE="Es gab ein Problem beim Erstellen des Backups" ;; "Fatal") TAGS="skull" TITLE="Schwerwiegender Fehler beim Backup" MESSAGE="Das Backup konnte aufgrund eines schwerwiegenden Fehlers nicht abgeschlossen werden" ;; *) TAGS="question" TITLE="Unbekannter Zustand" MESSAGE="Der Zustand des Backups ist unbekannt" ;; esac # curl Befehl vorbereiten CURL_CMD="curl -s -X POST \"$NTFY_URL\" \ -H \"Authorization: Bearer $AUTH_TOKEN\" \ -H \"Priority: $PRIORITY\" \ -H \"Tags: $TAGS\"" if [ -n "$ICON" ]; then CURL_CMD="$CURL_CMD -H \"Icon: $ICON\"" 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" fi # 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