perf: keep source aggregation off interactive requests

This commit is contained in:
ImBenji
2026-08-04 21:48:44 +01:00
parent d020fa3811
commit 6e666838ba
3 changed files with 10 additions and 10 deletions
+1 -1
View File
@@ -8,7 +8,7 @@ async function loadStatsPage() {
document.getElementById("statusTable").classList.remove("content-loading"); document.getElementById("statusTable").classList.remove("content-loading");
document.getElementById("sourceTable").innerHTML = data.bySource document.getElementById("sourceTable").innerHTML = data.bySource
.map(r => `<tr><td>${escapeHtml(r.source)}</td><td style="text-align:right; padding-left:24px">${r.n.toLocaleString()}</td></tr>`).join(""); .map(r => `<tr><td>${escapeHtml(r.source)}</td><td style="text-align:right; padding-left:24px"><span class="badge ok">indexed</span></td></tr>`).join("");
document.getElementById("statusTable").innerHTML = data.byStatus document.getElementById("statusTable").innerHTML = data.byStatus
.map(r => `<tr><td><span class="badge ${r.status === "ready" ? "ok" : "pending"}">${escapeHtml(r.status)}</span></td><td style="text-align:right; padding-left:24px">${r.n.toLocaleString()}</td></tr>`).join(""); .map(r => `<tr><td><span class="badge ${r.status === "ready" ? "ok" : "pending"}">${escapeHtml(r.status)}</span></td><td style="text-align:right; padding-left:24px">${r.n.toLocaleString()}</td></tr>`).join("");
+8 -8
View File
@@ -4,10 +4,10 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Duriin Admin — Stats</title> <title>Duriin Admin — Stats</title>
<link rel="stylesheet" href="/admin/assets/css/base.css?v=20260804-4"> <link rel="stylesheet" href="/admin/assets/css/base.css?v=20260804-5">
<link rel="stylesheet" href="/admin/assets/css/layout.css?v=20260804-4"> <link rel="stylesheet" href="/admin/assets/css/layout.css?v=20260804-5">
<link rel="stylesheet" href="/admin/assets/css/components.css?v=20260804-4"> <link rel="stylesheet" href="/admin/assets/css/components.css?v=20260804-5">
<link rel="stylesheet" href="/admin/assets/css/intel.css?v=20260804-4"> <link rel="stylesheet" href="/admin/assets/css/intel.css?v=20260804-5">
</head> </head>
<body> <body>
@@ -50,10 +50,10 @@
<div style="display:flex; gap:32px; flex-wrap:wrap; padding-top:4px"> <div style="display:flex; gap:32px; flex-wrap:wrap; padding-top:4px">
<div> <div>
<div class="section-heading">By source</div> <div class="section-heading">Known sources</div>
<div class="table-wrap" style="width:auto; min-width:220px"> <div class="table-wrap" style="width:auto; min-width:220px">
<table style="width:auto"> <table style="width:auto">
<thead><tr><th>Source</th><th style="text-align:right">Count</th></tr></thead> <thead><tr><th>Source</th><th style="text-align:right">State</th></tr></thead>
<tbody id="sourceTable"></tbody> <tbody id="sourceTable"></tbody>
</table> </table>
</div> </div>
@@ -74,7 +74,7 @@
<div id="toast"><span class="toast-dot"></span><span id="toast-msg"></span></div> <div id="toast"><span class="toast-dot"></span><span id="toast-msg"></span></div>
<script src="/admin/assets/js/app.js?v=20260804-4"></script> <script src="/admin/assets/js/app.js?v=20260804-5"></script>
<script src="/admin/assets/js/stats.js?v=20260804-4"></script> <script src="/admin/assets/js/stats.js?v=20260804-5"></script>
</body> </body>
</html> </html>
+1 -1
View File
@@ -13,7 +13,7 @@ try {
(SELECT COUNT(*) FROM article_embedding_meta WHERE embedded_at >= datetime('now', '-1 hour')) AS contentPerHour (SELECT COUNT(*) FROM article_embedding_meta WHERE embedded_at >= datetime('now', '-1 hour')) AS contentPerHour
`).get(); `).get();
const bySource = db.prepare(` const bySource = db.prepare(`
SELECT source, COUNT(*) AS n FROM articles GROUP BY source ORDER BY n DESC SELECT DISTINCT source FROM articles ORDER BY source
`).all(); `).all();
// Avoid scanning the 3.7 GB article table for legacy content-status values. // Avoid scanning the 3.7 GB article table for legacy content-status values.
// Readiness is the useful operational distinction and is available from the // Readiness is the useful operational distinction and is available from the