From 35fe420701efe16cc00c2095870754336fc44503 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Thu, 28 May 2026 20:03:32 -0400 Subject: [PATCH] feat(maintenance): live queue-depth bar under the backfill buttons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each maintenance button (ML backfill, centroid recompute → ml queue; thumbnail backfill → thumbnail queue) now shows a status bar with the live pending count for its Celery queue, so the operator can see work is already queued/running before re-triggering and piling on. MaintenancePanel polls /api/system/activity/queues every 4s; QueueStatusBar reads the depth and turns warning-colored when the queue is busy. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../settings/CentroidRecomputeCard.vue | 2 + .../components/settings/MLBackfillCard.vue | 2 + .../components/settings/MaintenancePanel.vue | 18 +++++ .../components/settings/QueueStatusBar.vue | 69 +++++++++++++++++++ .../settings/ThumbnailBackfillCard.vue | 2 + 5 files changed, 93 insertions(+) create mode 100644 frontend/src/components/settings/QueueStatusBar.vue diff --git a/frontend/src/components/settings/CentroidRecomputeCard.vue b/frontend/src/components/settings/CentroidRecomputeCard.vue index 1f49210..832db7d 100644 --- a/frontend/src/components/settings/CentroidRecomputeCard.vue +++ b/frontend/src/components/settings/CentroidRecomputeCard.vue @@ -11,6 +11,7 @@ mdi-vector-triangle Recompute centroids Enqueued. + @@ -19,6 +20,7 @@ import { toast } from '../../utils/toast.js' import { ref } from 'vue' import { useMLStore } from '../../stores/ml.js' +import QueueStatusBar from './QueueStatusBar.vue' const store = useMLStore() const busy = ref(false) const done = ref(false) diff --git a/frontend/src/components/settings/MLBackfillCard.vue b/frontend/src/components/settings/MLBackfillCard.vue index 1023811..9535648 100644 --- a/frontend/src/components/settings/MLBackfillCard.vue +++ b/frontend/src/components/settings/MLBackfillCard.vue @@ -10,6 +10,7 @@ mdi-refresh Run backfill now Enqueued. + @@ -18,6 +19,7 @@ import { toast } from '../../utils/toast.js' import { ref } from 'vue' import { useMLStore } from '../../stores/ml.js' +import QueueStatusBar from './QueueStatusBar.vue' const store = useMLStore() const busy = ref(false) const done = ref(false) diff --git a/frontend/src/components/settings/MaintenancePanel.vue b/frontend/src/components/settings/MaintenancePanel.vue index 42c775d..0258bc1 100644 --- a/frontend/src/components/settings/MaintenancePanel.vue +++ b/frontend/src/components/settings/MaintenancePanel.vue @@ -23,6 +23,8 @@ diff --git a/frontend/src/components/settings/ThumbnailBackfillCard.vue b/frontend/src/components/settings/ThumbnailBackfillCard.vue index 37aab2a..7d73e0d 100644 --- a/frontend/src/components/settings/ThumbnailBackfillCard.vue +++ b/frontend/src/components/settings/ThumbnailBackfillCard.vue @@ -11,6 +11,7 @@ mdi-image-refresh Run backfill now Enqueued. + @@ -19,6 +20,7 @@ import { toast } from '../../utils/toast.js' import { ref } from 'vue' import { useThumbnailsStore } from '../../stores/thumbnails.js' +import QueueStatusBar from './QueueStatusBar.vue' const store = useThumbnailsStore() const busy = ref(false) const done = ref(false)