mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-28 16:00:41 +00:00
53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
import type { GatewayServiceRuntime } from "../daemon/service-runtime.js";
|
|
import type { GatewayService } from "../daemon/service.js";
|
|
|
|
export type ServiceStatusSummary = {
|
|
label: string;
|
|
installed: boolean | null;
|
|
loaded: boolean;
|
|
managedByOpenClaw: boolean;
|
|
externallyManaged: boolean;
|
|
loadedText: string;
|
|
runtime: GatewayServiceRuntime | undefined;
|
|
};
|
|
|
|
export async function readServiceStatusSummary(
|
|
service: GatewayService,
|
|
fallbackLabel: string,
|
|
): Promise<ServiceStatusSummary> {
|
|
try {
|
|
const [loaded, runtime, command] = await Promise.all([
|
|
service.isLoaded({ env: process.env }).catch(() => false),
|
|
service.readRuntime(process.env).catch(() => undefined),
|
|
service.readCommand(process.env).catch(() => null),
|
|
]);
|
|
const managedByOpenClaw = command != null;
|
|
const externallyManaged = !managedByOpenClaw && runtime?.status === "running";
|
|
const installed = managedByOpenClaw || externallyManaged;
|
|
const loadedText = externallyManaged
|
|
? "running (externally managed)"
|
|
: loaded
|
|
? service.loadedText
|
|
: service.notLoadedText;
|
|
return {
|
|
label: service.label,
|
|
installed,
|
|
loaded,
|
|
managedByOpenClaw,
|
|
externallyManaged,
|
|
loadedText,
|
|
runtime,
|
|
};
|
|
} catch {
|
|
return {
|
|
label: fallbackLabel,
|
|
installed: null,
|
|
loaded: false,
|
|
managedByOpenClaw: false,
|
|
externallyManaged: false,
|
|
loadedText: "unknown",
|
|
runtime: undefined,
|
|
};
|
|
}
|
|
}
|