mirror of
https://github.com/Studio-Saelix/sencho.git
synced 2026-08-07 01:14:14 +00:00
bb4ddde35a
Bulk stack-status aggregation collapsed a stack to "running" as soon as any container was up, so a multi-container stack with crashed containers showed a green UP pill and the degradation was invisible from the sidebar. Add a crash-aware "partial" state: a stack is partial when at least one container is running and at least one has genuinely failed (exited with a non-zero code, dead, or crash-looping). Cleanly finished one-shot containers (exit 0) and clean restart-policy cycling do not count, so an app with a completed init job stays UP. The exit code is read from the container Status string, so no extra inspect calls are needed. Render partial as an amber PT pill with a hover tooltip showing the running/total count, fold it into the Down filter (needs-attention), and treat it as running for context-menu lifecycle actions so operators keep stop/restart/update. The dashboard stack-health table, cross-node search rows, and the command palette all pick up the new state through the shared status surfaces.
16 lines
553 B
TypeScript
16 lines
553 B
TypeScript
import type { StackStatusEntry } from './types';
|
|
|
|
export type RowState = 'healthy' | 'warn' | 'error';
|
|
|
|
const WARN = 80;
|
|
const CRIT = 90;
|
|
|
|
export function classifyRow(status: StackStatusEntry['status'], peakCpu: number): RowState {
|
|
if (status === 'exited') return 'error';
|
|
if (peakCpu >= CRIT) return 'error';
|
|
// A partially-crashed stack is degraded, not down: surface it as a warning
|
|
// (the same amber as the sidebar PT pill) unless CPU is already critical.
|
|
if (status === 'partial' || peakCpu >= WARN) return 'warn';
|
|
return 'healthy';
|
|
}
|