78 Commits
Author SHA1 Message Date
Enot (ded) Skelly b44cae89d7 add neighbor message parsing
closes #94
2026-07-30 13:19:18 -07:00
Enot (ded) Skelly 2cbd211e11 add IATA validation checks on ingest
closes #89
2026-07-30 13:00:29 -07:00
Enot (ded) Skelly 3cad2dfda1 feat: process messages for new channels at boot
any new channel added to config will get backfilled if there
are any messages to decrypt

closes: #68
2026-07-24 13:27:27 -07:00
MrAlders0n d8ff7d0542 track payload_type on observations and serve the breakdown from a matview 2026-07-24 12:07:05 -07:00
MrAlders0n a84112f7fb fix(traces): review fixes for trace_iatas
Refresh last_heard on duplicate observations too, capped at hourly, so
steady traffic can't age a trace out of the filter (dedup key has no
heard_at). Drop the unused last_heard index column so upserts stay HOT,
and share one retention cutoff across the cleanup deletes.
2026-07-24 12:07:05 -07:00
MrAlders0n 457747b353 perf(traces): track trace activity per IATA in its own table
The trace list joined every trace packet to ~50M observations to apply
the IATA filter; the parallel hash join overran docker's 64MB /dev/shm
and the filtered list errored. Keep a small trace_iatas table at ingest
(like channel_iatas) and group packets by tag instead. Filtered stats
are now per tag rather than per matching packet.
2026-07-24 12:07:05 -07:00
MrAlders0n ba0e85c44e fix(channels): review fixes for channel_iatas
Refresh last_heard on duplicate observations too, capped at hourly, so
steady traffic can't age a channel out of the filter while its packets
stay retained (dedup key has no heard_at). Guard the seed join against
the docker /dev/shm cap like the trace one, and drop the unused
last_heard index column so the upserts stay HOT.
2026-07-24 12:07:05 -07:00
MrAlders0n dff9c6cf00 perf(channels): track channel activity per IATA in its own table
The IATA filter ran a correlated EXISTS over packets/observations with
ILIKE, which skipped the iata index and took ~7s live. Keep a small
channel_iatas table at ingest (like node_iatas) and filter against it.
Also honor the iatas= param so multi-site regions stop getting the
global list. Filter now ages out with packet retention rather than
matching any retained packet.
2026-07-24 12:07:05 -07:00
Enot (ded) Skelly 8e2798612b feat: add clock drift tracking
closes #71
2026-07-23 13:34:41 -07:00
Enot (ded) Skelly d8c622316d fix: radio frequency precision
closes #77
2026-07-23 09:58:43 -07:00
Enot (ded) Skelly d7fe41c4a2 fix: missing db test stub 2026-07-23 09:54:36 -07:00
Enot (ded) Skelly f07edf9fb6 feat: include source and destination in path data where available
realted to #85
2026-07-23 09:44:27 -07:00
Enot (ded) Skelly 7a58a07bbd fix: trace packet paths
closes #86
2026-07-23 09:20:00 -07:00
Enot (ded) Skelly ac67308f21 fix: dont log empty status from observers
closes #79
2026-07-23 08:43:26 -07:00
Enot (ded) Skelly 975f2f3656 feat(ws): make resolved paths a config toggle in session 2026-07-02 13:54:41 -07:00
Enot (ded) Skelly ca65ed1d9d fix(ingest): add more possible heard at timestamp formats 2026-07-02 13:09:26 -07:00
Enot (ded) Skelly a14a0ac658 feat(paths): included resolved path in ws observation events
changes to shared helper for resolve paths
2026-07-02 09:39:10 -07:00
Enot (ded) Skelly ee2fac1b20 fix(ingest): verify adverts 2026-07-02 08:27:36 -07:00
Enot (ded) Skelly 420a43172b fix(ingest): dedupe unknown channel hashes 2026-07-02 08:08:54 -07:00
Enot (ded) Skelly 7aa5aa3d3a feat(neighbors): grab neighbors for nodes in traces w/ snr 2026-06-16 16:07:35 -07:00
Enot (ded) Skelly f6f94acad8 feat(neighbors): add zero hop advert neighbors for observers w/ snr 2026-06-16 14:47:30 -07:00
Enot (ded) Skelly fd24a71143 feat(neighbors): add observer neighbor snr on discovery response 2026-06-16 14:26:33 -07:00
Enot (ded) Skelly 7b39160ff5 feat(neighbors): add optional snr column 2026-06-16 12:54:31 -07:00
Enot (ded) Skelly af6fbf627b docs(ingest): document other parsed payload structs 2026-06-16 09:48:37 -07:00
Enot (ded) Skelly b1501dfc1f feat(ingest): parse discover request and response 2026-06-16 09:47:53 -07:00
Enot (ded) Skelly 2619d0b904 chore: bump meshcore-go v1.0.8 2026-06-16 09:20:52 -07:00
Enot (ded) Skelly fea747924d tests(ingest): add more pure coverage 2026-06-15 14:45:57 -07:00
Enot (ded) Skelly b58e5a1edc feat(api): differentiate traces and pings 2026-06-11 14:52:31 -07:00
Enot (ded) Skelly 73fa0be858 fix(routes): don't store single hop routes
migration to remove old single hop routes included
2026-06-11 14:09:10 -07:00
Enot (ded) Skelly b574ec5c30 feat: add redis 2026-06-09 14:12:58 -07:00
Enot (ded) Skelly cda4905815 docs: update SPDX license lines 2026-06-08 16:08:39 -07:00
Enot (ded) Skelly 14cb9e6e2d docs: add APGL3 license 2026-06-08 15:46:01 -07:00
Enot (ded) Skelly a4b0ff0366 test(ingest): add helper tests 2026-06-08 13:45:53 -07:00
Enot (ded) Skelly cace46b004 feat(ingest): status and nodeUpdate events on par with summary analogies
observer status updates are now at data parity with
observer summary and node update events are at data
parity with node summaries

closes #38
2026-06-08 12:17:16 -07:00
Enot (ded) Skelly 7d25b8480f feat: node neighbors
limited to repeaters and room servers

stores high confidence matches from the nodes advert
packet path first hops
2026-06-08 09:36:20 -07:00
Enot (ded) Skelly 533225b46a hack: use server time for suspicious timestamps
i don't like it but multiple observer softwares are
sending the heard at timestamp with time zone errors
when it should be unix epoch ms
2026-06-08 08:20:03 -07:00
Enot (ded) Skelly 5247e4c3a8 fix: capture node preset only on 0 hop
previously could be observed after a bridge node
2026-06-06 13:18:04 -07:00
Enot (ded) Skelly 65cb8c9d61 add routes api
any route observer where all hops are high confidence
are now stored and available at /routes

you can also search for a src dest route and it will
return any recored route subset that can link the src
and dest hash
2026-06-05 15:57:08 -07:00
Enot (ded) Skelly f0c57fde45 add traces endpoint 2026-06-05 15:20:53 -07:00
Enot (ded) Skelly 882067455d add scope to ws packet events 2026-06-05 11:09:52 -07:00
Enot (ded) Skelly fdbcad28d8 add decrypted channel msg to packet details
also caught a bug where we never set the packet as
being decrypted even when it had been
2026-06-05 11:06:02 -07:00
Enot (ded) Skelly a943660778 rename to beacon 2026-06-05 08:10:43 -07:00
Enot (ded) Skelly b72ce41606 add iata ingest filter
generated code, reviewed and tested

this adds an optional lookup table for allowed IATA based on either country,
conintent or both. if the IATA is in either it is allowed.

gives operators the option to consume from global mqtt brokers but filter
to their area of interest
2026-06-04 15:24:34 -07:00
Enot (ded) Skelly 4425e3ffa2 refactor ingest package 2026-06-04 14:29:25 -07:00
Enot (ded) Skelly fcc7bb1b23 add transport scopes
new config for transport scope keys seeded to db

new transport keystore to lookup matching keys and tag
- packets with scope key
- nodes with default scope
- observers with all supported scopes it forwards

allow filtering by region scope key on: packets, nodes, observers
2026-06-04 10:32:03 -07:00
Enot (ded) Skelly 42e455bd00 add more broker connection timeout and retry defaults 2026-06-03 14:05:58 -07:00
Enot (ded) Skelly fa12149151 fix: typo in parsedAnonReq tag 2026-06-03 13:09:27 -07:00
Enot (ded) Skelly 7c89b509a9 fix: update observer broker on status as well as packet 2026-06-03 12:51:43 -07:00
Enot (ded) Skelly ea5c28bff9 fix: include SNR in traces 2026-06-03 12:47:36 -07:00
Enot (ded) Skelly ca18981b7f feat: add expanded pathlength and raw for all payloads 2026-06-03 11:06:46 -07:00