diff --git a/package/sentinèlla/default.nix b/package/sentinèlla/default.nix index f1aed70..a845a96 100644 --- a/package/sentinèlla/default.nix +++ b/package/sentinèlla/default.nix @@ -1,4 +1,4 @@ -{ symlinkJoin, writeTextFile, socat, dash, hectic, curl, gawk, jq, inetutils, getent, bind }: +{ symlinkJoin, writeTextFile, socat, dash, hectic, curl, gawk, jq, iproute2, getent, bind }: let shell = "${dash}/bin/dash"; bashOptions = [ @@ -36,7 +36,7 @@ let watcher = hectic.writeShellApplication { inherit shell bashOptions; name = "watcher"; - runtimeInputs = [ curl jq gawk inetutils getent bind.dnsutils ]; + runtimeInputs = [ curl jq gawk iproute2 getent bind.dnsutils ]; text = '' ${builtins.readFile ./log.sh} ${builtins.readFile ./colors.sh} diff --git a/package/sentinèlla/watcher.sh b/package/sentinèlla/watcher.sh index bd5678a..96729b1 100644 --- a/package/sentinèlla/watcher.sh +++ b/package/sentinèlla/watcher.sh @@ -61,7 +61,10 @@ local_ips() { printf '%s' "$SELF" return fi - hostname -I 2>/dev/null || true + # ip -o -4 addr show: ": inet / ..." + ip -o addr show 2>/dev/null \ + | awk '$3 ~ /^inet6?$/ { sub(/\/.*/, "", $4); print $4 }' \ + | tr '\n' ' ' } # is_local_ip(ip) — returns 0 if ip belongs to this node @@ -151,8 +154,15 @@ while :; do ok="down"; total=0; good=0 if [ "$code" = "200" ]; then - summary=$(printf '%s' "$body" | parse_summary || true) - [ -n "$summary" ] && { total=${summary%% *}; good=${summary#* }; } + summary=$(printf '%s' "$body" | parse_summary 2>/dev/null || true) + if [ -n "$summary" ]; then + _total=${summary%% *} + _good=${summary#* } + case "$_total" in ''|*[!0-9]*) _total=0 ;; esac + case "$_good" in ''|*[!0-9]*) _good=0 ;; esac + total=$_total + good=$_good + fi [ "$total" -eq "$good" ] && ok="up" fi