Commit Graph
252 Commits
Author SHA1 Message Date
MrAlders0n 8a488fde95 fix(meshmapper): retry failed catalogue fetches sooner
A transient failure pushed the next attempt out by the full refresh interval. Failures now retry in five minutes, with a server Retry-After still honoured as a ceiling.
2026-09-30 10:31:08 -04:00
MrAlders0n 9ce4e8d10c fix(cache): invalidate derived scope keys on catalogue import 2026-09-30 10:31:08 -04:00
MrAlders0n 3b548900a0 fix(api): tolerate client clock skew and drop the dead route evidence cursor 2026-09-30 10:31:08 -04:00
MrAlders0n 1c2841a3c9 perf(db): compute route ambiguity once per reconfirm run
The four-way GROUP BY over node_short_ids ran once per 1000-route batch, up to 750 times a run, and could eat the whole 5s batch budget. The task now fetches the set once and passes it to each batch.
2026-09-30 10:31:08 -04:00
MrAlders0n ab27334f15 fix(backup): report trailing archive data as corruption 2026-09-30 10:31:08 -04:00
MrAlders0n e1b78b6458 fix(profiling): offset periodic captures and harden the recorder
Periodic ticks now start five minutes off the task tickers so the hourly reconfirm trigger stops colliding with the cooldown, any capture clears a deferred periodic, subdirectories no longer stop the recorder, and the metadata sidecar is published before the profile.
2026-09-30 10:31:08 -04:00
MrAlders0n e7061f5e10 fix(api): log the cause of account 500s 2026-09-30 10:31:08 -04:00
MrAlders0n c952afdd29 fix(ingest): let paho auto-ack MQTT deliveries
Sessions are clean and client IDs random, so deferring acks never bought redelivery; it only capped delivery at the broker's inflight window and pushed backlog into the broker queue, where drops are silent.
2026-09-30 10:31:08 -04:00
MrAlders0n 6852074180 fix(ingest): record hearing paths right after the insert
MarkSent ran after the side effects, so a broker copy on another worker could win it and be streamed as a repeat of the first hearing. It now runs before any further DB work, unconditionally so the set is warm before anyone opts in, and never for TRACE, whose path bytes are per-hop SNR.
2026-09-30 10:31:08 -04:00
MrAlders0n d733975165 fix(backup): abort exports on shutdown and sweep stale staging dirs
srv.Shutdown never cancelled the request context, so a SIGTERM mid-export left the plaintext dump and pg_service.conf in TMPDIR. The handler now derives its context from the app context and the router removes staging dirs older than 20 minutes at startup.
2026-09-30 10:31:08 -04:00
MrAlders0n 5cf060114a feat: add bounded CPU profiling (#182)
* feat: add bounded CPU profiling

* fix(profiling): defer cooldown-skipped samples and configure triggers
2026-09-30 07:52:59 -04:00
MrAlders0n fd57c8b00c fix(ingest): accept space-separated and colonless-offset timestamps 2026-09-30 07:48:21 -04:00
n30nex 89a376c291 fix(ingest): accept RFC3339 timestamp offsets and precision 2026-09-30 07:33:53 -04:00
n30nex 97cc22a5a0 fix: address maintainer review for #166 2026-09-30 07:33:45 -04:00
n30nex 3b806c1c39 fix(ingest): resolve advert endpoints after node updates 2026-09-30 07:33:45 -04:00
n30nex 6bf58acb80 fix: address maintainer review for #176 2026-09-30 07:19:03 -04:00
n30nex 2abed6c195 feat(channels): expose recorded packet scope in message delivery 2026-09-30 07:19:03 -04:00
n30nex 83cbaff1cf fix: address release review follow-ups for #174 2026-09-30 07:19:03 -04:00
n30nex 574bba4e13 fix: address maintainer review for #174 2026-09-30 07:19:03 -04:00
n30nex 986a6c0788 test(scopes): synchronize the timeout fixture state 2026-09-30 07:19:03 -04:00
n30nex c18e059e0d feat(scopes): import cached regional MeshMapper catalogues 2026-09-30 07:19:03 -04:00
n30nex 85c9123e9a fix: address maintainer review for #172 2026-09-30 07:19:03 -04:00
n30nex cd20bc5c34 test(routes): cover server-anchored evidence windows 2026-09-30 07:19:03 -04:00
n30nex c448a04ea0 feat(routes): add bounded retained observation evidence 2026-09-30 07:19:03 -04:00
n30nex dea5395783 fix: address release review follow-ups for #169 2026-09-30 07:19:02 -04:00
n30nex d3c330e8fb fix: address maintainer review for #169 2026-09-30 07:19:02 -04:00
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