Skip to content

Commit 6b67c98

Browse files
committed
fix(tracing): span processor should receive a readable span as parameters
1 parent 1dd3804 commit 6b67c98

File tree

10 files changed

+62
-69
lines changed

10 files changed

+62
-69
lines changed

packages/opentelemetry-exporter-zipkin/test/transform.test.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ describe('transform', () => {
6868
span.end();
6969

7070
const zipkinSpan = toZipkinSpan(
71-
span.toReadableSpan(),
71+
span,
7272
'my-service',
7373
statusCodeTagName,
7474
statusDescriptionTagName
@@ -112,7 +112,7 @@ describe('transform', () => {
112112
span.end();
113113

114114
const zipkinSpan = toZipkinSpan(
115-
span.toReadableSpan(),
115+
span,
116116
'my-service',
117117
statusCodeTagName,
118118
statusDescriptionTagName
@@ -154,7 +154,7 @@ describe('transform', () => {
154154
span.end();
155155

156156
const zipkinSpan = toZipkinSpan(
157-
span.toReadableSpan(),
157+
span,
158158
'my-service',
159159
statusCodeTagName,
160160
statusDescriptionTagName

packages/opentelemetry-plugin-http/test/functionals/utils.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ describe('Utility', () => {
261261
);
262262
/* tslint:disable-next-line:no-any */
263263
utils.setSpanWithError(span, new Error(errorMessage), obj as any);
264-
const attributes = span.toReadableSpan().attributes;
264+
const attributes = span.attributes;
265265
assert.strictEqual(
266266
attributes[AttributeNames.HTTP_ERROR_MESSAGE],
267267
errorMessage

packages/opentelemetry-tracing/src/MultiSpanProcessor.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { Span } from '@opentelemetry/api';
1817
import { SpanProcessor } from './SpanProcessor';
18+
import { ReadableSpan } from './export/ReadableSpan';
1919

2020
/**
2121
* Implementation of the {@link SpanProcessor} that simply forwards all
@@ -30,13 +30,13 @@ export class MultiSpanProcessor implements SpanProcessor {
3030
}
3131
}
3232

33-
onStart(span: Span): void {
33+
onStart(span: ReadableSpan): void {
3434
for (const spanProcessor of this._spanProcessors) {
3535
spanProcessor.onStart(span);
3636
}
3737
}
3838

39-
onEnd(span: Span): void {
39+
onEnd(span: ReadableSpan): void {
4040
for (const spanProcessor of this._spanProcessors) {
4141
spanProcessor.onEnd(span);
4242
}

packages/opentelemetry-tracing/src/NoopSpanProcessor.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { Span } from '@opentelemetry/api';
1817
import { SpanProcessor } from './SpanProcessor';
18+
import { ReadableSpan } from './export/ReadableSpan';
1919

2020
/** No-op implementation of SpanProcessor */
2121
export class NoopSpanProcessor implements SpanProcessor {
22-
onStart(span: Span): void {}
23-
onEnd(span: Span): void {}
22+
onStart(span: ReadableSpan): void {}
23+
onEnd(span: ReadableSpan): void {}
2424
shutdown(): void {}
2525
forceFlush(): void {}
2626
}

packages/opentelemetry-tracing/src/Span.ts

-4
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,6 @@ export class Span implements api.Span, ReadableSpan {
175175
return true;
176176
}
177177

178-
toReadableSpan(): ReadableSpan {
179-
return this;
180-
}
181-
182178
get duration(): api.HrTime {
183179
return this._duration;
184180
}

packages/opentelemetry-tracing/src/SpanProcessor.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { Span } from '@opentelemetry/api';
17+
import { ReadableSpan } from './export/ReadableSpan';
1818

1919
/**
2020
* SpanProcessor is the interface Tracer SDK uses to allow synchronous hooks
@@ -27,18 +27,18 @@ export interface SpanProcessor {
2727
forceFlush(): void;
2828

2929
/**
30-
* Called when a {@link Span} is started, if the `span.isRecording()`
30+
* Called when a {@link ReadableSpan} is started, if the `span.isRecording()`
3131
* returns true.
3232
* @param span the Span that just started.
3333
*/
34-
onStart(span: Span): void;
34+
onStart(span: ReadableSpan): void;
3535

3636
/**
37-
* Called when a {@link Span} is ended, if the `span.isRecording()`
37+
* Called when a {@link ReadableSpan} is ended, if the `span.isRecording()`
3838
* returns true.
3939
* @param span the Span that just ended.
4040
*/
41-
onEnd(span: Span): void;
41+
onEnd(span: ReadableSpan): void;
4242

4343
/**
4444
* Shuts down the processor. Called when SDK is shut down. This is an

packages/opentelemetry-tracing/src/export/BatchSpanProcessor.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
import { unrefTimer } from '@opentelemetry/core';
18-
import { Span } from '../Span';
1918
import { SpanProcessor } from '../SpanProcessor';
2019
import { BufferConfig } from '../types';
2120
import { ReadableSpan } from './ReadableSpan';
@@ -53,13 +52,13 @@ export class BatchSpanProcessor implements SpanProcessor {
5352
}
5453

5554
// does nothing.
56-
onStart(span: Span): void {}
55+
onStart(span: ReadableSpan): void {}
5756

58-
onEnd(span: Span): void {
57+
onEnd(span: ReadableSpan): void {
5958
if (this._isShutdown) {
6059
return;
6160
}
62-
this._addToBuffer(span.toReadableSpan());
61+
this._addToBuffer(span);
6362
}
6463

6564
shutdown(): void {

packages/opentelemetry-tracing/src/export/SimpleSpanProcessor.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { Span } from '../Span';
1817
import { SpanProcessor } from '../SpanProcessor';
1918
import { SpanExporter } from './SpanExporter';
19+
import { ReadableSpan } from './ReadableSpan';
2020

2121
/**
2222
* An implementation of the {@link SpanProcessor} that converts the {@link Span}
@@ -33,13 +33,13 @@ export class SimpleSpanProcessor implements SpanProcessor {
3333
}
3434

3535
// does nothing.
36-
onStart(span: Span): void {}
36+
onStart(span: ReadableSpan): void {}
3737

38-
onEnd(span: Span): void {
38+
onEnd(span: ReadableSpan): void {
3939
if (this._isShutdown) {
4040
return;
4141
}
42-
this._exporter.export([span.toReadableSpan()], () => {});
42+
this._exporter.export([span], () => {});
4343
}
4444

4545
shutdown(): void {

packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts

+20-9
Original file line numberDiff line numberDiff line change
@@ -31,33 +31,44 @@ class TestProcessor implements SpanProcessor {
3131
}
3232

3333
describe('MultiSpanProcessor', () => {
34-
const tracer = new BasicTracerProvider().getTracer('default');
35-
const span = tracer.startSpan('one');
36-
3734
it('should handle empty span processor', () => {
3835
const multiSpanProcessor = new MultiSpanProcessor([]);
39-
multiSpanProcessor.onStart(span);
40-
multiSpanProcessor.onEnd(span);
36+
37+
const tracerProvider = new BasicTracerProvider();
38+
tracerProvider.addSpanProcessor(multiSpanProcessor);
39+
const tracer = tracerProvider.getTracer('default');
40+
const span = tracer.startSpan('one');
41+
span.end();
4142
multiSpanProcessor.shutdown();
4243
});
4344

4445
it('should handle one span processor', () => {
4546
const processor1 = new TestProcessor();
4647
const multiSpanProcessor = new MultiSpanProcessor([processor1]);
47-
multiSpanProcessor.onStart(span);
48+
49+
const tracerProvider = new BasicTracerProvider();
50+
tracerProvider.addSpanProcessor(multiSpanProcessor);
51+
const tracer = tracerProvider.getTracer('default');
52+
const span = tracer.startSpan('one');
4853
assert.strictEqual(processor1.spans.length, 0);
49-
multiSpanProcessor.onEnd(span);
54+
span.end();
5055
assert.strictEqual(processor1.spans.length, 1);
56+
multiSpanProcessor.shutdown();
5157
});
5258

5359
it('should handle two span processor', () => {
5460
const processor1 = new TestProcessor();
5561
const processor2 = new TestProcessor();
5662
const multiSpanProcessor = new MultiSpanProcessor([processor1, processor2]);
57-
multiSpanProcessor.onStart(span);
63+
64+
const tracerProvider = new BasicTracerProvider();
65+
tracerProvider.addSpanProcessor(multiSpanProcessor);
66+
const tracer = tracerProvider.getTracer('default');
67+
const span = tracer.startSpan('one');
5868
assert.strictEqual(processor1.spans.length, 0);
5969
assert.strictEqual(processor1.spans.length, processor2.spans.length);
60-
multiSpanProcessor.onEnd(span);
70+
71+
span.end();
6172
assert.strictEqual(processor1.spans.length, 1);
6273
assert.strictEqual(processor1.spans.length, processor2.spans.length);
6374

packages/opentelemetry-tracing/test/Span.test.ts

+20-33
Original file line numberDiff line numberDiff line change
@@ -220,37 +220,33 @@ describe('Span', () => {
220220
parentId
221221
);
222222

223-
const readableSpan = span.toReadableSpan();
224-
assert.strictEqual(readableSpan.name, 'my-span');
225-
assert.strictEqual(readableSpan.kind, SpanKind.INTERNAL);
226-
assert.strictEqual(readableSpan.parentSpanId, parentId);
227-
assert.strictEqual(readableSpan.spanContext.traceId, spanContext.traceId);
228-
assert.deepStrictEqual(readableSpan.status, {
223+
assert.strictEqual(span.name, 'my-span');
224+
assert.strictEqual(span.kind, SpanKind.INTERNAL);
225+
assert.strictEqual(span.parentSpanId, parentId);
226+
assert.strictEqual(span.spanContext.traceId, spanContext.traceId);
227+
assert.deepStrictEqual(span.status, {
229228
code: CanonicalCode.OK,
230229
});
231-
assert.deepStrictEqual(readableSpan.attributes, {});
232-
assert.deepStrictEqual(readableSpan.links, []);
233-
assert.deepStrictEqual(readableSpan.events, []);
230+
assert.deepStrictEqual(span.attributes, {});
231+
assert.deepStrictEqual(span.links, []);
232+
assert.deepStrictEqual(span.events, []);
234233
});
235234

236235
it('should return ReadableSpan with attributes', () => {
237236
const span = new Span(tracer, 'my-span', spanContext, SpanKind.CLIENT);
238237
span.setAttribute('attr1', 'value1');
239-
let readableSpan = span.toReadableSpan();
240-
assert.deepStrictEqual(readableSpan.attributes, { attr1: 'value1' });
238+
assert.deepStrictEqual(span.attributes, { attr1: 'value1' });
241239

242240
span.setAttributes({ attr2: 123, attr1: false });
243-
readableSpan = span.toReadableSpan();
244-
assert.deepStrictEqual(readableSpan.attributes, {
241+
assert.deepStrictEqual(span.attributes, {
245242
attr1: false,
246243
attr2: 123,
247244
});
248245

249246
span.end();
250247
// shouldn't add new attribute
251248
span.setAttribute('attr3', 'value3');
252-
readableSpan = span.toReadableSpan();
253-
assert.deepStrictEqual(readableSpan.attributes, {
249+
assert.deepStrictEqual(span.attributes, {
254250
attr1: false,
255251
attr2: 123,
256252
});
@@ -271,9 +267,8 @@ describe('Span', () => {
271267
},
272268
]
273269
);
274-
const readableSpan = span.toReadableSpan();
275-
assert.strictEqual(readableSpan.links.length, 2);
276-
assert.deepStrictEqual(readableSpan.links, [
270+
assert.strictEqual(span.links.length, 2);
271+
assert.deepStrictEqual(span.links, [
277272
{
278273
context: linkContext,
279274
},
@@ -289,17 +284,15 @@ describe('Span', () => {
289284
it('should return ReadableSpan with events', () => {
290285
const span = new Span(tracer, 'my-span', spanContext, SpanKind.CLIENT);
291286
span.addEvent('sent');
292-
let readableSpan = span.toReadableSpan();
293-
assert.strictEqual(readableSpan.events.length, 1);
294-
const [event] = readableSpan.events;
287+
assert.strictEqual(span.events.length, 1);
288+
const [event] = span.events;
295289
assert.deepStrictEqual(event.name, 'sent');
296290
assert.ok(!event.attributes);
297291
assert.ok(event.time[0] > 0);
298292

299293
span.addEvent('rev', { attr1: 'value', attr2: 123, attr3: true });
300-
readableSpan = span.toReadableSpan();
301-
assert.strictEqual(readableSpan.events.length, 2);
302-
const [event1, event2] = readableSpan.events;
294+
assert.strictEqual(span.events.length, 2);
295+
const [event1, event2] = span.events;
303296
assert.deepStrictEqual(event1.name, 'sent');
304297
assert.ok(!event1.attributes);
305298
assert.ok(event1.time[0] > 0);
@@ -314,9 +307,7 @@ describe('Span', () => {
314307
span.end();
315308
// shouldn't add new event
316309
span.addEvent('sent');
317-
assert.strictEqual(readableSpan.events.length, 2);
318-
readableSpan = span.toReadableSpan();
319-
assert.strictEqual(readableSpan.events.length, 2);
310+
assert.strictEqual(span.events.length, 2);
320311
});
321312

322313
it('should return ReadableSpan with new status', () => {
@@ -325,12 +316,8 @@ describe('Span', () => {
325316
code: CanonicalCode.PERMISSION_DENIED,
326317
message: 'This is an error',
327318
});
328-
const readableSpan = span.toReadableSpan();
329-
assert.strictEqual(
330-
readableSpan.status.code,
331-
CanonicalCode.PERMISSION_DENIED
332-
);
333-
assert.strictEqual(readableSpan.status.message, 'This is an error');
319+
assert.strictEqual(span.status.code, CanonicalCode.PERMISSION_DENIED);
320+
assert.strictEqual(span.status.message, 'This is an error');
334321
span.end();
335322

336323
// shouldn't update status

0 commit comments

Comments
 (0)