monitoring: doorbell-listener heartbeat + systemd timer
This commit is contained in:
+46
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
|
||||
KUMA_BASE="${KUMA_BASE:-https://up.notsosm.art}"
|
||||
TOKEN_FILE="${KUMA_TOKEN_FILE:-/root/nr-flow-validator/infra/.secrets/doorbell-kuma-push-token}"
|
||||
CANARY_TOPIC="${CANARY_TOPIC:-ALERT_klubhaus_health}"
|
||||
CONTAINER="${DB_CONTAINER:-doorbell-listener}"
|
||||
|
||||
[ -s "$TOKEN_FILE" ] || exit 1
|
||||
TOKEN="$(tr -d '[:space:]' < "$TOKEN_FILE")"
|
||||
|
||||
reason=""
|
||||
|
||||
# 1. listener container liveness
|
||||
running=$(docker inspect "$CONTAINER" --format '{{.State.Running}}' 2>/dev/null)
|
||||
if [ "$running" != "true" ]; then
|
||||
reason="container_running=${running:-unknown}"
|
||||
else
|
||||
# 2. ntfy.sh round-trip: publish a unique canary, read it back.
|
||||
# Proves the ntfy.sh leg we depend on (publish + subscribe) works,
|
||||
# without us owning the service.
|
||||
marker="canary-$(date +%s)-$$"
|
||||
url="https://ntfy.sh/${CANARY_TOPIC}"
|
||||
if ! curl -fsS -m 10 -o /dev/null -X POST "$url" -d "$marker" 2>/dev/null; then
|
||||
reason="${reason}ntfy_publish_failed"
|
||||
else
|
||||
sleep 1
|
||||
body=$(curl -fsS -m 10 "$url/json" 2>/dev/null)
|
||||
if [ -z "$body" ] || ! printf '%s' "$body" | grep -qF "$marker"; then
|
||||
reason="${reason}ntfy_echo_missing"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$reason" ]; then
|
||||
status="down"
|
||||
msg="doorbell: ${reason}"
|
||||
else
|
||||
status="up"
|
||||
msg="doorbell ok"
|
||||
fi
|
||||
|
||||
curl -fsS -m 10 -o /dev/null --get \
|
||||
--data-urlencode "status=$status" \
|
||||
--data-urlencode "msg=$msg" \
|
||||
"$KUMA_BASE/api/push/$TOKEN"
|
||||
@@ -0,0 +1,8 @@
|
||||
[Unit]
|
||||
Description=Doorbell listener heartbeat to Uptime Kuma
|
||||
After=docker.service
|
||||
Requires=docker.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/root/nr-flow-validator/infra/doorbell-listener/scripts/kuma-heartbeat.sh
|
||||
@@ -0,0 +1,10 @@
|
||||
[Unit]
|
||||
Description=Run doorbell listener heartbeat every minute
|
||||
|
||||
[Timer]
|
||||
OnCalendar=*-*-* *:*:00
|
||||
AccuracySec=5s
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
Reference in New Issue
Block a user