35fe420701
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) <noreply@anthropic.com>
34 lines
1.1 KiB
Vue
34 lines
1.1 KiB
Vue
<template>
|
|
<v-card>
|
|
<v-card-title>Thumbnail backfill</v-card-title>
|
|
<v-card-text>
|
|
<p class="text-body-2 mb-3">
|
|
Scan the library for images with no thumbnail, or whose thumbnail file
|
|
is missing or corrupt on disk. Repair candidates are re-enqueued for
|
|
thumbnail generation. Safe to re-run.
|
|
</p>
|
|
<v-btn color="primary" rounded="pill" :loading="busy" @click="run">
|
|
<v-icon start>mdi-image-refresh</v-icon> Run backfill now
|
|
</v-btn>
|
|
<span v-if="done" class="ml-3 text-caption">Enqueued.</span>
|
|
<QueueStatusBar queue="thumbnail" queue-label="Thumbnail" />
|
|
</v-card-text>
|
|
</v-card>
|
|
</template>
|
|
|
|
<script setup>
|
|
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)
|
|
async function run () {
|
|
busy.value = true
|
|
try { await store.triggerBackfill(); done.value = true }
|
|
catch (e) { toast({ text: e.message, type: 'error' }) }
|
|
finally { busy.value = false }
|
|
}
|
|
</script>
|