feat(tailscale): watchdog нативного режима и панель пиров тейлнета

- watchdog: проверка native-секции в slow-тире, авторестарт демона после 2 сбоев, TG-алерт раз в час
- AI Doctor: узел Tailscale (готов/не установлен/упал) только при настроенном native
- провайдер: режим peers — парсинг status --json через per-section socket
- RPC get_tailscale_status/get_tailscale_peers/tailscale_restart
- дашборд: карточка Tailscale (состояние, IP роутера, до 5 пиров с онлайн-статусом)
This commit is contained in:
Dushnilin
2026-08-26 13:43:23 +03:00
parent 7f0b085a07
commit 2c6a1a7343
11 changed files with 356 additions and 1 deletions
+12
View File
@@ -43,9 +43,13 @@ cat >"$STUB_BIN/tailscale" <<EOF
printf 'cli %s\n' "\$*" >> '$TS_LOG'
case "\$*" in
*version*) echo "1.80.3-smoke" ;;
*--json*) cat '$WORK_DIR/ts-status.json' ;;
*) exit 0 ;;
esac
EOF
cat >"$WORK_DIR/ts-status.json" <<'JSON'
{"BackendState":"Running","Self":{"HostName":"router","DNSName":"router.tailnet.ts.net.","TailscaleIPs":["100.64.0.1"]},"Peer":{"k1":{"HostName":"phone","DNSName":"phone.tailnet.ts.net.","TailscaleIPs":["100.64.0.2"],"Online":true},"k2":{"HostName":"laptop","DNSName":"laptop.tailnet.ts.net.","TailscaleIPs":["100.64.0.3"],"Online":false}}}
JSON
chmod +x "$STUB_BIN/tailscaled" "$STUB_BIN/tailscale"
STATE_FILE="$WORK_DIR/uci.state"
@@ -121,6 +125,14 @@ printf '%s' "$STATUS" | grep -Fq '"configured": true' ||
printf '%s' "$STATUS" | grep -Fq '"ready": true' ||
fail "status must report ready=true, got: $STATUS"
PEERS="$(run peers)"
printf '%s' "$PEERS" | grep -Fq '"backend_state": "Running"' ||
fail "peers must relay backend state, got: $PEERS"
printf '%s' "$PEERS" | grep -Fq '"dns_name": "phone.tailnet.ts.net."' ||
fail "peers must include tailnet peers, got: $PEERS"
printf '%s' "$PEERS" | grep -Fq '"online": false' ||
fail "peers must report offline flag, got: $PEERS"
# --- idempotent restart -----------------------------------------------------
run start-runtime || fail "second start-runtime failed"
RULE_COUNT=$(ip rule list | grep -cF "lookup 4247")