feat(ia): wave 2 — Activity becomes the whole-app pulse; Overview gets the health strip
The Activity tab only knew Celery — the GPU agent (the majority of processing) and the download pipeline were invisible there. Two new self-polling panels: - GpuActivityPanel: queue depths + triage verdicts (defects / file-ok / unprobed, top reason buckets) with a jump to Maintenance -> Failed processing. The triage detail refetches only when the error count moves. - DownloadsActivityPanel: 24h stat chips + failing-source names with a jump into Subscriptions. Both panels join the Activity tab under Queues+workers AND double as the Overview health strip (side-by-side grid under the Celery summary) — one component set, so Overview answers 'is everything healthy?' across all systems. SystemStatsCards reviewed: content still accurate, left as-is. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CDgx8bQS5YrGRK76v8HUnM
This commit is contained in:
@@ -28,6 +28,13 @@
|
||||
class="mt-4"
|
||||
@open-activity="tab = 'activity'"
|
||||
/>
|
||||
<!-- Health strip (2026-07-02): the same GPU + downloads panels the
|
||||
Activity tab uses — Overview answers "is everything healthy?"
|
||||
across ALL systems, not just the Celery queues above. -->
|
||||
<div class="fc-health-row mt-4">
|
||||
<GpuActivityPanel @open-maintenance="tab = 'maintenance'" />
|
||||
<DownloadsActivityPanel />
|
||||
</div>
|
||||
<v-alert
|
||||
v-if="system.stats && (system.stats.tasks.pending + system.stats.tasks.queued) > 0"
|
||||
type="info" variant="tonal" class="mt-4" closable
|
||||
@@ -38,7 +45,7 @@
|
||||
</v-window-item>
|
||||
|
||||
<v-window-item value="activity">
|
||||
<SystemActivityTab />
|
||||
<SystemActivityTab @open-maintenance="tab = 'maintenance'" />
|
||||
</v-window-item>
|
||||
|
||||
<v-window-item value="cleanup">
|
||||
@@ -58,6 +65,8 @@ import { useSystemStore } from '../stores/system.js'
|
||||
import SystemStatsCards from '../components/settings/SystemStatsCards.vue'
|
||||
import SystemActivitySummary from '../components/settings/SystemActivitySummary.vue'
|
||||
import SystemActivityTab from '../components/settings/SystemActivityTab.vue'
|
||||
import GpuActivityPanel from '../components/settings/GpuActivityPanel.vue'
|
||||
import DownloadsActivityPanel from '../components/settings/DownloadsActivityPanel.vue'
|
||||
import MaintenancePanel from '../components/settings/MaintenancePanel.vue'
|
||||
import CleanupView from './CleanupView.vue'
|
||||
import { useMLStore } from '../stores/ml.js'
|
||||
@@ -93,4 +102,13 @@ watch(tab, (t) => {
|
||||
.fc-settings {
|
||||
max-width: 1140px;
|
||||
}
|
||||
/* Overview health strip: the two pulse panels side by side, stacking on
|
||||
narrow screens. Cancel the panels' own bottom margin — the row owns gaps. */
|
||||
.fc-health-row {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
|
||||
gap: 16px;
|
||||
align-items: start;
|
||||
}
|
||||
.fc-health-row :deep(.v-card) { margin-bottom: 0 !important; }
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user