@@ -19,30 +19,32 @@ import Tracer from './tracer';
1919import Utils from './utils' ;
2020
2121import * as opentracing from 'opentracing' ;
22+ import LogData from './log_data' ;
2223
23- export default class Span {
24- _tracer : Tracer ;
24+ export default class Span extends opentracing . Span {
25+ _tracerImpl : Tracer ;
2526 _operationName : string ;
2627 _spanContext : SpanContext ;
2728 _startTime : number ;
2829 _duration : number ;
2930 _references : opentracing . Reference [ ] ;
30- _logs : opentracing . LogData [ ] ;
31- _tags : opentracing . Tag [ ] ;
31+ _logs : LogData [ ] ;
32+ _tags : { [ key : string ] : any } ;
3233 _isFinished : boolean ;
3334
3435 constructor ( tracer : Tracer ,
3536 operationName : string ,
3637 spanContext : SpanContext ,
3738 startTime : number ,
3839 references : opentracing . Reference [ ] ) {
39- this . _tracer = tracer ;
40+ super ( ) ;
41+ this . _tracerImpl = tracer ;
4042 this . _operationName = operationName ;
4143 this . _spanContext = spanContext ;
4244 this . _startTime = startTime ;
4345 this . _references = references ;
4446 this . _logs = [ ] ;
45- this . _tags = [ ] ;
47+ this . _tags = { } ;
4648 this . _isFinished = false ;
4749 }
4850
@@ -51,18 +53,18 @@ export default class Span {
5153 }
5254
5355 serviceName ( ) : string {
54- return this . _tracer . _serviceName ;
56+ return this . _tracerImpl . _serviceName ;
5557 }
5658
5759 context ( ) : SpanContext {
5860 return this . _spanContext ;
5961 }
6062
61- tags ( ) : opentracing . Tag [ ] {
63+ tags ( ) : { [ key : string ] : any } {
6264 return this . _tags ;
6365 }
6466
65- logs ( ) : opentracing . LogData [ ] {
67+ logs ( ) : LogData [ ] {
6668 return this . _logs ;
6769 }
6870
@@ -74,68 +76,68 @@ export default class Span {
7476 return this . _duration ;
7577 }
7678
77- tracer ( ) : Tracer {
78- return this . _tracer ;
79+ tracer ( ) : opentracing . Tracer {
80+ return this . _tracer ( ) ;
7981 }
8082
81- setOperationName ( name ) : Span {
82- this . _operationName = name ;
83+ setOperationName ( name ) : this {
84+ this . _setOperationName ( name ) ;
8385 return this ;
8486 }
8587
8688 isFinished ( ) : boolean {
8789 return this . _isFinished ;
8890 }
89- addTags ( keyValues : any ) : Span {
90- for ( const k in keyValues ) {
91- if ( keyValues . hasOwnProperty ( k ) ) {
92- this . setTag ( k , keyValues [ k ] ) ;
93- }
94- }
91+
92+ addTags ( keyValueMap : { [ key : string ] : any ; } ) : this {
93+ this . _addTags ( keyValueMap ) ;
9594 return this ;
9695 }
9796
98- setTag ( k : string , v : any ) : Span {
99- this . _tags . push ( { key : k , value : v } ) ;
97+ setTag ( k : string , v : any ) : this {
98+ this . _tags [ k ] = v ;
10099 return this ;
101100 }
102101
103- setBaggageItem ( key : string , value : string ) : Span {
102+ setBaggageItem ( key : string , value : string ) : this {
104103 const prevBaggageValue = this . _spanContext . baggage [ key ] ;
105104 this . _logFields ( key , value , prevBaggageValue ) ;
106- this . _spanContext . addBaggageItem ( key , value ) ;
105+ this . _spanContext = this . _spanContext . addBaggageItem ( key , value ) ;
107106 return this ;
108107 }
109108
110- log ( keyValuePairs : any , timestamp ?: number ) : void {
111- const _tags = [ ] ;
112- for ( const k in keyValuePairs ) {
113- if ( keyValuePairs . hasOwnProperty ( k ) ) {
114- _tags . push ( { key : k , value : keyValuePairs [ k ] } ) ;
115- }
116- }
117- this . _logs . push ( {
118- timestamp : timestamp || Utils . now ( ) ,
119- tags : _tags
120- } ) ;
109+ log ( keyValuePairs : { [ p : string ] : any } , timestamp ?: number ) : this {
110+ this . _log ( keyValuePairs , timestamp ) ;
111+ return this ;
121112 }
122113
123- logEvent ( eventName : string , payLoad : any ) : void {
124- return this . log ( {
114+ logEvent ( eventName : string , data : any ) : void {
115+ this . log ( {
125116 event : eventName ,
126- payload : payLoad
117+ payload : data
127118 } ) ;
128119 }
129120
130121 finish ( finishTime ?: number , callback ?: ( error ) => void ) : void {
131- if ( this . _isFinished ) {
132- const spanInfo = `operation=${ this . operationName } ,context=${ this . context ( ) . toString ( ) } ` ;
133- throw new Error ( `cant finish the same span twice - ${ spanInfo } ` ) ;
122+ this . _finish ( finishTime , callback ) ;
123+ }
124+
125+ getBaggageItem ( key : string ) : string | any {
126+ return this . _getBaggageItem ( key ) ;
127+ }
128+
129+ protected _tracer ( ) : opentracing . Tracer {
130+ return this . _tracerImpl ;
131+ }
132+
133+ protected _log ( keyValuePairs : { [ p : string ] : any } , timestamp ?: number ) : void {
134+ const kvPairs = { } ;
135+ for ( const k in keyValuePairs ) {
136+ if ( keyValuePairs . hasOwnProperty ( k ) ) {
137+ kvPairs [ k ] = keyValuePairs [ k ] ;
138+ }
134139 }
135- const endTime = finishTime || Utils . now ( ) ;
136- this . _duration = endTime - this . _startTime ;
137- this . _tracer . dispatcher ( ) . dispatch ( this , callback ) ;
138- this . _isFinished = true ;
140+ this . _logs . push ( new LogData ( kvPairs , timestamp || Utils . now ( ) ) ) ;
139141 }
140142
141143 private _logFields ( k : string , v : string , prevBaggageValue : string ) : void {
@@ -150,6 +152,41 @@ export default class Span {
150152 this . log ( fields ) ;
151153 }
152154
155+ protected _addTags ( keyValuePairs : { [ p : string ] : any } ) : void {
156+ for ( const k in keyValuePairs ) {
157+ if ( keyValuePairs . hasOwnProperty ( k ) ) {
158+ this . setTag ( k , keyValuePairs [ k ] ) ;
159+ }
160+ }
161+ }
162+
163+ protected _setOperationName ( name : string ) : void {
164+ this . _operationName = name ;
165+ }
166+
167+ protected _setBaggageItem ( key : string , value : string ) : void {
168+ this . _spanContext = this . _spanContext . addBaggageItem ( key , value ) ;
169+ }
170+
171+ protected _getBaggageItem ( key : string ) : string | any {
172+ return this . _spanContext . baggage [ key ] ;
173+ }
174+
175+ protected _context ( ) : SpanContext {
176+ return this . _spanContext ;
177+ }
178+
179+ protected _finish ( finishTime ?: number , callback ?: ( error ) => void ) : void {
180+ if ( this . _isFinished ) {
181+ const spanInfo = `operation=${ this . operationName } ,context=${ this . context ( ) . toString ( ) } ` ;
182+ throw new Error ( `cant finish the same span twice - ${ spanInfo } ` ) ;
183+ }
184+ const endTime = finishTime || Utils . now ( ) ;
185+ this . _duration = endTime - this . _startTime ;
186+ this . _tracerImpl . dispatcher ( ) . dispatch ( this , callback ) ;
187+ this . _isFinished = true ;
188+ }
189+
153190 toString ( ) : string {
154191 return JSON . stringify (
155192 Utils . merge ( this . _spanContext , {
0 commit comments