25 Commits
Author SHA1 Message Date
MrAlders0n d788e82ab4 feat(stats): rank top advertisers by flood or direct (#218)
Top advertisers ranked by flood + direct, so chatty companions with few flood adverts topped the list. sort=flood|direct is now required and applied before the limit; client floors raised to app 1.0.0 / web 2.0.4.
2026-10-10 09:38:36 -04:00
MrAlders0n a1aff810e9 fix(api): answer 404 only for missing rows
Lookups turned every error into a 404, and region filters into a 400, so a
transient database failure looked final to clients that don't retry 4xx.
Missing rows stay 404/400; anything else is a 500. Empty /regions and
/iatas lists are [] rather than null.
2026-10-02 19:03:46 -04:00
MrAlders0n 2042c1617f feat(stats): roll hourly scope observers and advertising nodes 2026-10-02 15:24:33 -04:00
MrAlders0n 53d9f86dd4 feat(stats): split /stats/scopes packet counts by hour 2026-10-02 13:57:54 -04:00
MrAlders0n 98006a9364 feat(stats): serve historical stats from hourly rollups
Stats endpoints read hourly rollup tables filled once per closed hour by one
advisory-locked task, instead of materialized views that re-scanned every
observation on each refresh. IATA-set tables give exact distinct counts for any
IATA set or region. Cleanup holds raw rows for unrolled hours (up to 24h).

Adds /stats/series; ingest keeps packet observation counts, observer last IATA,
channel message counts and trace tag summaries. 001_baseline.sql is rewritten,
so pre-release 2.0 databases must be recreated. See docs/historical-stats.md.
2026-10-02 07:43:56 -04:00
MrAlders0n 2f49ffb3a3 feat(api): filter scope lists by region and catalogue membership
Region-filtered /scopes and /stats/scopes now list manual scopes configured
for the region and imported scopes whose MeshMapper catalogue includes the
IATA, instead of inferring membership from observed traffic. Filtered
/scopes returns string[] like the unfiltered call.

Manual scopes now require a region in config.
2026-09-30 22:05:04 -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 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 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 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 30327cd98d fix(api): bound list limits consistently (#112) 2026-09-06 10:20:45 -04: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 b38663d3a1 feat: add stats for top advertiser and talkers
closes #75
closes #74
2026-07-23 10:41:16 -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 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 cda4905815 docs: update SPDX license lines 2026-06-08 16:08:39 -07:00
Enot (ded) Skelly 14cb9e6e2d docs: add APGL3 license 2026-06-08 15:46:01 -07:00
Enot (ded) Skelly a943660778 rename to beacon 2026-06-05 08:10:43 -07:00
Enot (ded) Skelly 594cd7281e add scope stats api endpoint 2026-06-04 11:17:58 -07:00
Enot (ded) Skelly 8c71277de8 add radio-presets stats 2026-06-03 13:56:31 -07:00
Enot (ded) Skelly afb4fe9053 update swag comments
fixes issue with generics not being parsed
2026-06-02 08:39:27 -07:00
Enot (ded) Skelly 31bcda03b9 add swagger
change to named functions in route handlers for swagger docs
2026-05-28 15:11:04 -07:00
Enot (ded) Skelly 71f5cbae3b add stats api 2026-05-28 13:07:22 -07:00
Enot (ded) Skelly 84df3949d1 init 2026-05-20 11:40:04 -07:00