Add Starlink status lines for the physical gateway pane (closes #3)
check / check (push) Failing after 1s

When the non-VPN physical gateway is a Starlink dish, two lines are shown
under that pane: state, uptime, obstruction and alert count; then pop-ping
latency and drop rate with downlink/uplink throughput. They turn red when
the dish is not connected or an alert is active.

Detection is a TCP connect to the dish's fixed endpoint 192.168.100.1:9200,
bound to the physical interface the same way the latency probes bind. Until
a dish answers nothing is drawn and no status is fetched, so an absent dish
adds no noise. Status comes from the dish's local get_status gRPC call.

Detection and the fetch sit behind a small Client interface; the loop and
the pure Render function are tested with a fake, no dish and no network.

Model: opus-4-8
This commit is contained in:
2026-09-21 22:51:45 +00:00
parent 486a47397c
commit e3ef4f2f48
15 changed files with 1535 additions and 0 deletions
+19
View File
@@ -67,6 +67,21 @@ Anything outside this matrix — on Linux, only one of the named pair present, o
no/multiple default routes when neither is present; on macOS, no default route
or more than one physical default route — exits with a clear error.
## Starlink status
When the non-VPN physical gateway is a Starlink dish, two extra lines appear
under that pane: dish state, uptime, obstruction and alert count on the first,
and pop-ping latency and drop rate with downlink/uplink throughput on the
second. They turn red when the dish is not connected or an alert is active.
Detection is a TCP connect to the dish's fixed local endpoint,
`192.168.100.1:9200`, made over the physical interface (the same binding the
latency probes use). The dish sits behind the Starlink router, so this is not a
gateway-address check. rtnetmon probes once a minute until a dish answers and
then reads its status every few seconds; when no dish answers, nothing is drawn
and no status is fetched. The status comes from the dish's local `get_status`
gRPC call.
## Installation
```bash
@@ -107,6 +122,10 @@ rtnetmon/
│ │ ├── netdetect.go # selection logic and route parsers (pure)
│ │ ├── routes_linux.go # Linux default-route query (build-tagged)
│ │ └── routes_darwin.go # macOS default-route query (build-tagged)
│ ├── starlink/ # Starlink dish detection and status
│ │ ├── starlink.go # Status, Client interface, pure Render
│ │ ├── client.go # real gRPC client (get_status)
│ │ └── pb/ # generated bindings for the get_status RPC
│ └── monitor/ # core monitoring functionality
│ ├── monitor.go # monitor types, probes, logging
│ ├── loops.go # monitoring loops (reachability, loss, TCP)