From bcb426a8033938e7b6e5dbad0e629f34ba4b2c1e Mon Sep 17 00:00:00 2001 From: Thorsten Date: Sat, 21 Dec 2024 14:32:50 +0100 Subject: [PATCH] logging --- README.md | 13 ++++----- shell_ntfy_duplicati.sh | 63 ++++++++++++++++++++++++++++++++++------- 2 files changed, 58 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index a94cfb4..401f5d5 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Dieses Bash-Skript sendet Benachrichtigungen basierend auf dem Ergebnis eines Du ## Verwendung ### 1. Konfiguration -1. Platzieren Sie das Skript und eine .env-Datei im gleichen Verzeichnis. Die .env-Datei muss denselben Namen wie das Skript haben, jedoch mit der Endung `.env` (z. B. `shell_ntfy_duplicaty.sh` und `shell_ntfy_duplicaty.env`). +1. Platzieren Sie das Skript und eine .env-Datei im gleichen Verzeichnis. Die .env-Datei muss denselben Namen wie das Skript haben, jedoch mit der Endung `.env` (z. B. `shell_ntfy_duplicati.sh` und `shell_ntfy_duplicati.env`). ```bash # NTFY Server @@ -32,16 +32,15 @@ SEND_NOTIFICATIONS="Fatal Unknown" # Optional kann bei jedem Ausführen des Scripts ein Logeintrag erstellt werden. # Die Logdatei wird im gleichen Verzeichnis wie das Script selbst gespeichert. -# Vermerkt werden der Inhalt der $DUPLICATI__PARSED_RESULT-Variable -# und der daraus resultierende cURL-Befehl. -LOGGING=false +# (off, normal, debug) +LOGGING=off ``` 3. Setzen Sie die korrekten Dateiberechtigungen, um die Sicherheit zu gewährleisten und das Script ausführbar zu machen: ```bash -chmod 700 shell_ntfy_duplicaty.sh -chmod 600 shell_ntfy_duplicaty.env -chmod +x shell_ntfy_duplicaty.sh +chmod 700 shell_ntfy_duplicati.sh +chmod 600 shell_ntfy_duplicati.env +chmod +x shell_ntfy_duplicati.sh ``` ### 2. Zustände diff --git a/shell_ntfy_duplicati.sh b/shell_ntfy_duplicati.sh index 1b4175b..3e8a03e 100644 --- a/shell_ntfy_duplicati.sh +++ b/shell_ntfy_duplicati.sh @@ -1,40 +1,77 @@ #!/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") + # 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" + ;; + *) + 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_FILE="$(dirname "$(realpath "$0")")/$(basename "$0" .sh).log" # Logdatei im gleichen Verzeichnis wie das Script +log_message "##################### Script gestartet #####################" + +# Alle Umgebungsvariablen ins Log schreiben, nur bei Debug-Level +if [[ "$LOGGING" == "debug" ]]; then + log_message "Umgebungsvariablen von Duplicati:" + 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 } -# Funktion zum Loggen -log_message() { - if [[ "$LOGGING" == true ]]; then - timestamp=$(date +"%Y-%m-%d %H:%M:%S") - echo "$timestamp - $1" >> "$LOG_FILE" - fi -} -# Zeitstempel in die Logdatei schreiben -log_message "Script aufgerufen. DUPLICATI__PARSED_RESULT: $DUPLICATI__PARSED_RESULT" + # Überprüfen, ob Benachrichtigung gesendet werden soll if should_notify "$DUPLICATI__PARSED_RESULT"; then @@ -82,7 +119,11 @@ if should_notify "$DUPLICATI__PARSED_RESULT"; then " # Log den curl-Befehl - log_message "curl Befehl: $CURL_CMD" + + + if [[ "$LOGGING" == "debug" ]]; then + log_message "curl Befehl: $CURL_CMD" + fi # Benachrichtigung senden /bin/bash -c "$CURL_CMD"