@@ -29,18 +29,21 @@ import URLCodex from './propagators/url_codex';
2929import StartSpanFields from './start_span_fields' ;
3030import BinaryPropagator from './propagators/binary_propagator' ;
3131import { TracerConfig } from './tracer-config' ;
32+ import { Generator , UUIDGenerator } from './generators' ;
3233
3334export default class Tracer extends opentracing . Tracer {
3435 _serviceName : string ;
3536 _dispatcher : Dispatcher ;
37+ _idGenerator : Generator ;
3638 _commonTags : { [ key : string ] : any } ;
3739 _logger : any ;
3840 _registry : PropagationRegistry ;
3941
4042 constructor ( serviceName : string ,
4143 dispatcher : Dispatcher = new NoopDispatcher ( ) ,
4244 commonTags : { [ key : string ] : any } = { } ,
43- logger : Logger = new NullLogger ( ) ) {
45+ logger : Logger = new NullLogger ( ) ,
46+ idGenerator : Generator = new UUIDGenerator ( ) ) {
4447 super ( ) ;
4548 this . _commonTags = commonTags || { } ;
4649 this . _serviceName = serviceName ;
@@ -50,6 +53,7 @@ export default class Tracer extends opentracing.Tracer {
5053 this . _registry . register ( opentracing . FORMAT_TEXT_MAP , new TextMapPropagator ( ) ) ;
5154 this . _registry . register ( opentracing . FORMAT_BINARY , new BinaryPropagator ( ) ) ;
5255 this . _registry . register ( opentracing . FORMAT_HTTP_HEADERS , new TextMapPropagator ( new URLCodex ( ) ) ) ;
56+ this . _idGenerator = idGenerator ;
5357 }
5458
5559 startSpan ( operationName : string , fields ?: StartSpanFields ) : Span {
@@ -83,7 +87,7 @@ export default class Tracer extends opentracing.Tracer {
8387 }
8488 }
8589
86- const ctx = Tracer . _createSpanContext ( parent , fields . callerSpanContext ) ;
90+ const ctx = this . _createSpanContext ( parent , fields . callerSpanContext ) ;
8791 return this . _spanStart ( operationName , ctx , startTime , references , spanTags ) ;
8892 }
8993
@@ -98,16 +102,16 @@ export default class Tracer extends opentracing.Tracer {
98102 return span ;
99103 }
100104
101- static _createSpanContext ( parent : SpanContext , callerContext : SpanContext ) : SpanContext {
105+ _createSpanContext ( parent : SpanContext , callerContext : SpanContext ) : SpanContext {
102106 if ( ! parent || ! parent . isValid ) {
103107 if ( callerContext ) {
104108 return new SpanContext ( callerContext . traceId , callerContext . spanId , callerContext . parentSpanId , callerContext . baggage ) ;
105109 } else {
106110 const parentBaggage = parent && parent . baggage ;
107- return new SpanContext ( Utils . randomUUID ( ) , Utils . randomUUID ( ) , parentBaggage ) ;
111+ return new SpanContext ( this . _idGenerator . generate ( ) , this . _idGenerator . generate ( ) , parentBaggage ) ;
108112 }
109113 } else {
110- return new SpanContext ( parent . traceId , Utils . randomUUID ( ) , parent . spanId , parent . baggage ) ;
114+ return new SpanContext ( parent . traceId , this . _idGenerator . generate ( ) , parent . spanId , parent . baggage ) ;
111115 }
112116 }
113117
@@ -178,7 +182,6 @@ export default class Tracer extends opentracing.Tracer {
178182 if ( config . logger ) {
179183 config . logger . info ( `Initializing Haystack Tracer with ${ dispatcher . name ( ) } ` ) ;
180184 }
181-
182- return new Tracer ( config . serviceName , dispatcher , config . commonTags , config . logger ) ;
185+ return new Tracer ( config . serviceName , dispatcher , config . commonTags , config . logger , config . idGenerator ) ;
183186 }
184187}
0 commit comments