34 lines
1005 B
Bash
Executable File
34 lines
1005 B
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
NTFY_SCRIPT="${NTFY_SCRIPT:-/mnt/user/services/homelab-infra/ops/restore-tests/send-ntfy.sh}"
|
|
NTFY_TOPIC="${NTFY_TOPIC:-homelab-alerts}"
|
|
SEND_NTFY="${SEND_NTFY:-1}"
|
|
OUTPUT_PATH="${OUTPUT_PATH:-/mnt/user/services/posture-check/docker-critical-events-last.log}"
|
|
EVENT_FILTERS="${EVENT_FILTERS:---filter event=die --filter event=oom --filter event=kill}"
|
|
|
|
mkdir -p "$(dirname "$OUTPUT_PATH")"
|
|
|
|
send_event() {
|
|
local line="$1"
|
|
local timestamp
|
|
timestamp="$(date -Iseconds)"
|
|
|
|
printf '%s %s\n' "$timestamp" "$line" | tee -a "$OUTPUT_PATH" >/dev/null
|
|
|
|
if [ "$SEND_NTFY" = "1" ] && [ -f "$NTFY_SCRIPT" ]; then
|
|
bash "$NTFY_SCRIPT" "$NTFY_TOPIC" "Docker critical event" "$line" high || true
|
|
fi
|
|
}
|
|
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
echo "docker command not found" >&2
|
|
exit 127
|
|
fi
|
|
|
|
# shellcheck disable=SC2086
|
|
docker events $EVENT_FILTERS --format '{{json .}}' | while IFS= read -r event; do
|
|
[ -n "$event" ] || continue
|
|
send_event "$event"
|
|
done
|