n30nex
5fbba24a4a
fix(observers): separate packet metrics from presence updates
2026-09-30 07:19:02 -04:00
MrAlders0n
db30c9b573
fix(db): batch route reconfirmation to avoid ingest stalls ( #180 )
2026-09-28 08:41:48 -04:00
MrAlders0n
1887fccb8d
perf(ingest): reduce database work and buffer MQTT bursts ( #179 )
2026-09-27 22:56:03 -04:00
MrAlders0n
876d99704f
feat(ws): opt-in includeRepeats streams later hearings over new paths ( #178 )
...
Duplicate observations are dropped before the hub today, so a live map only sees each packet's first hearing per observer. Clients that configure includeRepeats also get later hearings whose path is new; nothing is stored, repeats skip the count query, and they are dropped first when the broadcast channel is half full.
2026-09-27 20:38:49 -04:00
MrAlders0n
90f9b50614
feat(ws): allow subdomain wildcards in allowed origins ( #177 )
2026-09-27 20:03:49 -04:00
MrAlders0n
dec643a2ad
feat(ws): opt-in allowed origins and observer key ( #170 )
2026-09-27 11:41:11 -04:00
MrAlders0n
91b4b457b5
perf(db): resolve packet endpoints at read time ( #163 )
...
Storing a full candidate snapshot on every observation was the wrong call. The same node lists got copied thousands of times, about 22 GB on prod. Resolve endpoints live like path hops and drop the column.
2026-09-25 13:59:07 -04:00
MrAlders0n
3dee2098ba
perf(db): batch retention deletes and tune autovacuum ( #162 )
...
Default packets.retention drops to 7 days.
2026-09-25 11:38:04 -04:00
n30nex
c02317a4ac
feat(packets): summarize ACK and trace references ( #161 )
2026-09-23 20:18:48 -04:00
n30nex
20691dc5a3
feat(backup): verify native archives offline without extraction ( #160 )
2026-09-23 20:18:45 -04:00
n30nex
8a3fa7e6bf
feat(stats): add bounded path and hash-width analytics ( #159 )
2026-09-23 20:18:41 -04:00
n30nex
6107578c25
feat(stats): add bounded reception signal analytics ( #157 )
2026-09-23 20:16:22 -04:00
n30nex
a25e2675c8
feat(backup): add protected database and config download ( #154 )
2026-09-23 20:13:40 -04:00
n30nex
4d2642abec
feat(admin): add protected account lifecycle endpoints ( #149 )
2026-09-23 20:10:35 -04:00
n30nex
951b79bf6e
refactor(api): stabilize router settings and admin route wiring ( #155 )
2026-09-19 21:10:45 -04:00
n30nex
6aba17c75e
feat(nodes): indicate repeaters outside configured local borders ( #153 )
2026-09-19 15:27:34 -04:00
n30nex
775aedfd2a
feat(admin): update runtime CORS origins consistently ( #150 )
...
* feat(admin): update runtime CORS origins consistently
* test(admin): preserve rate-limit headers after CORS updates
* test(admin): preserve router connection budget after rebase
2026-09-19 15:27:25 -04:00
n30nex
c7ace0ce0e
feat(ws): limit connection attempts and signal capacity shedding ( #141 )
2026-09-19 13:28:47 -04:00
n30nex
cf5ff7a974
feat(stats): compare flood packets reported by two observers ( #152 )
...
* feat(stats): compare distinct flood packets across observers
* test(stats): use the migrated observation deduplication key
2026-09-19 10:36:39 -04:00
n30nex
6540b9253d
feat(admin): expose selected startup configuration ( #147 )
2026-09-19 10:36:30 -04:00
n30nex
dab228e9bb
feat(logging): configure levels and structured runtime output ( #144 )
...
* feat(logging): configure levels and structured runtime output
* fix(logging): bound request-derived log fields
* fix(logging): retain malformed IATA source attributes safely
* test(logging): capture structured REST rate-limit records
2026-09-19 10:36:26 -04:00
n30nex
595ef4442b
feat(api): rate limit REST requests by trusted client IP ( #140 )
2026-09-19 08:43:24 -04:00
n30nex
0067e51357
feat(cache): add payload-free debug cache diagnostics ( #145 )
2026-09-18 06:18:42 -04:00
n30nex
93f85cab51
feat(auth): protect the admin subtree with a bearer key ( #146 )
2026-09-18 06:18:27 -04:00
n30nex
85b1c3961d
feat(packets): populate advert summaries in history and live events ( #143 )
2026-09-18 06:18:19 -04:00
n30nex
bcdea76c26
feat(stats): filter scope counts by IATA and region ( #142 )
...
* feat(stats): filter scope counts by IATA and region
* perf(stats): aggregate region observations before counting scopes
2026-09-18 06:18:06 -04:00
n30nex
b21279c747
feat(db): add operator account lifecycle storage ( #148 )
2026-09-18 06:17:59 -04:00
n30nex
9164659544
feat(backup): export private database and saved-config bundles ( #151 )
...
* feat(backup): export bounded database and saved-config bundles
* test(backup): preserve synthetic channel keys in exports
* fix(backup): check writable file closure before publication
2026-09-18 06:17:52 -04:00
n30nex
ce8c6cdf8b
fix(ingest): honor explicit zero locations in adverts ( #139 )
2026-09-18 06:17:44 -04:00
MrAlders0n
e15f873597
fix(api): return JSON 500 when bucketed telemetry query fails ( #137 )
2026-09-10 07:55:52 -04:00
MrAlders0n
d202205659
fix(observers): rename telemetry airtime fields to seconds ( #136 )
2026-09-10 07:17:29 -04:00
MrAlders0n
b66573b3b7
feat(observers): per-observer activity endpoint ( #135 )
2026-09-10 06:53:00 -04:00
n30nex
22410cf4a6
fix(api): trust client IP headers only from configured proxies ( #133 )
2026-09-09 20:42:35 -04:00
n30nex
f390086058
fix(channels): preserve timestamp ties in page cursors ( #132 )
2026-09-09 20:25:07 -04:00
n30nex
04fc0266d1
fix(packets): preserve captured endpoint names in history ( #128 )
2026-09-09 18:45:52 -04:00
n30nex
88bc0dc88a
feat(retention): age out unreferenced observers when enabled ( #126 )
2026-09-09 18:45:08 -04:00
n30nex
f66d43106b
fix(ingest): isolate MQTT client IDs across workers ( #117 )
2026-09-09 18:44:12 -04:00
n30nex
a78ea368a3
fix(background): preserve refresh failures in task outcomes ( #113 )
2026-09-06 10:21:45 -04:00
n30nex
30327cd98d
fix(api): bound list limits consistently ( #112 )
2026-09-06 10:20:45 -04:00
MrAlders0n
7d759d0a0f
perf: known_routes retention, digest identity, and a working batched reconfirm ( #98 )
...
* fix: cascade channel_messages on packet delete
* rebuild known_routes keyed on (iata, path_key)
* add route retention delete, batch reconfirm, path_key upsert
* compute route path_key in store, add DeleteOldRoutes
* add routes retention config
* wire route retention into cleanup, batch reconfirm
* prune routes in reconfirm task, not cleanup
* expand routes retention docs in example config
2026-08-12 09:30:03 -04:00
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
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
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
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