UNPKG

@mwcp/otel

Version:
100 lines (99 loc) 4.07 kB
import type { IncomingMessage, OutgoingHttpHeaders, OutgoingMessage } from 'node:http'; import type { Context as WebContext } from '@mwcp/share'; import { SpanKind, SpanStatusCode } from '@opentelemetry/api'; import type { Attributes, Context as TraceContext, Span } from '@opentelemetry/api'; import type { Headers as UndiciHeaders } from 'undici'; import type { Config } from './types.js'; /** * Return the span if one exists * * @param context context to get span from */ export declare function getSpan(context: TraceContext): Span | undefined; /** * Set the span on a context * * @param context context to use as parent * @param span span to set active */ export declare function setSpan(context: TraceContext, span: Span): TraceContext; /** * Remove current span stored in the context * * @param context context to delete span from */ export declare function deleteSpan(context: TraceContext): TraceContext; export declare function isSpanEnded(span: Span): boolean; /** * Parse status code from HTTP response. */ export declare function parseResponseStatus(kind: SpanKind, statusCode?: number): SpanStatusCode; /** * Adds attributes for response content-length and content-encoding HTTP headers * @param { IncomingMessage } Response object whose headers will be analyzed * @param { Attributes } SpanAttributes object to be modified */ export declare function setResponseContentLengthAttribute(response: IncomingMessage, attributes: Attributes): void; /** * Returns incoming request attributes scoped to the request data */ export declare function getIncomingRequestAttributesFromWebContext(ctx: WebContext, config: Config): Promise<Attributes>; /** * Key format `http.{request|response}.header.{name}` * @param headersKeyMap Map<low-key, normalized-key> */ export declare function genAttributesFromHeader(type: 'request' | 'response', headersKeyMap: Map<string, string>, getHeader: (key: string) => string | number | undefined | string[]): Attributes | undefined; /** * Returns map<lower string, lower and normalized string> */ export type NormalizedKeyMap = Map<string, string>; export declare function normalizeHeaderKey(inputKeys: string[]): NormalizedKeyMap; export declare function propagateOutgoingHeader(traceContext: TraceContext, message: OutgoingMessage): void; /** * Skip if header already exists */ export declare function propagateHeader<T extends Headers | UndiciHeaders = Headers>(traceContext: TraceContext, headers: T): void; /** * * @param headersKey if omit then use inner prepared headers key */ export declare function setSpanWithRequestHeaders(span: Span, requestHeadersMap: Map<string, string> | undefined, getHeader: (key: string) => string | number | undefined | string[], headersKey?: string[]): void; interface AddSpanEventWithIncomingRequestDataOptions { headers?: Headers | OutgoingHttpHeaders | UndiciHeaders; query?: object; /** request data */ requestBody: unknown; span: Span; } /** * String of JSON.stringify limited to 2048 characters */ export declare function addSpanEventWithIncomingRequestData(options: AddSpanEventWithIncomingRequestDataOptions): void; export interface AddSpanEventWithOutgoingResponseDataOptions { /** return data */ body: unknown; headers?: Headers | OutgoingHttpHeaders | UndiciHeaders; span: Span; /** response status code */ status: number; } /** * String of JSON.stringify limited to 2048 characters */ export declare function addSpanEventWithOutgoingResponseData(options: AddSpanEventWithOutgoingResponseDataOptions): void; export declare function truncateString(str: string, maxLength?: number): string; export interface GenRequestSpanNameOptions { /** ctx.request?.protocol */ protocol: string; /** ctx.method */ method: string; route: string; } /** * Generate span name from request * @example * - 'HTTP GET /api/v1/user' * - 'RPC /helloworld.Greeter/SayHello' */ export declare function genRequestSpanName(options: GenRequestSpanNameOptions, maxLength?: number): string; export {};