import { type OnApplicationShutdown } from '@nestjs/common';
import type { ResolvedCoreConfig } from '../config/options.js';
export interface ServerStats {
    uptimeSec: number;
    memory: {
        rssMb: number;
        heapUsedMb: number;
        heapTotalMb: number;
    };
    cpu: {
        userMs: number;
        systemMs: number;
    };
    /** Mean event-loop delay in ms, or `null` when perf_hooks can't measure it. */
    eventLoopDelayMs: number | null;
    instanceId: string;
}
/** One point in the CPU/mem history ring buffer. */
export interface ServerStatsSample {
    /** Wall-clock time of the sample (epoch ms). */
    atMs: number;
    rssMb: number;
    heapUsedMb: number;
    /** CPU utilisation since the previous sample, as a percent of one core (>= 0;
     *  0 on the very first sample, where there is no previous interval). */
    cpuPercent: number;
    /** Mean event-loop delay (ms) at sample time, or null when unavailable. */
    eventLoopDelayMs: number | null;
}
export interface ServerStatsHistory {
    samples: ServerStatsSample[];
}
export interface ServerStatsServiceOptions {
    /** Ring-buffer cap for the CPU/mem history. Default 120 (~10m at a 5s poll). */
    maxSamples?: number;
}
/**
 * Point-in-time snapshot of the Node process health (memory, CPU, uptime,
 * event-loop delay). The event-loop histogram is started once at construction
 * and read per request so its mean reflects the whole process lifetime. When
 * `perf_hooks.monitorEventLoopDelay` is unavailable, the delay degrades to
 * `null` rather than throwing — every other field is always present.
 */
export declare class ServerStatsService implements OnApplicationShutdown {
    private readonly config;
    private readonly loopMonitor;
    private readonly maxSamples;
    /** CPU/mem history ring buffer (oldest first). */
    private readonly samples;
    /** Previous (cpuUsage, wall ms) for deriving the per-interval cpuPercent. */
    private lastCpu;
    private lastSampleMs;
    constructor(config: ResolvedCoreConfig, options?: ServerStatsServiceOptions);
    onApplicationShutdown(): void;
    getStats(): ServerStats;
    /** The CPU/mem history captured so far (oldest first), for the dashboard's
     *  CPU/mem-history card. Cheap copy of the ring buffer. */
    getHistory(): ServerStatsHistory;
    /**
     * Append one history sample, deriving cpuPercent from the CPU-time delta since
     * the previous sample over the wall-clock interval (percent of ONE core). The
     * first sample has no prior interval, so its cpuPercent is 0. Evicts the oldest
     * once the ring buffer exceeds its cap.
     */
    private recordSample;
}
//# sourceMappingURL=server-stats.service.d.ts.map