@@ -23,6 +23,9 @@ import SpanContext from './span_context';
2323import NoopDispatcher from './dispatchers/noop' ;
2424import NullLogger from './logger' ;
2525import Utils from './utils' ;
26+ import PropagationRegistry from './propagators/propagation_registry' ;
27+ import TextMapPropagator from './propagators/textmap_propagator' ;
28+ import URLCodex from './propagators/url_codex' ;
2629
2730// startSpanFields is used for type-checking the Trace.startSpan().
2831declare interface StartSpanFields {
@@ -38,6 +41,7 @@ export default class Tracer {
3841 _dispatcher : Dispatcher ;
3942 _commonTags : any ;
4043 _logger : any ;
44+ _registry : PropagationRegistry ;
4145
4246 constructor ( serviceName : string ,
4347 dispatcher = new NoopDispatcher ( ) ,
@@ -47,6 +51,9 @@ export default class Tracer {
4751 this . _serviceName = serviceName ;
4852 this . _dispatcher = dispatcher ;
4953 this . _logger = logger ;
54+ this . _registry = new PropagationRegistry ( ) ;
55+ this . _registry . register ( opentracing . FORMAT_TEXT_MAP , new TextMapPropagator ( ) ) ;
56+ this . _registry . register ( opentracing . FORMAT_HTTP_HEADERS , new TextMapPropagator ( new URLCodex ( ) ) ) ;
5057 }
5158
5259 startSpan ( operationName : string , fields ?: StartSpanFields ) : Span {
@@ -123,6 +130,32 @@ export default class Tracer {
123130 } ) ;
124131 }
125132
133+ inject ( spanContext : SpanContext , format : string , carrier : any ) : void {
134+ if ( ! spanContext ) {
135+ return ;
136+ }
137+
138+ const propagator = this . _registry . _propagators ( format ) ;
139+ if ( ! propagator ) {
140+ throw new Error ( 'injector for the given format is not supported' ) ;
141+ }
142+
143+ propagator . inject ( spanContext , carrier ) ;
144+ }
145+
146+ extract ( format : string , carrier : any ) : SpanContext {
147+ if ( ! carrier ) {
148+ return ;
149+ }
150+
151+ const propagator = this . _registry . _propagators ( format ) ;
152+ if ( ! propagator ) {
153+ throw new Error ( 'extracttor for the given format is not supported' ) ;
154+ }
155+
156+ return propagator . extract ( carrier ) ;
157+ }
158+
126159 static initTracer ( config ) : Tracer {
127160 if ( config . disable ) {
128161 return new opentracing . Tracer ( ) ;
0 commit comments