feat(import): user-extensible BOR_IMPORT_EXTENSIONS — any well-formed extension, A9 family stays the default
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
# UPTIME-PROBE-SENTINEL-9c2f — phase 56 fixture marker: this token exists
|
||||
# nowhere else, so the extension_kb rows are unambiguous in the shared DB.
|
||||
#
|
||||
# uptime.sh — homelab service probe: polls the core services and posts a
|
||||
# ntfy alert on the first failure. A novel (.sh) file on purpose — it
|
||||
# only imports when BOR_IMPORT_EXTENSIONS names the sh extension.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
ALERT_TOPIC="homelab-alerts"
|
||||
NTFY_URL="https://ntfy.reeseapps.com"
|
||||
CHECKS=(
|
||||
"k3s|https://10.0.1.10:6443/healthz"
|
||||
"gitlab|https://gitlab.reeseapps.com/-/health_check"
|
||||
"ntfy|https://ntfy.reeseapps.com/health"
|
||||
)
|
||||
|
||||
probe() {
|
||||
local name="$1" url="$2"
|
||||
curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$url"
|
||||
}
|
||||
|
||||
main() {
|
||||
local line name code
|
||||
for line in "${CHECKS[@]}"; do
|
||||
name="${line%%|*}"
|
||||
code="$(probe "$name" "${line#*|}")"
|
||||
if [[ "$code" != "200" ]]; then
|
||||
echo "uptime: $name answered $code (expected 200)" >&2
|
||||
curl -s -X POST "$NTFY_URL/$ALERT_TOPIC" \
|
||||
-H "Title: homelab check failed" \
|
||||
-d "$name is down (HTTP $code)"
|
||||
fi
|
||||
done
|
||||
echo "uptime: round complete"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user