mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-27 01:41:40 +00:00
38 lines
1.5 KiB
TypeScript
38 lines
1.5 KiB
TypeScript
import { getStatusSummary } from "../../commands/status.js";
|
|
import { ErrorCodes, errorShape } from "../protocol/index.js";
|
|
import { HEALTH_REFRESH_INTERVAL_MS } from "../server-constants.js";
|
|
import { formatError } from "../server-utils.js";
|
|
import { formatForLog } from "../ws-log.js";
|
|
import type { GatewayRequestHandlers } from "./types.js";
|
|
|
|
const ADMIN_SCOPE = "operator.admin";
|
|
|
|
export const healthHandlers: GatewayRequestHandlers = {
|
|
health: async ({ respond, context, params }) => {
|
|
const { getHealthCache, refreshHealthSnapshot, logHealth } = context;
|
|
const wantsProbe = params?.probe === true;
|
|
const now = Date.now();
|
|
const cached = getHealthCache();
|
|
if (!wantsProbe && cached && now - cached.ts < HEALTH_REFRESH_INTERVAL_MS) {
|
|
respond(true, cached, undefined, { cached: true });
|
|
void refreshHealthSnapshot({ probe: false }).catch((err) =>
|
|
logHealth.error(`background health refresh failed: ${formatError(err)}`),
|
|
);
|
|
return;
|
|
}
|
|
try {
|
|
const snap = await refreshHealthSnapshot({ probe: wantsProbe });
|
|
respond(true, snap, undefined);
|
|
} catch (err) {
|
|
respond(false, undefined, errorShape(ErrorCodes.UNAVAILABLE, formatForLog(err)));
|
|
}
|
|
},
|
|
status: async ({ respond, client }) => {
|
|
const scopes = Array.isArray(client?.connect?.scopes) ? client.connect.scopes : [];
|
|
const status = await getStatusSummary({
|
|
includeSensitive: scopes.includes(ADMIN_SCOPE),
|
|
});
|
|
respond(true, status, undefined);
|
|
},
|
|
};
|