Files
openclaw/src/gateway/server-runtime-startup-services.ts
2026-05-27 03:52:15 +01:00

66 lines
2.0 KiB
TypeScript

import type { OpenClawConfig } from "../config/types.openclaw.js";
import type { ChannelHealthMonitor } from "./channel-health-monitor.js";
import { startChannelHealthMonitor } from "./channel-health-monitor.js";
type GatewayRuntimeServiceLogger = {
child: (name: string) => {
info: (message: string) => void;
warn: (message: string) => void;
error: (message: string) => void;
};
error: (message: string) => void;
};
export type GatewayChannelManager = Parameters<
typeof startChannelHealthMonitor
>[0]["channelManager"];
function createNoopHeartbeatRunner() {
return {
stop: () => {},
updateConfig: (_cfg: OpenClawConfig) => {},
};
}
export function startGatewayChannelHealthMonitor(params: {
cfg: OpenClawConfig;
channelManager: GatewayChannelManager;
}): ChannelHealthMonitor | null {
const healthCheckMinutes = params.cfg.gateway?.channelHealthCheckMinutes;
if (healthCheckMinutes === 0) {
return null;
}
const staleEventThresholdMinutes = params.cfg.gateway?.channelStaleEventThresholdMinutes;
const maxRestartsPerHour = params.cfg.gateway?.channelMaxRestartsPerHour;
return startChannelHealthMonitor({
channelManager: params.channelManager,
checkIntervalMs: (healthCheckMinutes ?? 5) * 60_000,
...(staleEventThresholdMinutes != null && {
staleEventThresholdMs: staleEventThresholdMinutes * 60_000,
}),
...(maxRestartsPerHour != null && { maxRestartsPerHour }),
});
}
export function startGatewayRuntimeServices(params: {
minimalTestGateway: boolean;
cfgAtStart: OpenClawConfig;
channelManager: GatewayChannelManager;
log: GatewayRuntimeServiceLogger;
}): {
heartbeatRunner: ReturnType<typeof createNoopHeartbeatRunner>;
channelHealthMonitor: ChannelHealthMonitor | null;
stopModelPricingRefresh: () => void;
} {
const channelHealthMonitor = startGatewayChannelHealthMonitor({
cfg: params.cfgAtStart,
channelManager: params.channelManager,
});
return {
heartbeatRunner: createNoopHeartbeatRunner(),
channelHealthMonitor,
stopModelPricingRefresh: () => {},
};
}