diff --git a/src/frontend/e2e/smoke.spec.js b/src/frontend/e2e/smoke.spec.js index aff8e90c2..a8d8224c8 100644 --- a/src/frontend/e2e/smoke.spec.js +++ b/src/frontend/e2e/smoke.spec.js @@ -26,4 +26,12 @@ test.describe('smoke', () => { await page.goto('/templates') await expect(page.getByText(/template/i).first()).toBeVisible({ timeout: 10000 }) }) + + test('monitoring page loads', async ({ page }) => { + await page.goto('/monitoring') + // Header, summary cards, or empty state — any of these confirms the route mounted. + await expect( + page.getByText(/monitoring|fleet|healthy|degraded|no agents/i).first() + ).toBeVisible({ timeout: 10000 }) + }) }) diff --git a/src/frontend/src/views/Monitoring.vue b/src/frontend/src/views/Monitoring.vue index cc2e392b4..47977d813 100644 --- a/src/frontend/src/views/Monitoring.vue +++ b/src/frontend/src/views/Monitoring.vue @@ -17,9 +17,9 @@ - + {{ monitoringStore.enabled ? 'Monitoring Active' : 'Monitoring Disabled' }} @@ -64,28 +64,28 @@
{{ monitoringStore.summary.total_agents }}
Total Agents
-
-
{{ monitoringStore.summary.healthy }}
+
+
{{ monitoringStore.summary.healthy }}
Healthy
-
-
{{ monitoringStore.summary.degraded }}
+
+
{{ monitoringStore.summary.degraded }}
Degraded
-
-
{{ monitoringStore.summary.unhealthy }}
+
+
{{ monitoringStore.summary.unhealthy }}
Unhealthy
-
-
{{ monitoringStore.summary.critical }}
+
+
{{ monitoringStore.summary.critical }}
Critical
-
+
-

+

Active Alerts ({{ monitoringStore.alerts.length }})

@@ -99,7 +99,7 @@
{{ alert.agent_name }} @@ -175,7 +175,7 @@
-
+
{{ agent.issues.length }} issue{{ agent.issues.length > 1 ? 's' : '' }}
@@ -373,30 +373,30 @@ function getStatusIcon(status) { function getStatusBgClass(status) { switch (status) { - case 'healthy': return 'bg-green-100 dark:bg-green-900/30' - case 'degraded': return 'bg-yellow-100 dark:bg-yellow-900/30' - case 'unhealthy': return 'bg-red-100 dark:bg-red-900/30' - case 'critical': return 'bg-red-200 dark:bg-red-900/50' + case 'healthy': return 'bg-status-success-100 dark:bg-status-success-900/30' + case 'degraded': return 'bg-status-warning-100 dark:bg-status-warning-900/30' + case 'unhealthy': return 'bg-status-danger-100 dark:bg-status-danger-900/30' + case 'critical': return 'bg-status-danger-200 dark:bg-status-danger-900/50' default: return 'bg-gray-100 dark:bg-gray-700' } } function getStatusTextClass(status) { switch (status) { - case 'healthy': return 'text-green-600 dark:text-green-400' - case 'degraded': return 'text-yellow-600 dark:text-yellow-400' - case 'unhealthy': return 'text-red-600 dark:text-red-400' - case 'critical': return 'text-red-700 dark:text-red-500' + case 'healthy': return 'text-status-success-600 dark:text-status-success-400' + case 'degraded': return 'text-status-warning-600 dark:text-status-warning-400' + case 'unhealthy': return 'text-status-danger-600 dark:text-status-danger-400' + case 'critical': return 'text-status-danger-700 dark:text-status-danger-500' default: return 'text-gray-500 dark:text-gray-400' } } function getStatusBadgeClass(status) { switch (status) { - case 'healthy': return 'bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-300' - case 'degraded': return 'bg-yellow-100 dark:bg-yellow-900/30 text-yellow-700 dark:text-yellow-300' - case 'unhealthy': return 'bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300' - case 'critical': return 'bg-red-200 dark:bg-red-900/50 text-red-800 dark:text-red-200' + case 'healthy': return 'bg-status-success-100 dark:bg-status-success-900/30 text-status-success-700 dark:text-status-success-300' + case 'degraded': return 'bg-status-warning-100 dark:bg-status-warning-900/30 text-status-warning-700 dark:text-status-warning-300' + case 'unhealthy': return 'bg-status-danger-100 dark:bg-status-danger-900/30 text-status-danger-700 dark:text-status-danger-300' + case 'critical': return 'bg-status-danger-200 dark:bg-status-danger-900/50 text-status-danger-800 dark:text-status-danger-200' default: return 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400' } }