UNPKG

@mwcp/otel

Version:
66 lines (65 loc) 3.98 kB
import type * as http from 'node:http'; import type * as https from 'node:https'; import type * as url from 'node:url'; import type { Attributes, Span } from '@opentelemetry/api'; import type { InstrumentationConfig } from '@opentelemetry/instrumentation'; export type IgnoreMatcher = string | RegExp | ((url: string) => boolean); export type HttpCallback = (res: http.IncomingMessage) => void; export type RequestFunction = typeof http.request; export type GetFunction = typeof http.get; export type HttpCallbackOptional = HttpCallback | undefined; export type RequestSignature = [http.RequestOptions, HttpCallbackOptional] & HttpCallback; export type HttpRequestArgs = (HttpCallbackOptional | RequestSignature)[]; export type ParsedRequestOptions = (http.RequestOptions & Partial<url.UrlWithParsedQuery>) | http.RequestOptions; export type Http = typeof http; export type Https = typeof https; export type Func<T> = (...args: any[]) => T; export type ResponseEndArgs = [((() => void) | undefined)?] | [unknown, ((() => void) | undefined)?] | [unknown, string, ((() => void) | undefined)?]; export type HttpCustomAttributeFunction = (span: Span, request: http.ClientRequest | http.IncomingMessage, response: http.IncomingMessage | http.ServerResponse) => void; export type IgnoreIncomingRequestFunction = (request: http.IncomingMessage) => boolean; export type IgnoreOutgoingRequestFunction = (request: http.RequestOptions) => boolean; export type HttpRequestCustomAttributeFunction = (span: Span, request: http.ClientRequest | http.IncomingMessage) => void; export type HttpResponseCustomAttributeFunction = (span: Span, response: http.IncomingMessage | http.ServerResponse) => void; export type StartIncomingSpanCustomAttributeFunction = (request: http.IncomingMessage) => Attributes; export type StartOutgoingSpanCustomAttributeFunction = (request: http.RequestOptions) => Attributes; /** * Options available for the HTTP instrumentation (see [documentation](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-instrumentation-http#http-instrumentation-options)) */ export interface HttpInstrumentationConfig extends InstrumentationConfig { /** * Not trace all incoming requests that match paths * @deprecated use `ignoreIncomingRequestHook` instead */ ignoreIncomingPaths?: IgnoreMatcher[]; /** Not trace all incoming requests that matched with custom function */ ignoreIncomingRequestHook?: IgnoreIncomingRequestFunction; /** Not trace all outgoing requests that matched with custom function */ ignoreOutgoingRequestHook?: IgnoreOutgoingRequestFunction; /** Function for adding custom attributes after response is handled */ applyCustomAttributesOnSpan?: HttpCustomAttributeFunction; /** Function for adding custom attributes before request is handled */ requestHook?: HttpRequestCustomAttributeFunction; /** Function for adding custom attributes before response is handled */ responseHook?: HttpResponseCustomAttributeFunction; /** Function for adding custom attributes before a span is started in incomingRequest */ startIncomingSpanHook?: StartIncomingSpanCustomAttributeFunction; /** Function for adding custom attributes before a span is started in outgoingRequest */ startOutgoingSpanHook?: StartOutgoingSpanCustomAttributeFunction; /** The primary server name of the matched virtual host. */ serverName?: string; /** Require parent to create span for outgoing requests */ requireParentforOutgoingSpans?: boolean; /** Require parent to create span for incoming requests */ requireParentforIncomingSpans?: boolean; /** Map the following HTTP headers to span attributes. */ headersToSpanAttributes?: { client?: { requestHeaders?: string[]; responseHeaders?: string[]; }; server?: { requestHeaders?: string[]; responseHeaders?: string[]; }; }; }