import { type CpuInfo } from "os"; import { monitorEventLoopDelay } from "perf_hooks"; import type { HostPressureLevel, HostPressureOs, HostPressureReason, WSMessage } from "../../types"; import type { WSHub } from "../../ws-hub"; export type CpuTimesSnapshot = CpuInfo["times"]; type EventLoopHistogram = ReturnType; export declare const HOST_PRESSURE_SAMPLE_MS = 5000; /** * Enter a level at the more extreme bar; leave at the less extreme bar so a * value sitting between them does not flicker. The elevated→ok leave bars sit * a little past the enter bars so a 7.9% ↔ 8.1% free-mem wiggle stays put. * * Tune these only together with `__tests__/host-pressure.test.ts`. */ export declare const HOST_PRESSURE_BARS: { readonly memFreeRatio: { readonly enterElevated: 0.08; readonly leaveElevated: 0.1; readonly enterCritical: 0.04; readonly leaveCritical: 0.08; }; readonly eventLoopP99Ms: { readonly enterElevated: 250; readonly leaveElevated: 200; readonly enterCritical: 500; readonly leaveCritical: 250; }; readonly loadPerCpu: { readonly enterElevated: 2; readonly leaveElevated: 1.5; readonly enterCritical: 3; readonly leaveCritical: 2; }; readonly cpuBusy: { readonly enterElevated: 0.95; readonly leaveElevated: 0.85; readonly enterCritical: 0.99; readonly leaveCritical: 0.95; }; readonly liveAgentsPair: 8; }; export type HostSample = { liveAgents: number; memFreeRatio?: number; eventLoopP99Ms: number; load1: number; ncpu: number; /** 0–1 CPU busy from consecutive os.cpus() times snapshots. Used on win32 only. */ cpuBusyRatio?: number; }; export type HostPressureState = "ok" | HostPressureLevel; export type HostPressureClassification = { level: HostPressureState; reasons: HostPressureReason[]; }; export type HostPressureWsMessage = Extract; export declare function parseMacMemoryPressureFreeRatio(output: string): number | undefined; export declare function readMacMemoryPressureFreeRatio(run?: () => Promise): Promise; export declare class MacMemoryPressureProbe { private readonly read; private current; private pending; constructor(read: () => Promise); refresh(): void; value(): number | undefined; } export declare function hostMemoryFreeRatio(platform: NodeJS.Platform, totalBytes: number, freeBytes: number, macPressureFreeRatio?: number): number | undefined; /** Node reports win32 for every Windows build. Other platforms are omitted on the wire. */ export declare function hostPressureOs(platform: NodeJS.Platform): HostPressureOs | undefined; /** Fraction of CPU that was busy between two os.cpus() snapshots. 0 when there is no delta. */ export declare function cpuBusyRatio(previous: readonly CpuTimesSnapshot[] | null, next: readonly CpuTimesSnapshot[]): number; export declare function classifyHostPressure(sample: HostSample, previous: HostPressureState, platform: NodeJS.Platform): HostPressureClassification; export type HostPressureMonitorOpts = { wsHub: Pick; readSample: () => HostSample; now?: () => Date; platform?: NodeJS.Platform; histogram?: EventLoopHistogram; intervalMs?: number; }; export declare class HostPressureMonitor { private readonly opts; private timer; private level; private lastWarning; constructor(opts: HostPressureMonitorOpts); start(): void; tick(): void; wsMessage(): HostPressureWsMessage | null; dispose(): void; } export declare function createHostPressureMonitor(wsHub: WSHub, liveAgents: () => number): HostPressureMonitor; export {}; //# sourceMappingURL=hostPressure.d.ts.map