Split the DB health page into independent panes so fast pg_catalog-based diagnostics render without waiting for the slower job table scans, and enrich the slow queries view with server-side sort, reset, and better setup guidance. Backend: - Split /api/db_health into two endpoints: fast panes (database_size, connection_pool, table_maintenance, slow_queries, datatables) and /jobs (job_retention, large_results with scan_limit). - Add GET /api/db_health/slow_queries?sort=total|mean|calls for server-side sorting of pg_stat_statements queries (sort whitelisted via enum, SQL-injection safe). - Add POST /api/db_health/slow_queries/reset to call pg_stat_statements_reset(). - Return stats_reset timestamp from pg_stat_statements_info (PG 14+). - Bump slow queries to top 50 sorted by total_exec_time (was top 10 by mean_exec_time, which misses high-cumulative-load queries). - Truncate slow queries to 500 chars (was 200). - Filter table_maintenance to tables with >= 1000 total tuples. Frontend (DbHealth.svelte): - Two tabs (Overview / Jobs) with auto-refresh on selection. - Refresh buttons right-aligned in both tabs; Jobs tab keeps the scan_limit selector on the left. - Job Retention & Large Results always render, with "Click Refresh to load" placeholders when no data yet. - Slow queries table: clickable column headers for server-side sort, click a row to toggle the full query text. - Reset stats button with confirmation dialog, displays "Stats since" timestamp for before/after comparison workflow. - When pg_stat_statements is not installed, show numbered setup instructions with copyable SQL snippets. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Windmill frontend
The Windmill frontend written in Svelte 5 + Tailwind CSS
The frontend is under AGPL, see the LICENSE file at the root of this repo