Skip to content
This repository was archived by the owner on Oct 3, 2023. It is now read-only.

Commit 6f5c697

Browse files
djonathascardosokjin
authored andcommitted
feat: add onStartSpan method to OnEndSpanEventListener interface and rename it to SpanEventListener (#20)
* feat: add onStartSpan method to OnEndSpanEventListener interface and rename it to SpanEventListener * feat: add onStartSpan to StackdriverTraceExporter class
1 parent ed30be9 commit 6f5c697

File tree

12 files changed

+55
-21
lines changed

12 files changed

+55
-21
lines changed

packages/opencensus-core/src/exporters/console-exporter.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import * as types from './types';
2323
/** Do not send span data */
2424
export class NoopExporter implements types.Exporter {
2525
logger: loggerTypes.Logger;
26+
onStartSpan(root: modelTypes.RootSpan) {}
2627
onEndSpan(root: modelTypes.RootSpan) {}
2728
publish(rootSpans: modelTypes.RootSpan[]) {}
2829
}
@@ -43,6 +44,8 @@ export class ConsoleExporter implements types.Exporter {
4344
this.logger = config.logger;
4445
}
4546

47+
onStartSpan(root: modelTypes.RootSpan) {}
48+
4649
/**
4750
* Event called when a span is ended.
4851
* @param root Ended span.

packages/opencensus-core/src/exporters/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import * as configTypes from '../trace/config/types';
2020
import * as modelTypes from '../trace/model/types';
2121

2222
/** Defines an exporter interface. */
23-
export interface Exporter extends modelTypes.OnEndSpanEventListener {
23+
export interface Exporter extends modelTypes.SpanEventListener {
2424
/**
2525
* Sends a list of root spans to the service.
2626
* @param rootSpans A list of root spans to publish.

packages/opencensus-core/src/trace/model/root-span.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ export class RootSpan extends SpanBase implements types.RootSpan {
7070
this.logger.debug(
7171
'starting %s %o', this.className,
7272
{traceId: this.traceId, id: this.id, parentSpanId: this.parentSpanId});
73+
74+
this.tracer.onStartSpan(this);
7375
}
7476

7577
// TODO: review end() behavior if it should throw an error when it is called

packages/opencensus-core/src/trace/model/tracer.ts

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export class Tracer implements types.Tracer {
3838
/** A configuration for starting the tracer */
3939
private config: configTypes.TracerConfig;
4040
/** A list of end span event listeners */
41-
private eventListenersLocal: types.OnEndSpanEventListener[] = [];
41+
private eventListenersLocal: types.SpanEventListener[] = [];
4242
/** A list of ended root spans */
4343
private endedTraces: types.RootSpan[] = [];
4444
/** Bit to represent whether trace is sampled or not. */
@@ -89,7 +89,7 @@ export class Tracer implements types.Tracer {
8989
}
9090

9191
/** Gets the list of event listners. */
92-
get eventListeners(): types.OnEndSpanEventListener[] {
92+
get eventListeners(): types.SpanEventListener[] {
9393
return this.eventListenersLocal;
9494
}
9595

@@ -137,6 +137,19 @@ export class Tracer implements types.Tracer {
137137
});
138138
}
139139

140+
onStartSpan(root: types.RootSpan): void {
141+
if (this.active) {
142+
if (!root) {
143+
return this.logger.debug('cannot start trace - no active trace found');
144+
}
145+
if (this.currentRootSpan !== root) {
146+
this.logger.debug(
147+
'currentRootSpan != root on notifyStart. Need more investigation.');
148+
}
149+
this.notifyStartSpan(root);
150+
}
151+
}
152+
140153
/**
141154
* Is called when a span is ended.
142155
* @param root The ended span.
@@ -158,10 +171,19 @@ export class Tracer implements types.Tracer {
158171
* Registers an end span event listener.
159172
* @param listener The listener to register.
160173
*/
161-
registerEndSpanListener(listner: types.OnEndSpanEventListener) {
174+
registerSpanEventListener(listner: types.SpanEventListener) {
162175
this.eventListenersLocal.push(listner);
163176
}
164177

178+
private notifyStartSpan(root: types.RootSpan) {
179+
this.logger.debug('starting to notify listeners the start of rootspans');
180+
if (this.eventListenersLocal && this.eventListenersLocal.length > 0) {
181+
for (const listener of this.eventListenersLocal) {
182+
listener.onStartSpan(root);
183+
}
184+
}
185+
}
186+
165187
private notifyEndSpan(root: types.RootSpan) {
166188
if (this.active) {
167189
this.logger.debug('starting to notify listeners the end of rootspans');

packages/opencensus-core/src/trace/model/types.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,9 @@ export interface SpanContext {
8282
}
8383

8484
/** Defines an end span event listener */
85-
export interface OnEndSpanEventListener {
85+
export interface SpanEventListener {
8686
/** Happens when a span is ended */
87+
onStartSpan(span: RootSpan): void;
8788
onEndSpan(span: RootSpan): void;
8889
}
8990

@@ -213,7 +214,7 @@ export interface RootSpan extends Span {
213214

214215

215216
/** Interface for Tracer */
216-
export interface Tracer extends OnEndSpanEventListener {
217+
export interface Tracer extends SpanEventListener {
217218
/** Get and set the currentRootSpan to tracer instance */
218219
currentRootSpan: RootSpan;
219220

@@ -227,7 +228,7 @@ export interface Tracer extends OnEndSpanEventListener {
227228
readonly propagation: Propagation;
228229

229230
/** Get the eventListeners from tracer instance */
230-
readonly eventListeners: OnEndSpanEventListener[];
231+
readonly eventListeners: SpanEventListener[];
231232

232233
/** Get the active status from tracer instance */
233234
readonly active: boolean;
@@ -254,7 +255,7 @@ export interface Tracer extends OnEndSpanEventListener {
254255
* Register a OnEndSpanEventListener on the tracer instance
255256
* @param listener An OnEndSpanEventListener instance
256257
*/
257-
registerEndSpanListener(listener: OnEndSpanEventListener): void;
258+
registerSpanEventListener(listener: SpanEventListener): void;
258259

259260
/** Clear the currentRootSpan from tracer instance */
260261
clearCurrentTrace(): void;

packages/opencensus-core/test/test-console-exporter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ describe('ConsoleLogExporter', () => {
7474
describe('onEndSpan()', () => {
7575
it('should end a span', () => {
7676
const exporter = new ConsoleExporter(defaultBufferConfig);
77-
tracer.registerEndSpanListener(exporter);
77+
tracer.registerSpanEventListener(exporter);
7878
// const rootSpan = new RootSpan(tracer);
7979
const rootSpans = createRootSpans();
8080
for (const rootSpan of rootSpans) {

packages/opencensus-core/test/test-tracer.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ import {RootSpan} from '../src/trace/model/root-span';
2424
import {Span} from '../src/trace/model/span';
2525
import {Tracer} from '../src/trace/model/tracer';
2626
import * as types from '../src/trace/model/types';
27-
import {OnEndSpanEventListener} from '../src/trace/model/types';
27+
import {SpanEventListener} from '../src/trace/model/types';
2828

29-
class OnEndSpanClass implements OnEndSpanEventListener {
29+
class OnEndSpanClass implements SpanEventListener {
3030
/** Counter for test use */
3131
testCount = 0;
32+
onStartSpan(span: RootSpan): void {}
3233
/** Happens when a span is ended */
3334
onEndSpan(span: RootSpan): void {
3435
this.testCount++;
@@ -80,12 +81,12 @@ describe('Tracer', () => {
8081
});
8182

8283
/** Should return an OnEndSpanEventListener list */
83-
describe('registerEndSpanListener() / get eventListeners()', () => {
84+
describe('registerSpanEventListener() / get eventListeners()', () => {
8485
let tracer, onEndSpan;
8586
before(() => {
8687
tracer = new Tracer();
8788
onEndSpan = new OnEndSpanClass();
88-
tracer.registerEndSpanListener(onEndSpan);
89+
tracer.registerSpanEventListener(onEndSpan);
8990
});
9091

9192
it('should register a new OnEndSpanEventListener on listners list', () => {
@@ -271,7 +272,7 @@ describe('Tracer', () => {
271272
it('should run eventListeners when the rootSpan ends', () => {
272273
const tracer = new Tracer();
273274
const eventListener = new OnEndSpanClass();
274-
tracer.registerEndSpanListener(eventListener);
275+
tracer.registerSpanEventListener(eventListener);
275276
tracer.start(defaultConfig);
276277

277278
tracer.startRootSpan(options, (rootSpan) => {

packages/opencensus-exporter-stackdriver/src/stackdriver.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ export class StackdriverTraceExporter implements types.Exporter {
6060
this.exporterBuffer.addToBuffer(root);
6161
}
6262

63+
/** Not used for this exporter */
64+
onStartSpan(root: types.RootSpan) {}
65+
6366
/**
6467
* Publishes a list of root spans to Stackdriver.
6568
* @param rootSpans

packages/opencensus-exporter-stackdriver/test/test-stackdriver.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ describe('Stackdriver Exporter', function() {
7575
exporter = new StackdriverTraceExporter(exporterOptions);
7676
tracer = new classes.Tracer();
7777
tracer.start({samplingRate: 1});
78-
tracer.registerEndSpanListener(exporter);
78+
tracer.registerSpanEventListener(exporter);
7979
if (!dryrun) {
8080
process.env.GOOGLE_APPLICATION_CREDENTIALS =
8181
GOOGLE_APPLICATION_CREDENTIALS;
@@ -143,7 +143,7 @@ describe('Stackdriver Exporter', function() {
143143
const failExporter = new StackdriverTraceExporter(failExporterOptions);
144144
const failTracer = new classes.Tracer();
145145
failTracer.start({samplingRate: 1});
146-
failTracer.registerEndSpanListener(failExporter);
146+
failTracer.registerSpanEventListener(failExporter);
147147
return failTracer.startRootSpan(
148148
{name: 'sdNoExportTestRootSpan'}, async (rootSpan) => {
149149
const span = failTracer.startChildSpan('sdNoExportTestChildSpan');

packages/opencensus-instrumentation-http/test/test-http.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,10 @@ const httpRequest = {
5656

5757
const VERSION = process.versions.node;
5858

59-
class RootSpanVerifier implements types.OnEndSpanEventListener {
59+
class RootSpanVerifier implements types.SpanEventListener {
6060
endedRootSpans: types.RootSpan[] = [];
6161

62+
onStartSpan(span: types.RootSpan): void {}
6263
onEndSpan(root: types.RootSpan) {
6364
this.endedRootSpans.push(root);
6465
}
@@ -99,7 +100,7 @@ describe('HttpPlugin', () => {
99100

100101
before(() => {
101102
plugin.applyPatch(http, tracer, VERSION);
102-
tracer.registerEndSpanListener(rootSpanVerifier);
103+
tracer.registerSpanEventListener(rootSpanVerifier);
103104
server = http.createServer((request, response) => {
104105
response.end('Test Server Response');
105106
});

0 commit comments

Comments
 (0)