Commit Graph
327 Commits
Author SHA1 Message Date
Enot (ded) Skelly 2cbd211e11 add IATA validation checks on ingest
closes #89
2026-07-30 13:00:29 -07:00
Enot (ded) Skelly ae0669ccbe enrich packet observations 2026-07-27 09:41:11 -07:00
Enot (ded) Skelly 336b734a42 feat: add stats api for new clock drift tracking
closes: #91
2026-07-24 14:01:12 -07:00
Enot (ded) Skelly d8371f04d0 feat: split top adverts into flood/direct
closes: #90
2026-07-24 13:49:40 -07:00
Enot (ded) Skelly 3799242bce docs: update for v1.6.0 2026-07-24 13:40:57 -07:00
Enot (ded) Skelly 201cd9e364 chore: version bump v1.6.0 v1.6.0 2026-07-24 13:31:23 -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
Enot (ded) Skelly 976a38c09e chore: bump chi to 5.3.0 2026-07-24 13:21:51 -07:00
Enot (ded) Skelly 572f14b94b fix: formatting in cache test file 2026-07-24 13:18:14 -07:00
Enot (ded) Skelly 99d7eb0bab feat: add node stale/delete config
closes: #93
2026-07-24 13:09:51 -07:00
Enot (ded) Skelly 3f2506fc8b feat: add geojson for iatas
closes #66
2026-07-24 12:59:48 -07:00
MrAlders0n cbde3d02da perf(stats): matview-back top talkers and advertisers 2026-07-24 12:07:05 -07:00
MrAlders0n bc3a375816 perf(stats): bucket payload & observer matviews by hour for windowed queries
The payload-breakdown and top-observers matviews stored a single 7-day
total per group, so the 24h/7d/30d selector did nothing: payload ignored
the window entirely (the store discarded `since`) and top-observers only
varied which rows cleared the last_heard cutoff, never the counts.

Bucket both views by hour over a 30-day horizon and sum the buckets in
range, mirroring mv_hourly_iata_stats. The stats endpoints now honour the
requested window while still reading a small precomputed table.
2026-07-24 12:07:05 -07:00
MrAlders0n b93ce7aba6 serve top observers from a matview instead of scanning per request 2026-07-24 12:07:05 -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 63c0b9779d perf(routes): index known_routes(last_seen)
The routes list orders by last_seen with no index, so every page
seq-scanned and sorted ~150k rows. Same fix as the packets list got
in 008.
2026-07-24 12:07:05 -07:00
MrAlders0n 42edcdeb7b perf(scopes): stop cross-joining packets in scope stats
GetScopeStats left-joined packets, observer_scopes and nodes at once,
multiplying rows into the millions before COUNT(DISTINCT) deduped them
(~10s per call). Count each table on its own and index packets(scope_id).
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 b33ebc007b feat: add plural value filter params
closes #76
2026-07-23 14:26:16 -07:00
Enot (ded) Skelly 8e2798612b feat: add clock drift tracking
closes #71
2026-07-23 13:34:41 -07:00
Enot (ded) Skelly b38663d3a1 feat: add stats for top advertiser and talkers
closes #75
closes #74
2026-07-23 10:41:16 -07:00
Enot (ded) Skelly 0ca28cc6a8 feat: node prefix search
pubkeyPrefix takes any even length prefix string case-insensitive
and returns all matches
2026-07-23 10:14:47 -07:00
Enot (ded) Skelly d8c622316d fix: radio frequency precision
closes #77
2026-07-23 09:58:43 -07:00
Enot (ded) Skelly 3d4f1a266a forgot swagger 2026-07-23 09:56:17 -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 8b5e1853b1 bump test 2026-07-23 08:53:20 -07:00
Enot (ded) Skelly ac67308f21 fix: dont log empty status from observers
closes #79
2026-07-23 08:43:26 -07:00
MrAlders0n 30772da2c5 perf(packets): drive IATA-filtered list from the observation index
Quiet sites probed hundreds of thousands of packets to fill a page.
Walk idx_observations_iata_heard per requested site and dedup instead.
Filtered lists now order by site-local recency; the cursor follows.
2026-07-20 09:07:05 -07:00
MrAlders0n 508337b8ca perf(db): pass IATA filters as bpchar[] instead of CSV
text[] from string_to_array can't match the CHAR(3) indexes and hides
the values from the planner. Handlers already have a slice; stop
joining to CSV in the store layer and pass a typed array everywhere.
2026-07-20 09:07:05 -07:00
MrAlders0n b8665ebd66 perf(db): index packets(last_heard_at)
The packet list sorts by last_heard_at, so every page was a seq scan
plus sort over all packets. Cheap to maintain now that presence writes
are coalesced.
2026-07-20 09:07:05 -07:00
MrAlders0n 0afba79b02 perf(paths): split path hash resolution by prefix width
the CASE predicate forced postgres to replan every call; per-width queries reuse a cached plan on the (iata, prefix_n) indexes
2026-07-20 09:01:51 -07:00
MrAlders0n 70c8a87323 build: bump Go to 1.26.5 for GO-2026-5856 crypto/tls fix 2026-07-20 08:55:18 -07:00
MrAlders0n d113036414 feat(beacon): route ingest through the presence coalescer 2026-07-20 08:55:18 -07:00
MrAlders0n 41a3aa4711 feat(config): presence flush interval and packet ttl settings 2026-07-20 08:55:18 -07:00
MrAlders0n 5804524f0e feat(db): add batched presence touch queries
single-statement flush targets for coalesced last_seen/last_heard_at bumps
2026-07-20 08:55:18 -07:00
MrAlders0n 2f12480ec4 feat(presence): coalesce presence writes in memory
batches observer/packet last-seen bumps and flushes on an interval instead of one tx per observation
2026-07-20 08:55:18 -07:00
Enot (ded) Skelly 0ca3c95c9e fix(hub): bug in subscribe logic and a little race condition 2026-07-02 14:19:03 -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 4e2ee62bad feat(nodes): add ?neighbors to list nodes
inlcudes neighbor IDs in node details list
2026-07-02 09:12:23 -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 4860921e90 chore: version bump v1.5.4 v1.5.4 2026-06-24 08:04:54 -07:00
Enot (ded) Skelly 25316a3474 fix(observations): drop heardAt from packet_observation unique constraint
this was causing duplicates and each obersver heard a given
packet hash or it didn't, there are not more observations of
the same hash from one observer
2026-06-24 08:04:04 -07:00