repeater/internal
Pierre-Olivier Mercier 950f73371c station: Surface signal, traffic and connection time in API and UI
Hostapd already parsed signal strength and rx/tx counters but the
station -> ConnectedDevice conversion threw them away. Add signalDbm,
rxBytes, txBytes and connectedAt to the OpenAPI schema and the
ConnectedDevice model, and centralise the conversion in
station.ToConnectedDevice so handlers, the periodic refresh and the
event callbacks all serialise the same shape.

Two follow-on bugs surfaced while wiring this up:

- The hostapd backend only stored station entries on first contact.
  Subsequent polls were dropped, so signal and byte counters never
  refreshed. Reconcile updates in checkStationChanges.
- ConnectedAt was reset to time.Now() on every conversion. Track
  FirstSeen on HostapdStation when the station joins, and preserve
  the timestamp across periodic refreshes in app.go so the UI's
  "connected since" badge is stable.

Frontend gains a metrics row on each device card with signal bars,
total traffic and a live duration. Falls back gracefully when a
backend (DHCP, ARP) doesn't expose these fields.
2026-05-01 22:26:43 +08:00
..
api Harden API surface and station/wifi backends 2026-05-01 21:56:50 +08:00
app station: Surface signal, traffic and connection time in API and UI 2026-05-01 22:26:43 +08:00
config Harden API surface and station/wifi backends 2026-05-01 21:56:50 +08:00
hotspot Harden API surface and station/wifi backends 2026-05-01 21:56:50 +08:00
logging Harden API surface and station/wifi backends 2026-05-01 21:56:50 +08:00
models station: Surface signal, traffic and connection time in API and UI 2026-05-01 22:26:43 +08:00
station station: Surface signal, traffic and connection time in API and UI 2026-05-01 22:26:43 +08:00
syslog syslog filter could take several filters 2026-01-01 23:31:01 +07:00
wifi wpa_supplicant: Use log package and tolerate GetNetworks failures 2026-05-01 22:14:38 +08:00