check / check (push) Failing after 4s
Detection is a TCP connect to the dish endpoint bound to the physical interface; once a dish answers, get_status is read every 5s and two status lines render under the physical pane, red on disconnect or alert. No dish: nothing drawn, no RPC. Minimal vendored proto bindings for get_status only. Independent review passed (PR 7 comment 100012). Model: opus-4-8 (implementation and review); model: claude-fable-5 (merge)
69 lines
2.1 KiB
Go
69 lines
2.1 KiB
Go
package monitor
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.eeqj.de/sneak/rtnetmon/internal/starlink"
|
|
)
|
|
|
|
// Test-only accessors exposing unexported state for white-box assertions.
|
|
|
|
// SetStarlinkClient injects a Starlink client for iface, bypassing the real
|
|
// gRPC dialer so the loop can be driven with a fake.
|
|
func (m *Monitor) SetStarlinkClient(iface string, c starlink.Client) {
|
|
for _, st := range m.interfaces {
|
|
if st.Name == iface {
|
|
m.slPane = st
|
|
m.slState = &starlinkState{}
|
|
m.slClient = c
|
|
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
// StarlinkEnabled reports whether a Starlink client is configured.
|
|
func (m *Monitor) StarlinkEnabled() bool { return m.slClient != nil }
|
|
|
|
// StarlinkPaneName returns the name of the pane the Starlink lines attach
|
|
// to, or "" if none.
|
|
func (m *Monitor) StarlinkPaneName() string {
|
|
if m.slPane == nil {
|
|
return ""
|
|
}
|
|
|
|
return m.slPane.Name
|
|
}
|
|
|
|
// StarlinkProbeStep runs one detection step.
|
|
func (m *Monitor) StarlinkProbeStep(ctx context.Context) { m.starlinkProbe(ctx) }
|
|
|
|
// StarlinkRefreshStep runs one status-refresh step.
|
|
func (m *Monitor) StarlinkRefreshStep(ctx context.Context) { m.starlinkRefresh(ctx) }
|
|
|
|
// StarlinkSnapshot returns the current Starlink display state: detected,
|
|
// have-status, and the latest status.
|
|
func (m *Monitor) StarlinkSnapshot() (bool, bool, starlink.Status) {
|
|
return m.slState.snapshot()
|
|
}
|
|
|
|
// ReachabilityHosts returns the configured reachability hosts.
|
|
func (m *Monitor) ReachabilityHosts() []string { return m.reachabilityHosts }
|
|
|
|
// PacketLossHosts returns the configured packet-loss hosts.
|
|
func (m *Monitor) PacketLossHosts() []string { return m.packetLossHosts }
|
|
|
|
// TCPHosts returns the configured TCP hosts.
|
|
func (m *Monitor) TCPHosts() []string { return m.tcpHosts }
|
|
|
|
// Interfaces returns the monitored interfaces.
|
|
func (m *Monitor) Interfaces() []*InterfaceStatus { return m.interfaces }
|
|
|
|
// PingArgs exposes pingArgs for external tests.
|
|
func PingArgs(goos, iface, host string) []string { return pingArgs(goos, iface, host) }
|
|
|
|
// LossArgs exposes lossArgs for external tests.
|
|
func LossArgs(goos, iface, host string, count int) []string {
|
|
return lossArgs(goos, iface, host, count)
|
|
}
|