UNPKG

otel-instrumentation-postgres

Version:
96 lines (88 loc) 3.18 kB
import postgres from 'postgres'; import { Span } from '@opentelemetry/api'; import { InstrumentationBase, InstrumentationConfig, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation'; type Logger = { debug?: (msg: string, ...args: unknown[]) => void; info?: (msg: string, ...args: unknown[]) => void; error?: (msg: string, ...args: unknown[]) => void; }; // Type for the postgres client type PostgresClient = ReturnType<typeof postgres>; declare function createOTELEmitter(client: PostgresClient, logger?: Logger): PostgresClient; type DbQueryEvent = { sql: string; params: unknown[]; result?: unknown; error?: unknown; durationMs: number; databaseName?: string; context?: unknown; }; /** biome-ignore-all assist/source/organizeImports: TODO: My editor doesn't support this. */ type ParameterSanitizer = (param: unknown) => string; type BeforeSpanHook = (span: Span, event: DbQueryEvent) => void; type AfterSpanHook = (span: Span, event: DbQueryEvent) => void; type ResponseHook = (span: Span, result: unknown) => void; interface PostgresInstrumentationConfig extends InstrumentationConfig { serviceName?: string; logger?: Logger; enableHistogram?: boolean; histogramBuckets?: number[]; collectQueryParameters?: boolean; serverAddress?: string; serverPort?: number; databaseName?: string; parameterSanitizer?: ParameterSanitizer; beforeSpan?: BeforeSpanHook; afterSpan?: AfterSpanHook; responseHook?: ResponseHook; } declare class PostgresInstrumentation extends InstrumentationBase { private customLogger; private serviceName; private listener; private enableHistogram; private histogramBuckets; private collectQueryParameters; private serverAddress; private serverPort; private databaseName; private parameterSanitizer; private beforeSpan?; private afterSpan?; private responseHook?; private queryDurationHistogram; private queryCounter; private errorCounter; private connectionCounter; private connectionDurationHistogram; private connectionStartTimes; constructor(config?: PostgresInstrumentationConfig); protected init(): InstrumentationNodeModuleDefinition[]; protected onMeterInitialized(): void; private initializeMetrics; enable(): void; disable(): void; private setupEventListeners; private removeEventListeners; private handleQueryEvent; private handleConnectionEvent; private sanitizeQuery; private addQueryParameters; private defaultParameterSanitizer; private getErrorType; private recordMetrics; private getQueryType; static registerDbQueryReceiver(options?: { serviceName?: string; enableHistogram?: boolean; collectQueryParameters?: boolean; serverAddress?: string; serverPort?: number; parameterSanitizer?: ParameterSanitizer; beforeSpan?: BeforeSpanHook; afterSpan?: AfterSpanHook; responseHook?: ResponseHook; }, logger?: Logger): PostgresInstrumentation; } export { type Logger, PostgresInstrumentation, createOTELEmitter };