fix(v2): Queue-Widget ist immer sichtbar (auch ohne aktive Jobs)

Vorher: filterte stale-Jobs raus, bei leerer aktiver Queue display:none → User sah nichts.
Jetzt: immer sichtbar mit 'Queue leer · N Worker bereit' wenn nichts aktiv.
Tooltip zeigt Stale-Jobs als 'letzter Lauf'-Liste, wenn keine aktiven Jobs da sind.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dotty Dotter 2026-04-25 22:13:30 +02:00
parent 273d45ea36
commit 997d59a9a5

View File

@ -10,7 +10,7 @@
#}
<div id="v2-queue-statusbar"
style="display:none;position:fixed;bottom:1rem;left:1rem;
style="position:fixed;bottom:1rem;left:1rem;
background:var(--ecg-card-bg);border:1px solid var(--ecg-light);
border-radius:6px;padding:0.4rem 0.8rem;
font-family:var(--font-mono);font-size:11px;color:var(--ecg-dark);
@ -37,7 +37,8 @@
fetch('/api/queue/status')
.then(function (r) { return r.json(); })
.then(function (qs) {
var jobs = (qs.jobs || []).filter(function (j) { return j.status !== 'stale'; });
var allJobs = qs.jobs || [];
var jobs = allJobs.filter(function (j) { return j.status !== 'stale'; });
var processing = jobs.filter(function (j) { return j.status === 'processing'; }).length;
var queued = jobs.filter(function (j) { return j.status === 'queued' || j.status === 'pending'; }).length;
var completed = jobs.filter(function (j) { return j.status === 'completed'; }).length;
@ -47,23 +48,22 @@
var text = document.getElementById('v2-queue-status-text');
if (!bar || !text) return;
if (processing + queued + completed + failed === 0) {
bar.style.display = 'none';
return;
}
bar.style.display = 'block';
var workers = qs.workers_running != null ? qs.workers_running : '?';
var parts = [];
if (processing > 0) parts.push('⏳ ' + processing + ' in Bearbeitung');
if (queued > 0) parts.push('⏸ ' + queued + ' wartend');
if (completed > 0) parts.push('✓ ' + completed + ' fertig');
if (failed > 0) parts.push('✗ ' + failed + ' fehlgeschlagen');
if (parts.length === 0) {
parts.push('Queue leer · ' + workers + ' Worker bereit');
}
text.textContent = parts.join(' · ');
var tip = document.getElementById('v2-queue-tooltip');
if (!tip) return;
var workers = qs.workers_running != null ? qs.workers_running : '?';
var rows = jobs.slice(0, 20).map(function (j) {
// Tooltip zeigt bevorzugt aktive Jobs, Stale als „letzter Lauf"-Block.
var displayJobs = jobs.length ? jobs : allJobs;
var rows = displayJobs.slice(0, 20).map(function (j) {
var icon = j.status === 'completed' ? '✓'
: j.status === 'processing' ? '⏳'
: j.status === 'failed' ? '✗'