feat: global Docker health indicator and graceful degradation

- GET /api/health endpoint returning Docker connectivity status
- Sidebar shows Docker connection dot (green=connected, red=disconnected)
- Stale scanner returns store-only results when Docker is unavailable
- Polls health every 30s
This commit is contained in:
2026-03-30 13:43:33 +03:00
parent b57b164be0
commit 37cfa090ac
15 changed files with 317 additions and 277 deletions
+4 -4
View File
@@ -5,6 +5,7 @@
import { t } from '$lib/i18n';
import { resolvedTheme, applyTheme } from '$lib/stores/theme';
import { IconLoader } from '$lib/components/icons';
import { setAuthToken, isAuthenticated } from '$lib/auth';
let username = $state('');
let password = $state('');
@@ -25,7 +26,7 @@
headers: { 'Authorization': `Bearer ${urlToken}` }
});
if (res.ok) {
localStorage.setItem('auth_token', urlToken);
setAuthToken(urlToken);
// Remove token from URL to prevent leakage via history/referrer.
history.replaceState(null, '', '/login');
goto('/');
@@ -37,8 +38,7 @@
// Remove invalid token from URL.
history.replaceState(null, '', '/login');
}
const existingToken = localStorage.getItem('auth_token');
if (existingToken) {
if (isAuthenticated()) {
goto('/');
}
});
@@ -57,7 +57,7 @@
error = envelope.error ?? $t('login.loginFailed');
return;
}
localStorage.setItem('auth_token', envelope.data.token);
setAuthToken(envelope.data.token);
goto('/');
} catch (err: unknown) {
error = err instanceof Error ? err.message : $t('login.networkError');