healthcheck auf HTTP mit Custom URL umgestellt.

This commit is contained in:
scriptos 2025-10-27 19:45:26 +01:00
parent 7cbd5cd5be
commit 61ebf046b8

View File

@ -5,9 +5,9 @@
# Synapse: https://git.techniverse.net/scriptos/livekit-ip-watch.git
# Autor: Patrick Asmus
# Web: https://www.cleveradmin.de
# Version: 1.0
# Version: 1.1
# Datum: 27.10.2025
# Modifikation: Initial
# Modifikation: healthcheck auf HTTP mit Custom URL umgestellt.
#####################################################
set -euo pipefail
@ -35,9 +35,8 @@ ENABLE_IPV6=false
# Wartezeit nach Neustart (Sekunden), dann Healthcheck
WAIT_AFTER_RESTART=20
# Healthcheck-Konfiguration: nur TCP
TCP_HOST="127.0.0.1"
TCP_PORT="7881"
# Healthcheck-Konfiguration: HTTP
HEALTHCHECK_DOMAIN="rtc.matrix.techniverse.net"
HEALTHCHECK_TIMEOUT=3
# ntfy (optional)
@ -139,45 +138,36 @@ update_yaml_fallback() {
local tmp
tmp="$(mktemp)"
awk -v newcidr="$cidr" '
BEGIN{ in_rtc=0; in_ips=0; ips_indent=""; printed_ips=0 }
function print_ips_block() {
if (!printed_ips) {
print " ips:"
print " includes:"
print " - " newcidr
printed_ips=1
}
}
BEGIN{ in_rtc=0; in_ips=0; in_includes=0; injected=0 }
{
line=$0
if ($0 ~ /^[[:space:]]*rtc:[[:space:]]*$/) { in_rtc=1; in_ips=0; ips_indent=""; print; next }
if (in_rtc) {
if (in_ips) {
if (ips_indent=="" ) { next }
if ($0 ~ "^" ips_indent "[^[:space:]]") { next }
in_ips=0
print_ips_block()
if ($0 ~ /^[[:space:]]*rtc:[[:space:]]*$/) { in_rtc=1; in_ips=0; in_includes=0 }
else if (in_rtc && $0 ~ /^[[:space:]]*[[:alnum:]_]+:[[:space:]]*$/ && $0 !~ /^[[:space:]]*ips:/) {
if (!in_ips && !in_includes && !injected) {
print " ips:"
print " includes:"
print " - " newcidr
injected=1
}
if ($0 ~ /^[[:space:]]{2}ips:[[:space:]]*$/) {
in_ips=1
match($0,/^([[:space:]]*)ips:/,m)
ips_indent=m[1]" "
}
if (in_rtc && $0 ~ /^[[:space:]]*ips:[[:space:]]*$/) { in_ips=1; in_includes=0 }
if (in_ips && $0 ~ /^[[:space:]]*includes:[[:space:]]*$/) { in_includes=1; next }
if (in_includes) {
if ($0 ~ /^[[:space:]]*-[[:space:]]*[^[:space:]]+/) {
next
} else {
if (!injected) {
print " - " newcidr
injected=1
}
in_includes=0
in_ips=($0 ~ /^[[:space:]]*ips:/)?1:0
}
if ($0 ~ /^[[:space:]]{2}[[:alnum:]_]+:[[:space:]]*$/) {
if (!printed_ips) { print_ips_block() }
}
if ($0 ~ /^[[:alnum:]_]+:[[:space:]]*$/) {
if (!printed_ips && in_rtc) { print_ips_block() }
in_rtc=0
}
print line
next
}
print line
}
END{
if (in_rtc && !printed_ips) {
if (in_rtc && !injected) {
print " ips:"
print " includes:"
print " - " newcidr
@ -208,16 +198,9 @@ restart_service() {
fi
}
healthcheck_tcp() {
if (exec 3<>/dev/tcp/"$TCP_HOST"/"$TCP_PORT") 2>/dev/null; then
exec 3<&-
exec 3>&-
return 0
elif command -v nc >/dev/null 2>&1; then
nc -z -w "$HEALTHCHECK_TIMEOUT" "$TCP_HOST" "$TCP_PORT"
else
return 1
fi
healthcheck_http() {
local url="https://${HEALTHCHECK_DOMAIN}/livekit/sfu/"
curl -fsS --max-time "$HEALTHCHECK_TIMEOUT" "$url" >/dev/null
}
main() {
@ -272,7 +255,7 @@ main() {
info "Warte $WAIT_AFTER_RESTART Sekunden..."
sleep "$WAIT_AFTER_RESTART"
if healthcheck_tcp; then
if healthcheck_http; then
info "Healthcheck OK."
echo "$current_ip" > "$state_file"
notify "info" "IP geändert auf $current_ip, Dienst gesund."
@ -289,7 +272,7 @@ main() {
info "Warte $WAIT_AFTER_RESTART Sekunden (Rollback)..."
sleep "$WAIT_AFTER_RESTART"
if healthcheck_tcp; then
if healthcheck_http; then
warn "Rollback erfolgreich. System läuft wieder mit alter Konfiguration."
notify "warn" "Rollback erfolgreich. Bitte prüfen. Alte IP bleibt ${last_ip:-unbekannt}."
exit 10