Commit Graph
258 Commits
Author SHA1 Message Date
n30nex 765408e7fc test: drain readiness probes before packet assertions 2026-09-30 19:34:14 -04:00
MrAlders0n 5b177d6fc9 fix(ingest): strip NUL bytes from observer status
An observer sending NUL-padded status strings had every status update rejected
by Postgres, freezing its status and telemetry. Strip them from the text fields
and the stored JSON, and warn with the fields affected.

Also drop the timestamp-clamp, empty-timestamp and malformed-IATA logs to debug;
they're expected and outnumbered inserted packets several times over.
2026-09-30 18:31:42 -04:00
MrAlders0n 14354b03dc fix(telemetry): stop partial and bogus stats inflating bucketed counters
Bucketed airtime and receive errors used MAX - MIN per bucket, so one zeroed,
replayed or garbage row counted the whole running total (e.g. 47,737 s RX in a
6 h bucket). Buckets are now summed from per-row increments with dips, stale
replays and physically impossible jumps rejected. Ingest skips uptime-only
stats and a migration deletes the rows already stored.
2026-09-30 16:32:11 -04:00
MrAlders0n 0e242574fb feat(meshmapper): import region boundaries from the Zones API
Imported boundaries override borderFile on the border map and for foreign marking, falling back to the manual border when MeshMapper has none.
2026-09-30 12:38:36 -04:00
MrAlders0n 689bc2326a fix(ingest): clear a node's location on an explicit 0/0 advert
A repeater that advertises 0/0 is hiding its position. It was stored as a literal 0/0 that every consumer had to special-case; now the stored latitude, longitude and location source are cleared, an omitted location still preserves the stored one, and the nodeUpdate event sends explicit null lat/lng so clients can clear too. Migration 043 drops rows stored as 0/0 before this change.
2026-09-30 11:29:01 -04:00
MrAlders0n 50d35d8626 fix(api): emit observer statusMetadata as JSON 2026-09-30 10:31:08 -04:00
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