@naturalcycles/nodejs-lib
Version:
Standard library for Node.js
137 lines (136 loc) • 3.43 kB
TypeScript
import type { CommonLogger } from '@naturalcycles/js-lib/log';
import type { AnyObject, PositiveInteger } from '@naturalcycles/js-lib/types';
import type { ReadableMapper } from './stream.model.js';
export interface ProgressLoggerCfg<T = any> {
/**
* Progress metric
*
* @default `progress`
*/
metric?: string;
/**
* Include `heapUsed` in log.
*
* @default false
*/
heapUsed?: boolean;
/**
* Include `heapTotal` in log.
*
* @default false
*/
heapTotal?: boolean;
/**
* Include `rss` in log.
*
* @default true
*/
rss?: boolean;
/**
* Incude Peak RSS in log.
*
* @default true
*/
peakRSS?: boolean;
/**
* Include `external` in log.
*
* @default false
*/
external?: boolean;
/**
* Include `arrayBuffers` in log.
*
* @default false
*/
arrayBuffers?: boolean;
/**
* Log (rss - heapTotal)
* For convenience of debugging "out-of-heap" memory size.
*
* @default false
*/
rssMinusHeap?: boolean;
/**
* Log "rows per second"
*
* @default true
*/
logRPS?: boolean;
/**
* Set to false to disable logging progress
*
* @default true
*/
logProgress?: boolean;
/**
* Log progress event Nth record that is _processed_ (went through mapper).
* Set to 0 to disable logging.
*
* @default 1000
*/
logEvery?: PositiveInteger;
logger?: CommonLogger;
/**
* Function to return extra properties to the "progress object".
*
* chunk is undefined for "final" stats, otherwise is defined.
*/
extra?: (chunk: T | undefined, index: number) => AnyObject;
/**
* Hook that is called when the last item is passed through.
* Passes the final stats as `ProgressLogItem`.
*/
onProgressDone?: (stats: ProgressLogItem) => any;
/**
* If specified - will multiply the counter by this number.
* Useful e.g when using `transformChunk({ chunkSize: 500 })`, so
* it'll accurately represent the number of processed entries (not chunks).
*
* Defaults to 1.
*/
chunkSize?: PositiveInteger;
}
export interface ProgressLogItem extends AnyObject {
heapUsed?: number;
heapTotal?: number;
rss?: number;
peakRSS?: number;
rssMinusHeap?: number;
external?: number;
arrayBuffers?: number;
rps10?: number;
rpsTotal?: number;
}
export declare class ProgressLogger<T> implements Disposable {
constructor(cfg?: ProgressLoggerCfg<T>);
cfg: ProgressLoggerCfg<T> & {
logEvery: number;
logSizesBuffer: number;
chunkSize: number;
metric: string;
logger: CommonLogger;
};
private started;
private lastSecondStarted;
private sma;
private logEvery10;
private processedLastSecond;
private progress;
private peakRSS;
private start;
log(chunk?: T): void;
done(): void;
[Symbol.dispose](): void;
private logStats;
}
/**
* Create new ProgressLogger.
*/
export declare function progressLogger<T>(cfg?: ProgressLoggerCfg<T>): ProgressLogger<T>;
/**
* Limitation: I don't know how to catch the `final` callback to log final stats.
*
* @experimental
*/
export declare function progressReadableMapper<T>(cfg?: ProgressLoggerCfg<T>): ReadableMapper<T, T>;