Files
shell_ntfy_duplicati/shell_ntfy_duplicati.sh
2025-02-20 20:50:23 +01:00

168 lines
5.3 KiB
Bash
Executable File

#!/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