From c8647a9e9d7145133cdabdfb9cdfbc24811cc95f Mon Sep 17 00:00:00 2001 From: Jos Vooges | STH Date: Tue, 8 Sep 2026 03:21:13 +0200 Subject: [PATCH] Show total job count and aggregate download speed on Jobs. Co-authored-by: Cursor --- apps/admin-ui/src/app/downloads/page.tsx | 28 +++++++++++++++++++++++- apps/admin-ui/src/app/globals.css | 17 ++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/apps/admin-ui/src/app/downloads/page.tsx b/apps/admin-ui/src/app/downloads/page.tsx index d5c0cb8..05cd9a1 100644 --- a/apps/admin-ui/src/app/downloads/page.tsx +++ b/apps/admin-ui/src/app/downloads/page.tsx @@ -293,6 +293,17 @@ export default function DownloadsPage() { () => jobs.filter((j) => j.status === "IMPORTED"), [jobs] ); + const downloadingCount = useMemo( + () => jobs.filter((j) => j.status === "DOWNLOADING").length, + [jobs] + ); + const totalSpeedBps = useMemo( + () => + jobs + .filter((j) => j.status === "DOWNLOADING") + .reduce((sum, j) => sum + (j.progress?.speedBps ?? 0), 0), + [jobs] + ); async function runSearch() { if (!query.trim() || !nodeId) return; @@ -865,8 +876,23 @@ export default function DownloadsPage() {
-
+

Jobs

+
+ + {jobs.length} job{jobs.length === 1 ? "" : "s"} + {activeJobs.length > 0 || completedJobs.length > 0 + ? ` · ${activeJobs.length} actief · ${completedJobs.length} voltooid` + : ""} + + + Snelheid:{" "} + + {downloadingCount === 0 ? "—" : formatSpeed(totalSpeedBps)} + + {downloadingCount > 0 ? ` (${downloadingCount} downloadend)` : ""} + +
diff --git a/apps/admin-ui/src/app/globals.css b/apps/admin-ui/src/app/globals.css index ca3bbfd..f9a8eef 100644 --- a/apps/admin-ui/src/app/globals.css +++ b/apps/admin-ui/src/app/globals.css @@ -1418,6 +1418,23 @@ tr.row-selected { gap: 0.35rem; justify-content: flex-end; } +.downloads-jobs-head { + display: flex; + flex-wrap: wrap; + align-items: baseline; + justify-content: space-between; + gap: 0.5rem 1.25rem; +} +.downloads-jobs-totals { + display: flex; + flex-wrap: wrap; + gap: 0.35rem 1.25rem; + font-size: 0.85rem; +} +.downloads-jobs-speed { + color: var(--text-bright, var(--text)); + font-variant-numeric: tabular-nums; +} .downloads-target-select { min-height: 36px; font-size: 0.8rem;