24 lines
868 B
TypeScript
24 lines
868 B
TypeScript
|
|
import type { DockerContainerInfo } from './types';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* A paused container reports Status "Up 5 minutes (Paused)", so a bare
|
||
|
|
* /up/i test classifies it as running too. Paused must win, and the
|
||
|
|
* machine-readable State field is preferred over the human Status text.
|
||
|
|
*/
|
||
|
|
export function getContainerFlags(container: DockerContainerInfo): {
|
||
|
|
isRunning: boolean;
|
||
|
|
isPaused: boolean;
|
||
|
|
} {
|
||
|
|
const isPaused = container.state === 'paused' || /paused/i.test(container.status);
|
||
|
|
const isRunning = !isPaused
|
||
|
|
&& (container.state === 'running' || /up/i.test(container.status));
|
||
|
|
return { isRunning, isPaused };
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getContainerTone(container: DockerContainerInfo): 'success' | 'warning' | 'muted' {
|
||
|
|
const { isRunning, isPaused } = getContainerFlags(container);
|
||
|
|
if (isPaused) return 'warning';
|
||
|
|
if (isRunning) return 'success';
|
||
|
|
return 'muted';
|
||
|
|
}
|