1515 */
1616
1717import * as webTypes from '@opencensus/web-types' ;
18- import { NoHeadersPropagation } from '../propagation/no_headers_propagation' ;
19- import { AlwaysSampler } from '../sampler/sampler' ;
2018import { RootSpan } from './root-span' ;
2119import { Span } from './span' ;
22-
23- const NO_HEADERS_PROPAGATION = new NoHeadersPropagation ( ) ;
20+ import { TracerBase } from './tracer-base' ;
2421
2522/** Tracer manages the current root span and trace header propagation. */
26- export class Tracer implements webTypes . Tracer {
23+ export class Tracer extends TracerBase implements webTypes . Tracer {
2724 /** Get and set the currentRootSpan of the tracer. */
2825 currentRootSpan : Span = new RootSpan ( this ) ;
2926
30- /**
31- * A sampler used to make trace sample decisions. In the case of
32- * opencensus-web, ultimate sampling decisions will likely be made by the
33- * server or agent/collector. So this defaults to sampling every trace.
34- */
35- sampler = new AlwaysSampler ( ) ;
36-
37- /** An object to log information to. Logs to the JS console by default. */
38- logger : webTypes . Logger = console ;
39-
40- /** Trace context header propagation behavior. */
41- propagation = NO_HEADERS_PROPAGATION ;
42-
43- /** Event listeners for spans managed by the tracer. */
44- eventListeners : webTypes . SpanEventListener [ ] = [ ] ;
45-
46- /**
47- * Active status from tracer instance - this is always true for
48- * opencensus-web for code simplicity purposes.
49- */
50- active = true ;
51-
52- /**
53- * Trace parameter configuration. Not used by OpenCensus Web, but
54- * kept for interface compatibility with @opencensus/web-types.
55- */
56- readonly activeTraceParams = { } ;
57-
58- /**
59- * Starts the tracer. This makes the tracer active and sets `logger` and
60- * `propagation` based on the given config. The `samplingRate` property of
61- * `config` is currently ignored.
62- */
63- start ( config : webTypes . TracerConfig ) : Tracer {
64- this . logger = config . logger || console ;
65- this . propagation = config . propagation || NO_HEADERS_PROPAGATION ;
66- return this ;
67- }
68-
69- /** Stops the tracer. This is a no-op with opencensus-web. */
70- stop ( ) : Tracer {
71- return this ;
72- }
73-
7427 /**
7528 * Start a new RootSpan to currentRootSpan. Currently opencensus-web only
7629 * supports a single root span at a time, so this just sets `currentRootSpan`
@@ -81,33 +34,13 @@ export class Tracer implements webTypes.Tracer {
8134 * @returns The callback return
8235 */
8336 startRootSpan < T > ( options : webTypes . TraceOptions , fn : ( root : Span ) => T ) : T {
84- this . currentRootSpan = new RootSpan ( this , options ) ;
85- this . currentRootSpan . start ( ) ;
86- return fn ( this . currentRootSpan ) ;
87- }
88-
89- /** Notifies listeners of the span start. */
90- onStartSpan ( root : webTypes . Span ) {
91- for ( const listener of this . eventListeners ) {
92- listener . onStartSpan ( root ) ;
93- }
94- }
95-
96- /** Notifies listeners of the span end. */
97- onEndSpan ( root : webTypes . Span ) {
98- for ( const listener of this . eventListeners ) {
99- listener . onEndSpan ( root ) ;
100- }
101- }
102-
103- registerSpanEventListener ( listener : webTypes . SpanEventListener ) {
104- this . eventListeners . push ( listener ) ;
105- }
106-
107- unregisterSpanEventListener ( listener : webTypes . SpanEventListener ) {
108- this . eventListeners = this . eventListeners . filter ( l => l !== listener ) ;
37+ return super . startRootSpan ( options , root => {
38+ this . currentRootSpan = root ;
39+ return fn ( root ) ;
40+ } ) ;
10941 }
11042
43+ /** Clears the current root span. */
11144 clearCurrentTrace ( ) {
11245 this . currentRootSpan = new RootSpan ( this ) ;
11346 }
@@ -118,11 +51,10 @@ export class Tracer implements webTypes.Tracer {
11851 * @param kind Span kind
11952 * @returns The new Span instance started
12053 */
121- startChildSpan (
122- nameOrOptions ?: string | webTypes . SpanOptions ,
123- kind ?: webTypes . SpanKind
124- ) : Span {
125- return this . currentRootSpan . startChildSpan ( nameOrOptions , kind ) ;
54+ startChildSpan ( options ?: webTypes . SpanOptions ) : Span {
55+ return super . startChildSpan (
56+ Object . assign ( { childOf : this . currentRootSpan } , options )
57+ ) ;
12658 }
12759
12860 /**
0 commit comments