@neo-one/monitor
Version:
NEO•ONE monitoring.
103 lines (102 loc) • 4.2 kB
TypeScript
/// <reference types="node" />
import { IncomingMessage } from 'http';
import { Context } from 'koa';
import { ReportHandler } from './ReportHandler';
import { CaptureLogOptions, CaptureMonitor, CaptureSpanLogOptions, CaptureSpanOptions, Carrier, Counter, Format, Histogram, KnownLabel, Labels, LogErrorOptions, Logger, LogLevel, LogOptions, Monitor, Report, Span, SpanContext, SpanOptions, Summary } from './types';
export interface FullLogLevelOption {
readonly log: LogLevel;
readonly span: LogLevel;
}
export interface TracerSpan {
readonly log: (data: object) => void;
readonly setTag: (name: string, value: string | number | boolean) => void;
readonly finish: (finishTime?: number) => void;
readonly context: () => SpanContext;
}
export interface TracerReference {
readonly __tracer: undefined;
}
export interface TracerStartSpanOptions {
readonly references?: readonly TracerReference[];
readonly tags?: object;
readonly startTime?: number;
}
export interface Tracer {
readonly startSpan: (name: string, options?: TracerStartSpanOptions) => TracerSpan;
readonly childOf: (span: SpanContext | TracerSpan) => TracerReference;
readonly followsFrom: (span: SpanContext | TracerSpan) => TracerReference;
readonly extract: (format: Format, carrier: Carrier) => SpanContext | undefined;
readonly inject: (context: SpanContext, format: Format, carrier: Carrier) => void;
readonly close: (callback: () => void) => void;
}
export declare type Now = () => number;
export interface SpanData {
readonly metric?: {
readonly total: Histogram | Summary;
readonly error: Counter;
};
readonly time: number;
readonly span?: TracerSpan;
readonly parent?: MonitorBase;
}
export interface MonitorBaseOptions {
readonly service: string;
readonly component: string;
readonly labels?: Labels;
readonly data?: Labels;
readonly logger: Logger;
readonly tracer?: Tracer;
readonly now: Now;
readonly spanLogLevel?: LogLevel;
readonly span?: SpanData | void;
readonly reportHandler?: ReportHandler;
}
export declare class MonitorBase implements Span {
readonly labels: typeof KnownLabel;
readonly formats: typeof Format;
readonly now: Now;
private readonly service;
private readonly component;
private mutableCurrentLabels;
private mutableData;
private readonly logger;
private readonly spanLogLevel;
private readonly tracer;
private readonly span;
private readonly reportHandler;
constructor({ service, component, labels, data, logger, spanLogLevel, tracer, now, span, reportHandler, }: MonitorBaseOptions);
nowSeconds(): number;
at(component: string): Monitor;
withLabels(labels: Labels): Monitor;
withData(data: Labels): Monitor;
forContext(_ctx: Context): Monitor;
forMessage(_ctx: IncomingMessage): Monitor;
log({ name, message, level, metric, error }: LogOptions): void;
captureLog(func: (monitor: CaptureMonitor) => any, options: CaptureLogOptions, cloned?: boolean): any;
logError({ name, message, level, error, metric }: LogErrorOptions): void;
startSpan({ name, level, metric, references, trace }: SpanOptions): MonitorBase;
end(error?: boolean): void;
captureSpan(func: (span: MonitorBase) => any, options: CaptureSpanOptions): any;
captureSpanLog(func: (span: CaptureMonitor) => any, options: CaptureSpanLogOptions): any;
childOf(span: SpanContext | Monitor | void): any;
followsFrom(span: SpanContext | Monitor | void): any;
extract(format: Format, carrier: Carrier): SpanContext | undefined;
inject(format: Format, carrier: Carrier): void;
report(report: Report): void;
serveMetrics(_port: number): void;
close(callback: () => void): void;
setLabels(labels: Labels): void;
setData(data: Labels): void;
hasSpan(): boolean;
getSpan(): SpanData;
protected closeInternal(): Promise<void>;
private invokeMetric;
private commonLog;
private getErrorKind;
private getSpanTags;
private getAllRawLabels;
private getAllRawData;
private setSpanLabels;
private getFullLevel;
private clone;
}