40 lines
1.7 KiB
Bash
40 lines
1.7 KiB
Bash
#!/bin/bash
|
|
# Healthcheck key public services; notify ntfy on failure transitions.
|
|
set -euo pipefail
|
|
|
|
STATE_DIR=/var/lib/nomadro-health
|
|
NOTIFY=/usr/local/bin/notify-ntfy
|
|
mkdir -p "$STATE_DIR"
|
|
|
|
check() {
|
|
local name="$1"
|
|
local cmd="$2"
|
|
local ok=0
|
|
if eval "$cmd" >/dev/null 2>&1; then
|
|
ok=1
|
|
fi
|
|
local state_file="$STATE_DIR/${name}.ok"
|
|
local prev=1
|
|
[[ -f "$state_file" ]] && prev=$(cat "$state_file")
|
|
echo "$ok" >"$state_file"
|
|
if [[ "$ok" -eq 0 && "$prev" -eq 1 ]]; then
|
|
"$NOTIFY" "Service down: $name" "Host $(hostname) — $name failed health check at $(date -u +%Y-%m-%dT%H:%M:%SZ)" high "rotating_light,server" || true
|
|
elif [[ "$ok" -eq 1 && "$prev" -eq 0 ]]; then
|
|
"$NOTIFY" "Service recovered: $name" "Host $(hostname) — $name is healthy again" default "white_check_mark,server" || true
|
|
fi
|
|
}
|
|
|
|
check caddy "systemctl is-active --quiet caddy"
|
|
check docker "systemctl is-active --quiet docker"
|
|
check nomadro "systemctl is-active --quiet nomadro"
|
|
check nomadro-router "systemctl is-active --quiet nomadro-router"
|
|
check wordpress "curl -fsS -o /dev/null http://127.0.0.1:8088/"
|
|
check umami "curl -fsS -o /dev/null http://127.0.0.1:3010/api/heartbeat"
|
|
check ntfy "curl -fsS http://127.0.0.1:2586/v1/health | grep -q healthy"
|
|
check dylive "curl -fsS -o /dev/null -H 'Host: dylive.nomadro.com' http://127.0.0.1:4015/"
|
|
check nomadro-live "curl -fsS -o /dev/null http://127.0.0.1:3015/"
|
|
check wx "curl -fsS -o /dev/null http://127.0.0.1:3000/"
|
|
check public-nomadro "curl -fsS -o /dev/null https://nomadro.com/"
|
|
check public-umami "curl -fsS -o /dev/null https://umami.nomadro.com/api/heartbeat"
|
|
check public-ntfy "curl -fsS https://ntfy.nomadro.com/v1/health | grep -q healthy"
|