mirror of
https://github.com/Kpa-clawbot/meshcore-analyzer.git
synced 2026-05-22 15:25:17 +00:00
317b59ab10
## Summary - Adds configurable GPS polygon areas to `config.json`; nodes are attributed to an area if their last-known position falls inside the polygon - New `Area: …` dropdown filter (matching the existing region filter style) appears on all analytics, nodes, packets, map, and live screens when areas are configured - Backend resolves area membership with a 30s TTL cache; area filter bypasses the 500-node cap on `/api/bulk-health` so all area nodes are always returned - Includes a polygon builder tool (`/area-map.html`) for drawing and exporting area boundaries ## Changes **Backend** - `AreaEntry` type + `Areas` config field - `GetNodePubkeysInArea` DB query + `resolveAreaNodes` (30s TTL, `areaNodeMu` RWMutex) - `PacketQuery.Area` + `filterPackets` polygon check - `?area=` param propagated through all analytics, topology, clock-health, and bulk-health routes - `/api/config/areas` endpoint **Frontend** - `area-filter.js`: single-select dropdown, persists to localStorage, cleans up stale keys on load - Wired into analytics, nodes, packets, channels, map, and live pages - Live map clears node markers on area change **Docs & tools** - `docs/user-guide/area-filter.md` — configuration and usage guide - `docs/api-spec.md` — updated with new endpoint and `?area=` param table - `tools/area-map.html` — polygon builder for defining area boundaries - Demo areas added to `config.example.json` ## Test plan - [x] No areas configured → filter dropdown does not appear on any page - [x] Areas configured → dropdown appears, "All" selected by default - [x] Selecting an area filters nodes/packets/topology/map correctly - [x] Selecting "All" restores unfiltered view - [x] Selection persists across page reloads (localStorage) - [x] Stale localStorage key (area removed from config) is cleared on load - [x] `/api/bulk-health?area=X` returns all nodes in area (no 500-node cap) - [x] `/api/config/areas` returns correct list 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Kpa-clawbot <kpaclawbot@outlook.com> Co-authored-by: openclaw-bot <bot@openclaw.local>
83 lines
2.8 KiB
Markdown
83 lines
2.8 KiB
Markdown
# Packets
|
|
|
|
The Packets page shows every transmission captured by your mesh observers.
|
|
|
|
[Screenshot: packets table with grouped view]
|
|
|
|
## Grouped vs ungrouped view
|
|
|
|
By default, packets are **grouped by hash**. Each row represents one unique transmission, with a count of how many observers heard it.
|
|
|
|
Click **Ungroup** to see every individual observation as its own row.
|
|
|
|
Click the **▶** arrow on a grouped row to expand it and see all observations of that packet.
|
|
|
|
## What each row shows
|
|
|
|
- **Time** — when the packet was received
|
|
- **From** — sender node name or hash prefix
|
|
- **Type** — packet type (Advert, Channel Msg, Direct Msg, ACK, Request, Response, Trace, Path)
|
|
- **Observer** — which observer captured the packet
|
|
- **SNR** — signal-to-noise ratio in dB
|
|
- **RSSI** — received signal strength
|
|
- **Hops** — how many relay hops the packet took
|
|
|
|
## Filters
|
|
|
|
### Observer filter
|
|
|
|
Select a specific observer to see only packets it captured. Saved across sessions.
|
|
|
|
### Type filter
|
|
|
|
Filter by packet type (e.g., show only Adverts or Channel Messages).
|
|
|
|
### Area filter
|
|
|
|
If [areas are configured](area-filter.md), an area pill bar appears above the packet list. Selecting an area shows only **ADVERT packets** whose transmitting node's GPS position falls within that area. Other packet types (Channel Msg, Direct Msg, ACK, etc.) have encrypted senders without an attributable GPS position, so they are not shown when an area filter is active.
|
|
|
|
### Time window
|
|
|
|
Choose how far back to look: 15 minutes, 1 hour, 6 hours, 24 hours, etc. On mobile, the window is capped at 3 hours for performance.
|
|
|
|
### Wireshark-style filter bar
|
|
|
|
Type filter expressions for advanced filtering:
|
|
|
|
```
|
|
type:advert snr>5 hops<3
|
|
from:MyNode observer:SJC
|
|
```
|
|
|
|
See the filter bar's help tooltip for all supported fields and operators.
|
|
|
|
## Packet detail
|
|
|
|
Click any row to open the **detail pane** on the right showing:
|
|
|
|
- Full packet metadata (hash, type, size, timestamp)
|
|
- Decoded payload fields
|
|
- Hop path with resolved node names
|
|
- All observers that heard this packet, sorted by SNR
|
|
|
|
### Hex breakdown
|
|
|
|
The detail pane includes a hex dump of the raw packet bytes with field boundaries highlighted.
|
|
|
|
## Observation sorting
|
|
|
|
When viewing a grouped packet's observations, they're sorted by SNR (best signal first). This helps you see which observer had the clearest reception.
|
|
|
|
## Display options
|
|
|
|
- **Hex hashes** — toggle to show packet hashes in hex format
|
|
- **Panel resize** — drag the detail pane border to resize it
|
|
- **Keyboard shortcuts** — press `Esc` to close the detail pane
|
|
|
|
## Tips
|
|
|
|
- Grouped view is best for understanding what's happening on the mesh
|
|
- Ungrouped view is best for debugging signal paths and comparing observers
|
|
- The time window filter is your best friend for managing large datasets
|
|
- Packet hashes in the URL are deep-linkable — share a link to a specific packet
|