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);
},
};
Messung V0.5 in Prozent C=99 H=97 G=97
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland