perf: keep source aggregation off interactive requests
This commit is contained in:
@@ -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("");
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user