Commit Graph
138 Commits
Author SHA1 Message Date
MrAlders0n 9582aaaa09 Wire the packet table and expandable rows into the virtual list 2026-07-27 20:04:36 -04:00
MrAlders0n 64b822f4fa Reorder PacketExpansion to show errors before empty state 2026-07-27 19:43:58 -04:00
MrAlders0n f400dc5f76 Add the expanded packet region with skeleton, error and empty states 2026-07-27 19:37:18 -04:00
MrAlders0n 16ee220abe Fix PathData sizing and add null-SNR test to ObservationTable 2026-07-27 19:30:16 -04:00
MrAlders0n 7dfb363265 Add the nested observation table for expanded packet rows 2026-07-27 19:24:39 -04:00
MrAlders0n 9300eefad1 Add the sticky packet table header 2026-07-27 19:20:10 -04:00
MrAlders0n 8bd0f92aff Restore n/a fallback in observer and IATA cells, scope the covering test 2026-07-27 19:17:03 -04:00
MrAlders0n 8795c360ff Add the two-line packet table row 2026-07-27 19:10:07 -04:00
MrAlders0n dbed149679 Cover endpoint pairs, high tint, and unresolved-run chips in PacketPathLine 2026-07-27 19:01:34 -04:00
MrAlders0n bdf7ac45e4 Render the packet path line with truncation and confidence tints 2026-07-27 18:56:03 -04:00
MrAlders0n 48587a0437 Cover pathBytes-absent and unresolved-endpoint cases in path summary tests 2026-07-27 18:52:10 -04:00
MrAlders0n 75124250d6 Add a pure path-summary model for the packet table's path line 2026-07-27 18:45:11 -04:00
MrAlders0n c9eb929a81 Fix ?path deep link when ?analyze is absent 2026-07-27 18:35:45 -04:00
MrAlders0n 89a8980212 Split ?hash into row expansion and ?analyze for the analyzer drawer 2026-07-27 18:19:09 -04:00
MrAlders0n 1dbbce1ad8 Extract usePacketDetail and share it across the analyzer and overlay 2026-07-27 18:08:21 -04:00
MrAlders0n 161f481576 Carry path and endpoint fields from WS observations into packet summaries 2026-07-27 18:01:32 -04:00
MrAlders0n 464e701f76 Add a toggleable IATA border layer to the map
Draw each active IATA's GeoJSON region border as an outline over a faint
fill beneath the node markers, behind a Map Settings toggle that's off by
default and shareable via a URL param. IATAs with no border answer 204
and are skipped.
2026-07-24 22:21:12 -04:00
MrAlders0n 8baa562794 Add a Clock Drift analytics tab
List repeaters and room servers whose advert-derived clock has drifted
past the server threshold, worst first, in a sortable table. It's each
node's latest reading, so there's no time range to pick.
2026-07-24 22:20:49 -04:00
MrAlders0n e6a714aed9 Split top advertisers into flood and direct adverts
Surface each advertiser's flood vs direct advert counts with a per-day
rate for the selected window, as a sortable table on the Talkers tab.
2026-07-24 22:19:24 -04:00
MrAlders0n 7a2d74b7ca Pin overview sparklines to a fixed 24h window
The Observations and Active observers KPI cards show a fixed 24h snapshot
(from /stats/overview), but their sparklines were fed by the range-driven
observations series. Switching to 7d/30d reshaped the sparklines even
though the numbers beside them stayed at 24h, since aggregateByHour drops
empty hours and slice(-24) then spans a different set of hours.

Give the sparklines their own dedicated 24h observations series so the
whole top row is a consistent 24h snapshot; the range selector now only
drives the charts below. React Query dedupes the extra call when the
selector is already on 24h.
2026-07-24 09:47:47 -04:00
MrAlders0n f1a69fa121 Mark each top advertiser with its IATA 2026-07-24 09:11:32 -04:00
MrAlders0n 34bb171429 Lay out Talkers side by side and label advertiser node types 2026-07-24 08:54:23 -04:00
MrAlders0n 45842949d4 Group top advertisers and talkers on the Talkers tab 2026-07-24 08:47:19 -04:00
MrAlders0n e526c08fa4 Send multi-select packet filters to the server 2026-07-24 08:47:19 -04:00
MrAlders0n 98ca904ac2 Refresh stale radio-freq and telemetry comments for current backend 2026-07-24 06:55:24 -04:00
MrAlders0n 1303e952a7 Add tests for path endpoint, trace, and clock-drift edge cases 2026-07-24 06:19:19 -04:00
MrAlders0n 948cfa25b0 Fix public-key node search field switching and non-hex input 2026-07-24 06:19:19 -04:00
MrAlders0n badd919e0d Only plot unambiguously-resolved path endpoints on the map 2026-07-24 06:16:51 -04:00
MrAlders0n 913151c610 Show device clock drift on the node detail panel 2026-07-23 23:31:05 -04:00
MrAlders0n 23bacde2b8 Add public key prefix search to the nodes table 2026-07-23 23:10:31 -04:00
MrAlders0n 7bf30da5c1 Add top advertisers to Mesh stats and a Talkers leaderboard tab 2026-07-23 23:05:39 -04:00
MrAlders0n 88ae52bdf4 Show packet source and destination on the path map and analyzer 2026-07-23 22:53:02 -04:00
MrAlders0n 6af9d652aa Keep path map at a fixed height on narrow screens 2026-07-18 22:28:01 -04:00
MrAlders0n 02ec63cc0f Add path-map deep links, per-observer propagation, and tappable nodes 2026-07-18 13:37:42 -04:00
MrAlders0n 2132e78f28 Collapse the path map attribution to a bare (i) by default 2026-07-18 09:55:50 -04:00
MrAlders0n 01b722b5c5 Add 'view path on map' popup to the packet analyzer 2026-07-18 09:16:27 -04:00
MrAlders0n 11b06000b5 Back out frontend zero-frame filter; fixing at the source instead 2026-07-15 22:04:42 -04:00
MrAlders0n fb376901f9 Drop empty observer telemetry frames and show airtime as duration 2026-07-15 21:44:11 -04:00
MrAlders0n 65965ac8be Merge main into dev 2026-07-14 23:34:39 -04:00
MrAlders0n bc62d28581 Bump version to 1.2.1 2026-07-14 23:30:50 -04:00
MrAlders0n 1b42e023d8 Restore files clobbered by the main merge 2026-07-14 23:30:50 -04:00
MrAlders0nanddependabot[bot] dff9729583 v1.2.0 (#19)
* stats: node-types donut, multi-IATA filtering, preset split

 - node-types: new /stats/node-types endpoint + useNodeTypes; donutOption
   replaces the "Coming soon" card with a live donut
 - stats endpoints take iatas[] instead of a single iata, so multi-IATA
   regions filter instead of falling back to all (drops useStatsIata)
 - radio presets keep the node/observer split via stacked presetBarsOption
 - drop client-side telemetry ms-normalization (backend now emits epoch ms
   on both paths); charts pick delta-vs-raw counters off the response interval
 - MeshTab: range-driven charts lead, all-time charts follow; KPI window
   from overview.windowHours instead of a hardcoded 24h
 - ci: docker-publish builds a :dev image on dev-branch pushes

* feat: traces vs pings
feat: SNR for trace path in list
feat: known niehgbour count

* fix: github workflow, post images publically

* build(deps): bump undici from 7.27.2 to 7.28.0 (#9)

Bumps [undici](https://github.com/nodejs/undici) from 7.27.2 to 7.28.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v7.27.2...v7.28.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 7.28.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat: discover renderers, neighbor map lines, live packet flow

- Discover packets decoded: DISCOVER_REQ/DISCOVER_RESP render real fields
  (type-filter roles, tag, node-to-node request SNR) instead of a raw dump.
- Neighbor lines on the map: On/Selected/Off control draws links between nodes
  and their known neighbors.
- Live packet flow: a play button animates packets hop-to-hop between repeaters
  in real time (off by default).

* map: live mode dims nodes, flashes each packet's route

* map: shoot a comet along each packet's route in live mode

* map: rework live mode — packet dot, dashed trail, per-hop flash

* map: fade live-mode clusters more so dense ones stay see-through

* map: persist clustering + node-type, default neighbor lines to selected

* map: fade live-mode node markers more so overlaps stay see-through

* map: fade the live-mode node flash in sync with its packet trail

* nodes: let the mobile detail panel minimize without deselecting

* map: dim other nodes to spotlight a selected node and its neighbours

* map: colour a selected node's neighbour lines by obs count and freshness

* Add a neighbour graph under the renamed Analytics tab

* Focus the neighbour graph into an ego view on click

* Wrap the analytics sub-header so the range stays on-screen on mobile

* Use a dropdown for the analytics sections on mobile

* Gate the neighbour graph to a region and size labels by busyness

* Add a name search that spotlights matches and dims the rest of the mesh

* Add a copy button beside node and observer public keys

* Add a copy link to node and observer detail panels

Deep-linked ?node/?observer selections now survive load: the region
reset watches the raw selection instead of the async-resolved regionKey,
so slug expansion no longer wipes a restored panel.

* Add .env options for hiding tabs, MeshMapper themes, app name and a GitHub link

* Make VITE_ENABLED_THEMES an exclusive theme allowlist

* Add a .env option to skip the load splash

* Keep the packets list static while scrolled down instead of jumping on new packets

* Add Map deep-links for camera and settings with a copy-link button

* Filter packet history on the server when a single type, route or scope is selected

* Show loading feedback while packet history loads

* build(deps): bump echarts from 5.5.1 to 6.1.0 (#14)

* Fix: github workflow + stats tab + add traces vs pings (#10)

* stats: node-types donut, multi-IATA filtering, preset split

 - node-types: new /stats/node-types endpoint + useNodeTypes; donutOption
   replaces the "Coming soon" card with a live donut
 - stats endpoints take iatas[] instead of a single iata, so multi-IATA
   regions filter instead of falling back to all (drops useStatsIata)
 - radio presets keep the node/observer split via stacked presetBarsOption
 - drop client-side telemetry ms-normalization (backend now emits epoch ms
   on both paths); charts pick delta-vs-raw counters off the response interval
 - MeshTab: range-driven charts lead, all-time charts follow; KPI window
   from overview.windowHours instead of a hardcoded 24h
 - ci: docker-publish builds a :dev image on dev-branch pushes

* feat: traces vs pings
feat: SNR for trace path in list
feat: known niehgbour count

* fix: github workflow, post images publically

* build(deps): bump echarts from 5.5.1 to 6.1.0

Bumps [echarts](https://github.com/apache/echarts) from 5.5.1 to 6.1.0.
- [Release notes](https://github.com/apache/echarts/releases)
- [Commits](https://github.com/apache/echarts/compare/5.5.1...6.1.0)

---
updated-dependencies:
- dependency-name: echarts
  dependency-version: 6.1.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: MrAlders0n <55921894+MrAlders0n@users.noreply.github.com>
Co-authored-by: MrAlders0n <55921894+MrAlders0n@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump version to 1.2.0

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: MrAlders0n <55921894+MrAlders0n@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
v1.2.0
2026-07-14 23:18:10 -04:00
MrAlders0n cfe6a8f0ea Merge branch 'main' into dev
Signed-off-by: MrAlders0n <55921894+MrAlders0n@users.noreply.github.com>
2026-07-14 23:17:55 -04:00
MrAlders0n 493aedb41f Bump version to 1.2.0 2026-07-14 23:14:05 -04:00
dependabot[bot]andMrAlders0n 20c0e215ec build(deps): bump echarts from 5.5.1 to 6.1.0 (#14)
* Fix: github workflow + stats tab + add traces vs pings (#10)

* stats: node-types donut, multi-IATA filtering, preset split

 - node-types: new /stats/node-types endpoint + useNodeTypes; donutOption
   replaces the "Coming soon" card with a live donut
 - stats endpoints take iatas[] instead of a single iata, so multi-IATA
   regions filter instead of falling back to all (drops useStatsIata)
 - radio presets keep the node/observer split via stacked presetBarsOption
 - drop client-side telemetry ms-normalization (backend now emits epoch ms
   on both paths); charts pick delta-vs-raw counters off the response interval
 - MeshTab: range-driven charts lead, all-time charts follow; KPI window
   from overview.windowHours instead of a hardcoded 24h
 - ci: docker-publish builds a :dev image on dev-branch pushes

* feat: traces vs pings
feat: SNR for trace path in list
feat: known niehgbour count

* fix: github workflow, post images publically

* build(deps): bump echarts from 5.5.1 to 6.1.0

Bumps [echarts](https://github.com/apache/echarts) from 5.5.1 to 6.1.0.
- [Release notes](https://github.com/apache/echarts/releases)
- [Commits](https://github.com/apache/echarts/compare/5.5.1...6.1.0)

---
updated-dependencies:
- dependency-name: echarts
  dependency-version: 6.1.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: MrAlders0n <55921894+MrAlders0n@users.noreply.github.com>
Co-authored-by: MrAlders0n <55921894+MrAlders0n@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 23:12:08 -04:00
MrAlders0n 43ebcd9638 Show loading feedback while packet history loads 2026-07-14 22:57:07 -04:00
MrAlders0n 2e2b845137 Filter packet history on the server when a single type, route or scope is selected 2026-07-14 22:31:50 -04:00
MrAlders0n 82a83fd33f Add Map deep-links for camera and settings with a copy-link button 2026-07-14 15:05:49 -04:00
MrAlders0n 58016bc773 Keep the packets list static while scrolled down instead of jumping on new packets 2026-07-13 18:51:56 -04:00
MrAlders0n 04f1757daa Add a .env option to skip the load splash 2026-07-13 11:50:57 -04:00