diff --git a/scripts/export-healthcheck.sh b/scripts/export-healthcheck.sh new file mode 100755 index 0000000..acd9ea6 --- /dev/null +++ b/scripts/export-healthcheck.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# +# Health check for the scheduled daily export (see deploy/systemd/). Inspects the +# systemd service result + today's export log and sends a one-line German Telegram +# summary via ~/.claude/notify.sh. Meant to be run a few hours after the 03:30 timer. +set -uo pipefail +export PATH="/usr/local/bin:/usr/bin:/bin" + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +LOG_DIR="$REPO_ROOT/runtime/logs" +notify() { "$HOME/.claude/notify.sh" "$1" >/dev/null 2>&1 || true; } + +# 1. Was the timer ever installed? +if ! systemctl cat ctrader-export.service >/dev/null 2>&1; then + notify "cTrader-Check: Timer war NICHT installiert -> kein 3:30-Lauf. sudo-Install nachholen (deploy/systemd/README.md)." + exit 0 +fi + +result=$(systemctl show ctrader-export.service -p Result --value 2>/dev/null) + +# 2. Did a run actually happen today? (cron-export.sh writes one log per run.) +todays_log=$(find "$LOG_DIR" -name 'export-*.log' -newermt 'today 00:00' 2>/dev/null | sort | tail -1) +if [[ -z "$todays_log" ]]; then + notify "cTrader-Check: Timer installiert, aber HEUTE kein Export-Log -> 3:30-Lauf fand nicht statt (Maschine um 3:30 aus? Service-Result=$result)." + exit 0 +fi + +logname=$(basename "$todays_log") +banner=$(grep "Done" "$todays_log" | tail -1) +aborts=$(grep -c "ABORT" "$todays_log" 2>/dev/null); aborts=${aborts:-0} +fresh=$(find /mnt/tickdata/Pepperstone -maxdepth 1 -name '*.m1' -newermt 'today 02:00' 2>/dev/null | wc -l) + +# 3. Verdict +if (( aborts > 0 )); then + reason=$(grep "ABORT" "$todays_log" | tail -1 | sed 's/.*ABORT: //; s/ Stopping.*//') + notify "cTrader-Check: Lauf ABGEBROCHEN -> ${reason:-unbekannt} (Log $logname)." +elif [[ -n "$banner" ]]; then + notify "cTrader-Check: 3:30-Lauf OK -- ${banner##*— } | $fresh frische Dateien." +else + notify "cTrader-Check: Lauf unklar (Result=$result, $fresh frische Dateien) -- Log $logname pruefen." +fi