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
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
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
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
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
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
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
ac54e41e49
fix(neighbors): deduplicate count in node summaries
...
only return the count of unique neighbors
2026-06-16 09:06:41 -07:00
Enot (ded) Skelly
b4152e0e5f
feat(ingest): use last seen in observer online check
...
now uses last seen (packet message) as well as last
status (status message) as indicators of observer
being online or not
2026-06-16 09:00:06 -07:00
Enot (ded) Skelly
4ebe4c869b
feat: add route and neighbor reconfirmation task
...
prunes stale and ambiguous routes and neighbors
keep that data clean
2026-06-12 10:54:06 -07:00
Enot (ded) Skelly
8b7bc21b28
fix(neighbors): don't record neighbors that are not room or repeater
2026-06-12 09:51:06 -07:00
gadgethd
87239bd4b8
fix(seed): make UpsertIATADetails a true upsert
...
UpsertIATADetails was a plain UPDATE that silently affected zero rows
when the iata_codes row did not yet exist. Adding a new IATA to the
config for the first time resulted in display_name, approx_lat, and
approx_lng remaining NULL.
Change the query to INSERT ... ON CONFLICT DO UPDATE so the row is
atomically created (if missing) or updated (if present), matching the
function's name and the pattern used by UpsertTransportScope.
2026-06-12 08:25:14 -07:00
Enot (ded) Skelly
5315af205c
feat(traces): embed max-hop observation path and SNR in list response
2026-06-11 15:45:08 -07:00
Enot (ded) Skelly
b58e5a1edc
feat(api): differentiate traces and pings
2026-06-11 14:52:31 -07:00
Enot (ded) Skelly
ad8e410856
feat(api): add knownNeighborCount to nodesummary and publicKey to node neighbor
2026-06-11 13:47:58 -07:00
Enot (ded) Skelly
ef5257db66
fix(stats): fix radio presets query
2026-06-10 13:46:21 -07:00
Enot (ded) Skelly
205eaafbe9
feat(stats): add node type breakdown
...
/stats/node-types w/ filters for iata/region
closes #55
2026-06-10 13:18:26 -07:00
Enot (ded) Skelly
5e0274d778
fix(telemetry): incorrect truncation on observer telemetry
2026-06-10 13:04:02 -07:00
Enot (ded) Skelly
a9b0025b1d
fix(stats): support multiple IATAs and region filtering on all stats endpoints
...
closes : #53 and #54
2026-06-10 09:52:02 -07:00
Enot (ded) Skelly
632f858376
fix(sql): observer telemetry for airtime and errors
...
changes from average to the calculated delta of the min
and max with a guard against negatives
closes #52
2026-06-10 08:29:10 -07:00
Enot (ded) Skelly
ddd0c473fb
chore: remove unused queries
2026-06-09 15:56:26 -07:00
Enot (ded) Skelly
4147a93e8b
feat(observers): add telemetry bucketing to rest api
...
closes #37
2026-06-08 12:32:22 -07:00
Enot (ded) Skelly
149452f066
feat(routes): add resolved hop nodes to known routes API
...
closes #44
2026-06-08 11:30:26 -07:00
Enot (ded) Skelly
68c254ce04
feat: add observation count to routes
2026-06-08 10:59:46 -07:00
Enot (ded) Skelly
32e6e9939a
feat: cross iata routes
...
adds cross iata route finding
closes #42
2026-06-08 10:30:49 -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
cbf2c0bc5f
fix: message cursor direction
...
closes : #39
2026-06-06 11:21:12 -07:00
Enot (ded) Skelly
c792029d3d
fix: routes pagination cursor
...
closes #41
2026-06-06 11:14:13 -07:00
Enot (ded) Skelly
c0051606ee
fix: route search should have src and dest in order
...
previous just checked if the route contained the hashes
at all, not if the src was actually before the dest
2026-06-05 16:44:28 -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
8b23f8a4a2
change: channel messages descending
...
this changes channel messages fetched over the api to
return newest first so users can fetch back through time
2026-06-05 12:40:47 -07:00
Enot (ded) Skelly
ae14d948d0
add scopes api
2026-06-05 12:31:35 -07:00
Enot (ded) Skelly
588b3705c9
add packet and message backfill api
...
/packets/backfill, /messages/backfill
both take afterId and limit. the id is the message or
packet observation last received to backfill after
2026-06-05 12:05:24 -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
594cd7281e
add scope stats api endpoint
2026-06-04 11:17:58 -07:00
Enot (ded) Skelly
1e5ccc6e50
add filter by scope to messages
...
also adds the multi iata filter from other endpoints
for messages now on both routes
2026-06-04 11:07:54 -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
cba1690470
add region filter to observers
2026-06-03 15:07:36 -07:00
Enot (ded) Skelly
67e60de76f
add region filter to nodes
2026-06-03 14:59:26 -07:00
Enot (ded) Skelly
a49c64b4b5
add region filtering to packets
2026-06-03 14:37:18 -07:00
Enot (ded) Skelly
8c71277de8
add radio-presets stats
2026-06-03 13:56:31 -07:00
Enot (ded) Skelly
153a8cb7cc
fix: packet payload filter for request (0)
2026-06-03 09:42:44 -07:00
Enot (ded) Skelly
335ff9662e
add path resolution
2026-06-02 16:26:32 -07:00