From f9640fcb0cf1ef4c15a0b9c5cae55f2a83ccb679 Mon Sep 17 00:00:00 2001 From: Gerhard Stoebich <18708370+Flarna@users.noreply.github.com> Date: Mon, 16 Dec 2019 12:50:39 +0100 Subject: [PATCH] feat: introduce ended property on Span Add a getter to Span and ReadableSpan to allow checking if the span is ended without using a private field or rely on internals like span.duration[0] < 0. Refs: https://github.com/open-telemetry/opentelemetry-java/pull/693 Refs: https://github.com/open-telemetry/opentelemetry-java/pull/697 --- packages/opentelemetry-exporter-collector/test/helper.ts | 1 + packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts | 1 + .../opentelemetry-exporter-jaeger/test/transform.test.ts | 3 +++ packages/opentelemetry-exporter-zipkin/test/zipkin.test.ts | 3 +++ packages/opentelemetry-tracing/src/Span.ts | 4 ++++ packages/opentelemetry-tracing/src/export/ReadableSpan.ts | 1 + packages/opentelemetry-tracing/test/Span.test.ts | 7 +++++++ 7 files changed, 20 insertions(+) diff --git a/packages/opentelemetry-exporter-collector/test/helper.ts b/packages/opentelemetry-exporter-collector/test/helper.ts index 46071b7e7fe..c77bdcd16f6 100644 --- a/packages/opentelemetry-exporter-collector/test/helper.ts +++ b/packages/opentelemetry-exporter-collector/test/helper.ts @@ -32,6 +32,7 @@ export const mockedReadableSpan: ReadableSpan = { parentSpanId: '78a8915098864388', startTime: [1574120165, 429803070], endTime: [1574120165, 438688070], + ended: true, status: { code: 0 }, attributes: { component: 'document-load' }, links: [ diff --git a/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts b/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts index 3cc994294b2..d7c23855472 100644 --- a/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts +++ b/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts @@ -117,6 +117,7 @@ describe('JaegerExporter', () => { spanContext, startTime: [1566156729, 709], endTime: [1566156731, 709], + ended: true, status: { code: types.CanonicalCode.DATA_LOSS, }, diff --git a/packages/opentelemetry-exporter-jaeger/test/transform.test.ts b/packages/opentelemetry-exporter-jaeger/test/transform.test.ts index bce206264e9..8992fe2a08c 100644 --- a/packages/opentelemetry-exporter-jaeger/test/transform.test.ts +++ b/packages/opentelemetry-exporter-jaeger/test/transform.test.ts @@ -35,6 +35,7 @@ describe('transform', () => { spanContext, startTime: [1566156729, 709], endTime: [1566156731, 709], + ended: true, status: { code: types.CanonicalCode.OK, }, @@ -131,6 +132,7 @@ describe('transform', () => { spanContext, startTime: [1566156729, 709], endTime: [1566156731, 709], + ended: true, status: { code: types.CanonicalCode.DATA_LOSS, message: 'data loss', @@ -187,6 +189,7 @@ describe('transform', () => { spanContext, startTime: [1566156729, 709], endTime: [1566156731, 709], + ended: true, status: { code: types.CanonicalCode.OK, }, diff --git a/packages/opentelemetry-exporter-zipkin/test/zipkin.test.ts b/packages/opentelemetry-exporter-zipkin/test/zipkin.test.ts index 2a09e37230c..e774730b915 100644 --- a/packages/opentelemetry-exporter-zipkin/test/zipkin.test.ts +++ b/packages/opentelemetry-exporter-zipkin/test/zipkin.test.ts @@ -38,6 +38,7 @@ function getReadableSpan() { }, startTime: [startTime, 0], endTime: [startTime + duration, 0], + ended: true, duration: [duration, 0], status: { code: types.CanonicalCode.OK, @@ -141,6 +142,7 @@ describe('ZipkinExporter', () => { }, startTime: [startTime, 0], endTime: [startTime + duration, 0], + ended: true, duration: [duration, 0], status: { code: types.CanonicalCode.OK, @@ -167,6 +169,7 @@ describe('ZipkinExporter', () => { }, startTime: [startTime, 0], endTime: [startTime + duration, 0], + ended: true, duration: [duration, 0], status: { code: types.CanonicalCode.OK, diff --git a/packages/opentelemetry-tracing/src/Span.ts b/packages/opentelemetry-tracing/src/Span.ts index 0fe7cfdbd28..0cd1b7252b3 100644 --- a/packages/opentelemetry-tracing/src/Span.ts +++ b/packages/opentelemetry-tracing/src/Span.ts @@ -180,6 +180,10 @@ export class Span implements types.Span, ReadableSpan { return this._duration; } + get ended(): boolean { + return this._ended; + } + private _isSpanEnded(): boolean { if (this._ended) { this._logger.warn( diff --git a/packages/opentelemetry-tracing/src/export/ReadableSpan.ts b/packages/opentelemetry-tracing/src/export/ReadableSpan.ts index a0f84b0626c..e480cad4e7c 100644 --- a/packages/opentelemetry-tracing/src/export/ReadableSpan.ts +++ b/packages/opentelemetry-tracing/src/export/ReadableSpan.ts @@ -36,4 +36,5 @@ export interface ReadableSpan { readonly links: Link[]; readonly events: TimedEvent[]; readonly duration: HrTime; + readonly ended: boolean; } diff --git a/packages/opentelemetry-tracing/test/Span.test.ts b/packages/opentelemetry-tracing/test/Span.test.ts index 7b0d3016789..ae759c2c4a9 100644 --- a/packages/opentelemetry-tracing/test/Span.test.ts +++ b/packages/opentelemetry-tracing/test/Span.test.ts @@ -349,4 +349,11 @@ describe('Span', () => { span.updateName('bar-span'); assert.strictEqual(span.name, 'foo-span'); }); + + it('should have ended', () => { + const span = new Span(tracer, name, spanContext, SpanKind.SERVER); + assert.strictEqual(span.ended, false); + span.end(); + assert.strictEqual(span.ended, true); + }) });