Serve /api/v1/stats counts from realtime in-memory counters (closes #27)
check / check (push) Successful in 2m20s
check / check (push) Successful in 2m20s
The stats endpoints recomputed every count with a COUNT(*) over each table plus a MIN/MAX union scan on every request, which took the whole timeout and returned 500 once the database passed a few GiB. The row counts (ASNs, prefixes, peerings, peers, live routes) now live in memory: seeded once at startup and adjusted on each write as routes and records are inserted, updated and removed, so a read serves them with no scan and no timer. A live-route upsert is an UPDATE, then an INSERT only when no row matched, so its rows-affected count tells a new route from a re-announced one. Oldest/newest timestamps read one row from each end of the last_updated index, which also fixes the per-call scan warning. The distinct-prefix histogram stays a single indexed query. JSON shape of /api/v1/stats and the status page is unchanged. Model: opus-4-8
This commit is contained in:
@@ -18,6 +18,8 @@ type Stats struct {
|
||||
Peers int
|
||||
FileSizeBytes int64
|
||||
LiveRoutes int
|
||||
IPv4Routes int
|
||||
IPv6Routes int
|
||||
OldestRoute *time.Time
|
||||
NewestRoute *time.Time
|
||||
IPv4PrefixDistribution []PrefixDistribution
|
||||
|
||||
Reference in New Issue
Block a user