openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
38 lines (37 loc) • 2.59 kB
JavaScript
//#region gateway-shutdown-budget.mjs
const GATEWAY_RESTART_REPLACEMENT_TIMEOUT_MS = 6e4;
const GATEWAY_SHUTDOWN_RESERVE_MS = 1e4;
const GATEWAY_SUPERVISOR_EXIT_MARGIN_MS = 5e3;
const GATEWAY_SHUTDOWN_TIMEOUT_MS = 325e3;
const GATEWAY_SERVICE_STOP_TIMEOUT_MS = 33e4;
const GATEWAY_SUPERVISOR_EXIT_MARGIN_SHARE = .25;
const GATEWAY_SHUTDOWN_DRAIN_FLOOR_MS = 5e3;
const GATEWAY_SHUTDOWN_DRAIN_FLOOR_SHARE = .5;
/** The exit margin to hold back from a supervisor-enforced stop deadline. */
const resolveSupervisorExitMarginMs = (stopTimeoutMs) => Math.min(GATEWAY_SUPERVISOR_EXIT_MARGIN_MS, Math.floor(Math.max(0, stopTimeoutMs) * GATEWAY_SUPERVISOR_EXIT_MARGIN_SHARE));
/** The post-drain reserve to hold back from a resolved shutdown budget. */
const resolveShutdownReserveMs = (shutdownTimeoutMs) => {
const budgetMs = Math.max(0, shutdownTimeoutMs);
const drainFloorMs = Math.min(GATEWAY_SHUTDOWN_DRAIN_FLOOR_MS, Math.floor(budgetMs * GATEWAY_SHUTDOWN_DRAIN_FLOOR_SHARE));
return Math.min(GATEWAY_SHUTDOWN_RESERVE_MS, budgetMs - drainFloorMs);
};
const RESPAWN_SIGNAL_EXIT_GRACE_MS = 1e3;
const RESPAWN_SIGNAL_FORCE_KILL_GRACE_MS = 1e3;
const RESPAWN_SIGNAL_HARD_EXIT_GRACE_MS = 1e3;
const resolveRespawnServiceStopTimeoutMs = (env, platform) => {
const launchdService = env.OPENCLAW_LAUNCHD_LABEL?.trim();
return platform === "darwin" && launchdService && env.XPC_SERVICE_NAME === launchdService ? 2e4 : GATEWAY_SERVICE_STOP_TIMEOUT_MS;
};
const RESPAWN_LAUNCHER_MARKER_ENV_VARS = [
"OPENCLAW_NODE_UPDATE_RESPAWNED",
"OPENCLAW_COMPILE_CACHE_DISABLED_RESPAWNED",
"OPENCLAW_PACKAGED_COMPILE_CACHE_RESPAWNED"
];
/** Whether a `runRespawnedChild` parent started this process. */
const isRespawnedByLauncher = (env) => RESPAWN_LAUNCHER_MARKER_ENV_VARS.some((name) => env[name] === "1");
const resolveLauncherStopTimeoutMs = ({ env, platform, foreground }) => {
const serviceStopTimeoutMs = resolveRespawnServiceStopTimeoutMs(env, platform);
return (platform !== "win32" && foreground ? serviceStopTimeoutMs - RESPAWN_SIGNAL_FORCE_KILL_GRACE_MS - RESPAWN_SIGNAL_HARD_EXIT_GRACE_MS : RESPAWN_SIGNAL_EXIT_GRACE_MS) + RESPAWN_SIGNAL_FORCE_KILL_GRACE_MS;
};
//#endregion
export { GATEWAY_SUPERVISOR_EXIT_MARGIN_MS as a, isRespawnedByLauncher as c, resolveSupervisorExitMarginMs as d, GATEWAY_SHUTDOWN_TIMEOUT_MS as i, resolveLauncherStopTimeoutMs as l, GATEWAY_SERVICE_STOP_TIMEOUT_MS as n, RESPAWN_SIGNAL_FORCE_KILL_GRACE_MS as o, GATEWAY_SHUTDOWN_RESERVE_MS as r, RESPAWN_SIGNAL_HARD_EXIT_GRACE_MS as s, GATEWAY_RESTART_REPLACEMENT_TIMEOUT_MS as t, resolveShutdownReserveMs as u };