From ad4f800d51d3856e0db8427e793e82a5d4c2d285 Mon Sep 17 00:00:00 2001 From: rafw87 Date: Mon, 18 Nov 2019 23:06:57 +0100 Subject: [PATCH] jaeger-client: add injector, extractor and codecs (#40323) Signed-off-by: Rafal Witczak --- types/jaeger-client/index.d.ts | 42 ++++++++++++++++++++-- types/jaeger-client/jaeger-client-tests.ts | 18 +++++++++- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/types/jaeger-client/index.d.ts b/types/jaeger-client/index.d.ts index 1d611e0255..c1c0ed117b 100644 --- a/types/jaeger-client/index.d.ts +++ b/types/jaeger-client/index.d.ts @@ -79,18 +79,56 @@ export interface TracingOptions { tags?: any; } +export interface Injector { + inject(spanContext: opentracing.SpanContext, carrier: any): void; +} + +export interface Extractor { + extract(carrier: any): opentracing.SpanContext | null; +} + +export class JaegerTracer extends opentracing.Tracer { + registerInjector(format: string, injector: Injector): void; + registerExtractor(format: string, extractor: Extractor): void; +} + export function initTracer( tracingConfig: TracingConfig, tracingOptions: TracingOptions -): opentracing.Tracer; +): JaegerTracer; export function initTracerFromEnv( tracingConfig: TracingConfig, tracingOptions: TracingOptions -): opentracing.Tracer; +): JaegerTracer; export class PrometheusMetricsFactory { constructor(client: typeof prometheus, serviceName: string); createCounter(name: string, tags: {}): Counter; createGauge(name: string, tags: {}): Gauge; } + +export interface TextMapCodecOptions { + urlEncoding?: boolean; + contextKey?: string; + baggagePrefix?: string; + metrics?: MetricsFactory; +} + +export class TextMapCodec implements Injector, Extractor { + constructor(options: TextMapCodecOptions); + inject(spanContext: opentracing.SpanContext, carrier: any): void; + extract(carrier: any): opentracing.SpanContext | null; +} + +export interface ZipkinB3TextMapCodecOptions { + urlEncoding?: boolean; + baggagePrefix?: string; + metrics?: MetricsFactory; +} + +export class ZipkinB3TextMapCodec implements Injector, Extractor { + constructor(options: ZipkinB3TextMapCodecOptions); + inject(spanContext: opentracing.SpanContext, carrier: any): void; + extract(carrier: any): opentracing.SpanContext | null; +} diff --git a/types/jaeger-client/jaeger-client-tests.ts b/types/jaeger-client/jaeger-client-tests.ts index 12e1820055..eb9b9fc6d2 100644 --- a/types/jaeger-client/jaeger-client-tests.ts +++ b/types/jaeger-client/jaeger-client-tests.ts @@ -1,10 +1,26 @@ import * as jaegerClient from "jaeger-client"; import * as promClient from "prom-client"; +import * as opentracing from "opentracing"; const tracingConfig: jaegerClient.TracingConfig = {}; const tracingOptions: jaegerClient.TracingOptions = {}; -jaegerClient.initTracer(tracingConfig, tracingOptions); +const tracer = jaegerClient.initTracer(tracingConfig, tracingOptions); jaegerClient.initTracerFromEnv(tracingConfig, tracingOptions); const metrics = new jaegerClient.PrometheusMetricsFactory(promClient, "foo"); + +const textCodec = new jaegerClient.TextMapCodec({ + contextKey: 'trace-id', + baggagePrefix: 'baggage-', + urlEncoding: false, +}); +tracer.registerInjector(opentracing.FORMAT_TEXT_MAP, textCodec); +tracer.registerExtractor(opentracing.FORMAT_TEXT_MAP, textCodec); + +const zipkinB3TextMapCodec = new jaegerClient.ZipkinB3TextMapCodec({ + baggagePrefix: 'baggage-', + urlEncoding: false, +}); +tracer.registerInjector(opentracing.FORMAT_HTTP_HEADERS, zipkinB3TextMapCodec); +tracer.registerExtractor(opentracing.FORMAT_HTTP_HEADERS, zipkinB3TextMapCodec);