autotel
Version:
Write Once, Observe Anywhere
70 lines (69 loc) • 2.41 kB
TypeScript
import { ReadableSpan, Span, SpanProcessor } from "@opentelemetry/sdk-trace-base";
import { Context } from "@opentelemetry/api";
//#region src/span-name-normalizer.d.ts
/**
* Function to normalize a span name
* @param name - The original span name
* @returns The normalized span name
*/
type SpanNameNormalizerFn = (name: string) => string;
/**
* Built-in normalizer preset names
*/
type SpanNameNormalizerPreset = 'rest-api' | 'graphql' | 'minimal';
/**
* Normalizer config - either a function or a preset name
*/
type SpanNameNormalizerConfig = SpanNameNormalizerFn | SpanNameNormalizerPreset;
interface SpanNameNormalizingProcessorOptions {
/**
* Normalizer function or preset name
*/
normalizer: SpanNameNormalizerConfig;
}
/**
* Built-in normalizer patterns
*/
declare const NORMALIZER_PATTERNS: {
readonly numericId: RegExp;
readonly uuid: RegExp;
readonly shortUuid: RegExp;
readonly objectId: RegExp;
readonly hash: RegExp;
readonly isoDate: RegExp;
readonly timestamp: RegExp;
readonly email: RegExp;
};
/**
* Built-in normalizer presets
*/
declare const NORMALIZER_PRESETS: Record<SpanNameNormalizerPreset, SpanNameNormalizerFn>;
/**
* Span processor that normalizes span names to reduce cardinality.
*
* Normalization happens in onStart() when we have access to the mutable Span.
* This allows us to call span.updateName() before the span is finalized.
*
* Common use cases:
* - REST APIs: /users/123/posts/456 → /users/:id/posts/:id
* - UUIDs: /items/550e8400-e29b-41d4-a716-446655440000 → /items/:uuid
* - Dates: /logs/2024-01-15 → /logs/:date
*/
declare class SpanNameNormalizingProcessor implements SpanProcessor {
private readonly wrappedProcessor;
private readonly normalizer;
constructor(wrappedProcessor: SpanProcessor, options: SpanNameNormalizingProcessorOptions);
/**
* Normalize span name on start (when Span is mutable)
*/
onStart(span: Span, parentContext: Context): void;
/**
* Pass through onEnd unchanged
*/
onEnd(span: ReadableSpan): void;
forceFlush(): Promise<void>;
shutdown(): Promise<void>;
}
//#endregion
export { SpanNameNormalizerPreset as a, SpanNameNormalizerFn as i, NORMALIZER_PRESETS as n, SpanNameNormalizingProcessor as o, SpanNameNormalizerConfig as r, SpanNameNormalizingProcessorOptions as s, NORMALIZER_PATTERNS as t };
//# sourceMappingURL=span-name-normalizer-8ZOGJuwv.d.ts.map