UNPKG

@crawlee/core

Version:

The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.

170 lines (169 loc) 5.69 kB
import type { Configuration } from '../configuration'; import type { LoadSignal } from './load_signal'; import { Snapshotter } from './snapshotter'; /** * Represents the current status of the system. */ export interface SystemInfo { /** If false, system is being overloaded. */ isSystemIdle: boolean; memInfo: ClientInfo; eventLoopInfo: ClientInfo; cpuInfo: ClientInfo; clientInfo: ClientInfo; memTotalBytes?: number; memCurrentBytes?: number; /** * Platform only property * @internal */ cpuCurrentUsage?: number; /** * Platform only property * @internal */ isCpuOverloaded?: boolean; /** * Platform only property * @internal */ createdAt?: Date; /** * Status of additional load signals beyond the built-in four. * Keys are `LoadSignal.name` values, values are overload info. */ loadSignalInfo?: Record<string, ClientInfo>; } export interface SystemStatusOptions { /** * Defines max age of snapshots used in the {@link SystemStatus.getCurrentStatus} measurement. * @default 5 */ currentHistorySecs?: number; /** * Sets the maximum ratio of overloaded snapshots in a memory sample. * If the sample exceeds this ratio, the system will be overloaded. * @default 0.2 */ maxMemoryOverloadedRatio?: number; /** * Sets the maximum ratio of overloaded snapshots in an event loop sample. * If the sample exceeds this ratio, the system will be overloaded. * @default 0.6 */ maxEventLoopOverloadedRatio?: number; /** * Sets the maximum ratio of overloaded snapshots in a CPU sample. * If the sample exceeds this ratio, the system will be overloaded. * @default 0.4 */ maxCpuOverloadedRatio?: number; /** * Sets the maximum ratio of overloaded snapshots in a Client sample. * If the sample exceeds this ratio, the system will be overloaded. * @default 0.3 */ maxClientOverloadedRatio?: number; /** * The `Snapshotter` instance to be queried for `SystemStatus`. */ snapshotter?: Snapshotter; /** * Additional load signals to include in the system status evaluation. * These are evaluated alongside the built-in memory, CPU, event loop, * and client signals. If any signal reports overload, the system is * considered overloaded. */ loadSignals?: LoadSignal[]; /** @internal */ config?: Configuration; } export interface ClientInfo { isOverloaded: boolean; limitRatio: number; actualRatio: number; } export interface FinalStatistics { requestsFinished: number; requestsFailed: number; retryHistogram: number[]; requestAvgFailedDurationMillis: number; requestAvgFinishedDurationMillis: number; requestsFinishedPerMinute: number; requestsFailedPerMinute: number; requestTotalDurationMillis: number; requestsTotal: number; crawlerRuntimeMillis: number; } /** * Provides a simple interface to reading system status from a {@link Snapshotter} instance. * It only exposes two functions {@link SystemStatus.getCurrentStatus} * and {@link SystemStatus.getHistoricalStatus}. * The system status is calculated using a weighted average of overloaded * messages in the snapshots, with the weights being the time intervals * between the snapshots. Each resource is calculated separately * and the system is overloaded whenever at least one resource is overloaded. * The class is used by the {@link AutoscaledPool} class. * * {@link SystemStatus.getCurrentStatus} * returns a boolean that represents the current status of the system. * The length of the current timeframe in seconds is configurable * by the `currentHistorySecs` option and represents the max age * of snapshots to be considered for the calculation. * * {@link SystemStatus.getHistoricalStatus} * returns a boolean that represents the long-term status * of the system. It considers the full snapshot history available * in the {@link Snapshotter} instance. * @category Scaling */ export declare class SystemStatus { private readonly currentHistoryMillis; private readonly snapshotter; private readonly signals; /** * Per-signal ratio overrides. The built-in four get their overrides from * the legacy `max*OverloadedRatio` options; custom signals use their own * `overloadedRatio`. */ private ratioOverrides; constructor(options?: SystemStatusOptions); /** * Returns an {@link SystemInfo} object with the following structure: * * ```javascript * { * isSystemIdle: Boolean, * memInfo: Object, * eventLoopInfo: Object, * cpuInfo: Object * } * ``` * * Where the `isSystemIdle` property is set to `false` if the system * has been overloaded in the last `options.currentHistorySecs` seconds, * and `true` otherwise. */ getCurrentStatus(): SystemInfo; /** * Returns an {@link SystemInfo} object with the following structure: * * ```javascript * { * isSystemIdle: Boolean, * memInfo: Object, * eventLoopInfo: Object, * cpuInfo: Object * } * ``` * * Where the `isSystemIdle` property is set to `false` if the system * has been overloaded in the full history of the {@link Snapshotter} * (which is configurable in the {@link Snapshotter}) and `true` otherwise. */ getHistoricalStatus(): SystemInfo; /** * Returns a system status object. */ protected _isSystemIdle(sampleDurationMillis?: number): SystemInfo; }