@mwcp/otel
Version:
midway component for open telemetry
66 lines (65 loc) • 3.98 kB
TypeScript
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[];
};
};
}