From c340439306c94b0bc6c924166633ad4fecca9fd5 Mon Sep 17 00:00:00 2001 From: LordMathis Date: Wed, 29 Oct 2025 00:09:18 +0100 Subject: [PATCH] Add support for 'shutting_down' state in HealthBadge and health service --- webui/src/components/HealthBadge.tsx | 6 ++++++ webui/src/hooks/useInstanceHealth.ts | 2 +- webui/src/lib/healthService.ts | 12 +++++++----- webui/src/types/instance.ts | 4 ++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/webui/src/components/HealthBadge.tsx b/webui/src/components/HealthBadge.tsx index 13eda9f..6cfa02a 100644 --- a/webui/src/components/HealthBadge.tsx +++ b/webui/src/components/HealthBadge.tsx @@ -21,6 +21,8 @@ const HealthBadge: React.FC = ({ health }) => { return ; case "restarting": return ; + case "shutting_down": + return ; case "stopped": return ; case "failed": @@ -36,6 +38,8 @@ const HealthBadge: React.FC = ({ health }) => { return "outline"; case "restarting": return "outline"; + case "shutting_down": + return "outline"; case "stopped": return "secondary"; case "failed": @@ -51,6 +55,8 @@ const HealthBadge: React.FC = ({ health }) => { return "Starting"; case "restarting": return "Restarting"; + case "shutting_down": + return "Shutting Down"; case "stopped": return "Stopped"; case "failed": diff --git a/webui/src/hooks/useInstanceHealth.ts b/webui/src/hooks/useInstanceHealth.ts index 87d818c..2cea936 100644 --- a/webui/src/hooks/useInstanceHealth.ts +++ b/webui/src/hooks/useInstanceHealth.ts @@ -18,7 +18,7 @@ export function useInstanceHealth(instanceName: string, instanceStatus: Instance // Trigger health check when instance status changes to active states useEffect(() => { - if (instanceStatus === 'running' || instanceStatus === 'restarting') { + if (instanceStatus === 'running' || instanceStatus === 'restarting' || instanceStatus === 'shutting_down') { healthService.refreshHealth(instanceName).catch(error => { console.error(`Failed to refresh health for ${instanceName}:`, error) }) diff --git a/webui/src/lib/healthService.ts b/webui/src/lib/healthService.ts index aabea0c..7d47486 100644 --- a/webui/src/lib/healthService.ts +++ b/webui/src/lib/healthService.ts @@ -5,11 +5,12 @@ type HealthCallback = (health: HealthStatus) => void // Polling intervals based on health state (in milliseconds) const POLLING_INTERVALS: Record = { - 'starting': 5000, // 5 seconds - frequent during startup - 'restarting': 5000, // 5 seconds - restart in progress - 'ready': 60000, // 60 seconds - stable state - 'stopped': 0, // No polling - 'failed': 0, // No polling + 'starting': 5000, // 5 seconds - frequent during startup + 'restarting': 5000, // 5 seconds - restart in progress + 'shutting_down': 3000, // 3 seconds - monitor shutdown progress + 'ready': 60000, // 60 seconds - stable state + 'stopped': 0, // No polling + 'failed': 0, // No polling } class HealthService { @@ -96,6 +97,7 @@ class HealthService { case 'running': return 'starting' // Should not happen as we check HTTP for running case 'failed': return 'failed' case 'restarting': return 'restarting' + case 'shutting_down': return 'shutting_down' } } diff --git a/webui/src/types/instance.ts b/webui/src/types/instance.ts index 1c42547..e243b72 100644 --- a/webui/src/types/instance.ts +++ b/webui/src/types/instance.ts @@ -11,9 +11,9 @@ export const BackendType = { export type BackendTypeValue = typeof BackendType[keyof typeof BackendType] -export type InstanceStatus = 'running' | 'stopped' | 'failed' | 'restarting' +export type InstanceStatus = 'running' | 'stopped' | 'failed' | 'restarting' | 'shutting_down' -export type HealthState = 'stopped' | 'starting' | 'ready' | 'failed' | 'restarting' +export type HealthState = 'stopped' | 'starting' | 'ready' | 'failed' | 'restarting' | 'shutting_down' export interface HealthStatus { state: HealthState