Commit Graph
38 Commits
Author SHA1 Message Date
MrAlders0n a78b735bb2 routes: keep paging when client-side region filtering starves the table
A multi-IATA region filters globally-paged rows client-side, and scroll
was the only trigger for the next page — an empty or too-short filtered
list could never fire it, so routes deeper in the cursor stream were
unreachable ('No routes' with routes that exist). Pull pages until the
region has a screenful or the cap calls it sparse.
2026-06-10 07:03:16 -04:00
MrAlders0n d5deb1e042 stats: node types back to a donut (3 categories), fix leaderboard labels
The donut suits node types after all — few slices, and the total reads
better in the ring than on three bars. The center text is a title block
with textAlign center now, which ECharts actually centers (the old
graphic text anchored its left edge at the ring's x and clipped);
TitleComponent registered in the tree-shaken setup. Payload types stays
a bar chart.

Leaderboard names (top nodes/observers, radio presets) are left-aligned
at the card edge and ellipsized instead of running off the grid's left
side.
2026-06-10 06:59:49 -04:00
MrAlders0n 12d5056e20 map: insert brand-new nodes from their nodeUpdate event
The WS patch only updated nodes already in the paged cache, and with
staleTime Infinity nothing ever refetched — a node that came up after
page load could never appear on the map. The event carries a full
summary, so unknown nodes are appended to the cache directly. The
Nodes table keeps patch-only behavior since its cache is filter-scoped.
2026-06-10 06:59:49 -04:00
MrAlders0n 39756bc0d1 nodes/map: trust the API's decimal-degree coordinates
microToDeg guessed microdegrees from integer values, but api/nodes.go
has always sent *float64 degrees — so a node sitting at an exact whole
degree got divided by 1e6 and rendered at the equator. Drop the shim
from the geojson builder, the nodes table and the detail panel, and fix
the ws.ts comment that repeated the wrong premise.

Also key neighbor rows by id+iata: the neighbors endpoint returns one
row per (neighbor, iata), so id alone collides for nodes heard in
several regions (live React duplicate-key error).
2026-06-10 06:59:49 -04:00
MrAlders0n 115f6a83cc stats: replace the type donuts with vertical bar charts
The payload-types donut was buckling: 10+ slivers, a scrollable legend
with truncated names, and a center total that clipped at narrower
widths. Bars label every category inline, show counts on top, and the
total moved into the card header. Node types gets the same treatment
for consistency.

Also fix charts starting on the fallback palette when a saved theme
loads: themeId is already the saved id before the CSS vars land, so
useChartColors now keys on a paletteRev that bumps on every applyTheme.
2026-06-10 06:46:13 -04:00
MrAlders0n 714b32fd22 fix back/forward tab navigation and the packet-list gap on tab return
The active tab was state seeded from ?tab once, so back/forward moved
the URL without moving the UI. The URL is the source of truth now, and
unknown ?tab values fall back to Packets instead of a blank pane.

Packets history also healed wrong: while the tab is unmounted its WS
handler is down, and staleTime Infinity meant the gap never closed.
Mounting now resets to a fresh first page. Same for lag notices, which
used to invalidate (and sequentially replay) up to 20 cached pages —
together with the ws reconnect notice this covers outage recovery too.
2026-06-10 06:39:12 -04:00
MrAlders0n 7e07669f33 stats: fix live KPI counters never updating
useLiveOverview keyed its setQueryData on the whole RegionFilter object
while the overview query keys on the regionKey string, so every WS bump
silently missed the cache and the counters only moved on the 60s
refetch. Also drop pending counts when the region changes so old-region
increments don't bleed into the new KPIs.
2026-06-10 06:30:32 -04:00
MrAlders0n aabbe404a0 stats: memoize telemetry points so charts stop redrawing every render
The fresh [] fallback minted a new array each render while telemetry
loaded, which rebuilt all five chart options and forced a full ECharts
teardown (notMerge). Also silence the intentional themeId dep warning
in useChartColors.
2026-06-09 23:16:04 -04:00
MrAlders0n 08d50be490 Track devserver.sh and finish the tower -> beacon rename
scripts/ was caught by a stray .gitignore entry, so the npm start/stop
helpers pointed at a file fresh clones never got. Also sweep the last
tower-* references out of comments, compose and the map test fixture.
2026-06-09 23:16:04 -04:00
MrAlders0n add53ba7e7 feat(stats): observer-list search queries all observers server-side
Search the /observers name endpoint (region-scoped) instead of filtering
the loaded top-15, so any observer is findable. Top observers remain the
default list; search results show name + IATA + status.
2026-06-09 22:30:05 -04:00
MrAlders0n 45103692d1 feat(stats): center donut label, observer list search, observer→stats link
- center the payload/node-type donut center value+label in the ring
- add a name search box to the Stats → Observer list
- add a Statistics button on the Observers detail panel that opens
  Stats → Observer preselected to that observer
2026-06-09 22:15:28 -04:00
MrAlders0n be072bb42c feat(stats): add Mesh + Observer stats tab with ECharts
Integrate the stats feature onto main: live mesh KPIs, observations
time-series, payload/node-type donuts, top-nodes/observers leaderboards,
radio presets, scope stats, and per-observer telemetry (battery, airtime,
noise, queue, receive errors) with 1h/6h/24h bucketing.

- adapt to the multi-IATA region model (useRegion -> single iata for /stats/*)
- rename stats getScopes -> getStatsScopes (avoids /scopes name-list collision)
- donut legend kept right but scrollable + truncating so it never clips
- balanced mesh grid; observer empty-state for telemetry-less observers
- normalize telemetry t to ms (raw path emits seconds, bucketed emits ms)
- add echarts 5.5.1; lazy-load StatsOverview chunk
2026-06-09 22:02:27 -04:00
MrAlders0n ed9741ea63 feat: standardize trace view to be the same as packets view, etc 2026-06-09 20:37:57 -04:00
MrAlders0n 83c30ca236 Sync to features from server 2026-06-08 22:35:06 -04:00
MrAlders0n 84f235a3b4 Mobile support refactor and cleanup 2026-06-08 10:18:17 -04:00
MrAlders0n b8b1f5f27d Feat/scopes routes traces (#7)
* feat: replace getScopeStats with getScopes and update related tests
bug: lastSeen/sentAt was set to string instead of number by mistake

* feat: update timestamp handling and formatting across components

- WS messages carry epoch ms now instead of ISO strings
- new Timestamp component (relative/absolute), used in RouteTable and RouteDetailPanel
- IataChip and ScopeTag chips
- TraceDetailPanel and TraceList for trace drill-down
- tests updated for the timestamp change
2026-06-07 00:19:54 -04:00
MrAlders0n 8e2696b95a feat: loading pill for map and tables
- LoadingPill shows loading/error state in MapView, NodeTable and ObserverTable
- new useInfinitePages hook shares the pagination logic between them
- patchNodeSummary/patchObserverSummary now keep references stable
- tests for loading states, observer updates and infinite paging
2026-06-05 22:59:52 -04:00
MrAlders0n 81bdeec16b feat: implement paginated node fetching and add related tests 2026-06-05 20:23:17 -04:00
MrAlders0n eb50f310db feat: decrypted channel messages, scopes in ws 2026-06-05 17:22:37 -04:00
MrAlders0n 47c1813471 feat: added path resolution to traces 2026-06-05 09:24:21 -04:00
MrAlders0n 1208413b6e feat: add scopes 2026-06-05 08:49:36 -04:00
MrAlders0n 43ab0dbb3f feat: added region support (#3) 2026-06-04 22:26:05 -04:00
MrAlders0n 4b8109262b feat: packet analyzer overlay, shared modals with focus trap
- usePackets pulls a bigger first page (INITIAL_PACKET_PAGE_SIZE)
- ModalOverlay + useFocusTrap, used by NodeDetailOverlay and PacketAnalyzerOverlay
- PathData popovers for path resolutions; ObserverIcon and Tooltip
- tests for packet structure and the focus trap; tidied types in api.ts/enums.ts
2026-06-04 20:22:28 -04:00
MrAlders0n 811c11db52 Feat/map openfreemap (#2)
* initial map page

* Nodes plotted and map in good shape to be merged
2026-05-31 15:15:06 -04:00
MrAlders0n 4ed88b1be6 Cleaning up UI 2026-05-29 23:18:23 -04:00
MrAlders0n dc719b3428 minor bug fix 2026-05-29 20:47:01 -04:00
MrAlders0n eb961c0c92 Fixed the scrollbar anchoring and some bug fixes 2026-05-29 20:21:59 -04:00
MrAlders0n 71c25ecd4c Removed observations dropdown from main packet list, moved completely to packet analyzer 2026-05-29 17:39:31 -04:00
MrAlders0n b63e132433 Updated to support new packet splitting via api 2026-05-29 17:28:28 -04:00
MrAlders0n 6d1e81900f Added observer count to packets tab, there is an existing bug on backend that needs to sort out to get the number correct however. Expect an inflated number for now 2026-05-29 17:10:13 -04:00
MrAlders0n a0acf27599 Added IATAs column to nodes tab 2026-05-29 17:08:57 -04:00
MrAlders0n ea5767b757 Add Observation Count to channel messages and some more git ignore 2026-05-29 16:20:12 -04:00
MrAlders0n a5b08891c6 Big update including a few new things and fixes.
Things like copy link to clipboard for packets to share
The Packet drawer now stays open between packets and channels tab.
Add initial nodes tab.
2026-05-29 08:56:23 -04:00
MrAlders0n 8ae6ae4937 add shareable packet links with copy button 2026-05-28 20:38:18 -04:00
MrAlders0n 12434881f9 fix payload breakdown rendering one char per line 2026-05-28 20:17:18 -04:00
MrAlders0n 5b380d98cc fix: Change packets to items to match api response 2026-05-28 19:36:34 -04:00
MrAlders0n a0caf65a18 added channel & observers 2026-05-27 19:27:48 -04:00
MrAlders0n 8718bf3563 Initial commit 2026-05-23 21:49:14 -04:00