From 871d6962bb3270b6a3b6df7299e4b4e55ed9fcb0 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Thu, 16 Jul 2020 05:40:51 +0000 Subject: [PATCH 01/51] feat: graceful shutdown for tracing and metrics --- .../test/prometheus.test.ts | 30 ++++++++++++- packages/opentelemetry-metrics/src/Meter.ts | 7 +++- .../src/MeterProvider.ts | 12 ++++++ .../src/export/Controller.ts | 9 +++- packages/opentelemetry-metrics/src/types.ts | 4 ++ .../test/MeterProvider.test.ts | 42 +++++++++++++++++++ .../src/BasicTracerProvider.ts | 7 ++++ packages/opentelemetry-tracing/src/config.ts | 1 + packages/opentelemetry-tracing/src/types.ts | 3 ++ .../test/BasicTracerProvider.test.ts | 37 ++++++++++++++++ .../test/MultiSpanProcessor.test.ts | 28 +++++++++++++ 11 files changed, 176 insertions(+), 4 deletions(-) diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index ba499de3f5..04f695399d 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -188,11 +188,14 @@ describe('PrometheusExporter', () => { beforeEach(done => { exporter = new PrometheusExporter(); - meter = new MeterProvider().getMeter('test-prometheus'); + meter = new MeterProvider().getMeter('test-prometheus', '1', { + exporter: exporter, + }); exporter.startServer(done); }); afterEach(done => { + process.removeAllListeners('SIGTERM'); exporter.shutdown(done); }); @@ -416,6 +419,30 @@ describe('PrometheusExporter', () => { }); }); }); + + it('should export a UpDownCounter upon shutdown', done => { + const counter = meter.createUpDownCounter('counter', { + description: 'a test description', + }); + + counter.bind({ key1: 'labelValue1' }).add(20); + process.once('SIGTERM', () => { + http + .get('http://localhost:9464/metrics', res => { + res.on('data', chunk => { + assert.deepStrictEqual(chunk.toString().split('\n'), [ + '# HELP counter a test description', + '# TYPE counter gauge', + 'counter{key1="labelValue1"} 20', + '', + ]); + done(); + }); + }) + .on('error', errorHandler(done)); + }); + process.kill(process.pid, 'SIGTERM'); + }); }); describe('configuration', () => { @@ -425,6 +452,7 @@ describe('PrometheusExporter', () => { beforeEach(() => { meter = new MeterProvider().getMeter('test-prometheus'); + process.removeAllListeners('SIGTERM'); counter = meter.createCounter('counter') as CounterMetric; counter.bind({ key1: 'labelValue1' }).add(10); }); diff --git a/packages/opentelemetry-metrics/src/Meter.ts b/packages/opentelemetry-metrics/src/Meter.ts index 0842eefabd..7c175549c8 100644 --- a/packages/opentelemetry-metrics/src/Meter.ts +++ b/packages/opentelemetry-metrics/src/Meter.ts @@ -39,6 +39,7 @@ export class Meter implements api.Meter { private readonly _batcher: Batcher; private readonly _resource: Resource; private readonly _instrumentationLibrary: InstrumentationLibrary; + private readonly _controller: PushController; /** * Constructs a new Meter instance. @@ -54,7 +55,7 @@ export class Meter implements api.Meter { // start the push controller const exporter = config.exporter || new NoopExporter(); const interval = config.interval; - new PushController(this, exporter, interval); + this._controller = new PushController(this, exporter, interval); } /** @@ -252,6 +253,10 @@ export class Meter implements api.Meter { return this._batcher; } + shutdown(): void { + this._controller.shutdown(); + } + /** * Registers metric to register. * @param name The name of the metric. diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index b178593dfa..f0c33e75fd 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -36,6 +36,9 @@ export class MeterProvider implements api.MeterProvider { logger: this.logger, resource: this.resource, }); + if (this._config['gracefulShutdown']) { + process.once('SIGTERM', this.shutdown.bind(this)); + } } /** @@ -54,4 +57,13 @@ export class MeterProvider implements api.MeterProvider { return this._meters.get(key)!; } + + shutdown(): void { + if (this._config['exporter']) { + this._config['exporter'].shutdown(); + } + this._meters.forEach((meter, _) => { + meter.shutdown(); + }); + } } diff --git a/packages/opentelemetry-metrics/src/export/Controller.ts b/packages/opentelemetry-metrics/src/export/Controller.ts index 0b63ba12cf..d3cc949381 100644 --- a/packages/opentelemetry-metrics/src/export/Controller.ts +++ b/packages/opentelemetry-metrics/src/export/Controller.ts @@ -38,8 +38,13 @@ export class PushController extends Controller { unrefTimer(this._timer); } - private _collect() { - this._meter.collect(); + shutdown() { + this._collect(); + } + + private async _collect() { + await this._meter.collect(); + this._exporter.export(this._meter.getBatcher().checkPointSet(), result => { if (result !== ExportResult.SUCCESS) { // @todo: log error diff --git a/packages/opentelemetry-metrics/src/types.ts b/packages/opentelemetry-metrics/src/types.ts index 0334bac69c..6a015d2f4a 100644 --- a/packages/opentelemetry-metrics/src/types.ts +++ b/packages/opentelemetry-metrics/src/types.ts @@ -39,11 +39,15 @@ export interface MeterConfig { /** Metric batcher. */ batcher?: Batcher; + + /** Bool for whether or not graceful shutdown is enabled */ + gracefulShutdown?: boolean; } /** Default Meter configuration. */ export const DEFAULT_CONFIG = { logLevel: LogLevel.INFO, + gracefulShutdown: true, }; /** The default metric creation options value. */ diff --git a/packages/opentelemetry-metrics/test/MeterProvider.test.ts b/packages/opentelemetry-metrics/test/MeterProvider.test.ts index 7156e12e7c..7db7541baa 100644 --- a/packages/opentelemetry-metrics/test/MeterProvider.test.ts +++ b/packages/opentelemetry-metrics/test/MeterProvider.test.ts @@ -15,10 +15,15 @@ */ import * as assert from 'assert'; +import * as sinon from 'sinon'; import { MeterProvider, Meter, CounterMetric } from '../src'; import { NoopLogger } from '@opentelemetry/core'; describe('MeterProvider', () => { + afterEach(() => { + process.removeAllListeners('SIGTERM'); + }); + describe('constructor', () => { it('should construct an instance without any options', () => { const provider = new MeterProvider(); @@ -73,4 +78,41 @@ describe('MeterProvider', () => { assert.notEqual(meter3, meter4); }); }); + + describe('shutdown()', () => { + it('should call shutdown when SIGTERM is received', () => { + const meterProvider = new MeterProvider(); + const sandbox = sinon.createSandbox(); + const shutdownStub1 = sandbox.stub( + meterProvider.getMeter('meter1'), + 'shutdown' + ); + const shutdownStub2 = sandbox.stub( + meterProvider.getMeter('meter2'), + 'shutdown' + ); + process.once('SIGTERM', () => { + sinon.assert.calledOnce(shutdownStub1); + sinon.assert.calledOnce(shutdownStub2); + sandbox.restore(); + }); + process.kill(process.pid, 'SIGTERM'); + }); + + it('should not trigger shutdown if graceful shutdown is turned off', () => { + const meterProvider = new MeterProvider({ + gracefulShutdown: false, + }); + const sandbox = sinon.createSandbox(); + const shutdownStub = sandbox.stub( + meterProvider.getMeter('meter1'), + 'shutdown' + ); + process.once('SIGTERM', () => { + sinon.assert.notCalled(shutdownStub); + sandbox.restore(); + }); + process.kill(process.pid, 'SIGTERM'); + }); + }); }); diff --git a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts index cd19857f43..b3929bb963 100644 --- a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts +++ b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts @@ -47,6 +47,9 @@ export class BasicTracerProvider implements api.TracerProvider { logger: this.logger, resource: this.resource, }); + if (this._config['gracefulShutdown']) { + process.once('SIGTERM', this.shutdown.bind(this)); + } } getTracer(name: string, version = '*', config?: TracerConfig): Tracer { @@ -99,4 +102,8 @@ export class BasicTracerProvider implements api.TracerProvider { api.propagation.setGlobalPropagator(config.propagator); } } + + shutdown(): void { + this.activeSpanProcessor.shutdown(); + } } diff --git a/packages/opentelemetry-tracing/src/config.ts b/packages/opentelemetry-tracing/src/config.ts index e06be1c7cc..0250228863 100644 --- a/packages/opentelemetry-tracing/src/config.ts +++ b/packages/opentelemetry-tracing/src/config.ts @@ -38,4 +38,5 @@ export const DEFAULT_CONFIG = { numberOfLinksPerSpan: DEFAULT_MAX_LINKS_PER_SPAN, numberOfEventsPerSpan: DEFAULT_MAX_EVENTS_PER_SPAN, }, + gracefulShutdown: true, }; diff --git a/packages/opentelemetry-tracing/src/types.ts b/packages/opentelemetry-tracing/src/types.ts index c6eeae35d0..5f81c7f774 100644 --- a/packages/opentelemetry-tracing/src/types.ts +++ b/packages/opentelemetry-tracing/src/types.ts @@ -52,6 +52,9 @@ export interface TracerConfig { /** Resource associated with trace telemetry */ resource?: Resource; + + /** Bool for whether or not graceful shutdown is enabled */ + gracefulShutdown?: boolean; } /** diff --git a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts index da06751509..3e25bc3937 100644 --- a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts +++ b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts @@ -27,6 +27,7 @@ import { } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; import * as assert from 'assert'; +import * as sinon from 'sinon'; import { BasicTracerProvider, Span } from '../src'; describe('BasicTracerProvider', () => { @@ -34,6 +35,10 @@ describe('BasicTracerProvider', () => { context.disable(); }); + afterEach(() => { + process.removeAllListeners('SIGTERM'); + }); + describe('constructor', () => { it('should construct an instance without any options', () => { const provider = new BasicTracerProvider(); @@ -381,4 +386,36 @@ describe('BasicTracerProvider', () => { assert.ok(tracerProvider.resource instanceof Resource); }); }); + + describe('.shutdown()', () => { + it('should trigger shutdown when SIGTERM is recieved', () => { + const tracerProvider = new BasicTracerProvider(); + const sandbox = sinon.createSandbox(); + const shutdownStub = sandbox.stub( + tracerProvider.getActiveSpanProcessor(), + 'shutdown' + ); + process.once('SIGTERM', () => { + sinon.assert.calledOnce(shutdownStub); + sandbox.restore(); + }); + process.kill(process.pid, 'SIGTERM'); + }); + + it('should not trigger shutdown if graceful shutdown is turned off', () => { + const tracerProvider = new BasicTracerProvider({ + gracefulShutdown: false, + }); + const sandbox = sinon.createSandbox(); + const shutdownStub = sandbox.stub( + tracerProvider.getActiveSpanProcessor(), + 'shutdown' + ); + process.once('SIGTERM', () => { + sinon.assert.notCalled(shutdownStub); + sandbox.restore(); + }); + process.kill(process.pid, 'SIGTERM'); + }); + }); }); diff --git a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts index ea0a6b8e3e..3b19da9c3b 100644 --- a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts +++ b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts @@ -31,6 +31,10 @@ class TestProcessor implements SpanProcessor { } describe('MultiSpanProcessor', () => { + afterEach(() => { + process.removeAllListeners('SIGTERM'); + }); + it('should handle empty span processor', () => { const multiSpanProcessor = new MultiSpanProcessor([]); @@ -77,6 +81,30 @@ describe('MultiSpanProcessor', () => { assert.strictEqual(processor1.spans.length, processor2.spans.length); }); + it('should export spans on graceful shutdown from two span processor', () => { + const processor1 = new TestProcessor(); + const processor2 = new TestProcessor(); + const multiSpanProcessor = new MultiSpanProcessor([processor1, processor2]); + + const tracerProvider = new BasicTracerProvider(); + tracerProvider.addSpanProcessor(multiSpanProcessor); + const tracer = tracerProvider.getTracer('default'); + const span = tracer.startSpan('one'); + assert.strictEqual(processor1.spans.length, 0); + assert.strictEqual(processor1.spans.length, processor2.spans.length); + + span.end(); + assert.strictEqual(processor1.spans.length, 1); + assert.strictEqual(processor1.spans.length, processor2.spans.length); + + process.once('SIGTERM', () => { + assert.strictEqual(processor1.spans.length, 0); + assert.strictEqual(processor1.spans.length, processor2.spans.length); + }); + + process.kill(process.pid, 'SIGTERM'); + }); + it('should force span processors to flush', () => { let flushed = false; const processor: SpanProcessor = { From de161cca26eb90b0eb01294e814b265572d67075 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Thu, 16 Jul 2020 05:48:23 +0000 Subject: [PATCH 02/51] fix: wording in test case --- .../opentelemetry-exporter-prometheus/test/prometheus.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index 04f695399d..e1dc701599 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -420,7 +420,7 @@ describe('PrometheusExporter', () => { }); }); - it('should export a UpDownCounter upon shutdown', done => { + it('should export a UpDownCounter as gague on SIGTERM', done => { const counter = meter.createUpDownCounter('counter', { description: 'a test description', }); From edd3b49bf7a4ce890793097196ca098d68892839 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Thu, 16 Jul 2020 06:12:53 +0000 Subject: [PATCH 03/51] fix: typo --- .../opentelemetry-exporter-prometheus/test/prometheus.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index e1dc701599..34a6a17622 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -420,7 +420,7 @@ describe('PrometheusExporter', () => { }); }); - it('should export a UpDownCounter as gague on SIGTERM', done => { + it('should export a UpDownCounter as gauge on SIGTERM', done => { const counter = meter.createUpDownCounter('counter', { description: 'a test description', }); From 16c0faf7dde165832c435abca3050003dadec470 Mon Sep 17 00:00:00 2001 From: Jonah Rosenblum Date: Thu, 16 Jul 2020 19:07:52 +0000 Subject: [PATCH 04/51] fix meterprovider config to use bracket notation Co-authored-by: Daniel Dyla --- packages/opentelemetry-metrics/src/MeterProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index f0c33e75fd..e07c8bc227 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -36,7 +36,7 @@ export class MeterProvider implements api.MeterProvider { logger: this.logger, resource: this.resource, }); - if (this._config['gracefulShutdown']) { + if (this._config.gracefulShutdown) { process.once('SIGTERM', this.shutdown.bind(this)); } } From f0b9ef652d7e938ffbce100ddf9a8eb30840961d Mon Sep 17 00:00:00 2001 From: Jonah Rosenblum Date: Thu, 16 Jul 2020 19:08:20 +0000 Subject: [PATCH 05/51] fix meterprovider config to use bracket notation Co-authored-by: Daniel Dyla --- packages/opentelemetry-metrics/src/MeterProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index e07c8bc227..7ccae405c5 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -59,7 +59,7 @@ export class MeterProvider implements api.MeterProvider { } shutdown(): void { - if (this._config['exporter']) { + if (this._config.exporter) { this._config['exporter'].shutdown(); } this._meters.forEach((meter, _) => { From 4bd85b51b3af62f5ffaa8ab3d63c728649bbfbbb Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Fri, 17 Jul 2020 20:45:16 +0000 Subject: [PATCH 06/51] fix: add callbacks to shutdown methods --- .../test/prometheus.test.ts | 91 ++++++++++++++----- packages/opentelemetry-metrics/src/Meter.ts | 4 +- .../src/MeterProvider.ts | 20 ++-- .../src/export/Controller.ts | 19 ++-- .../src/BasicTracerProvider.ts | 10 +- .../test/MultiSpanProcessor.test.ts | 22 +++++ 6 files changed, 122 insertions(+), 44 deletions(-) diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index 34a6a17622..b503cad40c 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -184,11 +184,13 @@ describe('PrometheusExporter', () => { describe('export', () => { let exporter: PrometheusExporter; + let meterProvider: MeterProvider; let meter: Meter; beforeEach(done => { exporter = new PrometheusExporter(); - meter = new MeterProvider().getMeter('test-prometheus', '1', { + meterProvider = new MeterProvider(); + meter = meterProvider.getMeter('test-prometheus', '1', { exporter: exporter, }); exporter.startServer(done); @@ -322,6 +324,69 @@ describe('PrometheusExporter', () => { }); }); + it('should export multiple labels on graceful shutdown', done => { + const counter = meter.createCounter('counter', { + description: 'a test description', + }) as CounterMetric; + + counter.bind({ counterKey1: 'labelValue1' }).add(10); + counter.bind({ counterKey1: 'labelValue2' }).add(20); + counter.bind({ counterKey1: 'labelValue3' }).add(30); + process.once('SIGTERM', () => { + http + .get('http://localhost:9464/metrics', res => { + res.on('data', chunk => { + const body = chunk.toString(); + const lines = body.split('\n'); + + assert.deepStrictEqual(lines, [ + '# HELP counter a test description', + '# TYPE counter counter', + `counter{counterKey1="labelValue1"} 10 ${mockedTimeMS}`, + `counter{counterKey1="labelValue2"} 20 ${mockedTimeMS}`, + `counter{counterKey1="labelValue3"} 30 ${mockedTimeMS}`, + '', + ]); + + done(); + }); + }) + .on('error', errorHandler(done)); + }); + process.kill(process.pid, 'SIGTERM'); + }); + + it('should export multiple labels on manual shutdown', done => { + const counter = meter.createCounter('counter', { + description: 'a test description', + }) as CounterMetric; + + counter.bind({ counterKey1: 'labelValue1' }).add(10); + counter.bind({ counterKey1: 'labelValue2' }).add(20); + counter.bind({ counterKey1: 'labelValue3' }).add(30); + meterProvider.shutdown(() => { + http + .get('http://localhost:9464/metrics', res => { + res.on('data', chunk => { + const body = chunk.toString(); + const lines = body.split('\n'); + + assert.deepStrictEqual(lines, [ + '# HELP counter a test description', + '# TYPE counter counter', + `counter{counterKey1="labelValue1"} 10 ${mockedTimeMS}`, + `counter{counterKey1="labelValue2"} 20 ${mockedTimeMS}`, + `counter{counterKey1="labelValue3"} 30 ${mockedTimeMS}`, + '', + ]); + + done(); + }); + }) + .on('error', errorHandler(done)); + }); + }); + it('should export a comment if no metrics are registered', done => { exporter.export([], () => { http @@ -419,30 +484,6 @@ describe('PrometheusExporter', () => { }); }); }); - - it('should export a UpDownCounter as gauge on SIGTERM', done => { - const counter = meter.createUpDownCounter('counter', { - description: 'a test description', - }); - - counter.bind({ key1: 'labelValue1' }).add(20); - process.once('SIGTERM', () => { - http - .get('http://localhost:9464/metrics', res => { - res.on('data', chunk => { - assert.deepStrictEqual(chunk.toString().split('\n'), [ - '# HELP counter a test description', - '# TYPE counter gauge', - 'counter{key1="labelValue1"} 20', - '', - ]); - done(); - }); - }) - .on('error', errorHandler(done)); - }); - process.kill(process.pid, 'SIGTERM'); - }); }); describe('configuration', () => { diff --git a/packages/opentelemetry-metrics/src/Meter.ts b/packages/opentelemetry-metrics/src/Meter.ts index 045f974b4d..61261fea01 100644 --- a/packages/opentelemetry-metrics/src/Meter.ts +++ b/packages/opentelemetry-metrics/src/Meter.ts @@ -310,8 +310,8 @@ export class Meter implements api.Meter { return this._batcher; } - shutdown(): void { - this._controller.shutdown(); + async shutdown(): Promise { + await this._controller.shutdown(); } /** diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index f0c33e75fd..b51599cf0c 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -36,8 +36,8 @@ export class MeterProvider implements api.MeterProvider { logger: this.logger, resource: this.resource, }); - if (this._config['gracefulShutdown']) { - process.once('SIGTERM', this.shutdown.bind(this)); + if (this._config.gracefulShutdown) { + process.once('SIGTERM', this.onShutdown.bind(this)); } } @@ -58,12 +58,20 @@ export class MeterProvider implements api.MeterProvider { return this._meters.get(key)!; } - shutdown(): void { - if (this._config['exporter']) { - this._config['exporter'].shutdown(); + shutdown(cb: () => void = () => {}) { + this.onShutdown().then(() => { + setTimeout(cb, 0); + }); + } + + private async onShutdown() { + if (this._config.exporter) { + this._config.exporter.shutdown(); } + const shutdownPromises: Promise[] = []; this._meters.forEach((meter, _) => { - meter.shutdown(); + shutdownPromises.push(meter.shutdown()); }); + await Promise.all(shutdownPromises); } } diff --git a/packages/opentelemetry-metrics/src/export/Controller.ts b/packages/opentelemetry-metrics/src/export/Controller.ts index d3cc949381..0947c3445b 100644 --- a/packages/opentelemetry-metrics/src/export/Controller.ts +++ b/packages/opentelemetry-metrics/src/export/Controller.ts @@ -38,17 +38,20 @@ export class PushController extends Controller { unrefTimer(this._timer); } - shutdown() { - this._collect(); + async shutdown() { + await this._collect(); } private async _collect() { - await this._meter.collect(); - - this._exporter.export(this._meter.getBatcher().checkPointSet(), result => { - if (result !== ExportResult.SUCCESS) { - // @todo: log error - } + await this._meter.collect().then(() => { + this._exporter.export( + this._meter.getBatcher().checkPointSet(), + result => { + if (result !== ExportResult.SUCCESS) { + // @todo: log error + } + } + ); }); } } diff --git a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts index b3929bb963..38b0a946bb 100644 --- a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts +++ b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts @@ -47,8 +47,8 @@ export class BasicTracerProvider implements api.TracerProvider { logger: this.logger, resource: this.resource, }); - if (this._config['gracefulShutdown']) { - process.once('SIGTERM', this.shutdown.bind(this)); + if (this._config.gracefulShutdown) { + process.once('SIGTERM', this.onShutdown.bind(this)); } } @@ -103,7 +103,11 @@ export class BasicTracerProvider implements api.TracerProvider { } } - shutdown(): void { + shutdown(cb: () => void = () => {}) { + this.activeSpanProcessor.shutdown(cb); + } + + private onShutdown() { this.activeSpanProcessor.shutdown(); } } diff --git a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts index 499a6ea402..7383a35366 100644 --- a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts +++ b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts @@ -112,6 +112,28 @@ describe('MultiSpanProcessor', () => { process.kill(process.pid, 'SIGTERM'); }); + it('should export spans on manual shutdown from two span processor', () => { + const processor1 = new TestProcessor(); + const processor2 = new TestProcessor(); + const multiSpanProcessor = new MultiSpanProcessor([processor1, processor2]); + + const tracerProvider = new BasicTracerProvider(); + tracerProvider.addSpanProcessor(multiSpanProcessor); + const tracer = tracerProvider.getTracer('default'); + const span = tracer.startSpan('one'); + assert.strictEqual(processor1.spans.length, 0); + assert.strictEqual(processor1.spans.length, processor2.spans.length); + + span.end(); + assert.strictEqual(processor1.spans.length, 1); + assert.strictEqual(processor1.spans.length, processor2.spans.length); + + tracerProvider.shutdown(() => { + assert.strictEqual(processor1.spans.length, 0); + assert.strictEqual(processor1.spans.length, processor2.spans.length); + }); + }); + it('should force span processors to flush', () => { let flushed = false; const processor: SpanProcessor = { From 5d93f6fae818d7bb922ae931e6a74cc4bed0f1d5 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Fri, 17 Jul 2020 20:56:05 +0000 Subject: [PATCH 07/51] fix: merge conflict --- packages/opentelemetry-metrics/src/MeterProvider.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index 200f22c0d9..b51599cf0c 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -58,7 +58,6 @@ export class MeterProvider implements api.MeterProvider { return this._meters.get(key)!; } -<<<<<<< HEAD shutdown(cb: () => void = () => {}) { this.onShutdown().then(() => { setTimeout(cb, 0); @@ -68,11 +67,6 @@ export class MeterProvider implements api.MeterProvider { private async onShutdown() { if (this._config.exporter) { this._config.exporter.shutdown(); -======= - shutdown(): void { - if (this._config.exporter) { - this._config['exporter'].shutdown(); ->>>>>>> f0b9ef652d7e938ffbce100ddf9a8eb30840961d } const shutdownPromises: Promise[] = []; this._meters.forEach((meter, _) => { From 9ad87e511d7466f5331e2675504cbcb2cdb6aa03 Mon Sep 17 00:00:00 2001 From: Jonah Rosenblum Date: Fri, 17 Jul 2020 21:20:40 +0000 Subject: [PATCH 08/51] simplify meter shutdown code Co-authored-by: Daniel Dyla --- packages/opentelemetry-metrics/src/MeterProvider.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index b51599cf0c..55bc8e2cc9 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -68,10 +68,6 @@ export class MeterProvider implements api.MeterProvider { if (this._config.exporter) { this._config.exporter.shutdown(); } - const shutdownPromises: Promise[] = []; - this._meters.forEach((meter, _) => { - shutdownPromises.push(meter.shutdown()); - }); - await Promise.all(shutdownPromises); + await Promise.all(this._meters.map(meter => meter.shutdown()); } } From 0a99520a2e700f5dc91ab93c306ef65d039cfe87 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Fri, 17 Jul 2020 21:57:16 +0000 Subject: [PATCH 09/51] fix: fix one-liner --- packages/opentelemetry-metrics/src/MeterProvider.ts | 10 ++++++---- .../opentelemetry-tracing/src/BasicTracerProvider.ts | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index 55bc8e2cc9..9eab36c252 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -37,7 +37,7 @@ export class MeterProvider implements api.MeterProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - process.once('SIGTERM', this.onShutdown.bind(this)); + process.once('SIGTERM', this.shutdownAllMeters.bind(this)); } } @@ -59,15 +59,17 @@ export class MeterProvider implements api.MeterProvider { } shutdown(cb: () => void = () => {}) { - this.onShutdown().then(() => { + this.shutdownAllMeters().then(() => { setTimeout(cb, 0); }); } - private async onShutdown() { + private async shutdownAllMeters() { if (this._config.exporter) { this._config.exporter.shutdown(); } - await Promise.all(this._meters.map(meter => meter.shutdown()); + await Promise.all( + Array.from(this._meters, ([_, meter]) => meter.shutdown()) + ); } } diff --git a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts index 38b0a946bb..6c2b79ca1c 100644 --- a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts +++ b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts @@ -48,7 +48,7 @@ export class BasicTracerProvider implements api.TracerProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - process.once('SIGTERM', this.onShutdown.bind(this)); + process.once('SIGTERM', this.shutdownActiveProcessor.bind(this)); } } @@ -107,7 +107,7 @@ export class BasicTracerProvider implements api.TracerProvider { this.activeSpanProcessor.shutdown(cb); } - private onShutdown() { + private shutdownActiveProcessor() { this.activeSpanProcessor.shutdown(); } } From 791156b4e535adef25e6d1e75ee84653092b9622 Mon Sep 17 00:00:00 2001 From: Jonah Rosenblum Date: Sat, 18 Jul 2020 00:22:32 +0000 Subject: [PATCH 10/51] private function name style fix Co-authored-by: Daniel Dyla --- packages/opentelemetry-metrics/src/MeterProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index 9eab36c252..19d01c07ff 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -64,7 +64,7 @@ export class MeterProvider implements api.MeterProvider { }); } - private async shutdownAllMeters() { + private async _shutdownAllMeters() { if (this._config.exporter) { this._config.exporter.shutdown(); } From 7d714b6f806d6b4f95319db5b825b810f9fb1ec3 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Sat, 18 Jul 2020 00:27:47 +0000 Subject: [PATCH 11/51] fix: naming of private member variables --- packages/opentelemetry-metrics/src/MeterProvider.ts | 4 ++-- packages/opentelemetry-tracing/src/BasicTracerProvider.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index 19d01c07ff..9bdd1ed74a 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -37,7 +37,7 @@ export class MeterProvider implements api.MeterProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - process.once('SIGTERM', this.shutdownAllMeters.bind(this)); + process.once('SIGTERM', this._shutdownAllMeters.bind(this)); } } @@ -59,7 +59,7 @@ export class MeterProvider implements api.MeterProvider { } shutdown(cb: () => void = () => {}) { - this.shutdownAllMeters().then(() => { + this._shutdownAllMeters().then(() => { setTimeout(cb, 0); }); } diff --git a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts index 6c2b79ca1c..87b816aa2b 100644 --- a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts +++ b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts @@ -48,7 +48,7 @@ export class BasicTracerProvider implements api.TracerProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - process.once('SIGTERM', this.shutdownActiveProcessor.bind(this)); + process.once('SIGTERM', this._shutdownActiveProcessor.bind(this)); } } @@ -107,7 +107,7 @@ export class BasicTracerProvider implements api.TracerProvider { this.activeSpanProcessor.shutdown(cb); } - private shutdownActiveProcessor() { + private _shutdownActiveProcessor() { this.activeSpanProcessor.shutdown(); } } From b106b50deeeba630b3701cbe6f6c619ca683ab18 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Wed, 22 Jul 2020 23:25:41 +0000 Subject: [PATCH 12/51] fix: graceful shutdown now works in browser --- .../src/platform/browser/ShutdownNotifier.ts | 29 +++++++++++++++++++ .../src/platform/browser/index.ts | 1 + .../src/platform/node/ShutdownNotifier.ts | 27 +++++++++++++++++ .../src/platform/node/index.ts | 1 + .../test/prometheus.test.ts | 10 +++++-- .../src/MeterProvider.ts | 4 +-- .../test/MeterProvider.test.ts | 14 +++++---- .../src/BasicTracerProvider.ts | 3 +- .../test/BasicTracerProvider.test.ts | 10 +++---- .../test/MultiSpanProcessor.test.ts | 10 ++++--- .../test/export/BatchSpanProcessor.test.ts | 1 - 11 files changed, 88 insertions(+), 22 deletions(-) create mode 100644 packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts create mode 100644 packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts diff --git a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts new file mode 100644 index 0000000000..0c4ec4f655 --- /dev/null +++ b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts @@ -0,0 +1,29 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export function afterGlobalShutdown(cb: () => void = () => {}): void { + window.removeEventListener('unload', cb); +} + +export function onGlobalShutdown(cb: () => void): void { + window.addEventListener('unload', () => { + afterGlobalShutdown(cb); + }); +} + +export function globalShutdownTestHelper(cb: () => void): void { + onGlobalShutdown(cb); + window.close(); +} diff --git a/packages/opentelemetry-core/src/platform/browser/index.ts b/packages/opentelemetry-core/src/platform/browser/index.ts index 20c47613e6..139731376b 100644 --- a/packages/opentelemetry-core/src/platform/browser/index.ts +++ b/packages/opentelemetry-core/src/platform/browser/index.ts @@ -21,3 +21,4 @@ export * from './id'; export * from './performance'; export * from './sdk-info'; export * from './timer-util'; +export * from './ShutdownNotifier'; diff --git a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts new file mode 100644 index 0000000000..522349e51a --- /dev/null +++ b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts @@ -0,0 +1,27 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export function afterGlobalShutdown(): void { + process.removeAllListeners('SIGTERM'); +} + +export function onGlobalShutdown(cb: () => void): void { + process.once('SIGTERM', cb); +} + +export function globalShutdownTestHelper(cb: () => void): void { + onGlobalShutdown(cb); + process.kill(process.pid, 'SIGTERM'); +} diff --git a/packages/opentelemetry-core/src/platform/node/index.ts b/packages/opentelemetry-core/src/platform/node/index.ts index 20c47613e6..139731376b 100644 --- a/packages/opentelemetry-core/src/platform/node/index.ts +++ b/packages/opentelemetry-core/src/platform/node/index.ts @@ -21,3 +21,4 @@ export * from './id'; export * from './performance'; export * from './sdk-info'; export * from './timer-util'; +export * from './ShutdownNotifier'; diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index b503cad40c..585ddc8f8c 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -15,6 +15,10 @@ */ import { HrTime, ObserverResult } from '@opentelemetry/api'; +import { + afterGlobalShutdown, + globalShutdownTestHelper, +} from '@opentelemetry/core'; import { CounterMetric, SumAggregator, @@ -197,7 +201,7 @@ describe('PrometheusExporter', () => { }); afterEach(done => { - process.removeAllListeners('SIGTERM'); + afterGlobalShutdown(); exporter.shutdown(done); }); @@ -332,7 +336,8 @@ describe('PrometheusExporter', () => { counter.bind({ counterKey1: 'labelValue1' }).add(10); counter.bind({ counterKey1: 'labelValue2' }).add(20); counter.bind({ counterKey1: 'labelValue3' }).add(30); - process.once('SIGTERM', () => { + + globalShutdownTestHelper(() => { http .get('http://localhost:9464/metrics', res => { res.on('data', chunk => { @@ -353,7 +358,6 @@ describe('PrometheusExporter', () => { }) .on('error', errorHandler(done)); }); - process.kill(process.pid, 'SIGTERM'); }); it('should export multiple labels on manual shutdown', done => { diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index 9bdd1ed74a..c93f212a32 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { ConsoleLogger } from '@opentelemetry/core'; +import { ConsoleLogger, onGlobalShutdown } from '@opentelemetry/core'; import * as api from '@opentelemetry/api'; import { Resource } from '@opentelemetry/resources'; import { Meter } from '.'; @@ -37,7 +37,7 @@ export class MeterProvider implements api.MeterProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - process.once('SIGTERM', this._shutdownAllMeters.bind(this)); + onGlobalShutdown(this._shutdownAllMeters.bind(this)); } } diff --git a/packages/opentelemetry-metrics/test/MeterProvider.test.ts b/packages/opentelemetry-metrics/test/MeterProvider.test.ts index 7db7541baa..99e0af1d59 100644 --- a/packages/opentelemetry-metrics/test/MeterProvider.test.ts +++ b/packages/opentelemetry-metrics/test/MeterProvider.test.ts @@ -17,11 +17,15 @@ import * as assert from 'assert'; import * as sinon from 'sinon'; import { MeterProvider, Meter, CounterMetric } from '../src'; -import { NoopLogger } from '@opentelemetry/core'; +import { + NoopLogger, + globalShutdownTestHelper, + afterGlobalShutdown, +} from '@opentelemetry/core'; describe('MeterProvider', () => { afterEach(() => { - process.removeAllListeners('SIGTERM'); + afterGlobalShutdown(); }); describe('constructor', () => { @@ -91,12 +95,11 @@ describe('MeterProvider', () => { meterProvider.getMeter('meter2'), 'shutdown' ); - process.once('SIGTERM', () => { + globalShutdownTestHelper(() => { sinon.assert.calledOnce(shutdownStub1); sinon.assert.calledOnce(shutdownStub2); sandbox.restore(); }); - process.kill(process.pid, 'SIGTERM'); }); it('should not trigger shutdown if graceful shutdown is turned off', () => { @@ -108,11 +111,10 @@ describe('MeterProvider', () => { meterProvider.getMeter('meter1'), 'shutdown' ); - process.once('SIGTERM', () => { + globalShutdownTestHelper(() => { sinon.assert.notCalled(shutdownStub); sandbox.restore(); }); - process.kill(process.pid, 'SIGTERM'); }); }); }); diff --git a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts index 87b816aa2b..d45a830b61 100644 --- a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts +++ b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts @@ -20,6 +20,7 @@ import { HttpTraceContext, HttpCorrelationContext, CompositePropagator, + onGlobalShutdown, } from '@opentelemetry/core'; import { SpanProcessor, Tracer } from '.'; import { DEFAULT_CONFIG } from './config'; @@ -48,7 +49,7 @@ export class BasicTracerProvider implements api.TracerProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - process.once('SIGTERM', this._shutdownActiveProcessor.bind(this)); + onGlobalShutdown(this._shutdownActiveProcessor.bind(this)); } } diff --git a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts index 146e309a9e..b10ae241e7 100644 --- a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts +++ b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts @@ -24,6 +24,8 @@ import { setActiveSpan, setExtractedSpanContext, TraceState, + globalShutdownTestHelper, + afterGlobalShutdown, } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; import * as assert from 'assert'; @@ -36,7 +38,7 @@ describe('BasicTracerProvider', () => { }); afterEach(() => { - process.removeAllListeners('SIGTERM'); + afterGlobalShutdown(); }); describe('constructor', () => { @@ -395,11 +397,10 @@ describe('BasicTracerProvider', () => { tracerProvider.getActiveSpanProcessor(), 'shutdown' ); - process.once('SIGTERM', () => { + globalShutdownTestHelper(() => { sinon.assert.calledOnce(shutdownStub); sandbox.restore(); }); - process.kill(process.pid, 'SIGTERM'); }); it('should not trigger shutdown if graceful shutdown is turned off', () => { @@ -411,11 +412,10 @@ describe('BasicTracerProvider', () => { tracerProvider.getActiveSpanProcessor(), 'shutdown' ); - process.once('SIGTERM', () => { + globalShutdownTestHelper(() => { sinon.assert.notCalled(shutdownStub); sandbox.restore(); }); - process.kill(process.pid, 'SIGTERM'); }); }); }); diff --git a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts index 7383a35366..55c1fb69c5 100644 --- a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts +++ b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts @@ -23,6 +23,10 @@ import { Span, SpanProcessor, } from '../src'; +import { + globalShutdownTestHelper, + afterGlobalShutdown, +} from '@opentelemetry/core'; import { MultiSpanProcessor } from '../src/MultiSpanProcessor'; class TestProcessor implements SpanProcessor { @@ -39,7 +43,7 @@ class TestProcessor implements SpanProcessor { describe('MultiSpanProcessor', () => { afterEach(() => { - process.removeAllListeners('SIGTERM'); + afterGlobalShutdown(); }); it('should handle empty span processor', () => { @@ -104,12 +108,10 @@ describe('MultiSpanProcessor', () => { assert.strictEqual(processor1.spans.length, 1); assert.strictEqual(processor1.spans.length, processor2.spans.length); - process.once('SIGTERM', () => { + globalShutdownTestHelper(() => { assert.strictEqual(processor1.spans.length, 0); assert.strictEqual(processor1.spans.length, processor2.spans.length); }); - - process.kill(process.pid, 'SIGTERM'); }); it('should export spans on manual shutdown from two span processor', () => { diff --git a/packages/opentelemetry-tracing/test/export/BatchSpanProcessor.test.ts b/packages/opentelemetry-tracing/test/export/BatchSpanProcessor.test.ts index 73ac0a0053..29a9d4117f 100644 --- a/packages/opentelemetry-tracing/test/export/BatchSpanProcessor.test.ts +++ b/packages/opentelemetry-tracing/test/export/BatchSpanProcessor.test.ts @@ -214,7 +214,6 @@ describe('BatchSpanProcessor', () => { it('should call an async callback when shutdown is complete', done => { let exportedSpans = 0; sinon.stub(exporter, 'export').callsFake((spans, callback) => { - console.log('uh, export?'); setTimeout(() => { exportedSpans = exportedSpans + spans.length; callback(ExportResult.SUCCESS); From 064c8e8c93b61c6868f3e54d4b6b2c278313d47a Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Wed, 22 Jul 2020 23:50:02 +0000 Subject: [PATCH 13/51] fix: window event listener will trigger once --- .../src/platform/browser/ShutdownNotifier.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts index 0c4ec4f655..07168eecfa 100644 --- a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts @@ -13,14 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export function afterGlobalShutdown(cb: () => void = () => {}): void { +export function afterGlobalShutdown(cb: () => void): void { window.removeEventListener('unload', cb); } export function onGlobalShutdown(cb: () => void): void { - window.addEventListener('unload', () => { - afterGlobalShutdown(cb); - }); + window.addEventListener('unload', cb, {once: true}); } export function globalShutdownTestHelper(cb: () => void): void { From 54a82c5dde6663fed163285c07393c1771061d0a Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Thu, 23 Jul 2020 18:22:57 +0000 Subject: [PATCH 14/51] fix: modify global shutdown helper functions --- .../src/platform/browser/ShutdownNotifier.ts | 23 ++++++++++++------- .../src/platform/node/ShutdownNotifier.ts | 22 ++++++++++++------ .../test/prometheus.test.ts | 9 +++----- .../src/MeterProvider.ts | 4 ++-- .../test/MeterProvider.test.ts | 12 ++++------ .../src/BasicTracerProvider.ts | 4 ++-- .../test/BasicTracerProvider.test.ts | 9 ++++---- .../test/MultiSpanProcessor.test.ts | 9 +++----- 8 files changed, 48 insertions(+), 44 deletions(-) diff --git a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts index 07168eecfa..3013dc8280 100644 --- a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts @@ -13,15 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export function afterGlobalShutdown(cb: () => void): void { - window.removeEventListener('unload', cb); -} -export function onGlobalShutdown(cb: () => void): void { - window.addEventListener('unload', cb, {once: true}); +export function handleGlobalShutdown(cb: () => void) { + window.addEventListener('unload', cb, { once: true }); + return function removeCallbackFromGlobalShutdown(removecb: () => void) { + window.removeEventListener('unload', removecb); + }; } -export function globalShutdownTestHelper(cb: () => void): void { - onGlobalShutdown(cb); - window.close(); +export function _globalShutdownTestHelper( + cb: () => void, + removeListener = false +) { + if (removeListener) { + window.removeEventListener('unload', cb); + } else { + handleGlobalShutdown(cb); + window.close(); + } } diff --git a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts index 522349e51a..eaebe1ac73 100644 --- a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts @@ -13,15 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export function afterGlobalShutdown(): void { - process.removeAllListeners('SIGTERM'); -} -export function onGlobalShutdown(cb: () => void): void { +export function handleGlobalShutdown(cb: () => void) { process.once('SIGTERM', cb); + return function removeCallbackFromGlobalShutdown(removecb: () => void) { + process.removeListener('SIGTERM', cb); + removecb(); + }; } -export function globalShutdownTestHelper(cb: () => void): void { - onGlobalShutdown(cb); - process.kill(process.pid, 'SIGTERM'); +export function _globalShutdownTestHelper( + cb: () => void, + removeListeners = false +) { + if (removeListeners) { + process.removeAllListeners('SIGTERM'); + } else { + handleGlobalShutdown(cb); + process.kill(process.pid, 'SIGTERM'); + } } diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index 585ddc8f8c..a44fdaf097 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -15,10 +15,7 @@ */ import { HrTime, ObserverResult } from '@opentelemetry/api'; -import { - afterGlobalShutdown, - globalShutdownTestHelper, -} from '@opentelemetry/core'; +import { _globalShutdownTestHelper } from '@opentelemetry/core'; import { CounterMetric, SumAggregator, @@ -201,7 +198,7 @@ describe('PrometheusExporter', () => { }); afterEach(done => { - afterGlobalShutdown(); + _globalShutdownTestHelper(() => {}, true); exporter.shutdown(done); }); @@ -337,7 +334,7 @@ describe('PrometheusExporter', () => { counter.bind({ counterKey1: 'labelValue2' }).add(20); counter.bind({ counterKey1: 'labelValue3' }).add(30); - globalShutdownTestHelper(() => { + _globalShutdownTestHelper(() => { http .get('http://localhost:9464/metrics', res => { res.on('data', chunk => { diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index c93f212a32..8ed6002f14 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { ConsoleLogger, onGlobalShutdown } from '@opentelemetry/core'; +import { ConsoleLogger, handleGlobalShutdown } from '@opentelemetry/core'; import * as api from '@opentelemetry/api'; import { Resource } from '@opentelemetry/resources'; import { Meter } from '.'; @@ -37,7 +37,7 @@ export class MeterProvider implements api.MeterProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - onGlobalShutdown(this._shutdownAllMeters.bind(this)); + handleGlobalShutdown(this._shutdownAllMeters.bind(this)); } } diff --git a/packages/opentelemetry-metrics/test/MeterProvider.test.ts b/packages/opentelemetry-metrics/test/MeterProvider.test.ts index 99e0af1d59..ecd76255f8 100644 --- a/packages/opentelemetry-metrics/test/MeterProvider.test.ts +++ b/packages/opentelemetry-metrics/test/MeterProvider.test.ts @@ -17,15 +17,11 @@ import * as assert from 'assert'; import * as sinon from 'sinon'; import { MeterProvider, Meter, CounterMetric } from '../src'; -import { - NoopLogger, - globalShutdownTestHelper, - afterGlobalShutdown, -} from '@opentelemetry/core'; +import { NoopLogger, _globalShutdownTestHelper } from '@opentelemetry/core'; describe('MeterProvider', () => { afterEach(() => { - afterGlobalShutdown(); + _globalShutdownTestHelper(() => {}, true); }); describe('constructor', () => { @@ -95,7 +91,7 @@ describe('MeterProvider', () => { meterProvider.getMeter('meter2'), 'shutdown' ); - globalShutdownTestHelper(() => { + _globalShutdownTestHelper(() => { sinon.assert.calledOnce(shutdownStub1); sinon.assert.calledOnce(shutdownStub2); sandbox.restore(); @@ -111,7 +107,7 @@ describe('MeterProvider', () => { meterProvider.getMeter('meter1'), 'shutdown' ); - globalShutdownTestHelper(() => { + _globalShutdownTestHelper(() => { sinon.assert.notCalled(shutdownStub); sandbox.restore(); }); diff --git a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts index d45a830b61..585e988c67 100644 --- a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts +++ b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts @@ -20,7 +20,7 @@ import { HttpTraceContext, HttpCorrelationContext, CompositePropagator, - onGlobalShutdown, + handleGlobalShutdown, } from '@opentelemetry/core'; import { SpanProcessor, Tracer } from '.'; import { DEFAULT_CONFIG } from './config'; @@ -49,7 +49,7 @@ export class BasicTracerProvider implements api.TracerProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - onGlobalShutdown(this._shutdownActiveProcessor.bind(this)); + handleGlobalShutdown(this._shutdownActiveProcessor.bind(this)); } } diff --git a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts index b10ae241e7..7ba5e5613f 100644 --- a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts +++ b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts @@ -24,8 +24,7 @@ import { setActiveSpan, setExtractedSpanContext, TraceState, - globalShutdownTestHelper, - afterGlobalShutdown, + _globalShutdownTestHelper, } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; import * as assert from 'assert'; @@ -38,7 +37,7 @@ describe('BasicTracerProvider', () => { }); afterEach(() => { - afterGlobalShutdown(); + _globalShutdownTestHelper(() => {}, true); }); describe('constructor', () => { @@ -397,7 +396,7 @@ describe('BasicTracerProvider', () => { tracerProvider.getActiveSpanProcessor(), 'shutdown' ); - globalShutdownTestHelper(() => { + _globalShutdownTestHelper(() => { sinon.assert.calledOnce(shutdownStub); sandbox.restore(); }); @@ -412,7 +411,7 @@ describe('BasicTracerProvider', () => { tracerProvider.getActiveSpanProcessor(), 'shutdown' ); - globalShutdownTestHelper(() => { + _globalShutdownTestHelper(() => { sinon.assert.notCalled(shutdownStub); sandbox.restore(); }); diff --git a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts index 55c1fb69c5..3913ad1df9 100644 --- a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts +++ b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts @@ -23,10 +23,7 @@ import { Span, SpanProcessor, } from '../src'; -import { - globalShutdownTestHelper, - afterGlobalShutdown, -} from '@opentelemetry/core'; +import { _globalShutdownTestHelper } from '@opentelemetry/core'; import { MultiSpanProcessor } from '../src/MultiSpanProcessor'; class TestProcessor implements SpanProcessor { @@ -43,7 +40,7 @@ class TestProcessor implements SpanProcessor { describe('MultiSpanProcessor', () => { afterEach(() => { - afterGlobalShutdown(); + _globalShutdownTestHelper(() => {}, true); }); it('should handle empty span processor', () => { @@ -108,7 +105,7 @@ describe('MultiSpanProcessor', () => { assert.strictEqual(processor1.spans.length, 1); assert.strictEqual(processor1.spans.length, processor2.spans.length); - globalShutdownTestHelper(() => { + _globalShutdownTestHelper(() => { assert.strictEqual(processor1.spans.length, 0); assert.strictEqual(processor1.spans.length, processor2.spans.length); }); From 8fd53c845348a5c0d91818bb880400ca9ba61cc0 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Thu, 23 Jul 2020 18:37:07 +0000 Subject: [PATCH 15/51] fix: remove callback from remove listener args --- .../src/platform/browser/ShutdownNotifier.ts | 4 ++-- .../opentelemetry-core/src/platform/node/ShutdownNotifier.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts index 3013dc8280..4fe7541191 100644 --- a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts @@ -16,8 +16,8 @@ export function handleGlobalShutdown(cb: () => void) { window.addEventListener('unload', cb, { once: true }); - return function removeCallbackFromGlobalShutdown(removecb: () => void) { - window.removeEventListener('unload', removecb); + return function removeCallbackFromGlobalShutdown() { + window.removeEventListener('unload', cb); }; } diff --git a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts index eaebe1ac73..ba13708471 100644 --- a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts @@ -16,9 +16,9 @@ export function handleGlobalShutdown(cb: () => void) { process.once('SIGTERM', cb); - return function removeCallbackFromGlobalShutdown(removecb: () => void) { + return function removeCallbackFromGlobalShutdown() { process.removeListener('SIGTERM', cb); - removecb(); + cb(); }; } From b5af380ae53b06cfc963c396b361c48e4a16e1b7 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Thu, 23 Jul 2020 21:30:09 +0000 Subject: [PATCH 16/51] fix: change global shutdown function names and simplify functionality --- .../opentelemetry-tracing/src/BasicTracerProvider.ts | 4 ++-- .../test/BasicTracerProvider.test.ts | 12 ++++++++---- .../test/MultiSpanProcessor.test.ts | 11 ++++++++--- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts index 585e988c67..269439bcf9 100644 --- a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts +++ b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts @@ -20,7 +20,7 @@ import { HttpTraceContext, HttpCorrelationContext, CompositePropagator, - handleGlobalShutdown, + notifyOnGlobalShutdown, } from '@opentelemetry/core'; import { SpanProcessor, Tracer } from '.'; import { DEFAULT_CONFIG } from './config'; @@ -49,7 +49,7 @@ export class BasicTracerProvider implements api.TracerProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - handleGlobalShutdown(this._shutdownActiveProcessor.bind(this)); + notifyOnGlobalShutdown(this._shutdownActiveProcessor.bind(this)); } } diff --git a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts index 7ba5e5613f..1e3dd83b0a 100644 --- a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts +++ b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts @@ -24,7 +24,9 @@ import { setActiveSpan, setExtractedSpanContext, TraceState, - _globalShutdownTestHelper, + notifyOnGlobalShutdown, + _invokeGlobalShutdown, + _removeAllGlobalShutdownListeners, } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; import * as assert from 'assert'; @@ -37,7 +39,7 @@ describe('BasicTracerProvider', () => { }); afterEach(() => { - _globalShutdownTestHelper(() => {}, true); + _removeAllGlobalShutdownListeners(); }); describe('constructor', () => { @@ -396,10 +398,11 @@ describe('BasicTracerProvider', () => { tracerProvider.getActiveSpanProcessor(), 'shutdown' ); - _globalShutdownTestHelper(() => { + notifyOnGlobalShutdown(() => { sinon.assert.calledOnce(shutdownStub); sandbox.restore(); }); + _invokeGlobalShutdown(); }); it('should not trigger shutdown if graceful shutdown is turned off', () => { @@ -411,10 +414,11 @@ describe('BasicTracerProvider', () => { tracerProvider.getActiveSpanProcessor(), 'shutdown' ); - _globalShutdownTestHelper(() => { + notifyOnGlobalShutdown(() => { sinon.assert.notCalled(shutdownStub); sandbox.restore(); }); + _invokeGlobalShutdown(); }); }); }); diff --git a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts index 3913ad1df9..039af6939f 100644 --- a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts +++ b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts @@ -23,7 +23,11 @@ import { Span, SpanProcessor, } from '../src'; -import { _globalShutdownTestHelper } from '@opentelemetry/core'; +import { + notifyOnGlobalShutdown, + _invokeGlobalShutdown, + _removeAllGlobalShutdownListeners, +} from '@opentelemetry/core'; import { MultiSpanProcessor } from '../src/MultiSpanProcessor'; class TestProcessor implements SpanProcessor { @@ -40,7 +44,7 @@ class TestProcessor implements SpanProcessor { describe('MultiSpanProcessor', () => { afterEach(() => { - _globalShutdownTestHelper(() => {}, true); + _removeAllGlobalShutdownListeners(); }); it('should handle empty span processor', () => { @@ -105,10 +109,11 @@ describe('MultiSpanProcessor', () => { assert.strictEqual(processor1.spans.length, 1); assert.strictEqual(processor1.spans.length, processor2.spans.length); - _globalShutdownTestHelper(() => { + notifyOnGlobalShutdown(() => { assert.strictEqual(processor1.spans.length, 0); assert.strictEqual(processor1.spans.length, processor2.spans.length); }); + _invokeGlobalShutdown(); }); it('should export spans on manual shutdown from two span processor', () => { From e159546bd2d183dffabf038dcd1d43b5d90662cc Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Thu, 23 Jul 2020 21:39:06 +0000 Subject: [PATCH 17/51] fix: add rest of function refactoring and simplification --- .../src/platform/browser/ShutdownNotifier.ts | 20 ++++++++----------- .../src/platform/node/ShutdownNotifier.ts | 19 +++++++----------- .../test/prometheus.test.ts | 11 +++++++--- .../src/MeterProvider.ts | 4 ++-- .../test/MeterProvider.test.ts | 15 ++++++++++---- 5 files changed, 36 insertions(+), 33 deletions(-) diff --git a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts index 4fe7541191..bd8df050a4 100644 --- a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts @@ -14,21 +14,17 @@ * limitations under the License. */ -export function handleGlobalShutdown(cb: () => void) { +export function notifyOnGlobalShutdown(cb: () => void) { window.addEventListener('unload', cb, { once: true }); return function removeCallbackFromGlobalShutdown() { - window.removeEventListener('unload', cb); + window.removeEventListener('unload', cb, false); }; } -export function _globalShutdownTestHelper( - cb: () => void, - removeListener = false -) { - if (removeListener) { - window.removeEventListener('unload', cb); - } else { - handleGlobalShutdown(cb); - window.close(); - } +export function _invokeGlobalShutdown() { + window.close(); +} + +export function _removeAllGlobalShutdownListeners() { + window.removeEventListener } diff --git a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts index ba13708471..6faa23d598 100644 --- a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts @@ -14,22 +14,17 @@ * limitations under the License. */ -export function handleGlobalShutdown(cb: () => void) { +export function notifyOnGlobalShutdown(cb: () => void) { process.once('SIGTERM', cb); return function removeCallbackFromGlobalShutdown() { process.removeListener('SIGTERM', cb); - cb(); }; } -export function _globalShutdownTestHelper( - cb: () => void, - removeListeners = false -) { - if (removeListeners) { - process.removeAllListeners('SIGTERM'); - } else { - handleGlobalShutdown(cb); - process.kill(process.pid, 'SIGTERM'); - } +export function _invokeGlobalShutdown() { + process.kill(process.pid, 'SIGTERM'); +} + +export function _removeAllGlobalShutdownListeners() { + process.removeAllListeners('SIGTERM'); } diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index a44fdaf097..f31c4c63db 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -15,7 +15,11 @@ */ import { HrTime, ObserverResult } from '@opentelemetry/api'; -import { _globalShutdownTestHelper } from '@opentelemetry/core'; +import { + notifyOnGlobalShutdown, + _invokeGlobalShutdown, + _removeAllGlobalShutdownListeners, +} from '@opentelemetry/core'; import { CounterMetric, SumAggregator, @@ -198,7 +202,7 @@ describe('PrometheusExporter', () => { }); afterEach(done => { - _globalShutdownTestHelper(() => {}, true); + _removeAllGlobalShutdownListeners(); exporter.shutdown(done); }); @@ -334,7 +338,7 @@ describe('PrometheusExporter', () => { counter.bind({ counterKey1: 'labelValue2' }).add(20); counter.bind({ counterKey1: 'labelValue3' }).add(30); - _globalShutdownTestHelper(() => { + notifyOnGlobalShutdown(() => { http .get('http://localhost:9464/metrics', res => { res.on('data', chunk => { @@ -355,6 +359,7 @@ describe('PrometheusExporter', () => { }) .on('error', errorHandler(done)); }); + _invokeGlobalShutdown(); }); it('should export multiple labels on manual shutdown', done => { diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index 8ed6002f14..e58402344f 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { ConsoleLogger, handleGlobalShutdown } from '@opentelemetry/core'; +import { ConsoleLogger, notifyOnGlobalShutdown } from '@opentelemetry/core'; import * as api from '@opentelemetry/api'; import { Resource } from '@opentelemetry/resources'; import { Meter } from '.'; @@ -37,7 +37,7 @@ export class MeterProvider implements api.MeterProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - handleGlobalShutdown(this._shutdownAllMeters.bind(this)); + notifyOnGlobalShutdown(this._shutdownAllMeters.bind(this)); } } diff --git a/packages/opentelemetry-metrics/test/MeterProvider.test.ts b/packages/opentelemetry-metrics/test/MeterProvider.test.ts index ecd76255f8..52d7ee33b2 100644 --- a/packages/opentelemetry-metrics/test/MeterProvider.test.ts +++ b/packages/opentelemetry-metrics/test/MeterProvider.test.ts @@ -17,11 +17,16 @@ import * as assert from 'assert'; import * as sinon from 'sinon'; import { MeterProvider, Meter, CounterMetric } from '../src'; -import { NoopLogger, _globalShutdownTestHelper } from '@opentelemetry/core'; +import { + NoopLogger, + notifyOnGlobalShutdown, + _invokeGlobalShutdown, + _removeAllGlobalShutdownListeners, +} from '@opentelemetry/core'; describe('MeterProvider', () => { afterEach(() => { - _globalShutdownTestHelper(() => {}, true); + _removeAllGlobalShutdownListeners(); }); describe('constructor', () => { @@ -91,11 +96,12 @@ describe('MeterProvider', () => { meterProvider.getMeter('meter2'), 'shutdown' ); - _globalShutdownTestHelper(() => { + notifyOnGlobalShutdown(() => { sinon.assert.calledOnce(shutdownStub1); sinon.assert.calledOnce(shutdownStub2); sandbox.restore(); }); + _invokeGlobalShutdown(); }); it('should not trigger shutdown if graceful shutdown is turned off', () => { @@ -107,10 +113,11 @@ describe('MeterProvider', () => { meterProvider.getMeter('meter1'), 'shutdown' ); - _globalShutdownTestHelper(() => { + notifyOnGlobalShutdown(() => { sinon.assert.notCalled(shutdownStub); sandbox.restore(); }); + _invokeGlobalShutdown(); }); }); }); From c0d3f5f7bf26fe118af51f5e8a67ae3a50ece940 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Thu, 23 Jul 2020 21:44:25 +0000 Subject: [PATCH 18/51] fix: remove unintended code snippet --- .../src/platform/browser/ShutdownNotifier.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts index bd8df050a4..8273aafd13 100644 --- a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts @@ -25,6 +25,4 @@ export function _invokeGlobalShutdown() { window.close(); } -export function _removeAllGlobalShutdownListeners() { - window.removeEventListener -} +export function _removeAllGlobalShutdownListeners() {} From 9ceba0e4a6edc905e329fb05515b5bade4bf7e38 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Fri, 24 Jul 2020 21:39:52 +0000 Subject: [PATCH 19/51] fix: refactor naming of listener cleanup function and fix sandbox issue --- .../src/platform/browser/ShutdownNotifier.ts | 2 +- .../src/platform/node/ShutdownNotifier.ts | 2 +- .../test/prometheus.test.ts | 4 ++-- .../opentelemetry-metrics/test/MeterProvider.test.ts | 4 ++-- .../opentelemetry-tracing/src/BasicTracerProvider.ts | 5 ++++- .../test/BasicTracerProvider.test.ts | 11 ++++++----- .../test/MultiSpanProcessor.test.ts | 4 ++-- 7 files changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts index 8273aafd13..21663110bb 100644 --- a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts @@ -25,4 +25,4 @@ export function _invokeGlobalShutdown() { window.close(); } -export function _removeAllGlobalShutdownListeners() {} +export function _cleanupGlobalShutdownListeners() {} diff --git a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts index 6faa23d598..2b3c184e08 100644 --- a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts @@ -25,6 +25,6 @@ export function _invokeGlobalShutdown() { process.kill(process.pid, 'SIGTERM'); } -export function _removeAllGlobalShutdownListeners() { +export function _cleanupGlobalShutdownListeners() { process.removeAllListeners('SIGTERM'); } diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index f31c4c63db..3a6e04a235 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -18,7 +18,7 @@ import { HrTime, ObserverResult } from '@opentelemetry/api'; import { notifyOnGlobalShutdown, _invokeGlobalShutdown, - _removeAllGlobalShutdownListeners, + _cleanupGlobalShutdownListeners, } from '@opentelemetry/core'; import { CounterMetric, @@ -202,7 +202,7 @@ describe('PrometheusExporter', () => { }); afterEach(done => { - _removeAllGlobalShutdownListeners(); + _cleanupGlobalShutdownListeners(); exporter.shutdown(done); }); diff --git a/packages/opentelemetry-metrics/test/MeterProvider.test.ts b/packages/opentelemetry-metrics/test/MeterProvider.test.ts index 52d7ee33b2..c09868631f 100644 --- a/packages/opentelemetry-metrics/test/MeterProvider.test.ts +++ b/packages/opentelemetry-metrics/test/MeterProvider.test.ts @@ -21,12 +21,12 @@ import { NoopLogger, notifyOnGlobalShutdown, _invokeGlobalShutdown, - _removeAllGlobalShutdownListeners, + _cleanupGlobalShutdownListeners, } from '@opentelemetry/core'; describe('MeterProvider', () => { afterEach(() => { - _removeAllGlobalShutdownListeners(); + _cleanupGlobalShutdownListeners(); }); describe('constructor', () => { diff --git a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts index 269439bcf9..7e2353ba94 100644 --- a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts +++ b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts @@ -38,6 +38,7 @@ export class BasicTracerProvider implements api.TracerProvider { private readonly _tracers: Map = new Map(); activeSpanProcessor = new NoopSpanProcessor(); + removeGlobalShutdownListener = () => {}; readonly logger: api.Logger; readonly resource: Resource; @@ -49,7 +50,9 @@ export class BasicTracerProvider implements api.TracerProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - notifyOnGlobalShutdown(this._shutdownActiveProcessor.bind(this)); + this.removeGlobalShutdownListener = notifyOnGlobalShutdown( + this._shutdownActiveProcessor.bind(this) + ); } } diff --git a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts index 1e3dd83b0a..90d429c034 100644 --- a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts +++ b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts @@ -26,7 +26,7 @@ import { TraceState, notifyOnGlobalShutdown, _invokeGlobalShutdown, - _removeAllGlobalShutdownListeners, + _cleanupGlobalShutdownListeners, } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; import * as assert from 'assert'; @@ -34,12 +34,16 @@ import * as sinon from 'sinon'; import { BasicTracerProvider, Span } from '../src'; describe('BasicTracerProvider', () => { + let sandbox: sinon.SinonSandbox; + beforeEach(() => { context.disable(); + sandbox = sinon.createSandbox(); }); afterEach(() => { - _removeAllGlobalShutdownListeners(); + sandbox.restore(); + _cleanupGlobalShutdownListeners(); }); describe('constructor', () => { @@ -393,14 +397,12 @@ describe('BasicTracerProvider', () => { describe('.shutdown()', () => { it('should trigger shutdown when SIGTERM is recieved', () => { const tracerProvider = new BasicTracerProvider(); - const sandbox = sinon.createSandbox(); const shutdownStub = sandbox.stub( tracerProvider.getActiveSpanProcessor(), 'shutdown' ); notifyOnGlobalShutdown(() => { sinon.assert.calledOnce(shutdownStub); - sandbox.restore(); }); _invokeGlobalShutdown(); }); @@ -416,7 +418,6 @@ describe('BasicTracerProvider', () => { ); notifyOnGlobalShutdown(() => { sinon.assert.notCalled(shutdownStub); - sandbox.restore(); }); _invokeGlobalShutdown(); }); diff --git a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts index 039af6939f..62aa2e3e5a 100644 --- a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts +++ b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts @@ -26,7 +26,7 @@ import { import { notifyOnGlobalShutdown, _invokeGlobalShutdown, - _removeAllGlobalShutdownListeners, + _cleanupGlobalShutdownListeners, } from '@opentelemetry/core'; import { MultiSpanProcessor } from '../src/MultiSpanProcessor'; @@ -44,7 +44,7 @@ class TestProcessor implements SpanProcessor { describe('MultiSpanProcessor', () => { afterEach(() => { - _removeAllGlobalShutdownListeners(); + _cleanupGlobalShutdownListeners(); }); it('should handle empty span processor', () => { From 078802d4d05bf92b4ed8e2007fedcf0d6980cb6a Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Fri, 24 Jul 2020 21:56:32 +0000 Subject: [PATCH 20/51] fix: make global shutdown cleanup local --- .../src/platform/browser/ShutdownNotifier.ts | 2 -- .../src/platform/node/ShutdownNotifier.ts | 4 ---- .../test/prometheus.test.ts | 7 ++++++- packages/opentelemetry-metrics/test/MeterProvider.test.ts | 7 ++++++- .../opentelemetry-tracing/test/BasicTracerProvider.test.ts | 7 ++++++- .../opentelemetry-tracing/test/MultiSpanProcessor.test.ts | 7 ++++++- 6 files changed, 24 insertions(+), 10 deletions(-) diff --git a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts index 21663110bb..6a405554dd 100644 --- a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts @@ -24,5 +24,3 @@ export function notifyOnGlobalShutdown(cb: () => void) { export function _invokeGlobalShutdown() { window.close(); } - -export function _cleanupGlobalShutdownListeners() {} diff --git a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts index 2b3c184e08..bb03d1e810 100644 --- a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts @@ -24,7 +24,3 @@ export function notifyOnGlobalShutdown(cb: () => void) { export function _invokeGlobalShutdown() { process.kill(process.pid, 'SIGTERM'); } - -export function _cleanupGlobalShutdownListeners() { - process.removeAllListeners('SIGTERM'); -} diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index 3a6e04a235..f769932add 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -18,7 +18,6 @@ import { HrTime, ObserverResult } from '@opentelemetry/api'; import { notifyOnGlobalShutdown, _invokeGlobalShutdown, - _cleanupGlobalShutdownListeners, } from '@opentelemetry/core'; import { CounterMetric, @@ -31,6 +30,12 @@ import * as assert from 'assert'; import * as http from 'http'; import { PrometheusExporter } from '../src'; +function _cleanupGlobalShutdownListeners() { + if (typeof window === 'undefined') { + process.removeAllListeners('SIGTERM'); + } +} + const mockedHrTime: HrTime = [1586347902211, 0]; const mockedTimeMS = 1586347902211000; diff --git a/packages/opentelemetry-metrics/test/MeterProvider.test.ts b/packages/opentelemetry-metrics/test/MeterProvider.test.ts index c09868631f..233ca93b30 100644 --- a/packages/opentelemetry-metrics/test/MeterProvider.test.ts +++ b/packages/opentelemetry-metrics/test/MeterProvider.test.ts @@ -21,9 +21,14 @@ import { NoopLogger, notifyOnGlobalShutdown, _invokeGlobalShutdown, - _cleanupGlobalShutdownListeners, } from '@opentelemetry/core'; +function _cleanupGlobalShutdownListeners() { + if (typeof window === 'undefined') { + process.removeAllListeners('SIGTERM'); + } +} + describe('MeterProvider', () => { afterEach(() => { _cleanupGlobalShutdownListeners(); diff --git a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts index 90d429c034..501bd7f70b 100644 --- a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts +++ b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts @@ -26,13 +26,18 @@ import { TraceState, notifyOnGlobalShutdown, _invokeGlobalShutdown, - _cleanupGlobalShutdownListeners, } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; import * as assert from 'assert'; import * as sinon from 'sinon'; import { BasicTracerProvider, Span } from '../src'; +function _cleanupGlobalShutdownListeners() { + if (typeof window === 'undefined') { + process.removeAllListeners('SIGTERM'); + } +} + describe('BasicTracerProvider', () => { let sandbox: sinon.SinonSandbox; diff --git a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts index 62aa2e3e5a..b08c824f9e 100644 --- a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts +++ b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts @@ -26,10 +26,15 @@ import { import { notifyOnGlobalShutdown, _invokeGlobalShutdown, - _cleanupGlobalShutdownListeners, } from '@opentelemetry/core'; import { MultiSpanProcessor } from '../src/MultiSpanProcessor'; +function _cleanupGlobalShutdownListeners() { + if (typeof window === 'undefined') { + process.removeAllListeners('SIGTERM'); + } +} + class TestProcessor implements SpanProcessor { spans: Span[] = []; onStart(span: Span): void {} From 44a7275966a83a2d228a1f9beeb964d0406e1997 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Mon, 3 Aug 2020 22:54:32 +0000 Subject: [PATCH 21/51] fix: change interval of MeterProvider collection to ensure it does not trigger through clock --- .../test/prometheus.test.ts | 5 ++++- packages/opentelemetry-metrics/test/MeterProvider.test.ts | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index f769932add..9ae758bdd4 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -199,7 +199,10 @@ describe('PrometheusExporter', () => { beforeEach(done => { exporter = new PrometheusExporter(); - meterProvider = new MeterProvider(); + meterProvider = new MeterProvider({ + interval: Math.pow(2, 31) - 1, + gracefulShutdown: true, + }); meter = meterProvider.getMeter('test-prometheus', '1', { exporter: exporter, }); diff --git a/packages/opentelemetry-metrics/test/MeterProvider.test.ts b/packages/opentelemetry-metrics/test/MeterProvider.test.ts index 233ca93b30..0a35fc737a 100644 --- a/packages/opentelemetry-metrics/test/MeterProvider.test.ts +++ b/packages/opentelemetry-metrics/test/MeterProvider.test.ts @@ -91,7 +91,10 @@ describe('MeterProvider', () => { describe('shutdown()', () => { it('should call shutdown when SIGTERM is received', () => { - const meterProvider = new MeterProvider(); + const meterProvider = new MeterProvider({ + interval: Math.pow(2, 31) - 1, + gracefulShutdown: true, + }); const sandbox = sinon.createSandbox(); const shutdownStub1 = sandbox.stub( meterProvider.getMeter('meter1'), @@ -111,6 +114,7 @@ describe('MeterProvider', () => { it('should not trigger shutdown if graceful shutdown is turned off', () => { const meterProvider = new MeterProvider({ + interval: Math.pow(2, 31) - 1, gracefulShutdown: false, }); const sandbox = sinon.createSandbox(); From d541837579eebd3cd57d653c1db45175fbd05451 Mon Sep 17 00:00:00 2001 From: Bartlomiej Obecny Date: Tue, 4 Aug 2020 01:27:12 +0200 Subject: [PATCH 22/51] chore: removing _cleanupGlobalShutdownListeners --- .../test/prometheus.test.ts | 14 +++-- .../test/MeterProvider.test.ts | 52 ++++++++++--------- .../test/BasicTracerProvider.test.ts | 16 +++--- .../test/MultiSpanProcessor.test.ts | 14 +++-- 4 files changed, 47 insertions(+), 49 deletions(-) diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index 9ae758bdd4..fe1ba0cb37 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -30,17 +30,12 @@ import * as assert from 'assert'; import * as http from 'http'; import { PrometheusExporter } from '../src'; -function _cleanupGlobalShutdownListeners() { - if (typeof window === 'undefined') { - process.removeAllListeners('SIGTERM'); - } -} - const mockedHrTime: HrTime = [1586347902211, 0]; const mockedTimeMS = 1586347902211000; describe('PrometheusExporter', () => { let toPoint: () => Point; + let removeEvent: Function | undefined; before(() => { toPoint = SumAggregator.prototype.toPoint; SumAggregator.prototype.toPoint = function (): Point { @@ -210,8 +205,11 @@ describe('PrometheusExporter', () => { }); afterEach(done => { - _cleanupGlobalShutdownListeners(); exporter.shutdown(done); + if (removeEvent) { + removeEvent(); + removeEvent = undefined; + } }); it('should export a count aggregation', done => { @@ -346,7 +344,7 @@ describe('PrometheusExporter', () => { counter.bind({ counterKey1: 'labelValue2' }).add(20); counter.bind({ counterKey1: 'labelValue3' }).add(30); - notifyOnGlobalShutdown(() => { + removeEvent = notifyOnGlobalShutdown(() => { http .get('http://localhost:9464/metrics', res => { res.on('data', chunk => { diff --git a/packages/opentelemetry-metrics/test/MeterProvider.test.ts b/packages/opentelemetry-metrics/test/MeterProvider.test.ts index 0a35fc737a..cfc867adf4 100644 --- a/packages/opentelemetry-metrics/test/MeterProvider.test.ts +++ b/packages/opentelemetry-metrics/test/MeterProvider.test.ts @@ -23,15 +23,13 @@ import { _invokeGlobalShutdown, } from '@opentelemetry/core'; -function _cleanupGlobalShutdownListeners() { - if (typeof window === 'undefined') { - process.removeAllListeners('SIGTERM'); - } -} - describe('MeterProvider', () => { + let removeEvent: Function | undefined; afterEach(() => { - _cleanupGlobalShutdownListeners(); + if (removeEvent) { + removeEvent(); + removeEvent = undefined; + } }); describe('constructor', () => { @@ -62,12 +60,15 @@ describe('MeterProvider', () => { assert.strictEqual(counter.resource, meterProvider.resource); }); - it('should return the meter with default version without a version option', () => { - const provider = new MeterProvider(); - const meter1 = provider.getMeter('default'); - const meter2 = provider.getMeter('default', '*'); - assert.deepEqual(meter1, meter2); - }); + it( + 'should return the meter with default version without a version option', + () => { + const provider = new MeterProvider(); + const meter1 = provider.getMeter('default'); + const meter2 = provider.getMeter('default', '*'); + assert.deepEqual(meter1, meter2); + } + ); it('should return the same Meter instance with same name & version', () => { const provider = new MeterProvider(); @@ -76,17 +77,20 @@ describe('MeterProvider', () => { assert.deepEqual(meter1, meter2); }); - it('should return different Meter instance with different name or version', () => { - const provider = new MeterProvider(); + it( + 'should return different Meter instance with different name or version', + () => { + const provider = new MeterProvider(); - const meter1 = provider.getMeter('meter1', 'ver1'); - const meter2 = provider.getMeter('meter1'); - assert.notEqual(meter1, meter2); + const meter1 = provider.getMeter('meter1', 'ver1'); + const meter2 = provider.getMeter('meter1'); + assert.notEqual(meter1, meter2); - const meter3 = provider.getMeter('meter2', 'ver2'); - const meter4 = provider.getMeter('meter3', 'ver2'); - assert.notEqual(meter3, meter4); - }); + const meter3 = provider.getMeter('meter2', 'ver2'); + const meter4 = provider.getMeter('meter3', 'ver2'); + assert.notEqual(meter3, meter4); + } + ); }); describe('shutdown()', () => { @@ -104,7 +108,7 @@ describe('MeterProvider', () => { meterProvider.getMeter('meter2'), 'shutdown' ); - notifyOnGlobalShutdown(() => { + removeEvent = notifyOnGlobalShutdown(() => { sinon.assert.calledOnce(shutdownStub1); sinon.assert.calledOnce(shutdownStub2); sandbox.restore(); @@ -122,7 +126,7 @@ describe('MeterProvider', () => { meterProvider.getMeter('meter1'), 'shutdown' ); - notifyOnGlobalShutdown(() => { + removeEvent = notifyOnGlobalShutdown(() => { sinon.assert.notCalled(shutdownStub); sandbox.restore(); }); diff --git a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts index 5f9f6df5d3..2527a701bc 100644 --- a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts +++ b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts @@ -32,14 +32,9 @@ import * as assert from 'assert'; import * as sinon from 'sinon'; import { BasicTracerProvider, Span } from '../src'; -function _cleanupGlobalShutdownListeners() { - if (typeof window === 'undefined') { - process.removeAllListeners('SIGTERM'); - } -} - describe('BasicTracerProvider', () => { let sandbox: sinon.SinonSandbox; + let removeEvent: Function | undefined; beforeEach(() => { context.disable(); @@ -48,7 +43,10 @@ describe('BasicTracerProvider', () => { afterEach(() => { sandbox.restore(); - _cleanupGlobalShutdownListeners(); + if (removeEvent) { + removeEvent(); + removeEvent = undefined; + } }); describe('constructor', () => { @@ -377,7 +375,7 @@ describe('BasicTracerProvider', () => { tracerProvider.getActiveSpanProcessor(), 'shutdown' ); - notifyOnGlobalShutdown(() => { + removeEvent = notifyOnGlobalShutdown(() => { sinon.assert.calledOnce(shutdownStub); }); _invokeGlobalShutdown(); @@ -392,7 +390,7 @@ describe('BasicTracerProvider', () => { tracerProvider.getActiveSpanProcessor(), 'shutdown' ); - notifyOnGlobalShutdown(() => { + removeEvent = notifyOnGlobalShutdown(() => { sinon.assert.notCalled(shutdownStub); }); _invokeGlobalShutdown(); diff --git a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts index b08c824f9e..7db10cd26e 100644 --- a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts +++ b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts @@ -29,12 +29,6 @@ import { } from '@opentelemetry/core'; import { MultiSpanProcessor } from '../src/MultiSpanProcessor'; -function _cleanupGlobalShutdownListeners() { - if (typeof window === 'undefined') { - process.removeAllListeners('SIGTERM'); - } -} - class TestProcessor implements SpanProcessor { spans: Span[] = []; onStart(span: Span): void {} @@ -48,8 +42,12 @@ class TestProcessor implements SpanProcessor { } describe('MultiSpanProcessor', () => { + let removeEvent: Function | undefined; afterEach(() => { - _cleanupGlobalShutdownListeners(); + if (removeEvent) { + removeEvent(); + removeEvent = undefined; + } }); it('should handle empty span processor', () => { @@ -114,7 +112,7 @@ describe('MultiSpanProcessor', () => { assert.strictEqual(processor1.spans.length, 1); assert.strictEqual(processor1.spans.length, processor2.spans.length); - notifyOnGlobalShutdown(() => { + removeEvent = notifyOnGlobalShutdown(() => { assert.strictEqual(processor1.spans.length, 0); assert.strictEqual(processor1.spans.length, processor2.spans.length); }); From 0163241eb92ffd7a4ec13c04515208e19bf052af Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Tue, 4 Aug 2020 23:02:41 +0000 Subject: [PATCH 23/51] fix: remove unnecesary trace provider member function --- packages/opentelemetry-tracing/src/BasicTracerProvider.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts index 7e2353ba94..269439bcf9 100644 --- a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts +++ b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts @@ -38,7 +38,6 @@ export class BasicTracerProvider implements api.TracerProvider { private readonly _tracers: Map = new Map(); activeSpanProcessor = new NoopSpanProcessor(); - removeGlobalShutdownListener = () => {}; readonly logger: api.Logger; readonly resource: Resource; @@ -50,9 +49,7 @@ export class BasicTracerProvider implements api.TracerProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - this.removeGlobalShutdownListener = notifyOnGlobalShutdown( - this._shutdownActiveProcessor.bind(this) - ); + notifyOnGlobalShutdown(this._shutdownActiveProcessor.bind(this)); } } From 6f4de1e34262d9cb0ae5c368c341aff86dbb27ab Mon Sep 17 00:00:00 2001 From: Aravin <34178459+aravinsiva@users.noreply.github.com> Date: Mon, 27 Jul 2020 13:05:35 -0400 Subject: [PATCH 24/51] Removing default span attributes (#1342) * refactor(opentelemetry-tracing): removing default span attributes Signed-off-by: Aravin Sivakumar * refactor(opentelemetry-tracing): removing default span attributed from tracer object Signed-off-by: Aravin Sivakumar * refactor(opentelemetry-tracing): removing accidental add to package.json Signed-off-by: Aravin Sivakumar * refactor(opentelemetry-tracing): removing redundant test and fixing suggestions by Shawn and Daniel Signed-off-by: Aravin Sivakumar --- .../test/NodeTracerProvider.test.ts | 23 ------------ packages/opentelemetry-tracing/src/Tracer.ts | 4 +- packages/opentelemetry-tracing/src/config.ts | 1 - packages/opentelemetry-tracing/src/types.ts | 13 +------ .../test/BasicTracerProvider.test.ts | 37 ++----------------- 5 files changed, 6 insertions(+), 72 deletions(-) diff --git a/packages/opentelemetry-node/test/NodeTracerProvider.test.ts b/packages/opentelemetry-node/test/NodeTracerProvider.test.ts index 0a42f372ed..1846819bf4 100644 --- a/packages/opentelemetry-node/test/NodeTracerProvider.test.ts +++ b/packages/opentelemetry-node/test/NodeTracerProvider.test.ts @@ -114,16 +114,6 @@ describe('NodeTracerProvider', () => { require('http'); assert.strictEqual(plugins.length, 3); }); - - it('should construct an instance with default attributes', () => { - provider = new NodeTracerProvider({ - defaultAttributes: { - region: 'eu-west', - asg: 'my-asg', - }, - }); - assert.ok(provider instanceof NodeTracerProvider); - }); }); describe('.startSpan()', () => { @@ -195,19 +185,6 @@ describe('NodeTracerProvider', () => { assert.strictEqual(span.isRecording(), true); }); - it('should set default attributes on span', () => { - const defaultAttributes = { - foo: 'bar', - }; - provider = new NodeTracerProvider({ - defaultAttributes, - }); - - const span = provider.getTracer('default').startSpan('my-span') as Span; - assert.ok(span instanceof Span); - assert.deepStrictEqual(span.attributes, defaultAttributes); - }); - it('should assign resource to span', () => { provider = new NodeTracerProvider({ logger: new NoopLogger(), diff --git a/packages/opentelemetry-tracing/src/Tracer.ts b/packages/opentelemetry-tracing/src/Tracer.ts index 694829dda0..dc513d6dad 100644 --- a/packages/opentelemetry-tracing/src/Tracer.ts +++ b/packages/opentelemetry-tracing/src/Tracer.ts @@ -36,7 +36,6 @@ import { mergeConfig } from './utility'; * This class represents a basic tracer. */ export class Tracer implements api.Tracer { - private readonly _defaultAttributes: api.Attributes; private readonly _sampler: api.Sampler; private readonly _traceParams: TraceParams; readonly resource: Resource; @@ -52,7 +51,6 @@ export class Tracer implements api.Tracer { private _tracerProvider: BasicTracerProvider ) { const localConfig = mergeConfig(config); - this._defaultAttributes = localConfig.defaultAttributes; this._sampler = localConfig.sampler; this._traceParams = localConfig.traceParams; this.resource = _tracerProvider.resource; @@ -83,7 +81,7 @@ export class Tracer implements api.Tracer { } const spanKind = options.kind ?? api.SpanKind.INTERNAL; const links = options.links ?? []; - const attributes = { ...this._defaultAttributes, ...options.attributes }; + const attributes = options.attributes ?? {}; // make sampling decision const samplingResult = this._sampler.shouldSample( parentContext, diff --git a/packages/opentelemetry-tracing/src/config.ts b/packages/opentelemetry-tracing/src/config.ts index 97be1ad5ac..a7e3af1dcd 100644 --- a/packages/opentelemetry-tracing/src/config.ts +++ b/packages/opentelemetry-tracing/src/config.ts @@ -30,7 +30,6 @@ export const DEFAULT_MAX_LINKS_PER_SPAN = 32; * used to extend the default value. */ export const DEFAULT_CONFIG = { - defaultAttributes: {}, logLevel: LogLevel.INFO, sampler: new AlwaysOnSampler(), traceParams: { diff --git a/packages/opentelemetry-tracing/src/types.ts b/packages/opentelemetry-tracing/src/types.ts index 5f81c7f774..a2ecc3939c 100644 --- a/packages/opentelemetry-tracing/src/types.ts +++ b/packages/opentelemetry-tracing/src/types.ts @@ -14,12 +14,7 @@ * limitations under the License. */ -import { - Attributes, - HttpTextPropagator, - Logger, - Sampler, -} from '@opentelemetry/api'; +import { HttpTextPropagator, Logger, Sampler } from '@opentelemetry/api'; import { LogLevel } from '@opentelemetry/core'; import { ContextManager } from '@opentelemetry/context-base'; import { Resource } from '@opentelemetry/resources'; @@ -28,12 +23,6 @@ import { Resource } from '@opentelemetry/resources'; * TracerConfig provides an interface for configuring a Basic Tracer. */ export interface TracerConfig { - /** - * Attributes that will be applied on every span created by Tracer. - * Useful to add infrastructure and environment information to your spans. - */ - defaultAttributes?: Attributes; - /** * User provided logger. */ diff --git a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts index 501bd7f70b..5f9f6df5d3 100644 --- a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts +++ b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts @@ -119,13 +119,8 @@ describe('BasicTracerProvider', () => { }); }); - it('should construct an instance with default attributes', () => { - const tracer = new BasicTracerProvider({ - defaultAttributes: { - region: 'eu-west', - asg: 'my-asg', - }, - }); + it('should construct an instance of BasicTracerProvider', () => { + const tracer = new BasicTracerProvider(); assert.ok(tracer instanceof BasicTracerProvider); }); }); @@ -159,10 +154,8 @@ describe('BasicTracerProvider', () => { span.end(); }); - it('should start a span with defaultAttributes and spanoptions->attributes', () => { - const tracer = new BasicTracerProvider({ - defaultAttributes: { foo: 'bar' }, - }).getTracer('default'); + it('should start a span with given attributes', () => { + const tracer = new BasicTracerProvider().getTracer('default'); const span = tracer.startSpan('my-span', { attributes: { foo: 'foo', bar: 'bar' }, }) as Span; @@ -170,15 +163,6 @@ describe('BasicTracerProvider', () => { span.end(); }); - it('should start a span with defaultAttributes and undefined spanoptions->attributes', () => { - const tracer = new BasicTracerProvider({ - defaultAttributes: { foo: 'bar' }, - }).getTracer('default'); - const span = tracer.startSpan('my-span', {}) as Span; - assert.deepStrictEqual(span.attributes, { foo: 'bar' }); - span.end(); - }); - it('should start a span with spanoptions->attributes', () => { const tracer = new BasicTracerProvider().getTracer('default'); const span = tracer.startSpan('my-span', { @@ -334,19 +318,6 @@ describe('BasicTracerProvider', () => { assert.strictEqual(span.isRecording(), true); }); - it('should set default attributes on span', () => { - const defaultAttributes = { - foo: 'bar', - }; - const tracer = new BasicTracerProvider({ - defaultAttributes, - }).getTracer('default'); - - const span = tracer.startSpan('my-span') as Span; - assert.ok(span instanceof Span); - assert.deepStrictEqual(span.attributes, defaultAttributes); - }); - it('should assign a resource', () => { const tracer = new BasicTracerProvider().getTracer('default'); const span = tracer.startSpan('my-span') as Span; From 5597957f7299ab9819b80c75af819b1e1afe1918 Mon Sep 17 00:00:00 2001 From: Ruben Vargas Palma Date: Mon, 27 Jul 2020 12:42:05 -0500 Subject: [PATCH 25/51] feat: add baggage support to the opentracing shim (#918) Co-authored-by: Mayur Kale --- .../src/shim.ts | 80 ++++++++++++++----- .../test/Shim.test.ts | 60 +++++++++++++- 2 files changed, 116 insertions(+), 24 deletions(-) diff --git a/packages/opentelemetry-shim-opentracing/src/shim.ts b/packages/opentelemetry-shim-opentracing/src/shim.ts index 14a49f411f..c5d4417c3a 100644 --- a/packages/opentelemetry-shim-opentracing/src/shim.ts +++ b/packages/opentelemetry-shim-opentracing/src/shim.ts @@ -19,10 +19,11 @@ import { getExtractedSpanContext, NoopLogger, setExtractedSpanContext, + setCorrelationContext, setActiveSpan, + getCorrelationContext, } from '@opentelemetry/core'; import * as opentracing from 'opentracing'; -import { defaultSetter } from '@opentelemetry/api'; function translateReferences(references: opentracing.Reference[]): api.Link[] { const links: api.Link[] = []; @@ -72,10 +73,15 @@ function getContextWithParent(options: opentracing.SpanOptions) { */ export class SpanContextShim extends opentracing.SpanContext { private readonly _spanContext: api.SpanContext; + private _correlationContext: api.CorrelationContext; - constructor(spanContext: api.SpanContext) { + constructor( + spanContext: api.SpanContext, + correlationContext: api.CorrelationContext + ) { super(); this._spanContext = spanContext; + this._correlationContext = correlationContext; } /** @@ -85,6 +91,13 @@ export class SpanContextShim extends opentracing.SpanContext { return this._spanContext; } + /** + * Returns the underlying {@link api.CorrelationContext} + */ + getCorrelationContext(): api.CorrelationContext { + return this._correlationContext; + } + /** * Returns the trace ID as a string. */ @@ -98,6 +111,16 @@ export class SpanContextShim extends opentracing.SpanContext { toSpanId(): string { return this._spanContext.spanId; } + + getBaggageItem(key: string): string | undefined { + return this._correlationContext[key]?.value; + } + + setBaggageItem(key: string, value: string) { + this._correlationContext = Object.assign({}, this._correlationContext, { + [key]: { value }, + }); + } } /** @@ -125,11 +148,19 @@ export class TracerShim extends opentracing.Tracer { getContextWithParent(options) ); + let correlationContext: api.CorrelationContext = {}; + if (options.childOf instanceof SpanShim) { + const shimContext = options.childOf.context() as SpanContextShim; + correlationContext = shimContext.getCorrelationContext(); + } else if (options.childOf instanceof SpanContextShim) { + correlationContext = options.childOf.getCorrelationContext(); + } + if (options.tags) { span.setAttributes(options.tags); } - return new SpanShim(this, span); + return new SpanShim(this, span, correlationContext); } _inject( @@ -137,17 +168,20 @@ export class TracerShim extends opentracing.Tracer { format: string, carrier: unknown ): void { - const opentelemSpanContext: api.SpanContext = (spanContext as SpanContextShim).getSpanContext(); + const spanContextShim: SpanContextShim = spanContext as SpanContextShim; + const oTelSpanContext: api.SpanContext = spanContextShim.getSpanContext(); + const oTelSpanCorrelationContext: api.CorrelationContext = spanContextShim.getCorrelationContext(); + if (!carrier || typeof carrier !== 'object') return; switch (format) { case opentracing.FORMAT_HTTP_HEADERS: case opentracing.FORMAT_TEXT_MAP: { api.propagation.inject( carrier, - defaultSetter, - setExtractedSpanContext( - api.Context.ROOT_CONTEXT, - opentelemSpanContext + api.defaultSetter, + setCorrelationContext( + setExtractedSpanContext(api.Context.ROOT_CONTEXT, oTelSpanContext), + oTelSpanCorrelationContext ) ); return; @@ -156,7 +190,7 @@ export class TracerShim extends opentracing.Tracer { this._logger.warn( 'OpentracingShim.inject() does not support FORMAT_BINARY' ); - // @todo: Implement binary format + // @todo: Implement binary formats return; } default: @@ -167,13 +201,14 @@ export class TracerShim extends opentracing.Tracer { switch (format) { case opentracing.FORMAT_HTTP_HEADERS: case opentracing.FORMAT_TEXT_MAP: { - const context = getExtractedSpanContext( - api.propagation.extract(carrier) - ); - if (!context) { + const context: api.Context = api.propagation.extract(carrier); + const spanContext = getExtractedSpanContext(context); + const correlationContext = getCorrelationContext(context); + + if (!spanContext) { return null; } - return new SpanContextShim(context); + return new SpanContextShim(spanContext, correlationContext || {}); } case opentracing.FORMAT_BINARY: { // @todo: Implement binary format @@ -191,8 +226,8 @@ export class TracerShim extends opentracing.Tracer { /** * SpanShim wraps an {@link types.Span} and implements the OpenTracing Span API * around it. - * @todo: Out of band baggage propagation is not currently supported. - */ + * + **/ export class SpanShim extends opentracing.Span { // _span is the original OpenTelemetry span that we are wrapping with // an opentracing interface. @@ -200,10 +235,14 @@ export class SpanShim extends opentracing.Span { private readonly _contextShim: SpanContextShim; private readonly _tracerShim: TracerShim; - constructor(tracerShim: TracerShim, span: api.Span) { + constructor( + tracerShim: TracerShim, + span: api.Span, + correlationContext: api.CorrelationContext + ) { super(); this._span = span; - this._contextShim = new SpanContextShim(span.context()); + this._contextShim = new SpanContextShim(span.context(), correlationContext); this._tracerShim = tracerShim; } @@ -295,12 +334,11 @@ export class SpanShim extends opentracing.Span { } getBaggageItem(key: string): string | undefined { - // TODO: should this go into the context? - return undefined; + return this._contextShim.getBaggageItem(key); } setBaggageItem(key: string, value: string): this { - // TODO: should this go into the context? + this._contextShim.setBaggageItem(key, value); return this; } diff --git a/packages/opentelemetry-shim-opentracing/test/Shim.test.ts b/packages/opentelemetry-shim-opentracing/test/Shim.test.ts index 9524045d15..51b0bdd890 100644 --- a/packages/opentelemetry-shim-opentracing/test/Shim.test.ts +++ b/packages/opentelemetry-shim-opentracing/test/Shim.test.ts @@ -22,6 +22,8 @@ import { INVALID_SPAN_CONTEXT, timeInputToHrTime, HttpTraceContext, + CompositePropagator, + HttpCorrelationContext, } from '@opentelemetry/core'; import { propagation } from '@opentelemetry/api'; import { performance } from 'perf_hooks'; @@ -32,7 +34,11 @@ describe('OpenTracing Shim', () => { provider.getTracer('default') ); opentracing.initGlobalTracer(shimTracer); - propagation.setGlobalPropagator(new HttpTraceContext()); + const compositePropagator = new CompositePropagator({ + propagators: [new HttpTraceContext(), new HttpCorrelationContext()], + }); + + propagation.setGlobalPropagator(compositePropagator); describe('TracerShim', () => { let span: opentracing.Span; @@ -86,6 +92,25 @@ describe('OpenTracing Shim', () => { /* const extractedContext = shimTracer.extract(opentracing.FORMAT_BINARY, { buffer: new Uint8Array(carrier)}); */ /* assert.strictEqual(context.toSpanId(), extractedContext.toSpanId()) */ }); + + it('injects/extracts a span with baggage', () => { + const carrier: { [key: string]: unknown } = {}; + span.setBaggageItem('baggage1', 'value1'); + span.setBaggageItem('baggage2', 'value2'); + shimTracer.inject(span, opentracing.FORMAT_HTTP_HEADERS, carrier); + const extractedContext = shimTracer.extract( + opentracing.FORMAT_HTTP_HEADERS, + carrier + ) as SpanContextShim; + const childSpan = shimTracer.startSpan('other-span', { + childOf: extractedContext, + }) as SpanShim; + assert.ok(extractedContext !== null); + assert.strictEqual(context.toTraceId(), extractedContext!.toTraceId()); + assert.strictEqual(context.toSpanId(), extractedContext!.toSpanId()); + assert.strictEqual(childSpan.getBaggageItem('baggage1'), 'value1'); + assert.strictEqual(childSpan.getBaggageItem('baggage2'), 'value2'); + }); }); it('creates parent/child relationship using a span object', () => { @@ -135,7 +160,7 @@ describe('OpenTracing Shim', () => { describe('SpanContextShim', () => { it('returns the correct context', () => { - const shim = new SpanContextShim(INVALID_SPAN_CONTEXT); + const shim = new SpanContextShim(INVALID_SPAN_CONTEXT, {}); assert.strictEqual(shim.getSpanContext(), INVALID_SPAN_CONTEXT); assert.strictEqual(shim.toTraceId(), INVALID_SPAN_CONTEXT.traceId); assert.strictEqual(shim.toSpanId(), INVALID_SPAN_CONTEXT.spanId); @@ -190,7 +215,36 @@ describe('OpenTracing Shim', () => { it('can set and retrieve baggage', () => { span.setBaggageItem('baggage', 'item'); - // TODO: baggage + const value = span.getBaggageItem('baggage'); + assert.equal('item', value); + + const childSpan = shimTracer.startSpan('child-span1', { + childOf: span, + }); + childSpan.setBaggageItem('key2', 'item2'); + + // child should have parent baggage items. + assert.equal('item', childSpan.getBaggageItem('baggage')); + assert.equal('item2', childSpan.getBaggageItem('key2')); + + // Parent shouldn't have the child baggage item. + assert.equal(span.getBaggageItem('key2'), undefined); + }); + + it('can set and retrieve baggage with same key', () => { + span.setBaggageItem('key1', 'value1'); + const value = span.getBaggageItem('key1'); + assert.equal('value1', value); + + const childSpan = shimTracer.startSpan('child-span1', { + childOf: span, + }); + childSpan.setBaggageItem('key2', 'value2'); + childSpan.setBaggageItem('key1', 'value3'); + + // child should have parent baggage items. + assert.equal('value3', childSpan.getBaggageItem('key1')); + assert.equal('value2', childSpan.getBaggageItem('key2')); }); }); }); From 7c098063090c827cf97f61d998c0c4aa2d5dd65f Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Mon, 27 Jul 2020 13:56:32 -0400 Subject: [PATCH 26/51] Add nodejs sdk package (#1187) Co-authored-by: Naseem Co-authored-by: legendecas Co-authored-by: Mark Wolff Co-authored-by: Matthew Wear --- packages/opentelemetry-metrics/src/index.ts | 1 + packages/opentelemetry-node/src/index.ts | 2 + packages/opentelemetry-sdk-node/.eslintignore | 1 + packages/opentelemetry-sdk-node/.eslintrc.js | 7 + packages/opentelemetry-sdk-node/LICENSE | 201 ++++++++++++++++++ packages/opentelemetry-sdk-node/README.md | 146 +++++++++++++ packages/opentelemetry-sdk-node/package.json | 66 ++++++ packages/opentelemetry-sdk-node/src/index.ts | 25 +++ packages/opentelemetry-sdk-node/src/sdk.ts | 161 ++++++++++++++ packages/opentelemetry-sdk-node/src/types.ts | 36 ++++ .../opentelemetry-sdk-node/src/version.ts | 18 ++ .../opentelemetry-sdk-node/test/sdk.test.ts | 124 +++++++++++ packages/opentelemetry-sdk-node/tsconfig.json | 11 + 13 files changed, 799 insertions(+) create mode 100644 packages/opentelemetry-sdk-node/.eslintignore create mode 100644 packages/opentelemetry-sdk-node/.eslintrc.js create mode 100644 packages/opentelemetry-sdk-node/LICENSE create mode 100644 packages/opentelemetry-sdk-node/README.md create mode 100644 packages/opentelemetry-sdk-node/package.json create mode 100644 packages/opentelemetry-sdk-node/src/index.ts create mode 100644 packages/opentelemetry-sdk-node/src/sdk.ts create mode 100644 packages/opentelemetry-sdk-node/src/types.ts create mode 100644 packages/opentelemetry-sdk-node/src/version.ts create mode 100644 packages/opentelemetry-sdk-node/test/sdk.test.ts create mode 100644 packages/opentelemetry-sdk-node/tsconfig.json diff --git a/packages/opentelemetry-metrics/src/index.ts b/packages/opentelemetry-metrics/src/index.ts index 0be805519a..2a0c408d71 100644 --- a/packages/opentelemetry-metrics/src/index.ts +++ b/packages/opentelemetry-metrics/src/index.ts @@ -26,3 +26,4 @@ export * from './export/Batcher'; export * from './export/ConsoleMetricExporter'; export * from './export/types'; export * from './UpDownCounterMetric'; +export { MeterConfig } from './types'; diff --git a/packages/opentelemetry-node/src/index.ts b/packages/opentelemetry-node/src/index.ts index bece472ede..092ae180c9 100644 --- a/packages/opentelemetry-node/src/index.ts +++ b/packages/opentelemetry-node/src/index.ts @@ -14,4 +14,6 @@ * limitations under the License. */ +export { NodeTracerConfig } from './config'; +export { Plugins } from './instrumentation/PluginLoader'; export * from './NodeTracerProvider'; diff --git a/packages/opentelemetry-sdk-node/.eslintignore b/packages/opentelemetry-sdk-node/.eslintignore new file mode 100644 index 0000000000..378eac25d3 --- /dev/null +++ b/packages/opentelemetry-sdk-node/.eslintignore @@ -0,0 +1 @@ +build diff --git a/packages/opentelemetry-sdk-node/.eslintrc.js b/packages/opentelemetry-sdk-node/.eslintrc.js new file mode 100644 index 0000000000..f726f3becb --- /dev/null +++ b/packages/opentelemetry-sdk-node/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + "env": { + "mocha": true, + "node": true + }, + ...require('../../eslint.config.js') +} diff --git a/packages/opentelemetry-sdk-node/LICENSE b/packages/opentelemetry-sdk-node/LICENSE new file mode 100644 index 0000000000..5d6f747bfd --- /dev/null +++ b/packages/opentelemetry-sdk-node/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2020 The OpenTelemetry Authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/opentelemetry-sdk-node/README.md b/packages/opentelemetry-sdk-node/README.md new file mode 100644 index 0000000000..2db342d0d7 --- /dev/null +++ b/packages/opentelemetry-sdk-node/README.md @@ -0,0 +1,146 @@ +# OpenTelemetry SDK for Node.js + +[![Gitter chat][gitter-image]][gitter-url] +[![NPM Published Version][npm-img]][npm-url] +[![dependencies][dependencies-image]][dependencies-url] +[![devDependencies][devDependencies-image]][devDependencies-url] +[![Apache License][license-image]][license-image] + +This package provides the full OpenTelemetry SDK for Node.js including tracing and metrics. + +## Quick Start + +To get started you need to install `@opentelemetry/sdk-node`, a metrics and/or tracing exporter, and any appropriate plugins for the node modules used by your application. + +### Installation + +```sh +$ # Install the SDK +$ npm install @opentelemetry/sdk-node + +$ # Install exporters and plugins +$ npm install \ + @opentelemetry/exporter-jaeger \ # add tracing exporters as needed + @opentelemetry/exporter-prometheus # add metrics exporters as needed + @opentelemetry/plugin-http # add plugins as needed + +$ # or install all officially supported core and contrib plugins +$ npm install @opentelemetry/plugins-node-all +``` + +> Note: this example is for Node.js. See [examples/tracer-web](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/tracer-web) for a browser example. + +### Initialize the SDK + +Before any other module in your application is loaded, you must initialize the SDK. +If you fail to initialize the SDK or initialize it too late, no-op implementations will be provided to any library which acquires a tracer or meter from the API. +This example uses Jaeger and Prometheus, but exporters exist for [other tracing backends][other-tracing-backends]. + +```javascript +const opentelemetry = require("@opentelemetry/sdk-node"); +const { JaegerExporter } = require("@opentelemetry/exporter-jaeger"); +const { PrometheusExporter } = require("@opentelemetry/exporter-prometheus"); + +const jaegerExporter = new JaegerExporter({ + serviceName: 'my-service', +}); +const prometheusExporter = new PrometheusExporter({ startServer: true }); + +const sdk = new opentelemetry.NodeSDK({ + // Optional - if omitted, the tracing SDK will not be initialized + traceExporter: jaegerExporter, + // Optional - If omitted, the metrics SDK will not be initialized + metricExporter: prometheusExporter, + + // See the Configuration section below for additional configuration options +}); + +// You can optionally detect resources asynchronously from the environment. +// Detected resources are merged with the resources provided in the SDK configuration. +sdk + .start() + .then(() => { + // Resources have been detected and SDK is started + }) +``` + +## Configuration + +Below is a full list of configuration options which may be passed into the `NodeSDK` constructor; + +### autoDetectResources + +Detect resources automatically from the environment using the default resource detectors. Default `true`. + +### contextManager + +Use a custom context manager. Default: [AsyncHooksContextManager](../opentelemetry-context-async-hooks/README.md) + +### httpTextPropagator + +Use a custom propagator. Default: [CompositePropagator](../opentelemetry-core/src/context/propagation/composite.ts) using [W3C Trace Context](../opentelemetry-core/README.md#httptracecontext-propagator) and [Correlation Context](../opentelemetry-core/README.md#correlation-context-propagator) + +### logger + +Use a custom logger. Default: Logging disabled + +### logLevel + +Default: [INFO](../opentelemetry-core/src/common/types.ts#L19) + +### metricBatcher + +Use a custom batcher for metrics. Default: [UngroupedBatcher](../opentelemetry-metrics/src/export/Batcher.ts#L50) + +### metricExporter + +Configure a metric exporter. If an exporter is not configured, the metrics SDK will not be initialized and registered. + +### metricInterval + +Configure an interval for metrics export in ms. Default: 60,000 (60 seconds) + +### plugins + +Configure plugins. By default, all plugins which are installed and in the [Default Plugins List](../opentelemetry-node/src/config.ts#L29) will be enabled. + +### resource + +Configure a resource. Resources may also be detected by using the `autoDetectResources` method of the SDK. + +### sampler + +Configure a custom sampler. By default all traces will be sampled. + +### spanProcessor + +### traceExporter + +Configure a trace exporter. If an exporter OR span processor is not configured, the tracing SDK will not be initialized and registered. If an exporter is configured, it will be used with a [BatchSpanProcessor](../opentelemetry-tracing/src/export/BatchSpanProcessor.ts). + +### traceParams + +Configure tracing parameters. These are the same trace parameters used to [configure a tracer](../opentelemetry-tracing/src/types.ts#L71). + +## Useful links + +- For more information on OpenTelemetry, visit: +- For more about OpenTelemetry JavaScript: +- For help or feedback on this project, join us on [gitter][gitter-url] + +## License + +Apache 2.0 - See [LICENSE][license-url] for more information. + +[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg +[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge +[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE +[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat +[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-sdk-node +[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-sdk-node +[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-sdk-node +[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-sdk-node&type=dev +[npm-url]: https://www.npmjs.com/package/@opentelemetry/sdk-node +[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fsdk-node.svg + +[other-tracing-backends]: https://github.com/open-telemetry/opentelemetry-js#trace-exporters diff --git a/packages/opentelemetry-sdk-node/package.json b/packages/opentelemetry-sdk-node/package.json new file mode 100644 index 0000000000..7815a67644 --- /dev/null +++ b/packages/opentelemetry-sdk-node/package.json @@ -0,0 +1,66 @@ +{ + "name": "@opentelemetry/sdk-node", + "version": "0.9.0", + "description": "OpenTelemetry SDK for Node.js", + "main": "build/src/index.js", + "types": "build/src/index.d.ts", + "repository": "open-telemetry/opentelemetry-js", + "scripts": { + "test": "nyc ts-mocha -p tsconfig.json test/**/*.test.ts", + "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", + "build": "npm run compile", + "lint": "eslint . --ext .ts", + "lint:fix": "eslint . --ext .ts --fix", + "precompile": "tsc --version", + "version:update": "node ../../scripts/version-update.js", + "compile": "npm run version:update && tsc -p .", + "prepare": "npm run compile", + "watch": "tsc -w" + }, + "keywords": [ + "opentelemetry", + "nodejs", + "tracing", + "profiling", + "metrics", + "stats", + "monitoring" + ], + "author": "OpenTelemetry Authors", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + }, + "files": [ + "build/src/**/*.js", + "build/src/**/*.js.map", + "build/src/**/*.d.ts", + "LICENSE", + "README.md" + ], + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@opentelemetry/api": "0.9.0", + "@opentelemetry/context-base": "0.9.0", + "@opentelemetry/core": "0.9.0", + "@opentelemetry/metrics": "0.9.0", + "@opentelemetry/node": "0.9.0", + "@opentelemetry/resources": "0.9.0", + "@opentelemetry/tracing": "0.9.0" + }, + "devDependencies": { + "@opentelemetry/context-async-hooks": "0.9.0", + "@types/mocha": "7.0.2", + "@types/node": "14.0.13", + "codecov": "3.7.0", + "gts": "2.0.2", + "istanbul-instrumenter-loader": "3.0.1", + "mocha": "7.2.0", + "nyc": "15.1.0", + "ts-loader": "7.0.5", + "ts-mocha": "7.0.0", + "typescript": "3.9.5" + } +} diff --git a/packages/opentelemetry-sdk-node/src/index.ts b/packages/opentelemetry-sdk-node/src/index.ts new file mode 100644 index 0000000000..b511af8046 --- /dev/null +++ b/packages/opentelemetry-sdk-node/src/index.ts @@ -0,0 +1,25 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * as api from '@opentelemetry/api'; +export * as contextBase from '@opentelemetry/context-base'; +export * as core from '@opentelemetry/core'; +export * as metrics from '@opentelemetry/metrics'; +export * as node from '@opentelemetry/node'; +export * as resources from '@opentelemetry/resources'; +export * as tracing from '@opentelemetry/tracing'; +export * from './sdk'; +export * from './types'; diff --git a/packages/opentelemetry-sdk-node/src/sdk.ts b/packages/opentelemetry-sdk-node/src/sdk.ts new file mode 100644 index 0000000000..3b27e1331e --- /dev/null +++ b/packages/opentelemetry-sdk-node/src/sdk.ts @@ -0,0 +1,161 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { HttpTextPropagator, metrics } from '@opentelemetry/api'; +import { ContextManager } from '@opentelemetry/context-base'; +import { MeterConfig, MeterProvider } from '@opentelemetry/metrics'; +import { NodeTracerConfig, NodeTracerProvider } from '@opentelemetry/node'; +import { detectResources, Resource } from '@opentelemetry/resources'; +import { BatchSpanProcessor, SpanProcessor } from '@opentelemetry/tracing'; +import { NodeSDKConfiguration } from './types'; + +/** This class represents everything needed to register a fully configured OpenTelemetry Node.js SDK */ +export class NodeSDK { + private _tracerProviderConfig?: { + tracerConfig: NodeTracerConfig; + spanProcessor: SpanProcessor; + contextManager?: ContextManager; + httpTextPropagator?: HttpTextPropagator; + }; + private _meterProviderConfig?: MeterConfig; + + private _resource: Resource; + + private _autoDetectResources: boolean; + + /** + * Create a new NodeJS SDK instance + */ + public constructor(configuration: Partial = {}) { + this._resource = configuration.resource ?? new Resource({}); + + this._autoDetectResources = configuration.autoDetectResources ?? true; + + if (configuration.spanProcessor || configuration.traceExporter) { + const tracerProviderConfig: NodeTracerConfig = {}; + + if (typeof configuration.logLevel === 'number') { + tracerProviderConfig.logLevel = configuration.logLevel; + } + if (configuration.logger) { + tracerProviderConfig.logger = configuration.logger; + } + if (configuration.plugins) { + tracerProviderConfig.plugins = configuration.plugins; + } + if (configuration.sampler) { + tracerProviderConfig.sampler = configuration.sampler; + } + if (configuration.traceParams) { + tracerProviderConfig.traceParams = configuration.traceParams; + } + + const spanProcessor = + configuration.spanProcessor ?? + new BatchSpanProcessor(configuration.traceExporter!); + + this.configureTracerProvider( + tracerProviderConfig, + spanProcessor, + configuration.contextManager, + configuration.httpTextPropagator + ); + } + + if (configuration.metricExporter) { + const meterConfig: MeterConfig = {}; + + if (configuration.metricBatcher) { + meterConfig.batcher = configuration.metricBatcher; + } + if (configuration.metricExporter) { + meterConfig.exporter = configuration.metricExporter; + } + if (typeof configuration.metricInterval === 'number') { + meterConfig.interval = configuration.metricInterval; + } + if (typeof configuration.logLevel === 'number') { + meterConfig.logLevel = configuration.logLevel; + } + if (configuration.logger) { + meterConfig.logger = configuration.logger; + } + + this.configureMeterProvider(meterConfig); + } + } + + /** Set configurations required to register a NodeTracerProvider */ + public configureTracerProvider( + tracerConfig: NodeTracerConfig, + spanProcessor: SpanProcessor, + contextManager?: ContextManager, + httpTextPropagator?: HttpTextPropagator + ) { + this._tracerProviderConfig = { + tracerConfig, + spanProcessor, + contextManager, + httpTextPropagator, + }; + } + + /** Set configurations needed to register a MeterProvider */ + public configureMeterProvider(config: MeterConfig) { + this._meterProviderConfig = config; + } + + /** Detect resource attributes */ + public async detectResources() { + this.addResource(await detectResources()); + } + + /** Manually add a resource */ + public addResource(resource: Resource) { + this._resource = this._resource.merge(resource); + } + + /** + * Once the SDK has been configured, call this method to construct SDK components and register them with the OpenTelemetry API. + */ + public async start() { + if (this._autoDetectResources) { + await this.detectResources(); + } + + if (this._tracerProviderConfig) { + const tracerProvider = new NodeTracerProvider({ + ...this._tracerProviderConfig.tracerConfig, + resource: this._resource, + }); + + tracerProvider.addSpanProcessor(this._tracerProviderConfig.spanProcessor); + tracerProvider.register({ + contextManager: this._tracerProviderConfig.contextManager, + propagator: this._tracerProviderConfig.httpTextPropagator, + }); + } + + if (this._meterProviderConfig) { + const meterProvider = new MeterProvider({ + ...this._meterProviderConfig, + resource: this._resource, + }); + + metrics.setGlobalMeterProvider(meterProvider); + } + } +} diff --git a/packages/opentelemetry-sdk-node/src/types.ts b/packages/opentelemetry-sdk-node/src/types.ts new file mode 100644 index 0000000000..a093cbcfa4 --- /dev/null +++ b/packages/opentelemetry-sdk-node/src/types.ts @@ -0,0 +1,36 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { ContextManager } from '@opentelemetry/context-base'; +import type { api, core, metrics, node, resources, tracing } from '.'; + +export interface NodeSDKConfiguration { + autoDetectResources: boolean; + contextManager: ContextManager; + defaultAttributes: api.Attributes; + httpTextPropagator: api.HttpTextPropagator; + logger: api.Logger; + logLevel: core.LogLevel; + metricBatcher: metrics.Batcher; + metricExporter: metrics.MetricExporter; + metricInterval: number; + plugins: node.Plugins; + resource: resources.Resource; + sampler: api.Sampler; + spanProcessor: tracing.SpanProcessor; + traceExporter: tracing.SpanExporter; + traceParams: tracing.TraceParams; +} diff --git a/packages/opentelemetry-sdk-node/src/version.ts b/packages/opentelemetry-sdk-node/src/version.ts new file mode 100644 index 0000000000..2c92beb616 --- /dev/null +++ b/packages/opentelemetry-sdk-node/src/version.ts @@ -0,0 +1,18 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// this is autogenerated file, see scripts/version-update.js +export const VERSION = '0.9.0'; diff --git a/packages/opentelemetry-sdk-node/test/sdk.test.ts b/packages/opentelemetry-sdk-node/test/sdk.test.ts new file mode 100644 index 0000000000..b9d464025d --- /dev/null +++ b/packages/opentelemetry-sdk-node/test/sdk.test.ts @@ -0,0 +1,124 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + context, + metrics, + NoopHttpTextPropagator, + NoopMeterProvider, + NoopTracerProvider, + propagation, + trace, +} from '@opentelemetry/api'; +import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks'; +import { NoopContextManager } from '@opentelemetry/context-base'; +import { CompositePropagator } from '@opentelemetry/core'; +import { ConsoleMetricExporter, MeterProvider } from '@opentelemetry/metrics'; +import { NodeTracerProvider } from '@opentelemetry/node'; +import { + ConsoleSpanExporter, + SimpleSpanProcessor, +} from '@opentelemetry/tracing'; +import * as assert from 'assert'; +import { NodeSDK } from '../src'; + +describe('Node SDK', () => { + beforeEach(() => { + context.disable(); + trace.disable(); + propagation.disable(); + metrics.disable(); + }); + + describe('Basic Registration', () => { + it('should not register any unconfigured SDK components', async () => { + const sdk = new NodeSDK({ + autoDetectResources: false, + }); + + await sdk.start(); + + assert.ok(context['_getContextManager']() instanceof NoopContextManager); + assert.ok( + propagation['_getGlobalPropagator']() instanceof NoopHttpTextPropagator + ); + + assert.ok(trace.getTracerProvider() instanceof NoopTracerProvider); + assert.ok(metrics.getMeterProvider() instanceof NoopMeterProvider); + }); + + it('should register a tracer provider if an exporter is provided', async () => { + const sdk = new NodeSDK({ + traceExporter: new ConsoleSpanExporter(), + autoDetectResources: false, + }); + + await sdk.start(); + + assert.ok(metrics.getMeterProvider() instanceof NoopMeterProvider); + + assert.ok( + context['_getContextManager']() instanceof AsyncHooksContextManager + ); + assert.ok( + propagation['_getGlobalPropagator']() instanceof CompositePropagator + ); + assert.ok(trace.getTracerProvider() instanceof NodeTracerProvider); + }); + + it('should register a tracer provider if a span processor is provided', async () => { + const exporter = new ConsoleSpanExporter(); + const spanProcessor = new SimpleSpanProcessor(exporter); + + const sdk = new NodeSDK({ + spanProcessor, + autoDetectResources: false, + }); + + await sdk.start(); + + assert.ok(metrics.getMeterProvider() instanceof NoopMeterProvider); + + assert.ok( + context['_getContextManager']() instanceof AsyncHooksContextManager + ); + assert.ok( + propagation['_getGlobalPropagator']() instanceof CompositePropagator + ); + assert.ok(trace.getTracerProvider() instanceof NodeTracerProvider); + }); + + it('should register a meter provider if an exporter is provided', async () => { + const exporter = new ConsoleMetricExporter(); + + const sdk = new NodeSDK({ + metricExporter: exporter, + autoDetectResources: false, + }); + + await sdk.start(); + + assert.ok(context['_getContextManager']() instanceof NoopContextManager); + assert.ok( + propagation['_getGlobalPropagator']() instanceof NoopHttpTextPropagator + ); + + assert.ok(trace.getTracerProvider() instanceof NoopTracerProvider); + + assert.ok(metrics.getMeterProvider() instanceof MeterProvider); + }); + }); +}); diff --git a/packages/opentelemetry-sdk-node/tsconfig.json b/packages/opentelemetry-sdk-node/tsconfig.json new file mode 100644 index 0000000000..a2042cd68b --- /dev/null +++ b/packages/opentelemetry-sdk-node/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.base", + "compilerOptions": { + "rootDir": ".", + "outDir": "build" + }, + "include": [ + "src/**/*.ts", + "test/**/*.ts" + ] +} From b956e9c8e39fd28dce2952155945c5694a61a7c4 Mon Sep 17 00:00:00 2001 From: Naseem Date: Mon, 27 Jul 2020 15:19:57 -0400 Subject: [PATCH 27/51] feat: add OTEL_LOG_LEVEL env var (#974) --- .../src/common/ConsoleLogger.ts | 3 +- .../opentelemetry-core/src/common/types.ts | 6 +++ .../src/utils/environment.ts | 40 +++++++++++++++++-- .../test/common/ConsoleLogger.test.ts | 37 +++++++++++++++++ .../test/utils/environment.test.ts | 36 +++++++++++++++-- packages/opentelemetry-metrics/src/types.ts | 4 +- packages/opentelemetry-tracing/src/config.ts | 4 +- 7 files changed, 118 insertions(+), 12 deletions(-) diff --git a/packages/opentelemetry-core/src/common/ConsoleLogger.ts b/packages/opentelemetry-core/src/common/ConsoleLogger.ts index c2cc8b58f4..d0ee72eaff 100644 --- a/packages/opentelemetry-core/src/common/ConsoleLogger.ts +++ b/packages/opentelemetry-core/src/common/ConsoleLogger.ts @@ -16,9 +16,10 @@ import { Logger } from '@opentelemetry/api'; import { LogLevel } from './types'; +import { getEnv } from '../platform'; export class ConsoleLogger implements Logger { - constructor(level: LogLevel = LogLevel.INFO) { + constructor(level: LogLevel = getEnv().OTEL_LOG_LEVEL) { if (level >= LogLevel.DEBUG) { this.debug = (...args) => { console.debug(...args); diff --git a/packages/opentelemetry-core/src/common/types.ts b/packages/opentelemetry-core/src/common/types.ts index 4de46a327b..399ed9d5c1 100644 --- a/packages/opentelemetry-core/src/common/types.ts +++ b/packages/opentelemetry-core/src/common/types.ts @@ -20,6 +20,12 @@ export enum LogLevel { DEBUG, } +/** + * This is equivalent to: + * type LogLevelString = 'ERROR' | 'WARN' | 'INFO' | 'DEBUG'; + */ +export type LogLevelString = keyof typeof LogLevel; + /** * This interface defines a fallback to read a timeOrigin when it is not available on performance.timeOrigin, * this happens for example on Safari Mac diff --git a/packages/opentelemetry-core/src/utils/environment.ts b/packages/opentelemetry-core/src/utils/environment.ts index 9ada4030cd..73cde2085f 100644 --- a/packages/opentelemetry-core/src/utils/environment.ts +++ b/packages/opentelemetry-core/src/utils/environment.ts @@ -28,7 +28,6 @@ export interface ENVIRONMENT { } const ENVIRONMENT_NUMBERS: Partial[] = [ - 'OTEL_LOG_LEVEL', 'OTEL_SAMPLING_PROBABILITY', ]; @@ -37,7 +36,7 @@ const ENVIRONMENT_NUMBERS: Partial[] = [ */ export const DEFAULT_ENVIRONMENT: Required = { OTEL_NO_PATCH_MODULES: '', - OTEL_LOG_LEVEL: LogLevel.ERROR, + OTEL_LOG_LEVEL: LogLevel.INFO, OTEL_SAMPLING_PROBABILITY: 1, }; @@ -64,6 +63,41 @@ function parseNumber( } } +/** + * Environmentally sets log level if valid log level string is provided + * @param key + * @param environment + * @param values + */ +function setLogLevelFromEnv( + key: keyof ENVIRONMENT, + environment: ENVIRONMENT_MAP | ENVIRONMENT, + values: ENVIRONMENT_MAP +) { + const value = values[key]; + switch (typeof value === 'string' ? value.toUpperCase() : value) { + case 'DEBUG': + environment[key] = LogLevel.DEBUG; + break; + + case 'INFO': + environment[key] = LogLevel.INFO; + break; + + case 'WARN': + environment[key] = LogLevel.WARN; + break; + + case 'ERROR': + environment[key] = LogLevel.ERROR; + break; + + default: + // do nothing + break; + } +} + /** * Parses environment values * @param values @@ -79,7 +113,7 @@ export function parseEnvironment(values: ENVIRONMENT_MAP): ENVIRONMENT { break; case 'OTEL_LOG_LEVEL': - parseNumber(key, environment, values, LogLevel.ERROR, LogLevel.DEBUG); + setLogLevelFromEnv(key, environment, values); break; default: diff --git a/packages/opentelemetry-core/test/common/ConsoleLogger.test.ts b/packages/opentelemetry-core/test/common/ConsoleLogger.test.ts index b00900e39f..b63cc58b3f 100644 --- a/packages/opentelemetry-core/test/common/ConsoleLogger.test.ts +++ b/packages/opentelemetry-core/test/common/ConsoleLogger.test.ts @@ -17,6 +17,10 @@ import * as assert from 'assert'; import { ConsoleLogger } from '../../src/common/ConsoleLogger'; import { LogLevel } from '../../src/common/types'; +import { + mockEnvironment, + removeMockEnvironment, +} from '../utils/environment.test'; describe('ConsoleLogger', () => { const origDebug = console.debug; @@ -54,6 +58,7 @@ describe('ConsoleLogger', () => { console.info = origInfo; console.warn = origWarn; console.error = origError; + removeMockEnvironment(); }); describe('constructor', () => { @@ -65,6 +70,8 @@ describe('ConsoleLogger', () => { assert.deepStrictEqual(warnCalledArgs, ['warn called %s', 'param1']); consoleLogger.info('info called %s', 'param1'); assert.deepStrictEqual(infoCalledArgs, ['info called %s', 'param1']); + consoleLogger.debug('debug called %s', 'param1'); + assert.strictEqual(debugCalledArgs, undefined); }); it('should log with debug', () => { @@ -114,5 +121,35 @@ describe('ConsoleLogger', () => { consoleLogger.debug('debug called %s', 'param1'); assert.strictEqual(debugCalledArgs, null); }); + + it('should log with environmentally set level ', () => { + mockEnvironment({ + OTEL_LOG_LEVEL: 'WARN', + }); + const consoleLogger = new ConsoleLogger(); + consoleLogger.error('error called'); + assert.deepStrictEqual(errorCalledArgs, ['error called']); + consoleLogger.warn('warn called %s', 'param1'); + assert.deepStrictEqual(warnCalledArgs, ['warn called %s', 'param1']); + consoleLogger.info('info called %s', 'param1'); + assert.deepStrictEqual(infoCalledArgs, null); + consoleLogger.debug('debug called %s', 'param1'); + assert.deepStrictEqual(debugCalledArgs, null); + }); + + it('should log with default log level if environmentally set level is invalid', () => { + mockEnvironment({ + OTEL_LOG_LEVEL: 'INVALID_VALUE', + }); + const consoleLogger = new ConsoleLogger(); + consoleLogger.error('error called'); + assert.deepStrictEqual(errorCalledArgs, ['error called']); + consoleLogger.warn('warn called %s', 'param1'); + assert.deepStrictEqual(warnCalledArgs, ['warn called %s', 'param1']); + consoleLogger.info('info called %s', 'param1'); + assert.deepStrictEqual(infoCalledArgs, ['info called %s', 'param1']); + consoleLogger.debug('debug called %s', 'param1'); + assert.deepStrictEqual(debugCalledArgs, null); + }); }); }); diff --git a/packages/opentelemetry-core/test/utils/environment.test.ts b/packages/opentelemetry-core/test/utils/environment.test.ts index 267a6bf285..578fb97ca2 100644 --- a/packages/opentelemetry-core/test/utils/environment.test.ts +++ b/packages/opentelemetry-core/test/utils/environment.test.ts @@ -22,10 +22,14 @@ import { } from '../../src/utils/environment'; import * as assert from 'assert'; import * as sinon from 'sinon'; +import { LogLevel } from '../../src'; let lastMock: ENVIRONMENT_MAP = {}; -function mockEnvironment(values: ENVIRONMENT_MAP) { +/** + * Mocks environment used for tests. + */ +export function mockEnvironment(values: ENVIRONMENT_MAP) { lastMock = values; if (typeof process !== 'undefined') { Object.keys(values).forEach(key => { @@ -38,7 +42,10 @@ function mockEnvironment(values: ENVIRONMENT_MAP) { } } -function removeMockEnvironment() { +/** + * Removes mocked environment used for tests. + */ +export function removeMockEnvironment() { if (typeof process !== 'undefined') { Object.keys(lastMock).forEach(key => { delete process.env[key]; @@ -68,15 +75,23 @@ describe('environment', () => { mockEnvironment({ FOO: '1', OTEL_NO_PATCH_MODULES: 'a,b,c', - OTEL_LOG_LEVEL: '1', + OTEL_LOG_LEVEL: 'ERROR', OTEL_SAMPLING_PROBABILITY: '0.5', }); const env = getEnv(); assert.strictEqual(env.OTEL_NO_PATCH_MODULES, 'a,b,c'); - assert.strictEqual(env.OTEL_LOG_LEVEL, 1); + assert.strictEqual(env.OTEL_LOG_LEVEL, LogLevel.ERROR); assert.strictEqual(env.OTEL_SAMPLING_PROBABILITY, 0.5); }); + it('should parse OTEL_LOG_LEVEL despite casing', () => { + mockEnvironment({ + OTEL_LOG_LEVEL: 'waRn', + }); + const env = getEnv(); + assert.strictEqual(env.OTEL_LOG_LEVEL, LogLevel.WARN); + }); + it('should parse environment variables and use defaults', () => { const env = getEnv(); Object.keys(DEFAULT_ENVIRONMENT).forEach(envKey => { @@ -89,4 +104,17 @@ describe('environment', () => { }); }); }); + + describe('mockEnvironment', () => { + it('should remove a mock environment', () => { + mockEnvironment({ + OTEL_LOG_LEVEL: 'DEBUG', + OTEL_SAMPLING_PROBABILITY: 0.5, + }); + removeMockEnvironment(); + const env = getEnv(); + assert.strictEqual(env.OTEL_LOG_LEVEL, LogLevel.INFO); + assert.strictEqual(env.OTEL_SAMPLING_PROBABILITY, 1); + }); + }); }); diff --git a/packages/opentelemetry-metrics/src/types.ts b/packages/opentelemetry-metrics/src/types.ts index 6a015d2f4a..e5be74d2d6 100644 --- a/packages/opentelemetry-metrics/src/types.ts +++ b/packages/opentelemetry-metrics/src/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { LogLevel } from '@opentelemetry/core'; +import { LogLevel, getEnv } from '@opentelemetry/core'; import * as api from '@opentelemetry/api'; import { MetricExporter } from './export/types'; import { Resource } from '@opentelemetry/resources'; @@ -46,7 +46,7 @@ export interface MeterConfig { /** Default Meter configuration. */ export const DEFAULT_CONFIG = { - logLevel: LogLevel.INFO, + logLevel: getEnv().OTEL_LOG_LEVEL, gracefulShutdown: true, }; diff --git a/packages/opentelemetry-tracing/src/config.ts b/packages/opentelemetry-tracing/src/config.ts index a7e3af1dcd..4bbb6e11cf 100644 --- a/packages/opentelemetry-tracing/src/config.ts +++ b/packages/opentelemetry-tracing/src/config.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { AlwaysOnSampler, LogLevel } from '@opentelemetry/core'; +import { AlwaysOnSampler, getEnv } from '@opentelemetry/core'; /** Default limit for Message events per span */ export const DEFAULT_MAX_EVENTS_PER_SPAN = 128; @@ -30,7 +30,7 @@ export const DEFAULT_MAX_LINKS_PER_SPAN = 32; * used to extend the default value. */ export const DEFAULT_CONFIG = { - logLevel: LogLevel.INFO, + logLevel: getEnv().OTEL_LOG_LEVEL, sampler: new AlwaysOnSampler(), traceParams: { numberOfAttributesPerSpan: DEFAULT_MAX_ATTRIBUTES_PER_SPAN, From ab0de3230f07724f6eec5d7bb080b815aa151237 Mon Sep 17 00:00:00 2001 From: Bartlomiej Obecny Date: Mon, 27 Jul 2020 21:39:49 +0200 Subject: [PATCH 28/51] Proto update to latest to support arrays and maps (#1339) --- .../docker/collector-config.yaml | 14 +- .../docker/docker-compose.yaml | 11 +- examples/collector-exporter-node/start.js | 10 + .../examples/user-interaction/index.js | 2 +- .../README.md | 29 +- .../browser/CollectorTraceExporter.ts | 12 +- .../platform/node/CollectorMetricExporter.ts | 2 +- .../platform/node/CollectorTraceExporter.ts | 4 +- .../src/platform/node/protos | 2 +- .../src/platform/node/util.ts | 2 +- .../src/platform/node/utilWithJson.ts | 4 +- .../src/platform/node/utilWithJsonProto.ts | 4 +- .../src/transform.ts | 66 +++-- .../src/types.ts | 29 +- .../browser/CollectorTraceExporter.test.ts | 2 +- .../test/common/transform.test.ts | 76 ++++- .../test/helper.ts | 272 +++++++++++------- .../node/CollectorExporterWithProto.test.ts | 2 +- .../test/node/CollectorMetricExporter.test.ts | 2 +- .../CollectorMetricExporterWithJson.test.ts | 4 +- .../test/node/CollectorTraceExporter.test.ts | 4 +- .../CollectorTraceExporterWithJson.test.ts | 2 +- .../CollectorTraceExporterWithProto.test.ts | 188 ++++++++++++ 23 files changed, 576 insertions(+), 167 deletions(-) create mode 100644 packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporterWithProto.test.ts diff --git a/examples/collector-exporter-node/docker/collector-config.yaml b/examples/collector-exporter-node/docker/collector-config.yaml index 7e0cd7e759..f104677f7e 100644 --- a/examples/collector-exporter-node/docker/collector-config.yaml +++ b/examples/collector-exporter-node/docker/collector-config.yaml @@ -1,15 +1,15 @@ receivers: otlp: - {} -# keep it when upgrading to version 0.5+ -# protocols: -# grpc: -# http: -# endpoint: localhost:55680 + protocols: + grpc: + http: + cors_allowed_origins: + - http://* + - https://* exporters: zipkin: - url: "http://zipkin-all-in-one:9411/api/v2/spans" + endpoint: "http://zipkin-all-in-one:9411/api/v2/spans" processors: batch: diff --git a/examples/collector-exporter-node/docker/docker-compose.yaml b/examples/collector-exporter-node/docker/docker-compose.yaml index df43b97e33..3882379ad3 100644 --- a/examples/collector-exporter-node/docker/docker-compose.yaml +++ b/examples/collector-exporter-node/docker/docker-compose.yaml @@ -2,17 +2,26 @@ version: "3" services: # Collector collector: - image: otel/opentelemetry-collector:0.4.0 + image: otel/opentelemetry-collector:latest +# image: otel/opentelemetry-collector:0.6.0 command: ["--config=/conf/collector-config.yaml", "--log-level=DEBUG"] + networks: + - otelcol volumes: - ./collector-config.yaml:/conf/collector-config.yaml ports: - "55680:55680" + - "55681:55681" depends_on: - zipkin-all-in-one + # Zipkin zipkin-all-in-one: image: openzipkin/zipkin:latest + networks: + - otelcol ports: - "9411:9411" +networks: + otelcol: diff --git a/examples/collector-exporter-node/start.js b/examples/collector-exporter-node/start.js index 138b6b41ec..4e654c7e1b 100644 --- a/examples/collector-exporter-node/start.js +++ b/examples/collector-exporter-node/start.js @@ -1,11 +1,13 @@ 'use strict'; const opentelemetry = require('@opentelemetry/api'); +// const { ConsoleLogger, LogLevel} = require('@opentelemetry/core'); const { BasicTracerProvider, ConsoleSpanExporter, SimpleSpanProcessor } = require('@opentelemetry/tracing'); const { CollectorTraceExporter, CollectorProtocolNode } = require('@opentelemetry/exporter-collector'); const exporter = new CollectorTraceExporter({ serviceName: 'basic-service', + // logger: new ConsoleLogger(LogLevel.DEBUG), // headers: { // foo: 'bar' // }, @@ -48,6 +50,14 @@ function doWork(parent) { // Set attributes to the span. span.setAttribute('key', 'value'); + span.setAttribute('mapAndArrayValue', [ + 0, 1, 2.25, 'otel', { + foo: 'bar', + baz: 'json', + array: [1, 2, 'boom'], + }, + ]); + // Annotate our span to capture metadata about our operation span.addEvent('invoking doWork'); diff --git a/examples/tracer-web/examples/user-interaction/index.js b/examples/tracer-web/examples/user-interaction/index.js index b15f85a99e..a193a7d17b 100644 --- a/examples/tracer-web/examples/user-interaction/index.js +++ b/examples/tracer-web/examples/user-interaction/index.js @@ -10,7 +10,7 @@ const providerWithZone = new WebTracerProvider({ plugins: [ new UserInteractionPlugin(), new XMLHttpRequestPlugin({ - ignoreUrls: [/localhost:8090\/sockjs-node/], + ignoreUrls: [/localhost/], propagateTraceHeaderCorsUrls: [ 'http://localhost:8090' ] diff --git a/packages/opentelemetry-exporter-collector/README.md b/packages/opentelemetry-exporter-collector/README.md index 89431bdbaf..8233384dd1 100644 --- a/packages/opentelemetry-exporter-collector/README.md +++ b/packages/opentelemetry-exporter-collector/README.md @@ -24,7 +24,7 @@ import { WebTracerProvider } from '@opentelemetry/web'; import { CollectorTraceExporter } from '@opentelemetry/exporter-collector'; const collectorOptions = { - url: '', // url is optional and can be omitted - default is http://localhost:55680/v1/trace + url: '', // url is optional and can be omitted - default is http://localhost:55681/v1/trace headers: {}, //an optional object containing custom headers to be sent with each request }; @@ -118,10 +118,33 @@ const { CollectorExporter, CollectorTransportNode } = require('@opentelemetry/e const collectorOptions = { protocolNode: CollectorTransportNode.HTTP_JSON, serviceName: 'basic-service', - url: '', // url is optional and can be omitted - default is http://localhost:55680/v1/trace + url: '', // url is optional and can be omitted - default is http://localhost:55681/v1/trace headers: { foo: 'bar' - }, //an optional object containing custom headers to be sent with each request will only work with json over http + }, //an optional object containing custom headers to be sent with each request will only work with http +}; + +const provider = new BasicTracerProvider(); +const exporter = new CollectorExporter(collectorOptions); +provider.addSpanProcessor(new SimpleSpanProcessor(exporter)); + +provider.register(); + +``` + +## Usage in Node - PROTO over http + +```js +const { BasicTracerProvider, SimpleSpanProcessor } = require('@opentelemetry/tracing'); +const { CollectorExporter, CollectorTransportNode } = require('@opentelemetry/exporter-collector'); + +const collectorOptions = { + protocolNode: CollectorTransportNode.HTTP_PROTO, + serviceName: 'basic-service', + url: '', // url is optional and can be omitted - default is http://localhost:55681/v1/trace + headers: { + foo: 'bar' + }, //an optional object containing custom headers to be sent with each request will only work with http }; const provider = new BasicTracerProvider(); diff --git a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts index 6036fe3773..d593e1d44d 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts @@ -23,7 +23,7 @@ import { sendWithBeacon, sendWithXhr } from './util'; import { parseHeaders } from '../../util'; const DEFAULT_SERVICE_NAME = 'collector-trace-exporter'; -const DEFAULT_COLLECTOR_URL = 'http://localhost:55680/v1/trace'; +const DEFAULT_COLLECTOR_URL = 'http://localhost:55681/v1/trace'; /** * Collector Trace Exporter for Web @@ -35,9 +35,6 @@ export class CollectorTraceExporter collectorTypes.opentelemetryProto.collector.trace.v1.ExportTraceServiceRequest > implements SpanExporter { - DEFAULT_HEADERS: Record = { - [collectorTypes.OT_REQUEST_HEADER]: '1', - }; private _headers: Record; private _useXHR: boolean = false; @@ -46,10 +43,13 @@ export class CollectorTraceExporter */ constructor(config: CollectorExporterConfigBrowser = {}) { super(config); - this._headers = - parseHeaders(config.headers, this.logger) || this.DEFAULT_HEADERS; this._useXHR = !!config.headers || typeof navigator.sendBeacon !== 'function'; + if (this._useXHR) { + this._headers = parseHeaders(config.headers, this.logger); + } else { + this._headers = {}; + } } onInit(): void { diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorMetricExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorMetricExporter.ts index fbf00089f8..3f0aa3c8de 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorMetricExporter.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorMetricExporter.ts @@ -24,7 +24,7 @@ import { toCollectorExportMetricServiceRequest } from '../../transformMetrics'; const DEFAULT_SERVICE_NAME = 'collector-metric-exporter'; const DEFAULT_COLLECTOR_URL_GRPC = 'localhost:55680'; -const DEFAULT_COLLECTOR_URL_JSON = 'http://localhost:55680/v1/metrics'; +const DEFAULT_COLLECTOR_URL_JSON = 'http://localhost:55681/v1/metrics'; /** * Collector Metric Exporter for Node diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts index 2cabd1768c..45f7194f55 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts @@ -24,8 +24,8 @@ import { toCollectorExportTraceServiceRequest } from '../../transform'; const DEFAULT_SERVICE_NAME = 'collector-trace-exporter'; const DEFAULT_COLLECTOR_URL_GRPC = 'localhost:55680'; -const DEFAULT_COLLECTOR_URL_JSON = 'http://localhost:55680/v1/trace'; -const DEFAULT_COLLECTOR_URL_JSON_PROTO = 'http://localhost:55680/v1/trace'; +const DEFAULT_COLLECTOR_URL_JSON = 'http://localhost:55681/v1/trace'; +const DEFAULT_COLLECTOR_URL_JSON_PROTO = 'http://localhost:55681/v1/trace'; /** * Collector Trace Exporter for Node diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/protos b/packages/opentelemetry-exporter-collector/src/platform/node/protos index b546885691..9ffeee0ec5 160000 --- a/packages/opentelemetry-exporter-collector/src/platform/node/protos +++ b/packages/opentelemetry-exporter-collector/src/platform/node/protos @@ -1 +1 @@ -Subproject commit b54688569186e0b862bf7462a983ccf2c50c0547 +Subproject commit 9ffeee0ec532efe02285af84880deb2a53a3eab1 diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/util.ts b/packages/opentelemetry-exporter-collector/src/platform/node/util.ts index a91bc48522..c7a7e24a57 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/util.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/util.ts @@ -31,7 +31,7 @@ export function removeProtocol(url: string): string { * @param onSuccess * @param onError */ -export function sendDataUsingHttp( +export function sendWithHttp( collector: CollectorExporterNodeBase, data: string | Buffer, contentType: string, diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/utilWithJson.ts b/packages/opentelemetry-exporter-collector/src/platform/node/utilWithJson.ts index 38da393cfe..72e2c3198b 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/utilWithJson.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/utilWithJson.ts @@ -17,7 +17,7 @@ import * as collectorTypes from '../../types'; import { CollectorExporterNodeBase } from './CollectorExporterNodeBase'; import { CollectorExporterConfigNode } from './types'; -import { sendDataUsingHttp } from './util'; +import { sendWithHttp } from './util'; export function initWithJson( _collector: CollectorExporterNodeBase, @@ -34,7 +34,7 @@ export function sendWithJson( ): void { const serviceRequest = collector.convert(objects); - sendDataUsingHttp( + sendWithHttp( collector, JSON.stringify(serviceRequest), 'application/json', diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/utilWithJsonProto.ts b/packages/opentelemetry-exporter-collector/src/platform/node/utilWithJsonProto.ts index ba0035bb65..15025ed56e 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/utilWithJsonProto.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/utilWithJsonProto.ts @@ -20,7 +20,7 @@ import * as protobufjs from 'protobufjs'; import * as collectorTypes from '../../types'; import { CollectorExporterNodeBase } from './CollectorExporterNodeBase'; import { CollectorExporterConfigNode } from './types'; -import { sendDataUsingHttp } from './util'; +import { sendWithHttp } from './util'; let ExportTraceServiceRequestProto: Type | undefined; @@ -60,7 +60,7 @@ export function sendWithJsonProto( if (message) { const body = ExportTraceServiceRequestProto?.encode(message).finish(); if (body) { - sendDataUsingHttp( + sendWithHttp( collector, Buffer.from(body), 'application/x-protobuf', diff --git a/packages/opentelemetry-exporter-collector/src/transform.ts b/packages/opentelemetry-exporter-collector/src/transform.ts index c2916f0bf5..4c11bf8c4a 100644 --- a/packages/opentelemetry-exporter-collector/src/transform.ts +++ b/packages/opentelemetry-exporter-collector/src/transform.ts @@ -30,47 +30,79 @@ import { opentelemetryProto, CollectorExporterConfigBase, } from './types'; -import ValueType = opentelemetryProto.common.v1.ValueType; /** - * Converts attributes + * Converts attributes to KeyValue array * @param attributes */ export function toCollectorAttributes( attributes: Attributes -): opentelemetryProto.common.v1.AttributeKeyValue[] { +): opentelemetryProto.common.v1.KeyValue[] { return Object.keys(attributes).map(key => { return toCollectorAttributeKeyValue(key, attributes[key]); }); } /** - * Converts key and value to AttributeKeyValue + * Converts array of unknown value to ArrayValue + * @param values + */ +export function toCollectorArrayValue( + values: unknown[] +): opentelemetryProto.common.v1.ArrayValue { + return { + values: values.map(value => toCollectorAnyValue(value)), + }; +} + +/** + * Converts attributes to KeyValueList + * @param attributes + */ +export function toCollectorKeyValueList( + attributes: Attributes +): opentelemetryProto.common.v1.KeyValueList { + return { + values: toCollectorAttributes(attributes), + }; +} + +/** + * Converts key and unknown value to KeyValue * @param value event value */ export function toCollectorAttributeKeyValue( key: string, value: unknown -): opentelemetryProto.common.v1.AttributeKeyValue { - let aType: opentelemetryProto.common.v1.ValueType = ValueType.STRING; - const AttributeKeyValue: opentelemetryProto.common.v1.AttributeKeyValue = { +): opentelemetryProto.common.v1.KeyValue { + const anyValue = toCollectorAnyValue(value); + return { key, - type: 0, + value: anyValue, }; +} + +/** + * Converts unknown value to AnyValue + * @param value + */ +export function toCollectorAnyValue( + value: unknown +): opentelemetryProto.common.v1.AnyValue { + const anyValue: opentelemetryProto.common.v1.AnyValue = {}; if (typeof value === 'string') { - AttributeKeyValue.stringValue = value; + anyValue.stringValue = value; } else if (typeof value === 'boolean') { - aType = ValueType.BOOL; - AttributeKeyValue.boolValue = value; + anyValue.boolValue = value; } else if (typeof value === 'number') { // all numbers will be treated as double - aType = ValueType.DOUBLE; - AttributeKeyValue.doubleValue = value; + anyValue.doubleValue = value; + } else if (Array.isArray(value)) { + anyValue.arrayValue = toCollectorArrayValue(value); + } else if (value) { + anyValue.kvlistValue = toCollectorKeyValueList(value as Attributes); } - - AttributeKeyValue.type = aType; - - return AttributeKeyValue; + return anyValue; } /** diff --git a/packages/opentelemetry-exporter-collector/src/types.ts b/packages/opentelemetry-exporter-collector/src/types.ts index 3f11157e7d..5d95654fb0 100644 --- a/packages/opentelemetry-exporter-collector/src/types.ts +++ b/packages/opentelemetry-exporter-collector/src/types.ts @@ -41,7 +41,7 @@ export namespace opentelemetryProto { export namespace resource.v1 { export interface Resource { - attributes: opentelemetryProto.common.v1.AttributeKeyValue[]; + attributes: opentelemetryProto.common.v1.KeyValue[]; droppedAttributesCount: number; } } @@ -152,7 +152,7 @@ export namespace opentelemetryProto { export interface Event { timeUnixNano: number; name: string; - attributes?: opentelemetryProto.common.v1.AttributeKeyValue[]; + attributes?: opentelemetryProto.common.v1.KeyValue[]; droppedAttributesCount: number; } @@ -160,7 +160,7 @@ export namespace opentelemetryProto { traceId: string; spanId: string; traceState?: opentelemetryProto.trace.v1.Span.TraceState; - attributes?: opentelemetryProto.common.v1.AttributeKeyValue[]; + attributes?: opentelemetryProto.common.v1.KeyValue[]; droppedAttributesCount: number; } @@ -207,7 +207,7 @@ export namespace opentelemetryProto { kind?: opentelemetryProto.trace.v1.Span.SpanKind; startTimeUnixNano?: number; endTimeUnixNano?: number; - attributes?: opentelemetryProto.common.v1.AttributeKeyValue[]; + attributes?: opentelemetryProto.common.v1.KeyValue[]; droppedAttributesCount: number; events?: opentelemetryProto.trace.v1.Span.Event[]; droppedEventsCount: number; @@ -225,14 +225,27 @@ export namespace opentelemetryProto { } } export namespace common.v1 { - export interface AttributeKeyValue { + export interface KeyValue { key: string; - type: opentelemetryProto.common.v1.ValueType; + value: AnyValue; + } + + export type ArrayValue = { + values: AnyValue[]; + }; + + export interface KeyValueList { + values: KeyValue[]; + } + + export type AnyValue = { stringValue?: string; + boolValue?: boolean; intValue?: number; doubleValue?: number; - boolValue?: boolean; - } + arrayValue?: ArrayValue; + kvlistValue?: KeyValueList; + }; export interface InstrumentationLibrary { name: string; diff --git a/packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts b/packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts index 4893ddcb98..bfb916b333 100644 --- a/packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts +++ b/packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts @@ -333,7 +333,7 @@ describe('CollectorTraceExporter - browser (getDefaultUrl)', () => { setTimeout(() => { assert.strictEqual( collectorExporter['url'], - 'http://localhost:55680/v1/trace' + 'http://localhost:55681/v1/trace' ); done(); }); diff --git a/packages/opentelemetry-exporter-collector/test/common/transform.test.ts b/packages/opentelemetry-exporter-collector/test/common/transform.test.ts index 2251d80a3f..cd3f48058f 100644 --- a/packages/opentelemetry-exporter-collector/test/common/transform.test.ts +++ b/packages/opentelemetry-exporter-collector/test/common/transform.test.ts @@ -33,7 +33,7 @@ describe('transform', () => { foo: 'bar', }; assert.deepStrictEqual(transform.toCollectorAttributes(attributes), [ - { key: 'foo', type: 0, stringValue: 'bar' }, + { key: 'foo', value: { stringValue: 'bar' } }, ]); }); @@ -42,7 +42,7 @@ describe('transform', () => { foo: 13, }; assert.deepStrictEqual(transform.toCollectorAttributes(attributes), [ - { key: 'foo', type: 2, doubleValue: 13 }, + { key: 'foo', value: { doubleValue: 13 } }, ]); }); @@ -51,7 +51,7 @@ describe('transform', () => { foo: true, }; assert.deepStrictEqual(transform.toCollectorAttributes(attributes), [ - { key: 'foo', type: 3, boolValue: true }, + { key: 'foo', value: { boolValue: true } }, ]); }); @@ -60,7 +60,63 @@ describe('transform', () => { foo: 1.34, }; assert.deepStrictEqual(transform.toCollectorAttributes(attributes), [ - { key: 'foo', type: 2, doubleValue: 1.34 }, + { key: 'foo', value: { doubleValue: 1.34 } }, + ]); + }); + it('should convert attribute mixed with maps and array', () => { + const attributes: Attributes = { + foo: [ + 0, + 1, + 2.25, + 'otel', + { + foo: 'bar', + baz: 'json', + array: [1, 2, 'boom'], + }, + ], + }; + assert.deepStrictEqual(transform.toCollectorAttributes(attributes), [ + { + key: 'foo', + value: { + arrayValue: { + values: [ + { doubleValue: 0 }, + { doubleValue: 1 }, + { doubleValue: 2.25 }, + { stringValue: 'otel' }, + { + kvlistValue: { + values: [ + { + key: 'foo', + value: { stringValue: 'bar' }, + }, + { + key: 'baz', + value: { stringValue: 'json' }, + }, + { + key: 'array', + value: { + arrayValue: { + values: [ + { doubleValue: 1 }, + { doubleValue: 2 }, + { stringValue: 'boom' }, + ], + }, + }, + }, + ], + }, + }, + ], + }, + }, + }, ]); }); }); @@ -79,13 +135,13 @@ describe('transform', () => { { timeUnixNano: 123000000123, name: 'foo', - attributes: [{ key: 'a', type: 0, stringValue: 'b' }], + attributes: [{ key: 'a', value: { stringValue: 'b' } }], droppedAttributesCount: 0, }, { timeUnixNano: 321000000321, name: 'foo2', - attributes: [{ key: 'c', type: 0, stringValue: 'd' }], + attributes: [{ key: 'c', value: { stringValue: 'd' } }], droppedAttributesCount: 0, }, ]); @@ -111,15 +167,13 @@ describe('transform', () => { attributes: [ { key: 'service', - type: 0, - stringValue: 'ui', + value: { stringValue: 'ui' }, }, { key: 'version', - type: 2, - doubleValue: 1, + value: { doubleValue: 1 }, }, - { key: 'success', type: 3, boolValue: true }, + { key: 'success', value: { boolValue: true } }, ], droppedAttributesCount: 0, }); diff --git a/packages/opentelemetry-exporter-collector/test/helper.ts b/packages/opentelemetry-exporter-collector/test/helper.ts index b992867c1c..58d70d28eb 100644 --- a/packages/opentelemetry-exporter-collector/test/helper.ts +++ b/packages/opentelemetry-exporter-collector/test/helper.ts @@ -398,49 +398,87 @@ export function ensureExportedEventsAreCorrect( } export function ensureExportedAttributesAreCorrect( - attributes: opentelemetryProto.common.v1.AttributeKeyValue[] + attributes: opentelemetryProto.common.v1.KeyValue[], + usingGRPC = false ) { - assert.deepStrictEqual( - attributes, - [ - { - key: 'component', - type: 'STRING', - stringValue: 'document-load', - intValue: '0', - doubleValue: 0, - boolValue: false, - }, - ], - 'exported attributes are incorrect' - ); + if (usingGRPC) { + assert.deepStrictEqual( + attributes, + [ + { + key: 'component', + value: { + stringValue: 'document-load', + value: 'stringValue', + }, + }, + ], + 'exported attributes are incorrect' + ); + } else { + assert.deepStrictEqual( + attributes, + [ + { + key: 'component', + value: { + stringValue: 'document-load', + }, + }, + ], + 'exported attributes are incorrect' + ); + } } export function ensureExportedLinksAreCorrect( - attributes: opentelemetryProto.trace.v1.Span.Link[] + attributes: opentelemetryProto.trace.v1.Span.Link[], + usingGRPC = false ) { - assert.deepStrictEqual( - attributes, - [ - { - attributes: [ - { - key: 'component', - type: 'STRING', - stringValue: 'document-load', - intValue: '0', - doubleValue: 0, - boolValue: false, - }, - ], - traceId: Buffer.from(traceIdArr), - spanId: Buffer.from(parentIdArr), - traceState: '', - droppedAttributesCount: 0, - }, - ], - 'exported links are incorrect' - ); + if (usingGRPC) { + assert.deepStrictEqual( + attributes, + [ + { + attributes: [ + { + key: 'component', + value: { + stringValue: 'document-load', + value: 'stringValue', + }, + }, + ], + traceId: Buffer.from(traceIdArr), + spanId: Buffer.from(parentIdArr), + traceState: '', + droppedAttributesCount: 0, + }, + ], + 'exported links are incorrect' + ); + } else { + assert.deepStrictEqual( + attributes, + [ + { + attributes: [ + { + key: 'component', + value: { + stringValue: 'document-load', + }, + }, + ], + traceId: Buffer.from(traceIdArr), + spanId: Buffer.from(parentIdArr), + traceState: '', + droppedAttributesCount: 0, + }, + ], + 'exported links are incorrect' + ); + } } export function ensureEventsAreCorrect( @@ -554,15 +592,16 @@ export function ensureProtoEventsAreCorrect( } export function ensureAttributesAreCorrect( - attributes: opentelemetryProto.common.v1.AttributeKeyValue[] + attributes: opentelemetryProto.common.v1.KeyValue[] ) { assert.deepStrictEqual( attributes, [ { key: 'component', - type: 0, - stringValue: 'document-load', + value: { + stringValue: 'document-load', + }, }, ], 'attributes are incorrect' @@ -570,15 +609,16 @@ export function ensureAttributesAreCorrect( } export function ensureProtoAttributesAreCorrect( - attributes: opentelemetryProto.common.v1.AttributeKeyValue[] + attributes: opentelemetryProto.common.v1.KeyValue[] ) { assert.deepStrictEqual( attributes, [ { key: 'component', - type: 'STRING', - stringValue: 'document-load', + value: { + stringValue: 'document-load', + }, }, ], 'attributes are incorrect' @@ -597,8 +637,9 @@ export function ensureLinksAreCorrect( attributes: [ { key: 'component', - type: 0, - stringValue: 'document-load', + value: { + stringValue: 'document-load', + }, }, ], droppedAttributesCount: 0, @@ -620,8 +661,9 @@ export function ensureProtoLinksAreCorrect( attributes: [ { key: 'component', - type: 'STRING', - stringValue: 'document-load', + value: { + stringValue: 'document-load', + }, }, ], droppedAttributesCount: 0, @@ -718,16 +760,17 @@ export function ensureProtoSpanIsCorrect( } export function ensureExportedSpanIsCorrect( - span: collectorTypes.opentelemetryProto.trace.v1.Span + span: collectorTypes.opentelemetryProto.trace.v1.Span, + usingGRPC = false ) { if (span.attributes) { - ensureExportedAttributesAreCorrect(span.attributes); + ensureExportedAttributesAreCorrect(span.attributes, usingGRPC); } if (span.events) { ensureExportedEventsAreCorrect(span.events); } if (span.links) { - ensureExportedLinksAreCorrect(span.links); + ensureExportedLinksAreCorrect(span.links, usingGRPC); } assert.deepStrictEqual( span.traceId, @@ -778,19 +821,27 @@ export function ensureWebResourceIsCorrect( attributes: [ { key: 'service.name', - type: 0, - stringValue: 'bar', + value: { + stringValue: 'bar', + }, }, { key: 'service', - type: 0, - stringValue: 'ui', + value: { + stringValue: 'ui', + }, + }, + { + key: 'version', + value: { + doubleValue: 1, + }, }, - { key: 'version', type: 2, doubleValue: 1 }, { key: 'cost', - type: 2, - doubleValue: 112.12, + value: { + doubleValue: 112.12, + }, }, ], droppedAttributesCount: 0, @@ -991,45 +1042,74 @@ export function ensureExportedValueRecorderIsCorrect( } export function ensureResourceIsCorrect( - resource: collectorTypes.opentelemetryProto.resource.v1.Resource + resource: collectorTypes.opentelemetryProto.resource.v1.Resource, + usingGRPC = true ) { - assert.deepStrictEqual(resource, { - attributes: [ - { - key: 'service.name', - type: 'STRING', - stringValue: 'basic-service', - intValue: '0', - doubleValue: 0, - boolValue: false, - }, - { - key: 'service', - type: 'STRING', - stringValue: 'ui', - intValue: '0', - doubleValue: 0, - boolValue: false, - }, - { - key: 'version', - type: 'DOUBLE', - stringValue: '', - intValue: '0', - doubleValue: 1, - boolValue: false, - }, - { - key: 'cost', - type: 'DOUBLE', - stringValue: '', - intValue: '0', - doubleValue: 112.12, - boolValue: false, - }, - ], - droppedAttributesCount: 0, - }); + if (usingGRPC) { + assert.deepStrictEqual(resource, { + attributes: [ + { + key: 'service.name', + value: { + stringValue: 'basic-service', + value: 'stringValue', + }, + }, + { + key: 'service', + value: { + stringValue: 'ui', + value: 'stringValue', + }, + }, + { + key: 'version', + value: { + doubleValue: 1, + value: 'doubleValue', + }, + }, + { + key: 'cost', + value: { + doubleValue: 112.12, + value: 'doubleValue', + }, + }, + ], + droppedAttributesCount: 0, + }); + } else { + assert.deepStrictEqual(resource, { + attributes: [ + { + key: 'service.name', + value: { + stringValue: 'basic-service', + }, + }, + { + key: 'service', + value: { + stringValue: 'ui', + }, + }, + { + key: 'version', + value: { + doubleValue: 1, + }, + }, + { + key: 'cost', + value: { + doubleValue: 112.12, + }, + }, + ], + droppedAttributesCount: 0, + }); + } } export function ensureExportTraceServiceRequestIsSet( diff --git a/packages/opentelemetry-exporter-collector/test/node/CollectorExporterWithProto.test.ts b/packages/opentelemetry-exporter-collector/test/node/CollectorExporterWithProto.test.ts index bf009167cb..e847f6bea3 100644 --- a/packages/opentelemetry-exporter-collector/test/node/CollectorExporterWithProto.test.ts +++ b/packages/opentelemetry-exporter-collector/test/node/CollectorExporterWithProto.test.ts @@ -170,7 +170,7 @@ describe('CollectorExporter - node with proto over http', () => { setTimeout(() => { assert.strictEqual( collectorExporter['url'], - 'http://localhost:55680/v1/trace' + 'http://localhost:55681/v1/trace' ); done(); }); diff --git a/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporter.test.ts b/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporter.test.ts index 300c257593..ee659923d4 100644 --- a/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporter.test.ts +++ b/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporter.test.ts @@ -219,7 +219,7 @@ const testCollectorMetricExporter = (params: TestParams) => "resource doesn't exist" ); if (resource) { - ensureResourceIsCorrect(resource); + ensureResourceIsCorrect(resource, true); } } if (params.metadata && reqMetadata) { diff --git a/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporterWithJson.test.ts b/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporterWithJson.test.ts index a3e61d42f8..c8f767c82b 100644 --- a/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporterWithJson.test.ts +++ b/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporterWithJson.test.ts @@ -120,7 +120,7 @@ describe('CollectorMetricExporter - node with json over http', () => { }); }); - it('should successfully send the spans', done => { + it('should successfully send metrics', done => { collectorExporter.export(metrics, () => {}); setTimeout(() => { @@ -215,7 +215,7 @@ describe('CollectorMetricExporter - node with json over http', () => { setTimeout(() => { assert.strictEqual( collectorExporter['url'], - 'http://localhost:55680/v1/metrics' + 'http://localhost:55681/v1/metrics' ); done(); }); diff --git a/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporter.test.ts b/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporter.test.ts index 9cadd1574c..4c70e068ff 100644 --- a/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporter.test.ts +++ b/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporter.test.ts @@ -187,14 +187,14 @@ const testCollectorExporter = (params: TestParams) => if (exportedData) { spans = exportedData.instrumentationLibrarySpans[0].spans; resource = exportedData.resource; - ensureExportedSpanIsCorrect(spans[0]); + ensureExportedSpanIsCorrect(spans[0], true); assert.ok( typeof resource !== 'undefined', "resource doesn't exist" ); if (resource) { - ensureResourceIsCorrect(resource); + ensureResourceIsCorrect(resource, true); } } if (params.metadata && reqMetadata) { diff --git a/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporterWithJson.test.ts b/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporterWithJson.test.ts index 105e5b346e..bb9cd8f0e9 100644 --- a/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporterWithJson.test.ts +++ b/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporterWithJson.test.ts @@ -169,7 +169,7 @@ describe('CollectorTraceExporter - node with json over http', () => { setTimeout(() => { assert.strictEqual( collectorExporter['url'], - 'http://localhost:55680/v1/trace' + 'http://localhost:55681/v1/trace' ); done(); }); diff --git a/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporterWithProto.test.ts b/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporterWithProto.test.ts new file mode 100644 index 0000000000..e847f6bea3 --- /dev/null +++ b/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporterWithProto.test.ts @@ -0,0 +1,188 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as core from '@opentelemetry/core'; +import { ReadableSpan } from '@opentelemetry/tracing'; +import * as http from 'http'; +import * as assert from 'assert'; +import * as sinon from 'sinon'; +import { CollectorProtocolNode } from '../../src/enums'; +import { CollectorTraceExporter } from '../../src/platform/node'; +import { CollectorExporterConfigNode } from '../../src/platform/node/types'; +import { getExportTraceServiceRequestProto } from '../../src/platform/node/utilWithJsonProto'; +import * as collectorTypes from '../../src/types'; + +import { + ensureExportTraceServiceRequestIsSet, + ensureProtoSpanIsCorrect, + mockedReadableSpan, +} from '../helper'; + +const fakeRequest = { + end: function () {}, + on: function () {}, + write: function () {}, +}; + +const mockRes = { + statusCode: 200, +}; + +const mockResError = { + statusCode: 400, +}; + +describe('CollectorExporter - node with proto over http', () => { + let collectorExporter: CollectorTraceExporter; + let collectorExporterConfig: CollectorExporterConfigNode; + let spyRequest: sinon.SinonSpy; + let spyWrite: sinon.SinonSpy; + let spans: ReadableSpan[]; + describe('export', () => { + beforeEach(() => { + spyRequest = sinon.stub(http, 'request').returns(fakeRequest as any); + spyWrite = sinon.stub(fakeRequest, 'write'); + collectorExporterConfig = { + headers: { + foo: 'bar', + }, + protocolNode: CollectorProtocolNode.HTTP_PROTO, + hostname: 'foo', + logger: new core.NoopLogger(), + serviceName: 'bar', + attributes: {}, + url: 'http://foo.bar.com', + }; + collectorExporter = new CollectorTraceExporter(collectorExporterConfig); + spans = []; + spans.push(Object.assign({}, mockedReadableSpan)); + }); + afterEach(() => { + spyRequest.restore(); + spyWrite.restore(); + }); + + it('should open the connection', done => { + collectorExporter.export(spans, () => {}); + + setTimeout(() => { + const args = spyRequest.args[0]; + const options = args[0]; + + assert.strictEqual(options.hostname, 'foo.bar.com'); + assert.strictEqual(options.method, 'POST'); + assert.strictEqual(options.path, '/'); + done(); + }); + }); + + it('should set custom headers', done => { + collectorExporter.export(spans, () => {}); + + setTimeout(() => { + const args = spyRequest.args[0]; + const options = args[0]; + assert.strictEqual(options.headers['foo'], 'bar'); + done(); + }); + }); + + it('should successfully send the spans', done => { + collectorExporter.export(spans, () => {}); + + setTimeout(() => { + const writeArgs = spyWrite.args[0]; + const ExportTraceServiceRequestProto = getExportTraceServiceRequestProto(); + const data = ExportTraceServiceRequestProto?.decode(writeArgs[0]); + const json = data?.toJSON() as collectorTypes.opentelemetryProto.collector.trace.v1.ExportTraceServiceRequest; + const span1 = + json.resourceSpans[0].instrumentationLibrarySpans[0].spans[0]; + assert.ok(typeof span1 !== 'undefined', "span doesn't exist"); + if (span1) { + ensureProtoSpanIsCorrect(span1); + } + + ensureExportTraceServiceRequestIsSet(json); + + done(); + }); + }); + + it('should log the successful message', done => { + const spyLoggerDebug = sinon.stub(collectorExporter.logger, 'debug'); + const spyLoggerError = sinon.stub(collectorExporter.logger, 'error'); + + const responseSpy = sinon.spy(); + collectorExporter.export(spans, responseSpy); + + setTimeout(() => { + const args = spyRequest.args[0]; + const callback = args[1]; + callback(mockRes); + setTimeout(() => { + const response: any = spyLoggerDebug.args[1][0]; + assert.strictEqual(response, 'statusCode: 200'); + assert.strictEqual(spyLoggerError.args.length, 0); + assert.strictEqual(responseSpy.args[0][0], 0); + done(); + }); + }); + }); + + it('should log the error message', done => { + const spyLoggerError = sinon.stub(collectorExporter.logger, 'error'); + + const responseSpy = sinon.spy(); + collectorExporter.export(spans, responseSpy); + + setTimeout(() => { + const args = spyRequest.args[0]; + const callback = args[1]; + callback(mockResError); + setTimeout(() => { + const response: any = spyLoggerError.args[0][0]; + assert.strictEqual(response, 'statusCode: 400'); + + assert.strictEqual(responseSpy.args[0][0], 1); + done(); + }); + }); + }); + }); + describe('CollectorTraceExporter - node (getDefaultUrl)', () => { + it('should default to localhost', done => { + const collectorExporter = new CollectorTraceExporter({ + protocolNode: CollectorProtocolNode.HTTP_PROTO, + }); + setTimeout(() => { + assert.strictEqual( + collectorExporter['url'], + 'http://localhost:55681/v1/trace' + ); + done(); + }); + }); + + it('should keep the URL if included', done => { + const url = 'http://foo.bar.com'; + const collectorExporter = new CollectorTraceExporter({ url }); + setTimeout(() => { + assert.strictEqual(collectorExporter['url'], url); + done(); + }); + }); + }); +}); From c4ffad79999deb5cc13878d26afd02966c9ad168 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Mon, 27 Jul 2020 16:48:06 -0400 Subject: [PATCH 29/51] chore: 0.10.0 release proposal (#1345) --- CHANGELOG.md | 98 +++++++++++++++++++ examples/basic-tracer-node/package.json | 8 +- examples/collector-exporter-node/package.json | 10 +- examples/grpc-js/package.json | 14 +-- examples/grpc/package.json | 14 +-- examples/http/package.json | 14 +-- examples/https/package.json | 14 +-- examples/metrics/package.json | 8 +- examples/opentracing-shim/package.json | 12 +-- examples/prometheus/package.json | 6 +- examples/tracer-web/package.json | 16 +-- .../monitored-example/package.json | 2 +- getting-started/traced-example/package.json | 12 +-- getting-started/ts-example/package.json | 16 +-- lerna.json | 2 +- metapackages/plugins-node-all/package.json | 8 +- metapackages/plugins-node-core/package.json | 10 +- metapackages/plugins-web-core/package.json | 4 +- package.json | 2 +- packages/opentelemetry-api/package.json | 4 +- packages/opentelemetry-api/src/version.ts | 2 +- .../package.json | 4 +- .../src/version.ts | 2 +- .../opentelemetry-context-base/package.json | 2 +- .../opentelemetry-context-base/src/version.ts | 2 +- .../package.json | 4 +- .../src/version.ts | 2 +- .../opentelemetry-context-zone/package.json | 4 +- .../opentelemetry-context-zone/src/version.ts | 2 +- packages/opentelemetry-core/package.json | 6 +- packages/opentelemetry-core/src/version.ts | 2 +- .../package.json | 16 +-- .../src/version.ts | 2 +- .../package.json | 10 +- .../src/version.ts | 2 +- .../package.json | 8 +- .../src/version.ts | 2 +- .../package.json | 10 +- .../src/version.ts | 2 +- .../opentelemetry-grpc-utils/package.json | 16 +-- .../opentelemetry-grpc-utils/src/version.ts | 2 +- packages/opentelemetry-metrics/package.json | 8 +- packages/opentelemetry-metrics/src/version.ts | 2 +- packages/opentelemetry-node/package.json | 14 +-- packages/opentelemetry-node/src/version.ts | 2 +- .../opentelemetry-plugin-fetch/package.json | 12 +-- .../opentelemetry-plugin-fetch/src/version.ts | 2 +- .../opentelemetry-plugin-grpc-js/package.json | 19 ++-- .../src/version.ts | 2 +- .../opentelemetry-plugin-grpc/package.json | 18 ++-- .../opentelemetry-plugin-grpc/src/version.ts | 2 +- .../opentelemetry-plugin-http/package.json | 16 +-- .../opentelemetry-plugin-http/src/version.ts | 2 +- .../opentelemetry-plugin-https/package.json | 18 ++-- .../opentelemetry-plugin-https/src/version.ts | 2 +- .../package.json | 14 +-- .../src/version.ts | 2 +- packages/opentelemetry-resources/package.json | 6 +- .../opentelemetry-resources/src/version.ts | 2 +- packages/opentelemetry-sdk-node/package.json | 18 ++-- .../opentelemetry-sdk-node/src/version.ts | 2 +- .../package.json | 2 +- .../src/version.ts | 2 +- .../package.json | 8 +- .../src/version.ts | 2 +- packages/opentelemetry-tracing/package.json | 10 +- packages/opentelemetry-tracing/src/version.ts | 2 +- packages/opentelemetry-web/package.json | 16 +-- packages/opentelemetry-web/src/version.ts | 2 +- 69 files changed, 340 insertions(+), 243 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2854b11b84..f80632b8f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,104 @@ All notable changes to this project will be documented in this file. ## Unreleased +## 0.10.0 + +### :boom: Breaking Change + +* `opentelemetry-exporter-collector`, `opentelemetry-metrics` + * [#1292](https://github.com/open-telemetry/opentelemetry-js/pull/1292) feat: remove HistogramAggregator.reset ([@legendecas](https://github.com/legendecas)) +* `opentelemetry-api`, `opentelemetry-exporter-prometheus`, `opentelemetry-metrics` + * [#1137](https://github.com/open-telemetry/opentelemetry-js/pull/1137) Batch observer ([@obecny](https://github.com/obecny)) +* `opentelemetry-exporter-collector` + * [#1256](https://github.com/open-telemetry/opentelemetry-js/pull/1256) feat: [Collector Metric Exporter][1/x] Rename CollectorExporter to CollectorTraceExporter ([@davidwitten](https://github.com/davidwitten)) + +### :rocket: (Enhancement) + +* `opentelemetry-exporter-collector` + * [#1339](https://github.com/open-telemetry/opentelemetry-js/pull/1339) Proto update to latest to support arrays and maps ([@obecny](https://github.com/obecny)) + * [#1302](https://github.com/open-telemetry/opentelemetry-js/pull/1302) feat: adding proto over http for collector exporter ([@obecny](https://github.com/obecny)) + * [#1247](https://github.com/open-telemetry/opentelemetry-js/pull/1247) feat: adding json over http for collector exporter ([@obecny](https://github.com/obecny)) +* `opentelemetry-core`, `opentelemetry-metrics`, `opentelemetry-tracing` + * [#974](https://github.com/open-telemetry/opentelemetry-js/pull/974) feat: add OTEL_LOG_LEVEL env var ([@naseemkullah](https://github.com/naseemkullah)) +* `opentelemetry-metrics`, `opentelemetry-node`, `opentelemetry-sdk-node` + * [#1187](https://github.com/open-telemetry/opentelemetry-js/pull/1187) Add nodejs sdk package ([@dyladan](https://github.com/dyladan)) +* `opentelemetry-shim-opentracing` + * [#918](https://github.com/open-telemetry/opentelemetry-js/pull/918) feat: add baggage support to the opentracing shim ([@rubenvp8510](https://github.com/rubenvp8510)) +* `opentelemetry-tracing` + * [#1069](https://github.com/open-telemetry/opentelemetry-js/pull/1069) feat: add OTEL_SAMPLING_PROBABILITY env var ([@naseemkullah](https://github.com/naseemkullah)) + * [#1296](https://github.com/open-telemetry/opentelemetry-js/pull/1296) feat: force flush and shutdown callback for span exporters ([@dyladan](https://github.com/dyladan)) +* `opentelemetry-node` + * [#1343](https://github.com/open-telemetry/opentelemetry-js/pull/1343) feat(grpc-js): enable autoinstrumentation by default ([@markwolff](https://github.com/markwolff)) +* `opentelemetry-exporter-collector`, `opentelemetry-exporter-prometheus`, `opentelemetry-metrics` + * [#1276](https://github.com/open-telemetry/opentelemetry-js/pull/1276) chore: updating aggregator MinMaxLastSumCount and use it for value observer and value recorder ([@obecny](https://github.com/obecny)) +* `opentelemetry-plugin-fetch`, `opentelemetry-plugin-xml-http-request`, `opentelemetry-semantic-conventions`, `opentelemetry-web` + * [#1262](https://github.com/open-telemetry/opentelemetry-js/pull/1262) feat(opentelemetry-web): capture decodedBodySize / http.response_content_length ([@johnbley](https://github.com/johnbley)) +* `opentelemetry-resources` + * [#1211](https://github.com/open-telemetry/opentelemetry-js/pull/1211) Resource auto detection logging ([@adamegyed](https://github.com/adamegyed)) +* `opentelemetry-api`, `opentelemetry-exporter-prometheus`, `opentelemetry-metrics` + * [#1137](https://github.com/open-telemetry/opentelemetry-js/pull/1137) Batch observer ([@obecny](https://github.com/obecny)) +* `opentelemetry-core` + * [#1191](https://github.com/open-telemetry/opentelemetry-js/pull/1191) Add platform agnostic way to read environment variables ([@obecny](https://github.com/obecny)) +* `opentelemetry-context-async-hooks` + * [#1210](https://github.com/open-telemetry/opentelemetry-js/pull/1210) AsyncLocalStorage based ContextManager ([@johanneswuerbach](https://github.com/johanneswuerbach)) +* `opentelemetry-api`, `opentelemetry-context-async-hooks`, `opentelemetry-context-base`, `opentelemetry-context-zone-peer-dep`, `opentelemetry-context-zone`, `opentelemetry-core`, `opentelemetry-exporter-collector`, `opentelemetry-exporter-jaeger`, `opentelemetry-exporter-prometheus`, `opentelemetry-exporter-zipkin`, `opentelemetry-metrics`, `opentelemetry-node`, `opentelemetry-plugin-fetch`, `opentelemetry-plugin-grpc-js`, `opentelemetry-plugin-grpc`, `opentelemetry-plugin-http`, `opentelemetry-plugin-https`, `opentelemetry-plugin-xml-http-request`, `opentelemetry-resources`, `opentelemetry-semantic-conventions`, `opentelemetry-shim-opentracing`, `opentelemetry-tracing`, `opentelemetry-web` + * [#1237](https://github.com/open-telemetry/opentelemetry-js/pull/1237) fix(package.json): publish source maps ([@markwolff](https://github.com/markwolff)) +* `opentelemetry-core`, `opentelemetry-exporter-collector`, `opentelemetry-exporter-jaeger`, `opentelemetry-exporter-zipkin`, `opentelemetry-metrics`, `opentelemetry-tracing` + * [#1171](https://github.com/open-telemetry/opentelemetry-js/pull/1171) feat: add instrumentation library and update collector exporter ([@mwear](https://github.com/mwear)) +* `opentelemetry-plugin-xml-http-request` + * [#1216](https://github.com/open-telemetry/opentelemetry-js/pull/1216) Increase Test Coverage for XML Http Plugin ([@thgao](https://github.com/thgao)) +* `opentelemetry-core`, `opentelemetry-node`, `opentelemetry-tracing`, `opentelemetry-web` + * [#1218](https://github.com/open-telemetry/opentelemetry-js/pull/1218) fix: change default propagator to match spec ([@jonahrosenblum](https://github.com/jonahrosenblum)) + +### :bug: (Bug Fix) + +* `opentelemetry-plugin-grpc` + * [#1289](https://github.com/open-telemetry/opentelemetry-js/pull/1289) fix(grpc): camelCase methods can be double patched ([@markwolff](https://github.com/markwolff)) +* `opentelemetry-plugin-fetch` + * [#1274](https://github.com/open-telemetry/opentelemetry-js/pull/1274) fix: do not crash on fetch(new Request(url)) ([@dyladan](https://github.com/dyladan)) +* `opentelemetry-core` + * [#1269](https://github.com/open-telemetry/opentelemetry-js/pull/1269) fix(opentelemetry-core): modify regex to allow future versions ([@srjames90](https://github.com/srjames90)) +* `opentelemetry-exporter-collector` + * [#1254](https://github.com/open-telemetry/opentelemetry-js/pull/1254) fix: default url for otelcol ([@jufab](https://github.com/jufab)) + +### :books: (Refine Doc) + +* `opentelemetry-metrics` + * [#1239](https://github.com/open-telemetry/opentelemetry-js/pull/1239) chore: update metrics example with UpDownCounter ([@mayurkale22](https://github.com/mayurkale22)) +* `opentelemetry-exporter-jaeger` + * [#1234](https://github.com/open-telemetry/opentelemetry-js/pull/1234) docs: add note about endpoint config option ([@danielmbarlow](https://github.com/danielmbarlow)) +* `opentelemetry-api` + * [#1231](https://github.com/open-telemetry/opentelemetry-js/pull/1231) fix(jsdoc): change null to undefined ([@markwolff](https://github.com/markwolff)) + +### :sparkles: (Feature) + +* `opentelemetry-api`, `opentelemetry-metrics` + * [#1272](https://github.com/open-telemetry/opentelemetry-js/pull/1272) feat: adding new metric: up down sum observer ([@obecny](https://github.com/obecny)) + +#### Committers: 21 + +* Adam Egyed ([@adamegyed](https://github.com/adamegyed)) +* Aravin ([@aravinsiva](https://github.com/aravinsiva)) +* Bartlomiej Obecny ([@obecny](https://github.com/obecny)) +* Bryan Clement ([@lykkin](https://github.com/lykkin)) +* Connor Lindsey ([@connorlindsey](https://github.com/connorlindsey)) +* Daniel Dyla ([@dyladan](https://github.com/dyladan)) +* Daniel M Barlow ([@danielmbarlow](https://github.com/danielmbarlow)) +* David W. ([@davidwitten](https://github.com/davidwitten)) +* Johannes Würbach ([@johanneswuerbach](https://github.com/johanneswuerbach)) +* John Bley ([@johnbley](https://github.com/johnbley)) +* Jonah Rosenblum ([@jonahrosenblum](https://github.com/jonahrosenblum)) +* Julien FABRE ([@jufab](https://github.com/jufab)) +* Mark Wolff ([@markwolff](https://github.com/markwolff)) +* Matthew Wear ([@mwear](https://github.com/mwear)) +* Mayur Kale ([@mayurkale22](https://github.com/mayurkale22)) +* Naseem ([@naseemkullah](https://github.com/naseemkullah)) +* Ruben Vargas Palma ([@rubenvp8510](https://github.com/rubenvp8510)) +* Shivkanya Andhare ([@shivkanya9146](https://github.com/shivkanya9146)) +* Tina Gao ([@thgao](https://github.com/thgao)) +* [@srjames90](https://github.com/srjames90) +* legendecas ([@legendecas](https://github.com/legendecas)) + ## 0.9.0 ### :boom: Breaking Change diff --git a/examples/basic-tracer-node/package.json b/examples/basic-tracer-node/package.json index 339a9d9609..5efa04d94a 100644 --- a/examples/basic-tracer-node/package.json +++ b/examples/basic-tracer-node/package.json @@ -1,7 +1,7 @@ { "name": "example-basic-tracer-node", "private": true, - "version": "0.9.0", + "version": "0.10.0", "description": "Example of using @opentelemetry/tracing in Node.js", "main": "index.js", "scripts": { @@ -24,9 +24,9 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/exporter-jaeger": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0" + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/exporter-jaeger": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/examples/collector-exporter-node/package.json b/examples/collector-exporter-node/package.json index ac987ef149..6669ec59aa 100644 --- a/examples/collector-exporter-node/package.json +++ b/examples/collector-exporter-node/package.json @@ -1,7 +1,7 @@ { "name": "example-collector-exporter-node", "private": true, - "version": "0.9.0", + "version": "0.10.0", "description": "Example of using @opentelemetry/collector-exporter in Node.js", "main": "index.js", "scripts": { @@ -27,10 +27,10 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/exporter-collector": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0" + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/exporter-collector": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/examples/grpc-js/package.json b/examples/grpc-js/package.json index 14ab4981fd..a03c37346b 100644 --- a/examples/grpc-js/package.json +++ b/examples/grpc-js/package.json @@ -1,7 +1,7 @@ { "name": "grpc-js-example", "private": true, - "version": "0.8.3", + "version": "0.10.0", "description": "Example of @grpc/grpc-js integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -29,12 +29,12 @@ }, "dependencies": { "@grpc/grpc-js": "^1.0.5", - "@opentelemetry/api": "^0.8.3", - "@opentelemetry/exporter-jaeger": "^0.8.3", - "@opentelemetry/exporter-zipkin": "^0.8.3", - "@opentelemetry/node": "^0.8.3", - "@opentelemetry/plugin-grpc-js": "^0.8.3", - "@opentelemetry/tracing": "^0.8.3", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/exporter-jaeger": "^0.10.0", + "@opentelemetry/exporter-zipkin": "^0.10.0", + "@opentelemetry/node": "^0.10.0", + "@opentelemetry/plugin-grpc-js": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "google-protobuf": "^3.9.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", diff --git a/examples/grpc/package.json b/examples/grpc/package.json index d8cb70cc12..a8ed93a115 100644 --- a/examples/grpc/package.json +++ b/examples/grpc/package.json @@ -1,7 +1,7 @@ { "name": "grpc-example", "private": true, - "version": "0.9.0", + "version": "0.10.0", "description": "Example of gRPC integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -28,12 +28,12 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/exporter-jaeger": "^0.9.0", - "@opentelemetry/exporter-zipkin": "^0.9.0", - "@opentelemetry/node": "^0.9.0", - "@opentelemetry/plugin-grpc": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/exporter-jaeger": "^0.10.0", + "@opentelemetry/exporter-zipkin": "^0.10.0", + "@opentelemetry/node": "^0.10.0", + "@opentelemetry/plugin-grpc": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "google-protobuf": "^3.9.2", "grpc": "^1.23.3", "node-pre-gyp": "0.12.0" diff --git a/examples/http/package.json b/examples/http/package.json index ec895d5051..9c476ca3f3 100644 --- a/examples/http/package.json +++ b/examples/http/package.json @@ -1,7 +1,7 @@ { "name": "http-example", "private": true, - "version": "0.9.0", + "version": "0.10.0", "description": "Example of HTTP integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -28,12 +28,12 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/exporter-jaeger": "^0.9.0", - "@opentelemetry/exporter-zipkin": "^0.9.0", - "@opentelemetry/node": "^0.9.0", - "@opentelemetry/plugin-http": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0" + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/exporter-jaeger": "^0.10.0", + "@opentelemetry/exporter-zipkin": "^0.10.0", + "@opentelemetry/node": "^0.10.0", + "@opentelemetry/plugin-http": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", "devDependencies": { diff --git a/examples/https/package.json b/examples/https/package.json index 42147f5d67..6dce6ba2a6 100644 --- a/examples/https/package.json +++ b/examples/https/package.json @@ -1,7 +1,7 @@ { "name": "https-example", "private": true, - "version": "0.9.0", + "version": "0.10.0", "description": "Example of HTTPs integration with OpenTelemetry", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -29,12 +29,12 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/exporter-jaeger": "^0.9.0", - "@opentelemetry/exporter-zipkin": "^0.9.0", - "@opentelemetry/node": "^0.9.0", - "@opentelemetry/plugin-https": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0" + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/exporter-jaeger": "^0.10.0", + "@opentelemetry/exporter-zipkin": "^0.10.0", + "@opentelemetry/node": "^0.10.0", + "@opentelemetry/plugin-https": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", "devDependencies": { diff --git a/examples/metrics/package.json b/examples/metrics/package.json index e7b8bfce83..11f0c46816 100644 --- a/examples/metrics/package.json +++ b/examples/metrics/package.json @@ -1,7 +1,7 @@ { "name": "example-metrics", "private": true, - "version": "0.9.0", + "version": "0.10.0", "description": "Example of using @opentelemetry/metrics", "main": "index.js", "scripts": { @@ -26,9 +26,9 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/exporter-prometheus": "^0.9.0", - "@opentelemetry/metrics": "^0.9.0" + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/exporter-prometheus": "^0.10.0", + "@opentelemetry/metrics": "^0.10.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/examples/opentracing-shim/package.json b/examples/opentracing-shim/package.json index acfd9d3353..dc176cca91 100644 --- a/examples/opentracing-shim/package.json +++ b/examples/opentracing-shim/package.json @@ -1,7 +1,7 @@ { "name": "opentracing-shim", "private": true, - "version": "0.9.0", + "version": "0.10.0", "description": "Example of using @opentelemetry/shim-opentracing in Node.js", "main": "index.js", "scripts": { @@ -29,11 +29,11 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/exporter-jaeger": "^0.9.0", - "@opentelemetry/exporter-zipkin": "^0.9.0", - "@opentelemetry/node": "^0.9.0", - "@opentelemetry/shim-opentracing": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/exporter-jaeger": "^0.10.0", + "@opentelemetry/exporter-zipkin": "^0.10.0", + "@opentelemetry/node": "^0.10.0", + "@opentelemetry/shim-opentracing": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "opentracing": "^0.14.4" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", diff --git a/examples/prometheus/package.json b/examples/prometheus/package.json index 1039eec031..c87fd54292 100644 --- a/examples/prometheus/package.json +++ b/examples/prometheus/package.json @@ -1,6 +1,6 @@ { "name": "prometheus-example", - "version": "0.9.0", + "version": "0.10.0", "description": "Example of using @opentelemetry/metrics and @opentelemetry/exporter-prometheus", "main": "index.js", "scripts": { @@ -9,7 +9,7 @@ "author": "OpenTelemetry Authors", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/exporter-prometheus": "^0.9.0", - "@opentelemetry/metrics": "^0.9.0" + "@opentelemetry/exporter-prometheus": "^0.10.0", + "@opentelemetry/metrics": "^0.10.0" } } diff --git a/examples/tracer-web/package.json b/examples/tracer-web/package.json index 74d5d42d61..0dab2ea2e0 100644 --- a/examples/tracer-web/package.json +++ b/examples/tracer-web/package.json @@ -1,7 +1,7 @@ { "name": "web-tracer-example", "private": true, - "version": "0.9.0", + "version": "0.10.0", "description": "Example of using @opentelemetry/web in browser", "main": "index.js", "scripts": { @@ -34,15 +34,15 @@ "webpack-merge": "^4.2.2" }, "dependencies": { - "@opentelemetry/context-zone": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/exporter-collector": "^0.9.0", + "@opentelemetry/context-zone": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/exporter-collector": "^0.10.0", "@opentelemetry/plugin-document-load": "^0.6.1", - "@opentelemetry/plugin-fetch": "^0.9.0", + "@opentelemetry/plugin-fetch": "^0.10.0", "@opentelemetry/plugin-user-interaction": "^0.6.1", - "@opentelemetry/plugin-xml-http-request": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", - "@opentelemetry/web": "^0.9.0" + "@opentelemetry/plugin-xml-http-request": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/web": "^0.10.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/getting-started/monitored-example/package.json b/getting-started/monitored-example/package.json index 10b0dd218e..58d085e6b0 100644 --- a/getting-started/monitored-example/package.json +++ b/getting-started/monitored-example/package.json @@ -9,7 +9,7 @@ "author": "OpenTelemetry Authors", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/metrics": "^0.9.0", + "@opentelemetry/metrics": "^0.10.0", "axios": "^0.19.0", "express": "^4.17.1" } diff --git a/getting-started/traced-example/package.json b/getting-started/traced-example/package.json index 78518717f2..73b1aa489a 100644 --- a/getting-started/traced-example/package.json +++ b/getting-started/traced-example/package.json @@ -9,13 +9,13 @@ "author": "OpenTelemetry Authors", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/exporter-zipkin": "^0.9.0", - "@opentelemetry/node": "^0.9.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/exporter-zipkin": "^0.10.0", + "@opentelemetry/node": "^0.10.0", "@opentelemetry/plugin-express": "^0.8.0", - "@opentelemetry/plugin-http": "^0.9.0", - "@opentelemetry/plugin-https": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/plugin-http": "^0.10.0", + "@opentelemetry/plugin-https": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "axios": "^0.19.0", "express": "^4.17.1" } diff --git a/getting-started/ts-example/package.json b/getting-started/ts-example/package.json index 41a896e4c0..c75124ee50 100644 --- a/getting-started/ts-example/package.json +++ b/getting-started/ts-example/package.json @@ -13,14 +13,14 @@ "ts-node": "8.10.2" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/exporter-prometheus": "^0.9.0", - "@opentelemetry/exporter-zipkin": "^0.9.0", - "@opentelemetry/metrics": "^0.9.0", - "@opentelemetry/node": "^0.9.0", - "@opentelemetry/plugin-http": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/exporter-prometheus": "^0.10.0", + "@opentelemetry/exporter-zipkin": "^0.10.0", + "@opentelemetry/metrics": "^0.10.0", + "@opentelemetry/node": "^0.10.0", + "@opentelemetry/plugin-http": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "axios": "^0.19.1", "express": "^4.17.1" } diff --git a/lerna.json b/lerna.json index f5d062d573..bab09d2faa 100644 --- a/lerna.json +++ b/lerna.json @@ -6,7 +6,7 @@ "metapackages/*", "packages/*" ], - "version": "0.9.0", + "version": "0.10.0", "changelog": { "repo": "open-telemetry/opentelemetry-js", "labels": { diff --git a/metapackages/plugins-node-all/package.json b/metapackages/plugins-node-all/package.json index f7fb294d8f..9b2d1d031d 100644 --- a/metapackages/plugins-node-all/package.json +++ b/metapackages/plugins-node-all/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugins-node-all", - "version": "0.9.0", + "version": "0.10.0", "description": "Metapackage which bundles opentelemetry node core and contrib plugins", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", @@ -16,13 +16,13 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/plugins-node-core": "^0.9.0", "@opentelemetry/plugin-express": "0.8.0", "@opentelemetry/plugin-ioredis": "0.8.0", "@opentelemetry/plugin-mongodb": "0.8.0", "@opentelemetry/plugin-mysql": "0.8.0", - "@opentelemetry/plugin-pg-pool": "0.8.0", "@opentelemetry/plugin-pg": "0.8.0", - "@opentelemetry/plugin-redis": "0.8.0" + "@opentelemetry/plugin-pg-pool": "0.8.0", + "@opentelemetry/plugin-redis": "0.8.0", + "@opentelemetry/plugins-node-core": "^0.10.0" } } diff --git a/metapackages/plugins-node-core/package.json b/metapackages/plugins-node-core/package.json index e4ea03b0df..c2a89a30af 100644 --- a/metapackages/plugins-node-core/package.json +++ b/metapackages/plugins-node-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugins-node-core", - "version": "0.9.0", + "version": "0.10.0", "description": "Metapackage which bundles all opentelemetry node core plugins", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", @@ -16,9 +16,9 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/plugin-grpc": "^0.9.0", - "@opentelemetry/plugin-grpc-js": "^0.9.0", - "@opentelemetry/plugin-http": "^0.9.0", - "@opentelemetry/plugin-https": "^0.9.0" + "@opentelemetry/plugin-grpc": "^0.10.0", + "@opentelemetry/plugin-grpc-js": "^0.10.0", + "@opentelemetry/plugin-http": "^0.10.0", + "@opentelemetry/plugin-https": "^0.10.0" } } diff --git a/metapackages/plugins-web-core/package.json b/metapackages/plugins-web-core/package.json index 2c2c0664ca..ad350b32f3 100644 --- a/metapackages/plugins-web-core/package.json +++ b/metapackages/plugins-web-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugins-web-core", - "version": "0.9.0", + "version": "0.10.0", "description": "Metapackage which bundles all opentelemetry web core plugins", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", @@ -16,6 +16,6 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/plugin-xml-http-request": "^0.9.0" + "@opentelemetry/plugin-xml-http-request": "^0.10.0" } } diff --git a/package.json b/package.json index e6853e8602..a72465247d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "opentelemetry-base", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry is a distributed tracing and stats collection framework.", "main": "build/src/index.js", "types": "build/src/index.d.ts", diff --git a/packages/opentelemetry-api/package.json b/packages/opentelemetry-api/package.json index 59a312c8a3..6db776357c 100644 --- a/packages/opentelemetry-api/package.json +++ b/packages/opentelemetry-api/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api", - "version": "0.9.0", + "version": "0.10.0", "description": "Public API for OpenTelemetry", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -52,7 +52,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/context-base": "^0.9.0" + "@opentelemetry/context-base": "^0.10.0" }, "devDependencies": { "@types/mocha": "8.0.0", diff --git a/packages/opentelemetry-api/src/version.ts b/packages/opentelemetry-api/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-api/src/version.ts +++ b/packages/opentelemetry-api/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 30ed50c005..08c3242040 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-async-hooks", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry AsyncHooks-based Context Manager", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -55,6 +55,6 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/context-base": "^0.9.0" + "@opentelemetry/context-base": "^0.10.0" } } diff --git a/packages/opentelemetry-context-async-hooks/src/version.ts b/packages/opentelemetry-context-async-hooks/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-context-async-hooks/src/version.ts +++ b/packages/opentelemetry-context-async-hooks/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-context-base/package.json b/packages/opentelemetry-context-base/package.json index fa5a432ee4..74e738973b 100644 --- a/packages/opentelemetry-context-base/package.json +++ b/packages/opentelemetry-context-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-base", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry Base Context Manager", "main": "build/src/index.js", "types": "build/src/index.d.ts", diff --git a/packages/opentelemetry-context-base/src/version.ts b/packages/opentelemetry-context-base/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-context-base/src/version.ts +++ b/packages/opentelemetry-context-base/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 33a06e4886..89652772a4 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-zone-peer-dep", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry Context Zone with peer dependency for zone.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -71,7 +71,7 @@ "zone.js": "0.10.3" }, "dependencies": { - "@opentelemetry/context-base": "^0.9.0" + "@opentelemetry/context-base": "^0.10.0" }, "peerDependencies": { "zone.js": "^0.10.2" diff --git a/packages/opentelemetry-context-zone-peer-dep/src/version.ts b/packages/opentelemetry-context-zone-peer-dep/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-context-zone-peer-dep/src/version.ts +++ b/packages/opentelemetry-context-zone-peer-dep/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index bd7c06cf10..1c97b79462 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-zone", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry Context Zone", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -65,7 +65,7 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "^0.9.0", + "@opentelemetry/context-zone-peer-dep": "^0.10.0", "zone.js": "^0.10.2" }, "sideEffects": true diff --git a/packages/opentelemetry-context-zone/src/version.ts b/packages/opentelemetry-context-zone/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-context-zone/src/version.ts +++ b/packages/opentelemetry-context-zone/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index ac781d9d07..28bc6b05d1 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/core", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry Core provides default and no-op implementations of the OpenTelemetry types for trace and metrics", "main": "build/src/index.js", "browser": { @@ -77,8 +77,8 @@ "webpack": "4.44.0" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/context-base": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/context-base": "^0.10.0", "semver": "^7.1.3" } } diff --git a/packages/opentelemetry-core/src/version.ts b/packages/opentelemetry-core/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-core/src/version.ts +++ b/packages/opentelemetry-core/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-exporter-collector/package.json b/packages/opentelemetry-exporter-collector/package.json index 271c61df2b..6ec83399a3 100644 --- a/packages/opentelemetry-exporter-collector/package.json +++ b/packages/opentelemetry-exporter-collector/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-collector", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry Collector Exporter allows user to send collected traces to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -84,12 +84,12 @@ }, "dependencies": { "@grpc/proto-loader": "^0.5.4", - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/resources": "^0.9.0", - "@opentelemetry/metrics": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", - "protobufjs": "^6.9.0", - "grpc": "^1.24.2" + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/metrics": "^0.10.0", + "@opentelemetry/resources": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", + "grpc": "^1.24.2", + "protobufjs": "^6.9.0" } } diff --git a/packages/opentelemetry-exporter-collector/src/version.ts b/packages/opentelemetry-exporter-collector/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-exporter-collector/src/version.ts +++ b/packages/opentelemetry-exporter-collector/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 1ec7551aed..c9f685d728 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-jaeger", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry Exporter Jaeger allows user to send collected traces to Jaeger", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,7 +42,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/resources": "^0.9.0", + "@opentelemetry/resources": "^0.10.0", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "codecov": "3.7.2", @@ -56,9 +56,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "jaeger-client": "^3.15.0" } } diff --git a/packages/opentelemetry-exporter-jaeger/src/version.ts b/packages/opentelemetry-exporter-jaeger/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-exporter-jaeger/src/version.ts +++ b/packages/opentelemetry-exporter-jaeger/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-exporter-prometheus/package.json b/packages/opentelemetry-exporter-prometheus/package.json index 0e383ba068..5885868006 100644 --- a/packages/opentelemetry-exporter-prometheus/package.json +++ b/packages/opentelemetry-exporter-prometheus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-prometheus", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry Exporter Prometheus provides a metrics endpoint for Prometheus", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -53,9 +53,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/metrics": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/metrics": "^0.10.0", "prom-client": "^11.5.3" } } diff --git a/packages/opentelemetry-exporter-prometheus/src/version.ts b/packages/opentelemetry-exporter-prometheus/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-exporter-prometheus/src/version.ts +++ b/packages/opentelemetry-exporter-prometheus/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 40e2ad9d6b..d643a7bc27 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-zipkin", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry Zipkin Exporter allows the user to send collected traces to Zipkin.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -53,9 +53,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/resources": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0" + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/resources": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0" } } diff --git a/packages/opentelemetry-exporter-zipkin/src/version.ts b/packages/opentelemetry-exporter-zipkin/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-exporter-zipkin/src/version.ts +++ b/packages/opentelemetry-exporter-zipkin/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-grpc-utils/package.json b/packages/opentelemetry-grpc-utils/package.json index 4beae9af82..f6a26fa069 100644 --- a/packages/opentelemetry-grpc-utils/package.json +++ b/packages/opentelemetry-grpc-utils/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/grpc-utils", - "version": "0.9.0", + "version": "0.10.0", "private": true, "description": "OpenTelemetry grpc plugin utility functions.", "main": "build/src/index.js", @@ -44,10 +44,10 @@ "devDependencies": { "@grpc/grpc-js": "1.1.3", "@grpc/proto-loader": "0.5.5", - "@opentelemetry/context-async-hooks": "^0.9.0", - "@opentelemetry/context-base": "^0.9.0", - "@opentelemetry/node": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/context-async-hooks": "^0.10.0", + "@opentelemetry/context-base": "^0.10.0", + "@opentelemetry/node": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "@types/mocha": "7.0.2", "@types/node": "14.0.25", "@types/semver": "7.3.1", @@ -67,9 +67,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/semantic-conventions": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/semantic-conventions": "^0.10.0", "shimmer": "1.2.1" } } diff --git a/packages/opentelemetry-grpc-utils/src/version.ts b/packages/opentelemetry-grpc-utils/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-grpc-utils/src/version.ts +++ b/packages/opentelemetry-grpc-utils/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-metrics/package.json b/packages/opentelemetry-metrics/package.json index 677742d799..17ad7de60b 100644 --- a/packages/opentelemetry-metrics/package.json +++ b/packages/opentelemetry-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/metrics", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -56,8 +56,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/resources": "^0.9.0" + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/resources": "^0.10.0" } } diff --git a/packages/opentelemetry-metrics/src/version.ts b/packages/opentelemetry-metrics/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-metrics/src/version.ts +++ b/packages/opentelemetry-metrics/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-node/package.json b/packages/opentelemetry-node/package.json index dd88aad1bd..f522cdc6a0 100644 --- a/packages/opentelemetry-node/package.json +++ b/packages/opentelemetry-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/node", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry Node SDK provides automatic telemetry (tracing, metrics, etc) for Node.js applications", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,8 +42,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-base": "^0.9.0", - "@opentelemetry/resources": "^0.9.0", + "@opentelemetry/context-base": "^0.10.0", + "@opentelemetry/resources": "^0.10.0", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "@types/semver": "7.3.1", @@ -59,10 +59,10 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/context-async-hooks": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/context-async-hooks": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "require-in-the-middle": "^5.0.0", "semver": "^7.1.3" } diff --git a/packages/opentelemetry-node/src/version.ts b/packages/opentelemetry-node/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-node/src/version.ts +++ b/packages/opentelemetry-node/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-plugin-fetch/package.json b/packages/opentelemetry-plugin-fetch/package.json index 06e6a7fbef..e0b366979c 100644 --- a/packages/opentelemetry-plugin-fetch/package.json +++ b/packages/opentelemetry-plugin-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-fetch", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry fetch automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,8 +45,8 @@ }, "devDependencies": { "@babel/core": "7.10.5", - "@opentelemetry/context-zone": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/context-zone": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "@types/shimmer": "1.0.1", @@ -75,9 +75,9 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/web": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/web": "^0.10.0", "shimmer": "^1.2.1" } } diff --git a/packages/opentelemetry-plugin-fetch/src/version.ts b/packages/opentelemetry-plugin-fetch/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-plugin-fetch/src/version.ts +++ b/packages/opentelemetry-plugin-fetch/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-plugin-grpc-js/package.json b/packages/opentelemetry-plugin-grpc-js/package.json index 38d3dbdfdd..c74188efb0 100644 --- a/packages/opentelemetry-plugin-grpc-js/package.json +++ b/packages/opentelemetry-plugin-grpc-js/package.json @@ -1,7 +1,6 @@ { "name": "@opentelemetry/plugin-grpc-js", - "private": true, - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry @grpc/grpc-js automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -46,11 +45,11 @@ }, "devDependencies": { "@grpc/grpc-js": "1.1.3", - "@opentelemetry/context-async-hooks": "^0.9.0", - "@opentelemetry/context-base": "^0.9.0", - "@opentelemetry/grpc-utils": "^0.9.0", - "@opentelemetry/node": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/context-async-hooks": "^0.10.0", + "@opentelemetry/context-base": "^0.10.0", + "@opentelemetry/grpc-utils": "^0.10.0", + "@opentelemetry/node": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "@types/semver": "7.3.1", @@ -68,9 +67,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/semantic-conventions": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/semantic-conventions": "^0.10.0", "shimmer": "1.2.1" } } diff --git a/packages/opentelemetry-plugin-grpc-js/src/version.ts b/packages/opentelemetry-plugin-grpc-js/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-plugin-grpc-js/src/version.ts +++ b/packages/opentelemetry-plugin-grpc-js/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-plugin-grpc/package.json b/packages/opentelemetry-plugin-grpc/package.json index 9b5d925266..28e2f61ec7 100644 --- a/packages/opentelemetry-plugin-grpc/package.json +++ b/packages/opentelemetry-plugin-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-grpc", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry grpc automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,11 +42,11 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "^0.9.0", - "@opentelemetry/context-base": "^0.9.0", - "@opentelemetry/grpc-utils": "^0.9.0", - "@opentelemetry/node": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/context-async-hooks": "^0.10.0", + "@opentelemetry/context-base": "^0.10.0", + "@opentelemetry/grpc-utils": "^0.10.0", + "@opentelemetry/node": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "@types/semver": "7.3.1", @@ -66,9 +66,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/semantic-conventions": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/semantic-conventions": "^0.10.0", "shimmer": "^1.2.1" } } diff --git a/packages/opentelemetry-plugin-grpc/src/version.ts b/packages/opentelemetry-plugin-grpc/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-plugin-grpc/src/version.ts +++ b/packages/opentelemetry-plugin-grpc/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-plugin-http/package.json b/packages/opentelemetry-plugin-http/package.json index 42198c7ec4..9cefa4dd1c 100644 --- a/packages/opentelemetry-plugin-http/package.json +++ b/packages/opentelemetry-plugin-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-http", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry http automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,10 +42,10 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "^0.9.0", - "@opentelemetry/context-base": "^0.9.0", - "@opentelemetry/node": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/context-async-hooks": "^0.10.0", + "@opentelemetry/context-base": "^0.10.0", + "@opentelemetry/node": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "@types/got": "9.6.11", "@types/mocha": "8.0.0", "@types/node": "14.0.25", @@ -71,9 +71,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/semantic-conventions": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/semantic-conventions": "^0.10.0", "semver": "^7.1.3", "shimmer": "^1.2.1" } diff --git a/packages/opentelemetry-plugin-http/src/version.ts b/packages/opentelemetry-plugin-http/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-plugin-http/src/version.ts +++ b/packages/opentelemetry-plugin-http/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-plugin-https/package.json b/packages/opentelemetry-plugin-https/package.json index 302ba46aa9..6f19e677d9 100644 --- a/packages/opentelemetry-plugin-https/package.json +++ b/packages/opentelemetry-plugin-https/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-https", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry https automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,10 +42,10 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "^0.9.0", - "@opentelemetry/context-base": "^0.9.0", - "@opentelemetry/node": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/context-async-hooks": "^0.10.0", + "@opentelemetry/context-base": "^0.10.0", + "@opentelemetry/node": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "@types/got": "9.6.11", "@types/mocha": "8.0.0", "@types/node": "14.0.25", @@ -71,10 +71,10 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/plugin-http": "^0.9.0", - "@opentelemetry/semantic-conventions": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/plugin-http": "^0.10.0", + "@opentelemetry/semantic-conventions": "^0.10.0", "semver": "^7.1.3", "shimmer": "^1.2.1" } diff --git a/packages/opentelemetry-plugin-https/src/version.ts b/packages/opentelemetry-plugin-https/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-plugin-https/src/version.ts +++ b/packages/opentelemetry-plugin-https/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-plugin-xml-http-request/package.json b/packages/opentelemetry-plugin-xml-http-request/package.json index 17df14aec9..9c8ba99705 100644 --- a/packages/opentelemetry-plugin-xml-http-request/package.json +++ b/packages/opentelemetry-plugin-xml-http-request/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-xml-http-request", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry XMLHttpRequest automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,8 +45,8 @@ }, "devDependencies": { "@babel/core": "7.10.5", - "@opentelemetry/context-zone": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/context-zone": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "@types/shimmer": "1.0.1", @@ -75,10 +75,10 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/semantic-conventions": "^0.9.0", - "@opentelemetry/web": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/semantic-conventions": "^0.10.0", + "@opentelemetry/web": "^0.10.0", "shimmer": "^1.2.1" } } diff --git a/packages/opentelemetry-plugin-xml-http-request/src/version.ts b/packages/opentelemetry-plugin-xml-http-request/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-plugin-xml-http-request/src/version.ts +++ b/packages/opentelemetry-plugin-xml-http-request/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index b04f44d9c2..8a50ef0bd0 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resources", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry SDK resources", "main": "build/src/index.js", "browser": { @@ -60,8 +60,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", "gcp-metadata": "^3.5.0" } } diff --git a/packages/opentelemetry-resources/src/version.ts b/packages/opentelemetry-resources/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-resources/src/version.ts +++ b/packages/opentelemetry-resources/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-sdk-node/package.json b/packages/opentelemetry-sdk-node/package.json index 7815a67644..a3152c4102 100644 --- a/packages/opentelemetry-sdk-node/package.json +++ b/packages/opentelemetry-sdk-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-node", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry SDK for Node.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,16 +42,16 @@ "access": "public" }, "dependencies": { - "@opentelemetry/api": "0.9.0", - "@opentelemetry/context-base": "0.9.0", - "@opentelemetry/core": "0.9.0", - "@opentelemetry/metrics": "0.9.0", - "@opentelemetry/node": "0.9.0", - "@opentelemetry/resources": "0.9.0", - "@opentelemetry/tracing": "0.9.0" + "@opentelemetry/api": "0.10.0", + "@opentelemetry/context-base": "0.10.0", + "@opentelemetry/core": "0.10.0", + "@opentelemetry/metrics": "0.10.0", + "@opentelemetry/node": "0.10.0", + "@opentelemetry/resources": "0.10.0", + "@opentelemetry/tracing": "0.10.0" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "0.9.0", + "@opentelemetry/context-async-hooks": "0.10.0", "@types/mocha": "7.0.2", "@types/node": "14.0.13", "codecov": "3.7.0", diff --git a/packages/opentelemetry-sdk-node/src/version.ts b/packages/opentelemetry-sdk-node/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-sdk-node/src/version.ts +++ b/packages/opentelemetry-sdk-node/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index 5220b34139..c9a1d960b0 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/semantic-conventions", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry semantic conventions", "main": "build/src/index.js", "types": "build/src/index.d.ts", diff --git a/packages/opentelemetry-semantic-conventions/src/version.ts b/packages/opentelemetry-semantic-conventions/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-semantic-conventions/src/version.ts +++ b/packages/opentelemetry-semantic-conventions/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index 31b1fd2ddf..605484b79f 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opentracing", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTracing to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -40,7 +40,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/tracing": "^0.9.0", + "@opentelemetry/tracing": "^0.10.0", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "codecov": "3.7.2", @@ -55,8 +55,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/core": "^0.9.0", + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/core": "^0.10.0", "opentracing": "^0.14.4" } } diff --git a/packages/opentelemetry-shim-opentracing/src/version.ts b/packages/opentelemetry-shim-opentracing/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-shim-opentracing/src/version.ts +++ b/packages/opentelemetry-shim-opentracing/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-tracing/package.json b/packages/opentelemetry-tracing/package.json index a526315b6d..80498f1f41 100644 --- a/packages/opentelemetry-tracing/package.json +++ b/packages/opentelemetry-tracing/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/tracing", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry Tracing", "main": "build/src/index.js", "browser": { @@ -74,9 +74,9 @@ "webpack": "4.44.0" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/context-base": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/resources": "^0.9.0" + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/context-base": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/resources": "^0.10.0" } } diff --git a/packages/opentelemetry-tracing/src/version.ts b/packages/opentelemetry-tracing/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-tracing/src/version.ts +++ b/packages/opentelemetry-tracing/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; diff --git a/packages/opentelemetry-web/package.json b/packages/opentelemetry-web/package.json index f4f8db7e3f..8b66f4f36e 100644 --- a/packages/opentelemetry-web/package.json +++ b/packages/opentelemetry-web/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/web", - "version": "0.9.0", + "version": "0.10.0", "description": "OpenTelemetry Web Tracer", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,8 +44,8 @@ }, "devDependencies": { "@babel/core": "7.10.5", - "@opentelemetry/context-zone": "^0.9.0", - "@opentelemetry/resources": "^0.9.0", + "@opentelemetry/context-zone": "^0.10.0", + "@opentelemetry/resources": "^0.10.0", "@types/jquery": "3.5.0", "@types/mocha": "8.0.0", "@types/node": "14.0.25", @@ -75,10 +75,10 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/api": "^0.9.0", - "@opentelemetry/context-base": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/semantic-conventions": "^0.9.0", - "@opentelemetry/tracing": "^0.9.0" + "@opentelemetry/api": "^0.10.0", + "@opentelemetry/context-base": "^0.10.0", + "@opentelemetry/core": "^0.10.0", + "@opentelemetry/semantic-conventions": "^0.10.0", + "@opentelemetry/tracing": "^0.10.0" } } diff --git a/packages/opentelemetry-web/src/version.ts b/packages/opentelemetry-web/src/version.ts index 2c92beb616..aa9b19601b 100644 --- a/packages/opentelemetry-web/src/version.ts +++ b/packages/opentelemetry-web/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.9.0'; +export const VERSION = '0.10.0'; From 32db1a98fc9dd457efda6431946c2ab7cd25b93f Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 28 Jul 2020 08:57:16 -0400 Subject: [PATCH 30/51] fix: add missing grpc-js index (#1358) --- .../opentelemetry-plugin-grpc-js/src/index.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 packages/opentelemetry-plugin-grpc-js/src/index.ts diff --git a/packages/opentelemetry-plugin-grpc-js/src/index.ts b/packages/opentelemetry-plugin-grpc-js/src/index.ts new file mode 100644 index 0000000000..238da8c96f --- /dev/null +++ b/packages/opentelemetry-plugin-grpc-js/src/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './grpcJs'; From db4745e985ff4e6a34c6189727159f094107021c Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 28 Jul 2020 11:07:22 -0400 Subject: [PATCH 31/51] chore: 0.10.1 release proposal (#1359) --- CHANGELOG.md | 11 +++++++++++ examples/basic-tracer-node/package.json | 8 ++++---- examples/collector-exporter-node/package.json | 10 +++++----- examples/grpc-js/package.json | 14 +++++++------- examples/grpc/package.json | 14 +++++++------- examples/http/package.json | 14 +++++++------- examples/https/package.json | 14 +++++++------- examples/metrics/package.json | 8 ++++---- examples/opentracing-shim/package.json | 12 ++++++------ examples/prometheus/package.json | 6 +++--- examples/tracer-web/package.json | 16 ++++++++-------- getting-started/monitored-example/package.json | 2 +- getting-started/traced-example/package.json | 12 ++++++------ getting-started/ts-example/package.json | 16 ++++++++-------- lerna.json | 2 +- metapackages/plugins-node-all/package.json | 4 ++-- metapackages/plugins-node-core/package.json | 10 +++++----- metapackages/plugins-web-core/package.json | 4 ++-- package.json | 2 +- packages/opentelemetry-api/package.json | 4 ++-- packages/opentelemetry-api/src/version.ts | 2 +- .../package.json | 4 ++-- .../src/version.ts | 2 +- .../opentelemetry-context-base/package.json | 2 +- .../opentelemetry-context-base/src/version.ts | 2 +- .../package.json | 4 ++-- .../src/version.ts | 2 +- .../opentelemetry-context-zone/package.json | 4 ++-- .../opentelemetry-context-zone/src/version.ts | 2 +- packages/opentelemetry-core/package.json | 6 +++--- packages/opentelemetry-core/src/version.ts | 2 +- .../package.json | 12 ++++++------ .../src/version.ts | 2 +- .../opentelemetry-exporter-jaeger/package.json | 10 +++++----- .../src/version.ts | 2 +- .../package.json | 8 ++++---- .../src/version.ts | 2 +- .../opentelemetry-exporter-zipkin/package.json | 10 +++++----- .../src/version.ts | 2 +- packages/opentelemetry-grpc-utils/package.json | 16 ++++++++-------- .../opentelemetry-grpc-utils/src/version.ts | 2 +- packages/opentelemetry-metrics/package.json | 8 ++++---- packages/opentelemetry-metrics/src/version.ts | 2 +- packages/opentelemetry-node/package.json | 14 +++++++------- packages/opentelemetry-node/src/version.ts | 2 +- .../opentelemetry-plugin-fetch/package.json | 12 ++++++------ .../opentelemetry-plugin-fetch/src/version.ts | 2 +- .../opentelemetry-plugin-grpc-js/package.json | 18 +++++++++--------- .../src/version.ts | 2 +- .../opentelemetry-plugin-grpc/package.json | 18 +++++++++--------- .../opentelemetry-plugin-grpc/src/version.ts | 2 +- .../opentelemetry-plugin-http/package.json | 16 ++++++++-------- .../opentelemetry-plugin-http/src/version.ts | 2 +- .../opentelemetry-plugin-https/package.json | 18 +++++++++--------- .../opentelemetry-plugin-https/src/version.ts | 2 +- .../package.json | 14 +++++++------- .../src/version.ts | 2 +- packages/opentelemetry-resources/package.json | 6 +++--- .../opentelemetry-resources/src/version.ts | 2 +- packages/opentelemetry-sdk-node/package.json | 18 +++++++++--------- packages/opentelemetry-sdk-node/src/version.ts | 2 +- .../package.json | 2 +- .../src/version.ts | 2 +- .../package.json | 8 ++++---- .../src/version.ts | 2 +- packages/opentelemetry-tracing/package.json | 10 +++++----- packages/opentelemetry-tracing/src/version.ts | 2 +- packages/opentelemetry-web/package.json | 16 ++++++++-------- packages/opentelemetry-web/src/version.ts | 2 +- 69 files changed, 249 insertions(+), 238 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f80632b8f7..b9dd1c1e81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,17 @@ All notable changes to this project will be documented in this file. ## Unreleased +## 0.10.1 + +### :bug: (Bug Fix) + +* `opentelemetry-plugin-grpc-js` + * [#1358](https://github.com/open-telemetry/opentelemetry-js/pull/1358) fix: add missing grpc-js index ([@dyladan](https://github.com/dyladan)) + +### Committers: 1 + +* Daniel Dyla ([@dyladan](https://github.com/dyladan)) + ## 0.10.0 ### :boom: Breaking Change diff --git a/examples/basic-tracer-node/package.json b/examples/basic-tracer-node/package.json index 5efa04d94a..32562fed6f 100644 --- a/examples/basic-tracer-node/package.json +++ b/examples/basic-tracer-node/package.json @@ -1,7 +1,7 @@ { "name": "example-basic-tracer-node", "private": true, - "version": "0.10.0", + "version": "0.10.1", "description": "Example of using @opentelemetry/tracing in Node.js", "main": "index.js", "scripts": { @@ -24,9 +24,9 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/exporter-jaeger": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0" + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/exporter-jaeger": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/examples/collector-exporter-node/package.json b/examples/collector-exporter-node/package.json index 6669ec59aa..7a40b6baaa 100644 --- a/examples/collector-exporter-node/package.json +++ b/examples/collector-exporter-node/package.json @@ -1,7 +1,7 @@ { "name": "example-collector-exporter-node", "private": true, - "version": "0.10.0", + "version": "0.10.1", "description": "Example of using @opentelemetry/collector-exporter in Node.js", "main": "index.js", "scripts": { @@ -27,10 +27,10 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/exporter-collector": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0" + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/exporter-collector": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/examples/grpc-js/package.json b/examples/grpc-js/package.json index a03c37346b..e2b56f7f32 100644 --- a/examples/grpc-js/package.json +++ b/examples/grpc-js/package.json @@ -1,7 +1,7 @@ { "name": "grpc-js-example", "private": true, - "version": "0.10.0", + "version": "0.10.1", "description": "Example of @grpc/grpc-js integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -29,12 +29,12 @@ }, "dependencies": { "@grpc/grpc-js": "^1.0.5", - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/exporter-jaeger": "^0.10.0", - "@opentelemetry/exporter-zipkin": "^0.10.0", - "@opentelemetry/node": "^0.10.0", - "@opentelemetry/plugin-grpc-js": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/exporter-jaeger": "^0.10.1", + "@opentelemetry/exporter-zipkin": "^0.10.1", + "@opentelemetry/node": "^0.10.1", + "@opentelemetry/plugin-grpc-js": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "google-protobuf": "^3.9.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", diff --git a/examples/grpc/package.json b/examples/grpc/package.json index a8ed93a115..3ba7579bd8 100644 --- a/examples/grpc/package.json +++ b/examples/grpc/package.json @@ -1,7 +1,7 @@ { "name": "grpc-example", "private": true, - "version": "0.10.0", + "version": "0.10.1", "description": "Example of gRPC integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -28,12 +28,12 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/exporter-jaeger": "^0.10.0", - "@opentelemetry/exporter-zipkin": "^0.10.0", - "@opentelemetry/node": "^0.10.0", - "@opentelemetry/plugin-grpc": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/exporter-jaeger": "^0.10.1", + "@opentelemetry/exporter-zipkin": "^0.10.1", + "@opentelemetry/node": "^0.10.1", + "@opentelemetry/plugin-grpc": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "google-protobuf": "^3.9.2", "grpc": "^1.23.3", "node-pre-gyp": "0.12.0" diff --git a/examples/http/package.json b/examples/http/package.json index 9c476ca3f3..9ff3dba350 100644 --- a/examples/http/package.json +++ b/examples/http/package.json @@ -1,7 +1,7 @@ { "name": "http-example", "private": true, - "version": "0.10.0", + "version": "0.10.1", "description": "Example of HTTP integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -28,12 +28,12 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/exporter-jaeger": "^0.10.0", - "@opentelemetry/exporter-zipkin": "^0.10.0", - "@opentelemetry/node": "^0.10.0", - "@opentelemetry/plugin-http": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0" + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/exporter-jaeger": "^0.10.1", + "@opentelemetry/exporter-zipkin": "^0.10.1", + "@opentelemetry/node": "^0.10.1", + "@opentelemetry/plugin-http": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", "devDependencies": { diff --git a/examples/https/package.json b/examples/https/package.json index 6dce6ba2a6..167aeab566 100644 --- a/examples/https/package.json +++ b/examples/https/package.json @@ -1,7 +1,7 @@ { "name": "https-example", "private": true, - "version": "0.10.0", + "version": "0.10.1", "description": "Example of HTTPs integration with OpenTelemetry", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -29,12 +29,12 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/exporter-jaeger": "^0.10.0", - "@opentelemetry/exporter-zipkin": "^0.10.0", - "@opentelemetry/node": "^0.10.0", - "@opentelemetry/plugin-https": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0" + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/exporter-jaeger": "^0.10.1", + "@opentelemetry/exporter-zipkin": "^0.10.1", + "@opentelemetry/node": "^0.10.1", + "@opentelemetry/plugin-https": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", "devDependencies": { diff --git a/examples/metrics/package.json b/examples/metrics/package.json index 11f0c46816..778aa6bd33 100644 --- a/examples/metrics/package.json +++ b/examples/metrics/package.json @@ -1,7 +1,7 @@ { "name": "example-metrics", "private": true, - "version": "0.10.0", + "version": "0.10.1", "description": "Example of using @opentelemetry/metrics", "main": "index.js", "scripts": { @@ -26,9 +26,9 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/exporter-prometheus": "^0.10.0", - "@opentelemetry/metrics": "^0.10.0" + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/exporter-prometheus": "^0.10.1", + "@opentelemetry/metrics": "^0.10.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/examples/opentracing-shim/package.json b/examples/opentracing-shim/package.json index dc176cca91..f4254ef33e 100644 --- a/examples/opentracing-shim/package.json +++ b/examples/opentracing-shim/package.json @@ -1,7 +1,7 @@ { "name": "opentracing-shim", "private": true, - "version": "0.10.0", + "version": "0.10.1", "description": "Example of using @opentelemetry/shim-opentracing in Node.js", "main": "index.js", "scripts": { @@ -29,11 +29,11 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/exporter-jaeger": "^0.10.0", - "@opentelemetry/exporter-zipkin": "^0.10.0", - "@opentelemetry/node": "^0.10.0", - "@opentelemetry/shim-opentracing": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/exporter-jaeger": "^0.10.1", + "@opentelemetry/exporter-zipkin": "^0.10.1", + "@opentelemetry/node": "^0.10.1", + "@opentelemetry/shim-opentracing": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "opentracing": "^0.14.4" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", diff --git a/examples/prometheus/package.json b/examples/prometheus/package.json index c87fd54292..27bd7c31a9 100644 --- a/examples/prometheus/package.json +++ b/examples/prometheus/package.json @@ -1,6 +1,6 @@ { "name": "prometheus-example", - "version": "0.10.0", + "version": "0.10.1", "description": "Example of using @opentelemetry/metrics and @opentelemetry/exporter-prometheus", "main": "index.js", "scripts": { @@ -9,7 +9,7 @@ "author": "OpenTelemetry Authors", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/exporter-prometheus": "^0.10.0", - "@opentelemetry/metrics": "^0.10.0" + "@opentelemetry/exporter-prometheus": "^0.10.1", + "@opentelemetry/metrics": "^0.10.1" } } diff --git a/examples/tracer-web/package.json b/examples/tracer-web/package.json index 0dab2ea2e0..5d30774cc5 100644 --- a/examples/tracer-web/package.json +++ b/examples/tracer-web/package.json @@ -1,7 +1,7 @@ { "name": "web-tracer-example", "private": true, - "version": "0.10.0", + "version": "0.10.1", "description": "Example of using @opentelemetry/web in browser", "main": "index.js", "scripts": { @@ -34,15 +34,15 @@ "webpack-merge": "^4.2.2" }, "dependencies": { - "@opentelemetry/context-zone": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/exporter-collector": "^0.10.0", + "@opentelemetry/context-zone": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/exporter-collector": "^0.10.1", "@opentelemetry/plugin-document-load": "^0.6.1", - "@opentelemetry/plugin-fetch": "^0.10.0", + "@opentelemetry/plugin-fetch": "^0.10.1", "@opentelemetry/plugin-user-interaction": "^0.6.1", - "@opentelemetry/plugin-xml-http-request": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", - "@opentelemetry/web": "^0.10.0" + "@opentelemetry/plugin-xml-http-request": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/web": "^0.10.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/getting-started/monitored-example/package.json b/getting-started/monitored-example/package.json index 58d085e6b0..43945ef15d 100644 --- a/getting-started/monitored-example/package.json +++ b/getting-started/monitored-example/package.json @@ -9,7 +9,7 @@ "author": "OpenTelemetry Authors", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/metrics": "^0.10.0", + "@opentelemetry/metrics": "^0.10.1", "axios": "^0.19.0", "express": "^4.17.1" } diff --git a/getting-started/traced-example/package.json b/getting-started/traced-example/package.json index 73b1aa489a..20e97607d0 100644 --- a/getting-started/traced-example/package.json +++ b/getting-started/traced-example/package.json @@ -9,13 +9,13 @@ "author": "OpenTelemetry Authors", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/exporter-zipkin": "^0.10.0", - "@opentelemetry/node": "^0.10.0", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/exporter-zipkin": "^0.10.1", + "@opentelemetry/node": "^0.10.1", "@opentelemetry/plugin-express": "^0.8.0", - "@opentelemetry/plugin-http": "^0.10.0", - "@opentelemetry/plugin-https": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/plugin-http": "^0.10.1", + "@opentelemetry/plugin-https": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "axios": "^0.19.0", "express": "^4.17.1" } diff --git a/getting-started/ts-example/package.json b/getting-started/ts-example/package.json index c75124ee50..7b237ad552 100644 --- a/getting-started/ts-example/package.json +++ b/getting-started/ts-example/package.json @@ -13,14 +13,14 @@ "ts-node": "8.10.2" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/exporter-prometheus": "^0.10.0", - "@opentelemetry/exporter-zipkin": "^0.10.0", - "@opentelemetry/metrics": "^0.10.0", - "@opentelemetry/node": "^0.10.0", - "@opentelemetry/plugin-http": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/exporter-prometheus": "^0.10.1", + "@opentelemetry/exporter-zipkin": "^0.10.1", + "@opentelemetry/metrics": "^0.10.1", + "@opentelemetry/node": "^0.10.1", + "@opentelemetry/plugin-http": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "axios": "^0.19.1", "express": "^4.17.1" } diff --git a/lerna.json b/lerna.json index bab09d2faa..1792f5e6e0 100644 --- a/lerna.json +++ b/lerna.json @@ -6,7 +6,7 @@ "metapackages/*", "packages/*" ], - "version": "0.10.0", + "version": "0.10.1", "changelog": { "repo": "open-telemetry/opentelemetry-js", "labels": { diff --git a/metapackages/plugins-node-all/package.json b/metapackages/plugins-node-all/package.json index 9b2d1d031d..c1e472e4f7 100644 --- a/metapackages/plugins-node-all/package.json +++ b/metapackages/plugins-node-all/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugins-node-all", - "version": "0.10.0", + "version": "0.10.1", "description": "Metapackage which bundles opentelemetry node core and contrib plugins", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", @@ -23,6 +23,6 @@ "@opentelemetry/plugin-pg": "0.8.0", "@opentelemetry/plugin-pg-pool": "0.8.0", "@opentelemetry/plugin-redis": "0.8.0", - "@opentelemetry/plugins-node-core": "^0.10.0" + "@opentelemetry/plugins-node-core": "^0.10.1" } } diff --git a/metapackages/plugins-node-core/package.json b/metapackages/plugins-node-core/package.json index c2a89a30af..db1f931292 100644 --- a/metapackages/plugins-node-core/package.json +++ b/metapackages/plugins-node-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugins-node-core", - "version": "0.10.0", + "version": "0.10.1", "description": "Metapackage which bundles all opentelemetry node core plugins", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", @@ -16,9 +16,9 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/plugin-grpc": "^0.10.0", - "@opentelemetry/plugin-grpc-js": "^0.10.0", - "@opentelemetry/plugin-http": "^0.10.0", - "@opentelemetry/plugin-https": "^0.10.0" + "@opentelemetry/plugin-grpc": "^0.10.1", + "@opentelemetry/plugin-grpc-js": "^0.10.1", + "@opentelemetry/plugin-http": "^0.10.1", + "@opentelemetry/plugin-https": "^0.10.1" } } diff --git a/metapackages/plugins-web-core/package.json b/metapackages/plugins-web-core/package.json index ad350b32f3..df9a540096 100644 --- a/metapackages/plugins-web-core/package.json +++ b/metapackages/plugins-web-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugins-web-core", - "version": "0.10.0", + "version": "0.10.1", "description": "Metapackage which bundles all opentelemetry web core plugins", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", @@ -16,6 +16,6 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/plugin-xml-http-request": "^0.10.0" + "@opentelemetry/plugin-xml-http-request": "^0.10.1" } } diff --git a/package.json b/package.json index a72465247d..27d64972e1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "opentelemetry-base", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry is a distributed tracing and stats collection framework.", "main": "build/src/index.js", "types": "build/src/index.d.ts", diff --git a/packages/opentelemetry-api/package.json b/packages/opentelemetry-api/package.json index 6db776357c..64018a16cf 100644 --- a/packages/opentelemetry-api/package.json +++ b/packages/opentelemetry-api/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api", - "version": "0.10.0", + "version": "0.10.1", "description": "Public API for OpenTelemetry", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -52,7 +52,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/context-base": "^0.10.0" + "@opentelemetry/context-base": "^0.10.1" }, "devDependencies": { "@types/mocha": "8.0.0", diff --git a/packages/opentelemetry-api/src/version.ts b/packages/opentelemetry-api/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-api/src/version.ts +++ b/packages/opentelemetry-api/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 08c3242040..15eca7120e 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-async-hooks", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry AsyncHooks-based Context Manager", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -55,6 +55,6 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/context-base": "^0.10.0" + "@opentelemetry/context-base": "^0.10.1" } } diff --git a/packages/opentelemetry-context-async-hooks/src/version.ts b/packages/opentelemetry-context-async-hooks/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-context-async-hooks/src/version.ts +++ b/packages/opentelemetry-context-async-hooks/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-context-base/package.json b/packages/opentelemetry-context-base/package.json index 74e738973b..68d1631c60 100644 --- a/packages/opentelemetry-context-base/package.json +++ b/packages/opentelemetry-context-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-base", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry Base Context Manager", "main": "build/src/index.js", "types": "build/src/index.d.ts", diff --git a/packages/opentelemetry-context-base/src/version.ts b/packages/opentelemetry-context-base/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-context-base/src/version.ts +++ b/packages/opentelemetry-context-base/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 89652772a4..66d84fcb60 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-zone-peer-dep", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry Context Zone with peer dependency for zone.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -71,7 +71,7 @@ "zone.js": "0.10.3" }, "dependencies": { - "@opentelemetry/context-base": "^0.10.0" + "@opentelemetry/context-base": "^0.10.1" }, "peerDependencies": { "zone.js": "^0.10.2" diff --git a/packages/opentelemetry-context-zone-peer-dep/src/version.ts b/packages/opentelemetry-context-zone-peer-dep/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-context-zone-peer-dep/src/version.ts +++ b/packages/opentelemetry-context-zone-peer-dep/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 1c97b79462..559de79050 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-zone", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry Context Zone", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -65,7 +65,7 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "^0.10.0", + "@opentelemetry/context-zone-peer-dep": "^0.10.1", "zone.js": "^0.10.2" }, "sideEffects": true diff --git a/packages/opentelemetry-context-zone/src/version.ts b/packages/opentelemetry-context-zone/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-context-zone/src/version.ts +++ b/packages/opentelemetry-context-zone/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 28bc6b05d1..0b47a73ce2 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/core", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry Core provides default and no-op implementations of the OpenTelemetry types for trace and metrics", "main": "build/src/index.js", "browser": { @@ -77,8 +77,8 @@ "webpack": "4.44.0" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/context-base": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/context-base": "^0.10.1", "semver": "^7.1.3" } } diff --git a/packages/opentelemetry-core/src/version.ts b/packages/opentelemetry-core/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-core/src/version.ts +++ b/packages/opentelemetry-core/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-exporter-collector/package.json b/packages/opentelemetry-exporter-collector/package.json index 6ec83399a3..ff7bde3378 100644 --- a/packages/opentelemetry-exporter-collector/package.json +++ b/packages/opentelemetry-exporter-collector/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-collector", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry Collector Exporter allows user to send collected traces to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -84,11 +84,11 @@ }, "dependencies": { "@grpc/proto-loader": "^0.5.4", - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/metrics": "^0.10.0", - "@opentelemetry/resources": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/metrics": "^0.10.1", + "@opentelemetry/resources": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "grpc": "^1.24.2", "protobufjs": "^6.9.0" } diff --git a/packages/opentelemetry-exporter-collector/src/version.ts b/packages/opentelemetry-exporter-collector/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-exporter-collector/src/version.ts +++ b/packages/opentelemetry-exporter-collector/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index c9f685d728..0c50b8e272 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-jaeger", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry Exporter Jaeger allows user to send collected traces to Jaeger", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,7 +42,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/resources": "^0.10.0", + "@opentelemetry/resources": "^0.10.1", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "codecov": "3.7.2", @@ -56,9 +56,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "jaeger-client": "^3.15.0" } } diff --git a/packages/opentelemetry-exporter-jaeger/src/version.ts b/packages/opentelemetry-exporter-jaeger/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-exporter-jaeger/src/version.ts +++ b/packages/opentelemetry-exporter-jaeger/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-exporter-prometheus/package.json b/packages/opentelemetry-exporter-prometheus/package.json index 5885868006..4971bfca35 100644 --- a/packages/opentelemetry-exporter-prometheus/package.json +++ b/packages/opentelemetry-exporter-prometheus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-prometheus", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry Exporter Prometheus provides a metrics endpoint for Prometheus", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -53,9 +53,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/metrics": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/metrics": "^0.10.1", "prom-client": "^11.5.3" } } diff --git a/packages/opentelemetry-exporter-prometheus/src/version.ts b/packages/opentelemetry-exporter-prometheus/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-exporter-prometheus/src/version.ts +++ b/packages/opentelemetry-exporter-prometheus/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index d643a7bc27..a57d3a7c4e 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-zipkin", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry Zipkin Exporter allows the user to send collected traces to Zipkin.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -53,9 +53,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/resources": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0" + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/resources": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1" } } diff --git a/packages/opentelemetry-exporter-zipkin/src/version.ts b/packages/opentelemetry-exporter-zipkin/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-exporter-zipkin/src/version.ts +++ b/packages/opentelemetry-exporter-zipkin/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-grpc-utils/package.json b/packages/opentelemetry-grpc-utils/package.json index f6a26fa069..ff5eaa3f56 100644 --- a/packages/opentelemetry-grpc-utils/package.json +++ b/packages/opentelemetry-grpc-utils/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/grpc-utils", - "version": "0.10.0", + "version": "0.10.1", "private": true, "description": "OpenTelemetry grpc plugin utility functions.", "main": "build/src/index.js", @@ -44,10 +44,10 @@ "devDependencies": { "@grpc/grpc-js": "1.1.3", "@grpc/proto-loader": "0.5.5", - "@opentelemetry/context-async-hooks": "^0.10.0", - "@opentelemetry/context-base": "^0.10.0", - "@opentelemetry/node": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/context-async-hooks": "^0.10.1", + "@opentelemetry/context-base": "^0.10.1", + "@opentelemetry/node": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "@types/mocha": "7.0.2", "@types/node": "14.0.25", "@types/semver": "7.3.1", @@ -67,9 +67,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/semantic-conventions": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/semantic-conventions": "^0.10.1", "shimmer": "1.2.1" } } diff --git a/packages/opentelemetry-grpc-utils/src/version.ts b/packages/opentelemetry-grpc-utils/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-grpc-utils/src/version.ts +++ b/packages/opentelemetry-grpc-utils/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-metrics/package.json b/packages/opentelemetry-metrics/package.json index 17ad7de60b..c4ebd22474 100644 --- a/packages/opentelemetry-metrics/package.json +++ b/packages/opentelemetry-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/metrics", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -56,8 +56,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/resources": "^0.10.0" + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/resources": "^0.10.1" } } diff --git a/packages/opentelemetry-metrics/src/version.ts b/packages/opentelemetry-metrics/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-metrics/src/version.ts +++ b/packages/opentelemetry-metrics/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-node/package.json b/packages/opentelemetry-node/package.json index f522cdc6a0..bed6242c51 100644 --- a/packages/opentelemetry-node/package.json +++ b/packages/opentelemetry-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/node", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry Node SDK provides automatic telemetry (tracing, metrics, etc) for Node.js applications", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,8 +42,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-base": "^0.10.0", - "@opentelemetry/resources": "^0.10.0", + "@opentelemetry/context-base": "^0.10.1", + "@opentelemetry/resources": "^0.10.1", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "@types/semver": "7.3.1", @@ -59,10 +59,10 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/context-async-hooks": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/context-async-hooks": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "require-in-the-middle": "^5.0.0", "semver": "^7.1.3" } diff --git a/packages/opentelemetry-node/src/version.ts b/packages/opentelemetry-node/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-node/src/version.ts +++ b/packages/opentelemetry-node/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-plugin-fetch/package.json b/packages/opentelemetry-plugin-fetch/package.json index e0b366979c..24566cc249 100644 --- a/packages/opentelemetry-plugin-fetch/package.json +++ b/packages/opentelemetry-plugin-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-fetch", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry fetch automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,8 +45,8 @@ }, "devDependencies": { "@babel/core": "7.10.5", - "@opentelemetry/context-zone": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/context-zone": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "@types/shimmer": "1.0.1", @@ -75,9 +75,9 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/web": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/web": "^0.10.1", "shimmer": "^1.2.1" } } diff --git a/packages/opentelemetry-plugin-fetch/src/version.ts b/packages/opentelemetry-plugin-fetch/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-plugin-fetch/src/version.ts +++ b/packages/opentelemetry-plugin-fetch/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-plugin-grpc-js/package.json b/packages/opentelemetry-plugin-grpc-js/package.json index c74188efb0..4806982d22 100644 --- a/packages/opentelemetry-plugin-grpc-js/package.json +++ b/packages/opentelemetry-plugin-grpc-js/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-grpc-js", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry @grpc/grpc-js automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,11 +45,11 @@ }, "devDependencies": { "@grpc/grpc-js": "1.1.3", - "@opentelemetry/context-async-hooks": "^0.10.0", - "@opentelemetry/context-base": "^0.10.0", - "@opentelemetry/grpc-utils": "^0.10.0", - "@opentelemetry/node": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/context-async-hooks": "^0.10.1", + "@opentelemetry/context-base": "^0.10.1", + "@opentelemetry/grpc-utils": "^0.10.1", + "@opentelemetry/node": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "@types/semver": "7.3.1", @@ -67,9 +67,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/semantic-conventions": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/semantic-conventions": "^0.10.1", "shimmer": "1.2.1" } } diff --git a/packages/opentelemetry-plugin-grpc-js/src/version.ts b/packages/opentelemetry-plugin-grpc-js/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-plugin-grpc-js/src/version.ts +++ b/packages/opentelemetry-plugin-grpc-js/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-plugin-grpc/package.json b/packages/opentelemetry-plugin-grpc/package.json index 28e2f61ec7..7b48a41b9d 100644 --- a/packages/opentelemetry-plugin-grpc/package.json +++ b/packages/opentelemetry-plugin-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-grpc", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry grpc automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,11 +42,11 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "^0.10.0", - "@opentelemetry/context-base": "^0.10.0", - "@opentelemetry/grpc-utils": "^0.10.0", - "@opentelemetry/node": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/context-async-hooks": "^0.10.1", + "@opentelemetry/context-base": "^0.10.1", + "@opentelemetry/grpc-utils": "^0.10.1", + "@opentelemetry/node": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "@types/semver": "7.3.1", @@ -66,9 +66,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/semantic-conventions": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/semantic-conventions": "^0.10.1", "shimmer": "^1.2.1" } } diff --git a/packages/opentelemetry-plugin-grpc/src/version.ts b/packages/opentelemetry-plugin-grpc/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-plugin-grpc/src/version.ts +++ b/packages/opentelemetry-plugin-grpc/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-plugin-http/package.json b/packages/opentelemetry-plugin-http/package.json index 9cefa4dd1c..1d60be118c 100644 --- a/packages/opentelemetry-plugin-http/package.json +++ b/packages/opentelemetry-plugin-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-http", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry http automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,10 +42,10 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "^0.10.0", - "@opentelemetry/context-base": "^0.10.0", - "@opentelemetry/node": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/context-async-hooks": "^0.10.1", + "@opentelemetry/context-base": "^0.10.1", + "@opentelemetry/node": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "@types/got": "9.6.11", "@types/mocha": "8.0.0", "@types/node": "14.0.25", @@ -71,9 +71,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/semantic-conventions": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/semantic-conventions": "^0.10.1", "semver": "^7.1.3", "shimmer": "^1.2.1" } diff --git a/packages/opentelemetry-plugin-http/src/version.ts b/packages/opentelemetry-plugin-http/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-plugin-http/src/version.ts +++ b/packages/opentelemetry-plugin-http/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-plugin-https/package.json b/packages/opentelemetry-plugin-https/package.json index 6f19e677d9..7caf9bb72f 100644 --- a/packages/opentelemetry-plugin-https/package.json +++ b/packages/opentelemetry-plugin-https/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-https", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry https automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,10 +42,10 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "^0.10.0", - "@opentelemetry/context-base": "^0.10.0", - "@opentelemetry/node": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/context-async-hooks": "^0.10.1", + "@opentelemetry/context-base": "^0.10.1", + "@opentelemetry/node": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "@types/got": "9.6.11", "@types/mocha": "8.0.0", "@types/node": "14.0.25", @@ -71,10 +71,10 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/plugin-http": "^0.10.0", - "@opentelemetry/semantic-conventions": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/plugin-http": "^0.10.1", + "@opentelemetry/semantic-conventions": "^0.10.1", "semver": "^7.1.3", "shimmer": "^1.2.1" } diff --git a/packages/opentelemetry-plugin-https/src/version.ts b/packages/opentelemetry-plugin-https/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-plugin-https/src/version.ts +++ b/packages/opentelemetry-plugin-https/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-plugin-xml-http-request/package.json b/packages/opentelemetry-plugin-xml-http-request/package.json index 9c8ba99705..b490fcff02 100644 --- a/packages/opentelemetry-plugin-xml-http-request/package.json +++ b/packages/opentelemetry-plugin-xml-http-request/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-xml-http-request", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry XMLHttpRequest automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,8 +45,8 @@ }, "devDependencies": { "@babel/core": "7.10.5", - "@opentelemetry/context-zone": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/context-zone": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "@types/shimmer": "1.0.1", @@ -75,10 +75,10 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/semantic-conventions": "^0.10.0", - "@opentelemetry/web": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/semantic-conventions": "^0.10.1", + "@opentelemetry/web": "^0.10.1", "shimmer": "^1.2.1" } } diff --git a/packages/opentelemetry-plugin-xml-http-request/src/version.ts b/packages/opentelemetry-plugin-xml-http-request/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-plugin-xml-http-request/src/version.ts +++ b/packages/opentelemetry-plugin-xml-http-request/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 8a50ef0bd0..179f22fa03 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resources", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry SDK resources", "main": "build/src/index.js", "browser": { @@ -60,8 +60,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", "gcp-metadata": "^3.5.0" } } diff --git a/packages/opentelemetry-resources/src/version.ts b/packages/opentelemetry-resources/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-resources/src/version.ts +++ b/packages/opentelemetry-resources/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-sdk-node/package.json b/packages/opentelemetry-sdk-node/package.json index a3152c4102..c5ea9137fb 100644 --- a/packages/opentelemetry-sdk-node/package.json +++ b/packages/opentelemetry-sdk-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-node", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry SDK for Node.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,16 +42,16 @@ "access": "public" }, "dependencies": { - "@opentelemetry/api": "0.10.0", - "@opentelemetry/context-base": "0.10.0", - "@opentelemetry/core": "0.10.0", - "@opentelemetry/metrics": "0.10.0", - "@opentelemetry/node": "0.10.0", - "@opentelemetry/resources": "0.10.0", - "@opentelemetry/tracing": "0.10.0" + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/context-base": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/metrics": "^0.10.1", + "@opentelemetry/node": "^0.10.1", + "@opentelemetry/resources": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "0.10.0", + "@opentelemetry/context-async-hooks": "^0.10.1", "@types/mocha": "7.0.2", "@types/node": "14.0.13", "codecov": "3.7.0", diff --git a/packages/opentelemetry-sdk-node/src/version.ts b/packages/opentelemetry-sdk-node/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-sdk-node/src/version.ts +++ b/packages/opentelemetry-sdk-node/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index c9a1d960b0..b4c5934f6d 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/semantic-conventions", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry semantic conventions", "main": "build/src/index.js", "types": "build/src/index.d.ts", diff --git a/packages/opentelemetry-semantic-conventions/src/version.ts b/packages/opentelemetry-semantic-conventions/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-semantic-conventions/src/version.ts +++ b/packages/opentelemetry-semantic-conventions/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index 605484b79f..42d5058d09 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opentracing", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTracing to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -40,7 +40,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/tracing": "^0.10.0", + "@opentelemetry/tracing": "^0.10.1", "@types/mocha": "8.0.0", "@types/node": "14.0.25", "codecov": "3.7.2", @@ -55,8 +55,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/core": "^0.10.0", + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/core": "^0.10.1", "opentracing": "^0.14.4" } } diff --git a/packages/opentelemetry-shim-opentracing/src/version.ts b/packages/opentelemetry-shim-opentracing/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-shim-opentracing/src/version.ts +++ b/packages/opentelemetry-shim-opentracing/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-tracing/package.json b/packages/opentelemetry-tracing/package.json index 80498f1f41..2684d860d2 100644 --- a/packages/opentelemetry-tracing/package.json +++ b/packages/opentelemetry-tracing/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/tracing", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry Tracing", "main": "build/src/index.js", "browser": { @@ -74,9 +74,9 @@ "webpack": "4.44.0" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/context-base": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/resources": "^0.10.0" + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/context-base": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/resources": "^0.10.1" } } diff --git a/packages/opentelemetry-tracing/src/version.ts b/packages/opentelemetry-tracing/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-tracing/src/version.ts +++ b/packages/opentelemetry-tracing/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; diff --git a/packages/opentelemetry-web/package.json b/packages/opentelemetry-web/package.json index 8b66f4f36e..1afe427c8a 100644 --- a/packages/opentelemetry-web/package.json +++ b/packages/opentelemetry-web/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/web", - "version": "0.10.0", + "version": "0.10.1", "description": "OpenTelemetry Web Tracer", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,8 +44,8 @@ }, "devDependencies": { "@babel/core": "7.10.5", - "@opentelemetry/context-zone": "^0.10.0", - "@opentelemetry/resources": "^0.10.0", + "@opentelemetry/context-zone": "^0.10.1", + "@opentelemetry/resources": "^0.10.1", "@types/jquery": "3.5.0", "@types/mocha": "8.0.0", "@types/node": "14.0.25", @@ -75,10 +75,10 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/api": "^0.10.0", - "@opentelemetry/context-base": "^0.10.0", - "@opentelemetry/core": "^0.10.0", - "@opentelemetry/semantic-conventions": "^0.10.0", - "@opentelemetry/tracing": "^0.10.0" + "@opentelemetry/api": "^0.10.1", + "@opentelemetry/context-base": "^0.10.1", + "@opentelemetry/core": "^0.10.1", + "@opentelemetry/semantic-conventions": "^0.10.1", + "@opentelemetry/tracing": "^0.10.1" } } diff --git a/packages/opentelemetry-web/src/version.ts b/packages/opentelemetry-web/src/version.ts index aa9b19601b..04e7c6b71c 100644 --- a/packages/opentelemetry-web/src/version.ts +++ b/packages/opentelemetry-web/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; From 0a0a487f90d0f9fa3d8162a981faca52ac639819 Mon Sep 17 00:00:00 2001 From: Mark Wolff Date: Thu, 30 Jul 2020 22:35:29 -0400 Subject: [PATCH 32/51] feat(api/context-base): change compile target to es5 (#1368) --- packages/opentelemetry-api/tsconfig.json | 2 +- packages/opentelemetry-context-base/tsconfig.json | 2 +- packages/tsconfig.es5.json | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 packages/tsconfig.es5.json diff --git a/packages/opentelemetry-api/tsconfig.json b/packages/opentelemetry-api/tsconfig.json index df95d9cc57..79cc5cefac 100644 --- a/packages/opentelemetry-api/tsconfig.json +++ b/packages/opentelemetry-api/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig.base", + "extends": "../tsconfig.es5", "compilerOptions": { "rootDir": ".", "outDir": "build" diff --git a/packages/opentelemetry-context-base/tsconfig.json b/packages/opentelemetry-context-base/tsconfig.json index a2042cd68b..ca8d7656bb 100644 --- a/packages/opentelemetry-context-base/tsconfig.json +++ b/packages/opentelemetry-context-base/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig.base", + "extends": "../tsconfig.es5", "compilerOptions": { "rootDir": ".", "outDir": "build" diff --git a/packages/tsconfig.es5.json b/packages/tsconfig.es5.json new file mode 100644 index 0000000000..3c83c51a2b --- /dev/null +++ b/packages/tsconfig.es5.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "target": "es5" + } +} From 802c5ad8dee3292f6e1145b6c484e79a5efd65c6 Mon Sep 17 00:00:00 2001 From: Cong Zou <32532612+EdZou@users.noreply.github.com> Date: Fri, 31 Jul 2020 07:35:26 -0500 Subject: [PATCH 33/51] Feat: Make ID generator configurable (#1331) Co-authored-by: Daniel Dyla --- packages/opentelemetry-core/src/index.ts | 1 + .../src/platform/browser/RandomIdGenerator.ts | 64 +++++++++++++++++++ .../src/platform/browser/id.ts | 56 ---------------- .../src/platform/browser/index.ts | 2 +- .../node/{id.ts => RandomIdGenerator.ts} | 29 +++++---- .../src/platform/node/index.ts | 2 +- .../src/trace/IdGenerator.ts | 23 +++++++ .../test/context/composite.test.ts | 8 +-- .../{id.test.ts => RandomIdGenerator.test.ts} | 33 ++++++---- .../src/platform/node/protos | 2 +- packages/opentelemetry-tracing/src/Tracer.ts | 10 +-- packages/opentelemetry-tracing/src/types.ts | 9 ++- 12 files changed, 144 insertions(+), 95 deletions(-) create mode 100644 packages/opentelemetry-core/src/platform/browser/RandomIdGenerator.ts delete mode 100644 packages/opentelemetry-core/src/platform/browser/id.ts rename packages/opentelemetry-core/src/platform/node/{id.ts => RandomIdGenerator.ts} (56%) create mode 100644 packages/opentelemetry-core/src/trace/IdGenerator.ts rename packages/opentelemetry-core/test/platform/{id.test.ts => RandomIdGenerator.test.ts} (63%) diff --git a/packages/opentelemetry-core/src/index.ts b/packages/opentelemetry-core/src/index.ts index e6bab81b1e..d1bf17a580 100644 --- a/packages/opentelemetry-core/src/index.ts +++ b/packages/opentelemetry-core/src/index.ts @@ -35,5 +35,6 @@ export * from './trace/sampler/ParentOrElseSampler'; export * from './trace/sampler/ProbabilitySampler'; export * from './trace/spancontext-utils'; export * from './trace/TraceState'; +export * from './trace/IdGenerator'; export * from './utils/url'; export * from './utils/wrap'; diff --git a/packages/opentelemetry-core/src/platform/browser/RandomIdGenerator.ts b/packages/opentelemetry-core/src/platform/browser/RandomIdGenerator.ts new file mode 100644 index 0000000000..7ab4ce1ea3 --- /dev/null +++ b/packages/opentelemetry-core/src/platform/browser/RandomIdGenerator.ts @@ -0,0 +1,64 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { IdGenerator } from '../../trace/IdGenerator'; + +type WindowWithMsCrypto = Window & { + msCrypto?: Crypto; +}; +const cryptoLib = window.crypto || (window as WindowWithMsCrypto).msCrypto; +const SPAN_ID_BYTES = 8; +const TRACE_ID_BYTES = 16; +const randomBytesArray = new Uint8Array(TRACE_ID_BYTES); + +export class RandomIdGenerator implements IdGenerator { + /** + * Returns a random 16-byte trace ID formatted/encoded as a 32 lowercase hex + * characters corresponding to 128 bits. + */ + generateTraceId(): string { + cryptoLib.getRandomValues(randomBytesArray); + return this.toHex(randomBytesArray.slice(0, TRACE_ID_BYTES)); + } + + /** + * Returns a random 8-byte span ID formatted/encoded as a 16 lowercase hex + * characters corresponding to 64 bits. + */ + generateSpanId(): string { + cryptoLib.getRandomValues(randomBytesArray); + return this.toHex(randomBytesArray.slice(0, SPAN_ID_BYTES)); + } + + /** + * Get the hex string representation of a byte array + * + * @param byteArray + */ + private toHex(byteArray: Uint8Array) { + const chars: number[] = new Array(byteArray.length * 2); + const alpha = 'a'.charCodeAt(0) - 10; + const digit = '0'.charCodeAt(0); + + let p = 0; + for (let i = 0; i < byteArray.length; i++) { + let nibble = (byteArray[i] >>> 4) & 0xf; + chars[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + nibble = byteArray[i] & 0xf; + chars[p++] = nibble > 9 ? nibble + alpha : nibble + digit; + } + return String.fromCharCode.apply(null, chars); + } +} diff --git a/packages/opentelemetry-core/src/platform/browser/id.ts b/packages/opentelemetry-core/src/platform/browser/id.ts deleted file mode 100644 index 24f33972fd..0000000000 --- a/packages/opentelemetry-core/src/platform/browser/id.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -declare type WindowWithMsCrypto = Window & { - msCrypto?: Crypto; -}; -const cryptoLib = window.crypto || (window as WindowWithMsCrypto).msCrypto; - -const SPAN_ID_BYTES = 8; -const TRACE_ID_BYTES = 16; -const randomBytesArray = new Uint8Array(TRACE_ID_BYTES); - -/** Returns a random 16-byte trace ID formatted as a 32-char hex string. */ -export function randomTraceId(): string { - cryptoLib.getRandomValues(randomBytesArray); - return toHex(randomBytesArray.slice(0, TRACE_ID_BYTES)); -} - -/** Returns a random 8-byte span ID formatted as a 16-char hex string. */ -export function randomSpanId(): string { - cryptoLib.getRandomValues(randomBytesArray); - return toHex(randomBytesArray.slice(0, SPAN_ID_BYTES)); -} - -/** - * Get the hex string representation of a byte array - * - * @param byteArray - */ -function toHex(byteArray: Uint8Array) { - const chars: number[] = new Array(byteArray.length * 2); - const alpha = 'a'.charCodeAt(0) - 10; - const digit = '0'.charCodeAt(0); - - let p = 0; - for (let i = 0; i < byteArray.length; i++) { - let nibble = (byteArray[i] >>> 4) & 0xf; - chars[p++] = nibble > 9 ? nibble + alpha : nibble + digit; - nibble = byteArray[i] & 0xf; - chars[p++] = nibble > 9 ? nibble + alpha : nibble + digit; - } - - return String.fromCharCode.apply(null, chars); -} diff --git a/packages/opentelemetry-core/src/platform/browser/index.ts b/packages/opentelemetry-core/src/platform/browser/index.ts index 139731376b..e14dac0d3b 100644 --- a/packages/opentelemetry-core/src/platform/browser/index.ts +++ b/packages/opentelemetry-core/src/platform/browser/index.ts @@ -17,7 +17,7 @@ export * from './BasePlugin'; export * from './environment'; export * from './hex-to-base64'; -export * from './id'; +export * from './RandomIdGenerator'; export * from './performance'; export * from './sdk-info'; export * from './timer-util'; diff --git a/packages/opentelemetry-core/src/platform/node/id.ts b/packages/opentelemetry-core/src/platform/node/RandomIdGenerator.ts similarity index 56% rename from packages/opentelemetry-core/src/platform/node/id.ts rename to packages/opentelemetry-core/src/platform/node/RandomIdGenerator.ts index 970025385c..b262ab1da8 100644 --- a/packages/opentelemetry-core/src/platform/node/id.ts +++ b/packages/opentelemetry-core/src/platform/node/RandomIdGenerator.ts @@ -15,22 +15,25 @@ */ import * as crypto from 'crypto'; +import { IdGenerator } from '../../trace/IdGenerator'; const SPAN_ID_BYTES = 8; const TRACE_ID_BYTES = 16; -/** - * Returns a random 16-byte trace ID formatted/encoded as a 32 lowercase hex - * characters corresponding to 128 bits. - */ -export function randomTraceId(): string { - return crypto.randomBytes(TRACE_ID_BYTES).toString('hex'); -} +export class RandomIdGenerator implements IdGenerator { + /** + * Returns a random 16-byte trace ID formatted/encoded as a 32 lowercase hex + * characters corresponding to 128 bits. + */ + generateTraceId(): string { + return crypto.randomBytes(TRACE_ID_BYTES).toString('hex'); + } -/** - * Returns a random 8-byte span ID formatted/encoded as a 16 lowercase hex - * characters corresponding to 64 bits. - */ -export function randomSpanId(): string { - return crypto.randomBytes(SPAN_ID_BYTES).toString('hex'); + /** + * Returns a random 8-byte span ID formatted/encoded as a 16 lowercase hex + * characters corresponding to 64 bits. + */ + generateSpanId(): string { + return crypto.randomBytes(SPAN_ID_BYTES).toString('hex'); + } } diff --git a/packages/opentelemetry-core/src/platform/node/index.ts b/packages/opentelemetry-core/src/platform/node/index.ts index 139731376b..e14dac0d3b 100644 --- a/packages/opentelemetry-core/src/platform/node/index.ts +++ b/packages/opentelemetry-core/src/platform/node/index.ts @@ -17,7 +17,7 @@ export * from './BasePlugin'; export * from './environment'; export * from './hex-to-base64'; -export * from './id'; +export * from './RandomIdGenerator'; export * from './performance'; export * from './sdk-info'; export * from './timer-util'; diff --git a/packages/opentelemetry-core/src/trace/IdGenerator.ts b/packages/opentelemetry-core/src/trace/IdGenerator.ts new file mode 100644 index 0000000000..65f63f9c0c --- /dev/null +++ b/packages/opentelemetry-core/src/trace/IdGenerator.ts @@ -0,0 +1,23 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** IdGenerator provides an interface for generating Trace Id and Span Id */ +export interface IdGenerator { + /** Returns a trace ID composed of 32 lowercase hex characters. */ + generateTraceId(): string; + /** Returns a span ID composed of 16 lowercase hex characters. */ + generateSpanId(): string; +} diff --git a/packages/opentelemetry-core/test/context/composite.test.ts b/packages/opentelemetry-core/test/context/composite.test.ts index dce823dfe4..a26c6c5ac3 100644 --- a/packages/opentelemetry-core/test/context/composite.test.ts +++ b/packages/opentelemetry-core/test/context/composite.test.ts @@ -25,8 +25,7 @@ import * as assert from 'assert'; import { CompositePropagator, HttpTraceContext, - randomSpanId, - randomTraceId, + RandomIdGenerator, } from '../../src'; import { getExtractedSpanContext, @@ -49,8 +48,9 @@ describe('Composite Propagator', () => { let spanId: string; beforeEach(() => { - traceId = randomTraceId(); - spanId = randomSpanId(); + const idGenerator = new RandomIdGenerator(); + traceId = idGenerator.generateTraceId(); + spanId = idGenerator.generateSpanId(); }); describe('inject', () => { diff --git a/packages/opentelemetry-core/test/platform/id.test.ts b/packages/opentelemetry-core/test/platform/RandomIdGenerator.test.ts similarity index 63% rename from packages/opentelemetry-core/test/platform/id.test.ts rename to packages/opentelemetry-core/test/platform/RandomIdGenerator.test.ts index c73e09fb0e..2400fa6ccc 100644 --- a/packages/opentelemetry-core/test/platform/id.test.ts +++ b/packages/opentelemetry-core/test/platform/RandomIdGenerator.test.ts @@ -13,36 +13,41 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import * as assert from 'assert'; -import { randomSpanId, randomTraceId } from '../../src/platform'; +import { RandomIdGenerator } from '../../src/platform'; + +const idGenerator = new RandomIdGenerator(); describe('randomTraceId', () => { + let traceId1: string, traceId2: string; + beforeEach(() => { + traceId1 = idGenerator.generateTraceId(); + traceId2 = idGenerator.generateTraceId(); + }); + it('returns 32 character hex strings', () => { - const traceId = randomTraceId(); - assert.ok(traceId.match(/[a-f0-9]{32}/)); - assert.ok(!traceId.match(/^0+$/)); + assert.ok(traceId1.match(/[a-f0-9]{32}/)); + assert.ok(!traceId1.match(/^0+$/)); }); it('returns different ids on each call', () => { - const traceId1 = randomTraceId(); - const traceId2 = randomTraceId(); - assert.notDeepStrictEqual(traceId1, traceId2); }); }); describe('randomSpanId', () => { + let spanId1: string, spanId2: string; + beforeEach(() => { + spanId1 = idGenerator.generateSpanId(); + spanId2 = idGenerator.generateSpanId(); + }); + it('returns 16 character hex strings', () => { - const spanId = randomSpanId(); - assert.ok(spanId.match(/[a-f0-9]{16}/)); - assert.ok(!spanId.match(/^0+$/)); + assert.ok(spanId1.match(/[a-f0-9]{16}/)); + assert.ok(!spanId1.match(/^0+$/)); }); it('returns different ids on each call', () => { - const spanId1 = randomSpanId(); - const spanId2 = randomSpanId(); - assert.notDeepStrictEqual(spanId1, spanId2); }); }); diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/protos b/packages/opentelemetry-exporter-collector/src/platform/node/protos index 9ffeee0ec5..b546885691 160000 --- a/packages/opentelemetry-exporter-collector/src/platform/node/protos +++ b/packages/opentelemetry-exporter-collector/src/platform/node/protos @@ -1 +1 @@ -Subproject commit 9ffeee0ec532efe02285af84880deb2a53a3eab1 +Subproject commit b54688569186e0b862bf7462a983ccf2c50c0547 diff --git a/packages/opentelemetry-tracing/src/Tracer.ts b/packages/opentelemetry-tracing/src/Tracer.ts index dc513d6dad..6f8fcc6f18 100644 --- a/packages/opentelemetry-tracing/src/Tracer.ts +++ b/packages/opentelemetry-tracing/src/Tracer.ts @@ -22,8 +22,8 @@ import { InstrumentationLibrary, isValid, NoRecordingSpan, - randomSpanId, - randomTraceId, + IdGenerator, + RandomIdGenerator, setActiveSpan, } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; @@ -38,6 +38,7 @@ import { mergeConfig } from './utility'; export class Tracer implements api.Tracer { private readonly _sampler: api.Sampler; private readonly _traceParams: TraceParams; + private readonly _idGenerator: IdGenerator; readonly resource: Resource; readonly instrumentationLibrary: InstrumentationLibrary; readonly logger: api.Logger; @@ -53,6 +54,7 @@ export class Tracer implements api.Tracer { const localConfig = mergeConfig(config); this._sampler = localConfig.sampler; this._traceParams = localConfig.traceParams; + this._idGenerator = config.idGenerator || new RandomIdGenerator(); this.resource = _tracerProvider.resource; this.instrumentationLibrary = instrumentationLibrary; this.logger = config.logger || new ConsoleLogger(config.logLevel); @@ -68,12 +70,12 @@ export class Tracer implements api.Tracer { context = api.context.active() ): api.Span { const parentContext = getParent(options, context); - const spanId = randomSpanId(); + const spanId = this._idGenerator.generateSpanId(); let traceId; let traceState; if (!parentContext || !isValid(parentContext)) { // New root span. - traceId = randomTraceId(); + traceId = this._idGenerator.generateTraceId(); } else { // New child span. traceId = parentContext.traceId; diff --git a/packages/opentelemetry-tracing/src/types.ts b/packages/opentelemetry-tracing/src/types.ts index a2ecc3939c..5bb34b12b3 100644 --- a/packages/opentelemetry-tracing/src/types.ts +++ b/packages/opentelemetry-tracing/src/types.ts @@ -15,7 +15,8 @@ */ import { HttpTextPropagator, Logger, Sampler } from '@opentelemetry/api'; -import { LogLevel } from '@opentelemetry/core'; +import { LogLevel, IdGenerator } from '@opentelemetry/core'; + import { ContextManager } from '@opentelemetry/context-base'; import { Resource } from '@opentelemetry/resources'; @@ -44,6 +45,12 @@ export interface TracerConfig { /** Bool for whether or not graceful shutdown is enabled */ gracefulShutdown?: boolean; + + /** + * Generator of trace and span IDs + * The default idGenerator generates random ids + */ + idGenerator?: IdGenerator; } /** From e6d49b4bb9810d6a05fbf1e8ba4027c0bfa397a9 Mon Sep 17 00:00:00 2001 From: Reginald McDonald <40721169+reggiemcdonald@users.noreply.github.com> Date: Fri, 31 Jul 2020 07:28:00 -0600 Subject: [PATCH 34/51] fix: require grpc-js instead of grpc in grpc-js example (#1364) Co-authored-by: Bartlomiej Obecny --- examples/grpc-js/helloworld_grpc_pb.js | 2 +- examples/grpc-js/server.js | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/examples/grpc-js/helloworld_grpc_pb.js b/examples/grpc-js/helloworld_grpc_pb.js index 1e39a0f46a..d96cae46c7 100644 --- a/examples/grpc-js/helloworld_grpc_pb.js +++ b/examples/grpc-js/helloworld_grpc_pb.js @@ -18,7 +18,7 @@ 'use strict'; -const grpc = require('grpc'); +const grpc = require('@grpc/grpc-js'); const helloworld_pb = require('./helloworld_pb.js'); function serialize_HelloReply(arg) { diff --git a/examples/grpc-js/server.js b/examples/grpc-js/server.js index 1b9d533172..1d71833ff1 100644 --- a/examples/grpc-js/server.js +++ b/examples/grpc-js/server.js @@ -2,7 +2,7 @@ const tracer = require('./tracer')(('example-grpc-server')); // eslint-disable-next-line import/order -const grpc = require('grpc'); +const grpc = require('@grpc/grpc-js'); const messages = require('./helloworld_pb'); const services = require('./helloworld_grpc_pb'); @@ -14,9 +14,10 @@ function startServer() { // Creates a server const server = new grpc.Server(); server.addService(services.GreeterService, { sayHello }); - server.bind(`0.0.0.0:${PORT}`, grpc.ServerCredentials.createInsecure()); - console.log(`binding server on 0.0.0.0:${PORT}`); - server.start(); + server.bindAsync(`0.0.0.0:${PORT}`, grpc.ServerCredentials.createInsecure(), () => { + console.log(`binding server on 0.0.0.0:${PORT}`); + server.start(); + }); } function sayHello(call, callback) { From 5727e6e693da6ca2afdaff844ec6af80fd9e66af Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 31 Jul 2020 17:09:42 +0200 Subject: [PATCH 35/51] chore(deps): update all non-major dependencies (#1371) --- package.json | 4 ++-- packages/opentelemetry-api/package.json | 6 +++--- .../opentelemetry-context-async-hooks/package.json | 2 +- packages/opentelemetry-context-base/package.json | 2 +- .../opentelemetry-context-zone-peer-dep/package.json | 8 ++++---- packages/opentelemetry-context-zone/package.json | 8 ++++---- packages/opentelemetry-core/package.json | 6 +++--- packages/opentelemetry-exporter-collector/package.json | 8 ++++---- packages/opentelemetry-exporter-jaeger/package.json | 2 +- .../opentelemetry-exporter-prometheus/package.json | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- packages/opentelemetry-grpc-utils/package.json | 2 +- packages/opentelemetry-metrics/package.json | 2 +- packages/opentelemetry-node/package.json | 2 +- packages/opentelemetry-plugin-fetch/package.json | 8 ++++---- packages/opentelemetry-plugin-grpc-js/package.json | 2 +- packages/opentelemetry-plugin-grpc/package.json | 2 +- packages/opentelemetry-plugin-http/package.json | 2 +- packages/opentelemetry-plugin-https/package.json | 2 +- .../opentelemetry-plugin-xml-http-request/package.json | 8 ++++---- packages/opentelemetry-resources/package.json | 2 +- packages/opentelemetry-sdk-node/package.json | 6 +++--- .../opentelemetry-semantic-conventions/package.json | 2 +- packages/opentelemetry-shim-opentracing/package.json | 2 +- packages/opentelemetry-tracing/package.json | 6 +++--- packages/opentelemetry-web/package.json | 10 +++++----- 26 files changed, 54 insertions(+), 54 deletions(-) diff --git a/package.json b/package.json index 27d64972e1..adf4bc1b38 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,8 @@ "devDependencies": { "@commitlint/cli": "9.1.1", "@commitlint/config-conventional": "9.1.1", - "@typescript-eslint/eslint-plugin": "3.7.0", - "@typescript-eslint/parser": "3.7.0", + "@typescript-eslint/eslint-plugin": "3.7.1", + "@typescript-eslint/parser": "3.7.1", "beautify-benchmark": "0.2.4", "benchmark": "2.1.4", "eslint": "7.5.0", diff --git a/packages/opentelemetry-api/package.json b/packages/opentelemetry-api/package.json index 64018a16cf..94dc66a090 100644 --- a/packages/opentelemetry-api/package.json +++ b/packages/opentelemetry-api/package.json @@ -56,12 +56,12 @@ }, "devDependencies": { "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/webpack-env": "1.15.2", "codecov": "3.7.2", "gts": "2.0.2", "istanbul-instrumenter-loader": "3.0.1", - "karma": "5.1.0", + "karma": "5.1.1", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", @@ -74,6 +74,6 @@ "ts-mocha": "7.0.0", "typedoc": "0.17.8", "typescript": "3.9.7", - "webpack": "4.44.0" + "webpack": "4.44.1" } } diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 15eca7120e..ffb5304864 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -43,7 +43,7 @@ }, "devDependencies": { "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/shimmer": "1.0.1", "codecov": "3.7.2", "gts": "2.0.2", diff --git a/packages/opentelemetry-context-base/package.json b/packages/opentelemetry-context-base/package.json index 68d1631c60..fc69810ee2 100644 --- a/packages/opentelemetry-context-base/package.json +++ b/packages/opentelemetry-context-base/package.json @@ -45,7 +45,7 @@ }, "devDependencies": { "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "codecov": "3.7.2", "gts": "2.0.2", "mocha": "7.2.0", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 66d84fcb60..db783fe3ca 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -42,9 +42,9 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.10.5", + "@babel/core": "7.11.0", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/sinon": "9.0.4", "@types/webpack-env": "1.15.2", "@types/zone.js": "0.5.12", @@ -52,7 +52,7 @@ "codecov": "3.7.2", "gts": "2.0.2", "istanbul-instrumenter-loader": "3.0.1", - "karma": "5.1.0", + "karma": "5.1.1", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", @@ -66,7 +66,7 @@ "ts-mocha": "7.0.0", "ts-node": "8.10.2", "typescript": "3.9.7", - "webpack": "4.44.0", + "webpack": "4.44.1", "webpack-cli": "3.3.12", "zone.js": "0.10.3" }, diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 559de79050..1d28de1259 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -39,15 +39,15 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.10.5", + "@babel/core": "7.11.0", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/sinon": "9.0.4", "@types/webpack-env": "1.15.2", "babel-loader": "8.1.0", "codecov": "3.7.2", "gts": "2.0.2", - "karma": "5.1.0", + "karma": "5.1.1", "karma-chrome-launcher": "3.1.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", @@ -60,7 +60,7 @@ "ts-mocha": "7.0.0", "ts-node": "8.10.2", "typescript": "3.9.7", - "webpack": "4.44.0", + "webpack": "4.44.1", "webpack-cli": "3.3.12", "webpack-merge": "5.0.9" }, diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 0b47a73ce2..0a8c2e8168 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -53,14 +53,14 @@ }, "devDependencies": { "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/semver": "7.3.1", "@types/sinon": "9.0.4", "@types/webpack-env": "1.15.2", "codecov": "3.7.2", "gts": "2.0.2", "istanbul-instrumenter-loader": "3.0.1", - "karma": "5.1.0", + "karma": "5.1.1", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", @@ -74,7 +74,7 @@ "ts-mocha": "7.0.0", "ts-node": "8.10.2", "typescript": "3.9.7", - "webpack": "4.44.0" + "webpack": "4.44.1" }, "dependencies": { "@opentelemetry/api": "^0.10.1", diff --git a/packages/opentelemetry-exporter-collector/package.json b/packages/opentelemetry-exporter-collector/package.json index ff7bde3378..01808cc83f 100644 --- a/packages/opentelemetry-exporter-collector/package.json +++ b/packages/opentelemetry-exporter-collector/package.json @@ -54,9 +54,9 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.10.5", + "@babel/core": "7.11.0", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/sinon": "9.0.4", "@types/webpack-env": "1.15.2", "babel-loader": "8.1.0", @@ -64,7 +64,7 @@ "cpx": "1.5.0", "gts": "2.0.2", "istanbul-instrumenter-loader": "3.0.1", - "karma": "5.1.0", + "karma": "5.1.1", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", @@ -78,7 +78,7 @@ "ts-mocha": "7.0.0", "ts-node": "8.10.2", "typescript": "3.9.7", - "webpack": "4.44.0", + "webpack": "4.44.1", "webpack-cli": "3.3.12", "webpack-merge": "5.0.9" }, diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 0c50b8e272..296ec0974c 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -44,7 +44,7 @@ "devDependencies": { "@opentelemetry/resources": "^0.10.1", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "codecov": "3.7.2", "gts": "2.0.2", "mocha": "7.2.0", diff --git a/packages/opentelemetry-exporter-prometheus/package.json b/packages/opentelemetry-exporter-prometheus/package.json index 4971bfca35..485bf4c952 100644 --- a/packages/opentelemetry-exporter-prometheus/package.json +++ b/packages/opentelemetry-exporter-prometheus/package.json @@ -42,7 +42,7 @@ }, "devDependencies": { "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "codecov": "3.7.2", "gts": "2.0.2", "mocha": "7.2.0", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index a57d3a7c4e..e924ced330 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -41,7 +41,7 @@ }, "devDependencies": { "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "codecov": "3.7.2", "gts": "2.0.2", "mocha": "7.2.0", diff --git a/packages/opentelemetry-grpc-utils/package.json b/packages/opentelemetry-grpc-utils/package.json index ff5eaa3f56..c9686cbc14 100644 --- a/packages/opentelemetry-grpc-utils/package.json +++ b/packages/opentelemetry-grpc-utils/package.json @@ -49,7 +49,7 @@ "@opentelemetry/node": "^0.10.1", "@opentelemetry/tracing": "^0.10.1", "@types/mocha": "7.0.2", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/semver": "7.3.1", "@types/shimmer": "1.0.1", "@types/sinon": "9.0.4", diff --git a/packages/opentelemetry-metrics/package.json b/packages/opentelemetry-metrics/package.json index c4ebd22474..09395fd163 100644 --- a/packages/opentelemetry-metrics/package.json +++ b/packages/opentelemetry-metrics/package.json @@ -43,7 +43,7 @@ }, "devDependencies": { "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/sinon": "9.0.4", "codecov": "3.7.2", "gts": "2.0.2", diff --git a/packages/opentelemetry-node/package.json b/packages/opentelemetry-node/package.json index bed6242c51..fdf464f26e 100644 --- a/packages/opentelemetry-node/package.json +++ b/packages/opentelemetry-node/package.json @@ -45,7 +45,7 @@ "@opentelemetry/context-base": "^0.10.1", "@opentelemetry/resources": "^0.10.1", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/semver": "7.3.1", "@types/shimmer": "1.0.1", "codecov": "3.7.2", diff --git a/packages/opentelemetry-plugin-fetch/package.json b/packages/opentelemetry-plugin-fetch/package.json index 24566cc249..c5db15d2f9 100644 --- a/packages/opentelemetry-plugin-fetch/package.json +++ b/packages/opentelemetry-plugin-fetch/package.json @@ -44,11 +44,11 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.10.5", + "@babel/core": "7.11.0", "@opentelemetry/context-zone": "^0.10.1", "@opentelemetry/tracing": "^0.10.1", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/shimmer": "1.0.1", "@types/sinon": "7.5.2", "@types/webpack-env": "1.15.2", @@ -56,7 +56,7 @@ "codecov": "3.7.2", "gts": "2.0.2", "istanbul-instrumenter-loader": "3.0.1", - "karma": "5.1.0", + "karma": "5.1.1", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", @@ -70,7 +70,7 @@ "ts-mocha": "7.0.0", "ts-node": "8.10.2", "typescript": "3.9.7", - "webpack": "4.44.0", + "webpack": "4.44.1", "webpack-cli": "3.3.12", "webpack-merge": "5.0.9" }, diff --git a/packages/opentelemetry-plugin-grpc-js/package.json b/packages/opentelemetry-plugin-grpc-js/package.json index 4806982d22..d3aa8785cd 100644 --- a/packages/opentelemetry-plugin-grpc-js/package.json +++ b/packages/opentelemetry-plugin-grpc-js/package.json @@ -51,7 +51,7 @@ "@opentelemetry/node": "^0.10.1", "@opentelemetry/tracing": "^0.10.1", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/semver": "7.3.1", "@types/shimmer": "1.0.1", "@types/sinon": "9.0.4", diff --git a/packages/opentelemetry-plugin-grpc/package.json b/packages/opentelemetry-plugin-grpc/package.json index 7b48a41b9d..19c2333b06 100644 --- a/packages/opentelemetry-plugin-grpc/package.json +++ b/packages/opentelemetry-plugin-grpc/package.json @@ -48,7 +48,7 @@ "@opentelemetry/node": "^0.10.1", "@opentelemetry/tracing": "^0.10.1", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/semver": "7.3.1", "@types/shimmer": "1.0.1", "@types/sinon": "9.0.4", diff --git a/packages/opentelemetry-plugin-http/package.json b/packages/opentelemetry-plugin-http/package.json index 1d60be118c..0cc190c0f0 100644 --- a/packages/opentelemetry-plugin-http/package.json +++ b/packages/opentelemetry-plugin-http/package.json @@ -48,7 +48,7 @@ "@opentelemetry/tracing": "^0.10.1", "@types/got": "9.6.11", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/request-promise-native": "1.0.17", "@types/semver": "7.3.1", "@types/shimmer": "1.0.1", diff --git a/packages/opentelemetry-plugin-https/package.json b/packages/opentelemetry-plugin-https/package.json index 7caf9bb72f..f974b7d49e 100644 --- a/packages/opentelemetry-plugin-https/package.json +++ b/packages/opentelemetry-plugin-https/package.json @@ -48,7 +48,7 @@ "@opentelemetry/tracing": "^0.10.1", "@types/got": "9.6.11", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/request-promise-native": "1.0.17", "@types/semver": "7.3.1", "@types/shimmer": "1.0.1", diff --git a/packages/opentelemetry-plugin-xml-http-request/package.json b/packages/opentelemetry-plugin-xml-http-request/package.json index b490fcff02..714ce3850e 100644 --- a/packages/opentelemetry-plugin-xml-http-request/package.json +++ b/packages/opentelemetry-plugin-xml-http-request/package.json @@ -44,11 +44,11 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.10.5", + "@babel/core": "7.11.0", "@opentelemetry/context-zone": "^0.10.1", "@opentelemetry/tracing": "^0.10.1", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/shimmer": "1.0.1", "@types/sinon": "9.0.4", "@types/webpack-env": "1.15.2", @@ -56,7 +56,7 @@ "codecov": "3.7.2", "gts": "2.0.2", "istanbul-instrumenter-loader": "3.0.1", - "karma": "5.1.0", + "karma": "5.1.1", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", @@ -70,7 +70,7 @@ "ts-mocha": "7.0.0", "ts-node": "8.10.2", "typescript": "3.9.7", - "webpack": "4.44.0", + "webpack": "4.44.1", "webpack-cli": "3.3.12", "webpack-merge": "5.0.9" }, diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 179f22fa03..137502387b 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -46,7 +46,7 @@ }, "devDependencies": { "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/sinon": "9.0.4", "codecov": "3.7.2", "gts": "2.0.2", diff --git a/packages/opentelemetry-sdk-node/package.json b/packages/opentelemetry-sdk-node/package.json index c5ea9137fb..b01340bd68 100644 --- a/packages/opentelemetry-sdk-node/package.json +++ b/packages/opentelemetry-sdk-node/package.json @@ -53,14 +53,14 @@ "devDependencies": { "@opentelemetry/context-async-hooks": "^0.10.1", "@types/mocha": "7.0.2", - "@types/node": "14.0.13", - "codecov": "3.7.0", + "@types/node": "14.0.27", + "codecov": "3.7.2", "gts": "2.0.2", "istanbul-instrumenter-loader": "3.0.1", "mocha": "7.2.0", "nyc": "15.1.0", "ts-loader": "7.0.5", "ts-mocha": "7.0.0", - "typescript": "3.9.5" + "typescript": "3.9.7" } } diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index b4c5934f6d..e8501cddf0 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -42,7 +42,7 @@ }, "devDependencies": { "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/sinon": "9.0.4", "codecov": "3.7.2", "gts": "2.0.2", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index 42d5058d09..4b4c8410c1 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -42,7 +42,7 @@ "devDependencies": { "@opentelemetry/tracing": "^0.10.1", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "codecov": "3.7.2", "gts": "2.0.2", "mocha": "7.2.0", diff --git a/packages/opentelemetry-tracing/package.json b/packages/opentelemetry-tracing/package.json index 2684d860d2..05e9e976ee 100644 --- a/packages/opentelemetry-tracing/package.json +++ b/packages/opentelemetry-tracing/package.json @@ -51,13 +51,13 @@ }, "devDependencies": { "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/sinon": "9.0.4", "@types/webpack-env": "1.15.2", "codecov": "3.7.2", "gts": "2.0.2", "istanbul-instrumenter-loader": "3.0.1", - "karma": "5.1.0", + "karma": "5.1.1", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", @@ -71,7 +71,7 @@ "ts-mocha": "7.0.0", "ts-node": "8.10.2", "typescript": "3.9.7", - "webpack": "4.44.0" + "webpack": "4.44.1" }, "dependencies": { "@opentelemetry/api": "^0.10.1", diff --git a/packages/opentelemetry-web/package.json b/packages/opentelemetry-web/package.json index 1afe427c8a..f492f76cfb 100644 --- a/packages/opentelemetry-web/package.json +++ b/packages/opentelemetry-web/package.json @@ -43,19 +43,19 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.10.5", + "@babel/core": "7.11.0", "@opentelemetry/context-zone": "^0.10.1", "@opentelemetry/resources": "^0.10.1", - "@types/jquery": "3.5.0", + "@types/jquery": "3.5.1", "@types/mocha": "8.0.0", - "@types/node": "14.0.25", + "@types/node": "14.0.27", "@types/sinon": "9.0.4", "@types/webpack-env": "1.15.2", "babel-loader": "8.1.0", "codecov": "3.7.2", "gts": "2.0.2", "istanbul-instrumenter-loader": "3.0.1", - "karma": "5.1.0", + "karma": "5.1.1", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-jquery": "0.2.4", @@ -70,7 +70,7 @@ "ts-mocha": "7.0.0", "ts-node": "8.10.2", "typescript": "3.9.7", - "webpack": "4.44.0", + "webpack": "4.44.1", "webpack-cli": "3.3.12", "webpack-merge": "5.0.9" }, From 451c99ce34abf39bdbce2fe2c52bcfab65508e6e Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Mon, 3 Aug 2020 18:29:32 -0400 Subject: [PATCH 36/51] chore: bump metapackage dependencies (#1383) --- metapackages/plugins-node-all/package.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/metapackages/plugins-node-all/package.json b/metapackages/plugins-node-all/package.json index c1e472e4f7..5428911ed5 100644 --- a/metapackages/plugins-node-all/package.json +++ b/metapackages/plugins-node-all/package.json @@ -16,13 +16,13 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/plugin-express": "0.8.0", - "@opentelemetry/plugin-ioredis": "0.8.0", - "@opentelemetry/plugin-mongodb": "0.8.0", - "@opentelemetry/plugin-mysql": "0.8.0", - "@opentelemetry/plugin-pg": "0.8.0", - "@opentelemetry/plugin-pg-pool": "0.8.0", - "@opentelemetry/plugin-redis": "0.8.0", + "@opentelemetry/plugin-express": "0.9.0", + "@opentelemetry/plugin-ioredis": "0.9.0", + "@opentelemetry/plugin-mongodb": "0.9.0", + "@opentelemetry/plugin-mysql": "0.9.0", + "@opentelemetry/plugin-pg": "0.9.0", + "@opentelemetry/plugin-pg-pool": "0.9.0", + "@opentelemetry/plugin-redis": "0.9.0", "@opentelemetry/plugins-node-core": "^0.10.1" } } From 9336bfa693c3511e8e4aef8b862475ca1e602fbf Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Mon, 3 Aug 2020 19:16:43 -0400 Subject: [PATCH 37/51] chore: 0.10.2 proposal (#1382) --- CHANGELOG.md | 15 +++++++++++++++ examples/basic-tracer-node/package.json | 8 ++++---- examples/collector-exporter-node/package.json | 10 +++++----- examples/grpc-js/package.json | 14 +++++++------- examples/grpc/package.json | 14 +++++++------- examples/http/package.json | 14 +++++++------- examples/https/package.json | 14 +++++++------- examples/metrics/package.json | 8 ++++---- examples/opentracing-shim/package.json | 12 ++++++------ examples/prometheus/package.json | 6 +++--- examples/tracer-web/package.json | 16 ++++++++-------- getting-started/monitored-example/package.json | 2 +- getting-started/traced-example/package.json | 12 ++++++------ getting-started/ts-example/package.json | 16 ++++++++-------- lerna.json | 2 +- metapackages/plugins-node-all/package.json | 4 ++-- metapackages/plugins-node-core/package.json | 10 +++++----- metapackages/plugins-web-core/package.json | 4 ++-- package.json | 2 +- packages/opentelemetry-api/package.json | 4 ++-- packages/opentelemetry-api/src/version.ts | 2 +- .../package.json | 4 ++-- .../src/version.ts | 2 +- .../opentelemetry-context-base/package.json | 2 +- .../opentelemetry-context-base/src/version.ts | 2 +- .../package.json | 4 ++-- .../src/version.ts | 2 +- .../opentelemetry-context-zone/package.json | 4 ++-- .../opentelemetry-context-zone/src/version.ts | 2 +- packages/opentelemetry-core/package.json | 6 +++--- packages/opentelemetry-core/src/version.ts | 2 +- .../package.json | 12 ++++++------ .../src/version.ts | 2 +- .../opentelemetry-exporter-jaeger/package.json | 10 +++++----- .../src/version.ts | 2 +- .../package.json | 8 ++++---- .../src/version.ts | 2 +- .../opentelemetry-exporter-zipkin/package.json | 10 +++++----- .../src/version.ts | 2 +- packages/opentelemetry-grpc-utils/package.json | 16 ++++++++-------- .../opentelemetry-grpc-utils/src/version.ts | 2 +- packages/opentelemetry-metrics/package.json | 8 ++++---- packages/opentelemetry-metrics/src/version.ts | 2 +- packages/opentelemetry-node/package.json | 14 +++++++------- packages/opentelemetry-node/src/version.ts | 2 +- .../opentelemetry-plugin-fetch/package.json | 12 ++++++------ .../opentelemetry-plugin-fetch/src/version.ts | 2 +- .../opentelemetry-plugin-grpc-js/package.json | 18 +++++++++--------- .../src/version.ts | 2 +- .../opentelemetry-plugin-grpc/package.json | 18 +++++++++--------- .../opentelemetry-plugin-grpc/src/version.ts | 2 +- .../opentelemetry-plugin-http/package.json | 16 ++++++++-------- .../opentelemetry-plugin-http/src/version.ts | 2 +- .../opentelemetry-plugin-https/package.json | 18 +++++++++--------- .../opentelemetry-plugin-https/src/version.ts | 2 +- .../package.json | 14 +++++++------- .../src/version.ts | 2 +- packages/opentelemetry-resources/package.json | 6 +++--- .../opentelemetry-resources/src/version.ts | 2 +- packages/opentelemetry-sdk-node/package.json | 18 +++++++++--------- packages/opentelemetry-sdk-node/src/version.ts | 2 +- .../package.json | 2 +- .../src/version.ts | 2 +- .../package.json | 8 ++++---- .../src/version.ts | 2 +- packages/opentelemetry-tracing/package.json | 10 +++++----- packages/opentelemetry-tracing/src/version.ts | 2 +- packages/opentelemetry-web/package.json | 16 ++++++++-------- packages/opentelemetry-web/src/version.ts | 2 +- 69 files changed, 253 insertions(+), 238 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9dd1c1e81..44ceab2adb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,21 @@ All notable changes to this project will be documented in this file. ## Unreleased +## 0.10.2 + +### :rocket: (Enhancement) + +* `opentelemetry-core`, `opentelemetry-tracing` + * [#1331](https://github.com/open-telemetry/opentelemetry-js/pull/1331) Feat: Make ID generator configurable ([@EdZou](https://github.com/EdZou)) +* `opentelemetry-api`, `opentelemetry-context-base` + * [#1368](https://github.com/open-telemetry/opentelemetry-js/pull/1368) feat(api/context-base): change compile target to es5 ([@markwolff](https://github.com/markwolff)) + +### Committers: 3 + +* Cong Zou ([@EdZou](https://github.com/EdZou)) +* Mark Wolff ([@markwolff](https://github.com/markwolff)) +* Reginald McDonald ([@reggiemcdonald](https://github.com/reggiemcdonald)) + ## 0.10.1 ### :bug: (Bug Fix) diff --git a/examples/basic-tracer-node/package.json b/examples/basic-tracer-node/package.json index 32562fed6f..80ae839410 100644 --- a/examples/basic-tracer-node/package.json +++ b/examples/basic-tracer-node/package.json @@ -1,7 +1,7 @@ { "name": "example-basic-tracer-node", "private": true, - "version": "0.10.1", + "version": "0.10.2", "description": "Example of using @opentelemetry/tracing in Node.js", "main": "index.js", "scripts": { @@ -24,9 +24,9 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/exporter-jaeger": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1" + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/exporter-jaeger": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/examples/collector-exporter-node/package.json b/examples/collector-exporter-node/package.json index 7a40b6baaa..8e3b821028 100644 --- a/examples/collector-exporter-node/package.json +++ b/examples/collector-exporter-node/package.json @@ -1,7 +1,7 @@ { "name": "example-collector-exporter-node", "private": true, - "version": "0.10.1", + "version": "0.10.2", "description": "Example of using @opentelemetry/collector-exporter in Node.js", "main": "index.js", "scripts": { @@ -27,10 +27,10 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/exporter-collector": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1" + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/exporter-collector": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/examples/grpc-js/package.json b/examples/grpc-js/package.json index e2b56f7f32..423f8801a4 100644 --- a/examples/grpc-js/package.json +++ b/examples/grpc-js/package.json @@ -1,7 +1,7 @@ { "name": "grpc-js-example", "private": true, - "version": "0.10.1", + "version": "0.10.2", "description": "Example of @grpc/grpc-js integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -29,12 +29,12 @@ }, "dependencies": { "@grpc/grpc-js": "^1.0.5", - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/exporter-jaeger": "^0.10.1", - "@opentelemetry/exporter-zipkin": "^0.10.1", - "@opentelemetry/node": "^0.10.1", - "@opentelemetry/plugin-grpc-js": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/exporter-jaeger": "^0.10.2", + "@opentelemetry/exporter-zipkin": "^0.10.2", + "@opentelemetry/node": "^0.10.2", + "@opentelemetry/plugin-grpc-js": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "google-protobuf": "^3.9.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", diff --git a/examples/grpc/package.json b/examples/grpc/package.json index 3ba7579bd8..3dad213e26 100644 --- a/examples/grpc/package.json +++ b/examples/grpc/package.json @@ -1,7 +1,7 @@ { "name": "grpc-example", "private": true, - "version": "0.10.1", + "version": "0.10.2", "description": "Example of gRPC integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -28,12 +28,12 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/exporter-jaeger": "^0.10.1", - "@opentelemetry/exporter-zipkin": "^0.10.1", - "@opentelemetry/node": "^0.10.1", - "@opentelemetry/plugin-grpc": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/exporter-jaeger": "^0.10.2", + "@opentelemetry/exporter-zipkin": "^0.10.2", + "@opentelemetry/node": "^0.10.2", + "@opentelemetry/plugin-grpc": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "google-protobuf": "^3.9.2", "grpc": "^1.23.3", "node-pre-gyp": "0.12.0" diff --git a/examples/http/package.json b/examples/http/package.json index 9ff3dba350..c593521cdc 100644 --- a/examples/http/package.json +++ b/examples/http/package.json @@ -1,7 +1,7 @@ { "name": "http-example", "private": true, - "version": "0.10.1", + "version": "0.10.2", "description": "Example of HTTP integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -28,12 +28,12 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/exporter-jaeger": "^0.10.1", - "@opentelemetry/exporter-zipkin": "^0.10.1", - "@opentelemetry/node": "^0.10.1", - "@opentelemetry/plugin-http": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1" + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/exporter-jaeger": "^0.10.2", + "@opentelemetry/exporter-zipkin": "^0.10.2", + "@opentelemetry/node": "^0.10.2", + "@opentelemetry/plugin-http": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", "devDependencies": { diff --git a/examples/https/package.json b/examples/https/package.json index 167aeab566..ddcfd1c17e 100644 --- a/examples/https/package.json +++ b/examples/https/package.json @@ -1,7 +1,7 @@ { "name": "https-example", "private": true, - "version": "0.10.1", + "version": "0.10.2", "description": "Example of HTTPs integration with OpenTelemetry", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -29,12 +29,12 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/exporter-jaeger": "^0.10.1", - "@opentelemetry/exporter-zipkin": "^0.10.1", - "@opentelemetry/node": "^0.10.1", - "@opentelemetry/plugin-https": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1" + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/exporter-jaeger": "^0.10.2", + "@opentelemetry/exporter-zipkin": "^0.10.2", + "@opentelemetry/node": "^0.10.2", + "@opentelemetry/plugin-https": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", "devDependencies": { diff --git a/examples/metrics/package.json b/examples/metrics/package.json index 778aa6bd33..80a6487062 100644 --- a/examples/metrics/package.json +++ b/examples/metrics/package.json @@ -1,7 +1,7 @@ { "name": "example-metrics", "private": true, - "version": "0.10.1", + "version": "0.10.2", "description": "Example of using @opentelemetry/metrics", "main": "index.js", "scripts": { @@ -26,9 +26,9 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/exporter-prometheus": "^0.10.1", - "@opentelemetry/metrics": "^0.10.1" + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/exporter-prometheus": "^0.10.2", + "@opentelemetry/metrics": "^0.10.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/examples/opentracing-shim/package.json b/examples/opentracing-shim/package.json index f4254ef33e..79cfdc38e5 100644 --- a/examples/opentracing-shim/package.json +++ b/examples/opentracing-shim/package.json @@ -1,7 +1,7 @@ { "name": "opentracing-shim", "private": true, - "version": "0.10.1", + "version": "0.10.2", "description": "Example of using @opentelemetry/shim-opentracing in Node.js", "main": "index.js", "scripts": { @@ -29,11 +29,11 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/exporter-jaeger": "^0.10.1", - "@opentelemetry/exporter-zipkin": "^0.10.1", - "@opentelemetry/node": "^0.10.1", - "@opentelemetry/shim-opentracing": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/exporter-jaeger": "^0.10.2", + "@opentelemetry/exporter-zipkin": "^0.10.2", + "@opentelemetry/node": "^0.10.2", + "@opentelemetry/shim-opentracing": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "opentracing": "^0.14.4" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", diff --git a/examples/prometheus/package.json b/examples/prometheus/package.json index 27bd7c31a9..3a073fd844 100644 --- a/examples/prometheus/package.json +++ b/examples/prometheus/package.json @@ -1,6 +1,6 @@ { "name": "prometheus-example", - "version": "0.10.1", + "version": "0.10.2", "description": "Example of using @opentelemetry/metrics and @opentelemetry/exporter-prometheus", "main": "index.js", "scripts": { @@ -9,7 +9,7 @@ "author": "OpenTelemetry Authors", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/exporter-prometheus": "^0.10.1", - "@opentelemetry/metrics": "^0.10.1" + "@opentelemetry/exporter-prometheus": "^0.10.2", + "@opentelemetry/metrics": "^0.10.2" } } diff --git a/examples/tracer-web/package.json b/examples/tracer-web/package.json index 5d30774cc5..606b33ec52 100644 --- a/examples/tracer-web/package.json +++ b/examples/tracer-web/package.json @@ -1,7 +1,7 @@ { "name": "web-tracer-example", "private": true, - "version": "0.10.1", + "version": "0.10.2", "description": "Example of using @opentelemetry/web in browser", "main": "index.js", "scripts": { @@ -34,15 +34,15 @@ "webpack-merge": "^4.2.2" }, "dependencies": { - "@opentelemetry/context-zone": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/exporter-collector": "^0.10.1", + "@opentelemetry/context-zone": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/exporter-collector": "^0.10.2", "@opentelemetry/plugin-document-load": "^0.6.1", - "@opentelemetry/plugin-fetch": "^0.10.1", + "@opentelemetry/plugin-fetch": "^0.10.2", "@opentelemetry/plugin-user-interaction": "^0.6.1", - "@opentelemetry/plugin-xml-http-request": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", - "@opentelemetry/web": "^0.10.1" + "@opentelemetry/plugin-xml-http-request": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", + "@opentelemetry/web": "^0.10.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/getting-started/monitored-example/package.json b/getting-started/monitored-example/package.json index 43945ef15d..ed35cae927 100644 --- a/getting-started/monitored-example/package.json +++ b/getting-started/monitored-example/package.json @@ -9,7 +9,7 @@ "author": "OpenTelemetry Authors", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/metrics": "^0.10.1", + "@opentelemetry/metrics": "^0.10.2", "axios": "^0.19.0", "express": "^4.17.1" } diff --git a/getting-started/traced-example/package.json b/getting-started/traced-example/package.json index 20e97607d0..cfcb1267ec 100644 --- a/getting-started/traced-example/package.json +++ b/getting-started/traced-example/package.json @@ -9,13 +9,13 @@ "author": "OpenTelemetry Authors", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/exporter-zipkin": "^0.10.1", - "@opentelemetry/node": "^0.10.1", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/exporter-zipkin": "^0.10.2", + "@opentelemetry/node": "^0.10.2", "@opentelemetry/plugin-express": "^0.8.0", - "@opentelemetry/plugin-http": "^0.10.1", - "@opentelemetry/plugin-https": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/plugin-http": "^0.10.2", + "@opentelemetry/plugin-https": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "axios": "^0.19.0", "express": "^4.17.1" } diff --git a/getting-started/ts-example/package.json b/getting-started/ts-example/package.json index 7b237ad552..d0a3d48615 100644 --- a/getting-started/ts-example/package.json +++ b/getting-started/ts-example/package.json @@ -13,14 +13,14 @@ "ts-node": "8.10.2" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/exporter-prometheus": "^0.10.1", - "@opentelemetry/exporter-zipkin": "^0.10.1", - "@opentelemetry/metrics": "^0.10.1", - "@opentelemetry/node": "^0.10.1", - "@opentelemetry/plugin-http": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/exporter-prometheus": "^0.10.2", + "@opentelemetry/exporter-zipkin": "^0.10.2", + "@opentelemetry/metrics": "^0.10.2", + "@opentelemetry/node": "^0.10.2", + "@opentelemetry/plugin-http": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "axios": "^0.19.1", "express": "^4.17.1" } diff --git a/lerna.json b/lerna.json index 1792f5e6e0..c609aa1511 100644 --- a/lerna.json +++ b/lerna.json @@ -6,7 +6,7 @@ "metapackages/*", "packages/*" ], - "version": "0.10.1", + "version": "0.10.2", "changelog": { "repo": "open-telemetry/opentelemetry-js", "labels": { diff --git a/metapackages/plugins-node-all/package.json b/metapackages/plugins-node-all/package.json index 5428911ed5..e512c07b26 100644 --- a/metapackages/plugins-node-all/package.json +++ b/metapackages/plugins-node-all/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugins-node-all", - "version": "0.10.1", + "version": "0.10.2", "description": "Metapackage which bundles opentelemetry node core and contrib plugins", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", @@ -23,6 +23,6 @@ "@opentelemetry/plugin-pg": "0.9.0", "@opentelemetry/plugin-pg-pool": "0.9.0", "@opentelemetry/plugin-redis": "0.9.0", - "@opentelemetry/plugins-node-core": "^0.10.1" + "@opentelemetry/plugins-node-core": "^0.10.2" } } diff --git a/metapackages/plugins-node-core/package.json b/metapackages/plugins-node-core/package.json index db1f931292..d504b4bf1d 100644 --- a/metapackages/plugins-node-core/package.json +++ b/metapackages/plugins-node-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugins-node-core", - "version": "0.10.1", + "version": "0.10.2", "description": "Metapackage which bundles all opentelemetry node core plugins", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", @@ -16,9 +16,9 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/plugin-grpc": "^0.10.1", - "@opentelemetry/plugin-grpc-js": "^0.10.1", - "@opentelemetry/plugin-http": "^0.10.1", - "@opentelemetry/plugin-https": "^0.10.1" + "@opentelemetry/plugin-grpc": "^0.10.2", + "@opentelemetry/plugin-grpc-js": "^0.10.2", + "@opentelemetry/plugin-http": "^0.10.2", + "@opentelemetry/plugin-https": "^0.10.2" } } diff --git a/metapackages/plugins-web-core/package.json b/metapackages/plugins-web-core/package.json index df9a540096..1c9f460697 100644 --- a/metapackages/plugins-web-core/package.json +++ b/metapackages/plugins-web-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugins-web-core", - "version": "0.10.1", + "version": "0.10.2", "description": "Metapackage which bundles all opentelemetry web core plugins", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", @@ -16,6 +16,6 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/plugin-xml-http-request": "^0.10.1" + "@opentelemetry/plugin-xml-http-request": "^0.10.2" } } diff --git a/package.json b/package.json index adf4bc1b38..b6920816ce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "opentelemetry-base", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry is a distributed tracing and stats collection framework.", "main": "build/src/index.js", "types": "build/src/index.d.ts", diff --git a/packages/opentelemetry-api/package.json b/packages/opentelemetry-api/package.json index 94dc66a090..7b2d78a192 100644 --- a/packages/opentelemetry-api/package.json +++ b/packages/opentelemetry-api/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api", - "version": "0.10.1", + "version": "0.10.2", "description": "Public API for OpenTelemetry", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -52,7 +52,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/context-base": "^0.10.1" + "@opentelemetry/context-base": "^0.10.2" }, "devDependencies": { "@types/mocha": "8.0.0", diff --git a/packages/opentelemetry-api/src/version.ts b/packages/opentelemetry-api/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-api/src/version.ts +++ b/packages/opentelemetry-api/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index ffb5304864..95b4425fae 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-async-hooks", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry AsyncHooks-based Context Manager", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -55,6 +55,6 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/context-base": "^0.10.1" + "@opentelemetry/context-base": "^0.10.2" } } diff --git a/packages/opentelemetry-context-async-hooks/src/version.ts b/packages/opentelemetry-context-async-hooks/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-context-async-hooks/src/version.ts +++ b/packages/opentelemetry-context-async-hooks/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-context-base/package.json b/packages/opentelemetry-context-base/package.json index fc69810ee2..199809cd9b 100644 --- a/packages/opentelemetry-context-base/package.json +++ b/packages/opentelemetry-context-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-base", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry Base Context Manager", "main": "build/src/index.js", "types": "build/src/index.d.ts", diff --git a/packages/opentelemetry-context-base/src/version.ts b/packages/opentelemetry-context-base/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-context-base/src/version.ts +++ b/packages/opentelemetry-context-base/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index db783fe3ca..d91c4882a5 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-zone-peer-dep", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry Context Zone with peer dependency for zone.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -71,7 +71,7 @@ "zone.js": "0.10.3" }, "dependencies": { - "@opentelemetry/context-base": "^0.10.1" + "@opentelemetry/context-base": "^0.10.2" }, "peerDependencies": { "zone.js": "^0.10.2" diff --git a/packages/opentelemetry-context-zone-peer-dep/src/version.ts b/packages/opentelemetry-context-zone-peer-dep/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-context-zone-peer-dep/src/version.ts +++ b/packages/opentelemetry-context-zone-peer-dep/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 1d28de1259..1b8bfb9eed 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-zone", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry Context Zone", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -65,7 +65,7 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "^0.10.1", + "@opentelemetry/context-zone-peer-dep": "^0.10.2", "zone.js": "^0.10.2" }, "sideEffects": true diff --git a/packages/opentelemetry-context-zone/src/version.ts b/packages/opentelemetry-context-zone/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-context-zone/src/version.ts +++ b/packages/opentelemetry-context-zone/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 0a8c2e8168..6083837148 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/core", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry Core provides default and no-op implementations of the OpenTelemetry types for trace and metrics", "main": "build/src/index.js", "browser": { @@ -77,8 +77,8 @@ "webpack": "4.44.1" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/context-base": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/context-base": "^0.10.2", "semver": "^7.1.3" } } diff --git a/packages/opentelemetry-core/src/version.ts b/packages/opentelemetry-core/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-core/src/version.ts +++ b/packages/opentelemetry-core/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-exporter-collector/package.json b/packages/opentelemetry-exporter-collector/package.json index 01808cc83f..f05605fdf3 100644 --- a/packages/opentelemetry-exporter-collector/package.json +++ b/packages/opentelemetry-exporter-collector/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-collector", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry Collector Exporter allows user to send collected traces to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -84,11 +84,11 @@ }, "dependencies": { "@grpc/proto-loader": "^0.5.4", - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/metrics": "^0.10.1", - "@opentelemetry/resources": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/metrics": "^0.10.2", + "@opentelemetry/resources": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "grpc": "^1.24.2", "protobufjs": "^6.9.0" } diff --git a/packages/opentelemetry-exporter-collector/src/version.ts b/packages/opentelemetry-exporter-collector/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-exporter-collector/src/version.ts +++ b/packages/opentelemetry-exporter-collector/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 296ec0974c..fd390e65f0 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-jaeger", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry Exporter Jaeger allows user to send collected traces to Jaeger", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,7 +42,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/resources": "^0.10.1", + "@opentelemetry/resources": "^0.10.2", "@types/mocha": "8.0.0", "@types/node": "14.0.27", "codecov": "3.7.2", @@ -56,9 +56,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "jaeger-client": "^3.15.0" } } diff --git a/packages/opentelemetry-exporter-jaeger/src/version.ts b/packages/opentelemetry-exporter-jaeger/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-exporter-jaeger/src/version.ts +++ b/packages/opentelemetry-exporter-jaeger/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-exporter-prometheus/package.json b/packages/opentelemetry-exporter-prometheus/package.json index 485bf4c952..374f5676ed 100644 --- a/packages/opentelemetry-exporter-prometheus/package.json +++ b/packages/opentelemetry-exporter-prometheus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-prometheus", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry Exporter Prometheus provides a metrics endpoint for Prometheus", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -53,9 +53,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/metrics": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/metrics": "^0.10.2", "prom-client": "^11.5.3" } } diff --git a/packages/opentelemetry-exporter-prometheus/src/version.ts b/packages/opentelemetry-exporter-prometheus/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-exporter-prometheus/src/version.ts +++ b/packages/opentelemetry-exporter-prometheus/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index e924ced330..550b4e7be2 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-zipkin", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry Zipkin Exporter allows the user to send collected traces to Zipkin.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -53,9 +53,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/resources": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1" + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/resources": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2" } } diff --git a/packages/opentelemetry-exporter-zipkin/src/version.ts b/packages/opentelemetry-exporter-zipkin/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-exporter-zipkin/src/version.ts +++ b/packages/opentelemetry-exporter-zipkin/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-grpc-utils/package.json b/packages/opentelemetry-grpc-utils/package.json index c9686cbc14..6cedc2507b 100644 --- a/packages/opentelemetry-grpc-utils/package.json +++ b/packages/opentelemetry-grpc-utils/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/grpc-utils", - "version": "0.10.1", + "version": "0.10.2", "private": true, "description": "OpenTelemetry grpc plugin utility functions.", "main": "build/src/index.js", @@ -44,10 +44,10 @@ "devDependencies": { "@grpc/grpc-js": "1.1.3", "@grpc/proto-loader": "0.5.5", - "@opentelemetry/context-async-hooks": "^0.10.1", - "@opentelemetry/context-base": "^0.10.1", - "@opentelemetry/node": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/context-async-hooks": "^0.10.2", + "@opentelemetry/context-base": "^0.10.2", + "@opentelemetry/node": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "@types/mocha": "7.0.2", "@types/node": "14.0.27", "@types/semver": "7.3.1", @@ -67,9 +67,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/semantic-conventions": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/semantic-conventions": "^0.10.2", "shimmer": "1.2.1" } } diff --git a/packages/opentelemetry-grpc-utils/src/version.ts b/packages/opentelemetry-grpc-utils/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-grpc-utils/src/version.ts +++ b/packages/opentelemetry-grpc-utils/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-metrics/package.json b/packages/opentelemetry-metrics/package.json index 09395fd163..36c5d04642 100644 --- a/packages/opentelemetry-metrics/package.json +++ b/packages/opentelemetry-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/metrics", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -56,8 +56,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/resources": "^0.10.1" + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/resources": "^0.10.2" } } diff --git a/packages/opentelemetry-metrics/src/version.ts b/packages/opentelemetry-metrics/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-metrics/src/version.ts +++ b/packages/opentelemetry-metrics/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-node/package.json b/packages/opentelemetry-node/package.json index fdf464f26e..22d3db34c8 100644 --- a/packages/opentelemetry-node/package.json +++ b/packages/opentelemetry-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/node", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry Node SDK provides automatic telemetry (tracing, metrics, etc) for Node.js applications", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,8 +42,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-base": "^0.10.1", - "@opentelemetry/resources": "^0.10.1", + "@opentelemetry/context-base": "^0.10.2", + "@opentelemetry/resources": "^0.10.2", "@types/mocha": "8.0.0", "@types/node": "14.0.27", "@types/semver": "7.3.1", @@ -59,10 +59,10 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/context-async-hooks": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/context-async-hooks": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "require-in-the-middle": "^5.0.0", "semver": "^7.1.3" } diff --git a/packages/opentelemetry-node/src/version.ts b/packages/opentelemetry-node/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-node/src/version.ts +++ b/packages/opentelemetry-node/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-plugin-fetch/package.json b/packages/opentelemetry-plugin-fetch/package.json index c5db15d2f9..6bee9fa054 100644 --- a/packages/opentelemetry-plugin-fetch/package.json +++ b/packages/opentelemetry-plugin-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-fetch", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry fetch automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,8 +45,8 @@ }, "devDependencies": { "@babel/core": "7.11.0", - "@opentelemetry/context-zone": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/context-zone": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "@types/mocha": "8.0.0", "@types/node": "14.0.27", "@types/shimmer": "1.0.1", @@ -75,9 +75,9 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/web": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/web": "^0.10.2", "shimmer": "^1.2.1" } } diff --git a/packages/opentelemetry-plugin-fetch/src/version.ts b/packages/opentelemetry-plugin-fetch/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-plugin-fetch/src/version.ts +++ b/packages/opentelemetry-plugin-fetch/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-plugin-grpc-js/package.json b/packages/opentelemetry-plugin-grpc-js/package.json index d3aa8785cd..7695ed9bd4 100644 --- a/packages/opentelemetry-plugin-grpc-js/package.json +++ b/packages/opentelemetry-plugin-grpc-js/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-grpc-js", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry @grpc/grpc-js automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,11 +45,11 @@ }, "devDependencies": { "@grpc/grpc-js": "1.1.3", - "@opentelemetry/context-async-hooks": "^0.10.1", - "@opentelemetry/context-base": "^0.10.1", - "@opentelemetry/grpc-utils": "^0.10.1", - "@opentelemetry/node": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/context-async-hooks": "^0.10.2", + "@opentelemetry/context-base": "^0.10.2", + "@opentelemetry/grpc-utils": "^0.10.2", + "@opentelemetry/node": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "@types/mocha": "8.0.0", "@types/node": "14.0.27", "@types/semver": "7.3.1", @@ -67,9 +67,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/semantic-conventions": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/semantic-conventions": "^0.10.2", "shimmer": "1.2.1" } } diff --git a/packages/opentelemetry-plugin-grpc-js/src/version.ts b/packages/opentelemetry-plugin-grpc-js/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-plugin-grpc-js/src/version.ts +++ b/packages/opentelemetry-plugin-grpc-js/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-plugin-grpc/package.json b/packages/opentelemetry-plugin-grpc/package.json index 19c2333b06..f95d29b0ba 100644 --- a/packages/opentelemetry-plugin-grpc/package.json +++ b/packages/opentelemetry-plugin-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-grpc", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry grpc automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,11 +42,11 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "^0.10.1", - "@opentelemetry/context-base": "^0.10.1", - "@opentelemetry/grpc-utils": "^0.10.1", - "@opentelemetry/node": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/context-async-hooks": "^0.10.2", + "@opentelemetry/context-base": "^0.10.2", + "@opentelemetry/grpc-utils": "^0.10.2", + "@opentelemetry/node": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "@types/mocha": "8.0.0", "@types/node": "14.0.27", "@types/semver": "7.3.1", @@ -66,9 +66,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/semantic-conventions": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/semantic-conventions": "^0.10.2", "shimmer": "^1.2.1" } } diff --git a/packages/opentelemetry-plugin-grpc/src/version.ts b/packages/opentelemetry-plugin-grpc/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-plugin-grpc/src/version.ts +++ b/packages/opentelemetry-plugin-grpc/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-plugin-http/package.json b/packages/opentelemetry-plugin-http/package.json index 0cc190c0f0..0c362297a7 100644 --- a/packages/opentelemetry-plugin-http/package.json +++ b/packages/opentelemetry-plugin-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-http", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry http automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,10 +42,10 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "^0.10.1", - "@opentelemetry/context-base": "^0.10.1", - "@opentelemetry/node": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/context-async-hooks": "^0.10.2", + "@opentelemetry/context-base": "^0.10.2", + "@opentelemetry/node": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "@types/got": "9.6.11", "@types/mocha": "8.0.0", "@types/node": "14.0.27", @@ -71,9 +71,9 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/semantic-conventions": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/semantic-conventions": "^0.10.2", "semver": "^7.1.3", "shimmer": "^1.2.1" } diff --git a/packages/opentelemetry-plugin-http/src/version.ts b/packages/opentelemetry-plugin-http/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-plugin-http/src/version.ts +++ b/packages/opentelemetry-plugin-http/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-plugin-https/package.json b/packages/opentelemetry-plugin-https/package.json index f974b7d49e..f1c5ec57f3 100644 --- a/packages/opentelemetry-plugin-https/package.json +++ b/packages/opentelemetry-plugin-https/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-https", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry https automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,10 +42,10 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "^0.10.1", - "@opentelemetry/context-base": "^0.10.1", - "@opentelemetry/node": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/context-async-hooks": "^0.10.2", + "@opentelemetry/context-base": "^0.10.2", + "@opentelemetry/node": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "@types/got": "9.6.11", "@types/mocha": "8.0.0", "@types/node": "14.0.27", @@ -71,10 +71,10 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/plugin-http": "^0.10.1", - "@opentelemetry/semantic-conventions": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/plugin-http": "^0.10.2", + "@opentelemetry/semantic-conventions": "^0.10.2", "semver": "^7.1.3", "shimmer": "^1.2.1" } diff --git a/packages/opentelemetry-plugin-https/src/version.ts b/packages/opentelemetry-plugin-https/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-plugin-https/src/version.ts +++ b/packages/opentelemetry-plugin-https/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-plugin-xml-http-request/package.json b/packages/opentelemetry-plugin-xml-http-request/package.json index 714ce3850e..dcd78bf570 100644 --- a/packages/opentelemetry-plugin-xml-http-request/package.json +++ b/packages/opentelemetry-plugin-xml-http-request/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-xml-http-request", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry XMLHttpRequest automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,8 +45,8 @@ }, "devDependencies": { "@babel/core": "7.11.0", - "@opentelemetry/context-zone": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/context-zone": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2", "@types/mocha": "8.0.0", "@types/node": "14.0.27", "@types/shimmer": "1.0.1", @@ -75,10 +75,10 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/semantic-conventions": "^0.10.1", - "@opentelemetry/web": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/semantic-conventions": "^0.10.2", + "@opentelemetry/web": "^0.10.2", "shimmer": "^1.2.1" } } diff --git a/packages/opentelemetry-plugin-xml-http-request/src/version.ts b/packages/opentelemetry-plugin-xml-http-request/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-plugin-xml-http-request/src/version.ts +++ b/packages/opentelemetry-plugin-xml-http-request/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 137502387b..17e6b5f7f4 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resources", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry SDK resources", "main": "build/src/index.js", "browser": { @@ -60,8 +60,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", "gcp-metadata": "^3.5.0" } } diff --git a/packages/opentelemetry-resources/src/version.ts b/packages/opentelemetry-resources/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-resources/src/version.ts +++ b/packages/opentelemetry-resources/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-sdk-node/package.json b/packages/opentelemetry-sdk-node/package.json index b01340bd68..e4cf7e1aa9 100644 --- a/packages/opentelemetry-sdk-node/package.json +++ b/packages/opentelemetry-sdk-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-node", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry SDK for Node.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,16 +42,16 @@ "access": "public" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/context-base": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/metrics": "^0.10.1", - "@opentelemetry/node": "^0.10.1", - "@opentelemetry/resources": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1" + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/context-base": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/metrics": "^0.10.2", + "@opentelemetry/node": "^0.10.2", + "@opentelemetry/resources": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "^0.10.1", + "@opentelemetry/context-async-hooks": "^0.10.2", "@types/mocha": "7.0.2", "@types/node": "14.0.27", "codecov": "3.7.2", diff --git a/packages/opentelemetry-sdk-node/src/version.ts b/packages/opentelemetry-sdk-node/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-sdk-node/src/version.ts +++ b/packages/opentelemetry-sdk-node/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index e8501cddf0..4414225553 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/semantic-conventions", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry semantic conventions", "main": "build/src/index.js", "types": "build/src/index.d.ts", diff --git a/packages/opentelemetry-semantic-conventions/src/version.ts b/packages/opentelemetry-semantic-conventions/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-semantic-conventions/src/version.ts +++ b/packages/opentelemetry-semantic-conventions/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index 4b4c8410c1..c72ca9aa6a 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opentracing", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTracing to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -40,7 +40,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/tracing": "^0.10.1", + "@opentelemetry/tracing": "^0.10.2", "@types/mocha": "8.0.0", "@types/node": "14.0.27", "codecov": "3.7.2", @@ -55,8 +55,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/core": "^0.10.1", + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/core": "^0.10.2", "opentracing": "^0.14.4" } } diff --git a/packages/opentelemetry-shim-opentracing/src/version.ts b/packages/opentelemetry-shim-opentracing/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-shim-opentracing/src/version.ts +++ b/packages/opentelemetry-shim-opentracing/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-tracing/package.json b/packages/opentelemetry-tracing/package.json index 05e9e976ee..f803ba23c7 100644 --- a/packages/opentelemetry-tracing/package.json +++ b/packages/opentelemetry-tracing/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/tracing", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry Tracing", "main": "build/src/index.js", "browser": { @@ -74,9 +74,9 @@ "webpack": "4.44.1" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/context-base": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/resources": "^0.10.1" + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/context-base": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/resources": "^0.10.2" } } diff --git a/packages/opentelemetry-tracing/src/version.ts b/packages/opentelemetry-tracing/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-tracing/src/version.ts +++ b/packages/opentelemetry-tracing/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; diff --git a/packages/opentelemetry-web/package.json b/packages/opentelemetry-web/package.json index f492f76cfb..28d8a8cb19 100644 --- a/packages/opentelemetry-web/package.json +++ b/packages/opentelemetry-web/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/web", - "version": "0.10.1", + "version": "0.10.2", "description": "OpenTelemetry Web Tracer", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,8 +44,8 @@ }, "devDependencies": { "@babel/core": "7.11.0", - "@opentelemetry/context-zone": "^0.10.1", - "@opentelemetry/resources": "^0.10.1", + "@opentelemetry/context-zone": "^0.10.2", + "@opentelemetry/resources": "^0.10.2", "@types/jquery": "3.5.1", "@types/mocha": "8.0.0", "@types/node": "14.0.27", @@ -75,10 +75,10 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/api": "^0.10.1", - "@opentelemetry/context-base": "^0.10.1", - "@opentelemetry/core": "^0.10.1", - "@opentelemetry/semantic-conventions": "^0.10.1", - "@opentelemetry/tracing": "^0.10.1" + "@opentelemetry/api": "^0.10.2", + "@opentelemetry/context-base": "^0.10.2", + "@opentelemetry/core": "^0.10.2", + "@opentelemetry/semantic-conventions": "^0.10.2", + "@opentelemetry/tracing": "^0.10.2" } } diff --git a/packages/opentelemetry-web/src/version.ts b/packages/opentelemetry-web/src/version.ts index 04e7c6b71c..ea45ee2fc4 100644 --- a/packages/opentelemetry-web/src/version.ts +++ b/packages/opentelemetry-web/src/version.ts @@ -15,4 +15,4 @@ */ // this is autogenerated file, see scripts/version-update.js -export const VERSION = '0.10.1'; +export const VERSION = '0.10.2'; From bf46c1bb9c15a773d132d1ec0eee2de9eed1824f Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Tue, 4 Aug 2020 23:02:41 +0000 Subject: [PATCH 38/51] fix: remove unnecesary trace provider member function --- packages/opentelemetry-tracing/src/BasicTracerProvider.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts index 7e2353ba94..269439bcf9 100644 --- a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts +++ b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts @@ -38,7 +38,6 @@ export class BasicTracerProvider implements api.TracerProvider { private readonly _tracers: Map = new Map(); activeSpanProcessor = new NoopSpanProcessor(); - removeGlobalShutdownListener = () => {}; readonly logger: api.Logger; readonly resource: Resource; @@ -50,9 +49,7 @@ export class BasicTracerProvider implements api.TracerProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - this.removeGlobalShutdownListener = notifyOnGlobalShutdown( - this._shutdownActiveProcessor.bind(this) - ); + notifyOnGlobalShutdown(this._shutdownActiveProcessor.bind(this)); } } From 62966b58ca4d0744bcce4834d3d8c782ddc89f0b Mon Sep 17 00:00:00 2001 From: legendecas Date: Wed, 5 Aug 2020 02:02:51 +0800 Subject: [PATCH 39/51] refactor(metrics): distinguish different aggregator types (#1325) Co-authored-by: Daniel Dyla --- .../test/prometheus.test.ts | 5 +- .../src/export/aggregators/Histogram.ts | 12 +++- .../export/aggregators/MinMaxLastSumCount.ts | 8 ++- .../src/export/aggregators/Sum.ts | 7 +- .../opentelemetry-metrics/src/export/types.ts | 71 +++++++++++++++++-- 5 files changed, 88 insertions(+), 15 deletions(-) diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index 9ae758bdd4..bef1346331 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -25,6 +25,7 @@ import { Meter, MeterProvider, Point, + Sum, } from '@opentelemetry/metrics'; import * as assert from 'assert'; import * as http from 'http'; @@ -40,10 +41,10 @@ const mockedHrTime: HrTime = [1586347902211, 0]; const mockedTimeMS = 1586347902211000; describe('PrometheusExporter', () => { - let toPoint: () => Point; + let toPoint: () => Point; before(() => { toPoint = SumAggregator.prototype.toPoint; - SumAggregator.prototype.toPoint = function (): Point { + SumAggregator.prototype.toPoint = function (): Point { const point = toPoint.apply(this); point.timestamp = mockedHrTime; return point; diff --git a/packages/opentelemetry-metrics/src/export/aggregators/Histogram.ts b/packages/opentelemetry-metrics/src/export/aggregators/Histogram.ts index 11cd33ee8f..1770952177 100644 --- a/packages/opentelemetry-metrics/src/export/aggregators/Histogram.ts +++ b/packages/opentelemetry-metrics/src/export/aggregators/Histogram.ts @@ -14,7 +14,12 @@ * limitations under the License. */ -import { Aggregator, Point, Histogram } from '../types'; +import { + HistogramAggregatorType, + Point, + Histogram, + AggregatorKind, +} from '../types'; import { HrTime } from '@opentelemetry/api'; import { hrTime } from '@opentelemetry/core'; @@ -22,7 +27,8 @@ import { hrTime } from '@opentelemetry/core'; * Basic aggregator which observes events and counts them in pre-defined buckets * and provides the total sum and count of all observations. */ -export class HistogramAggregator implements Aggregator { +export class HistogramAggregator implements HistogramAggregatorType { + public kind: AggregatorKind.HISTOGRAM = AggregatorKind.HISTOGRAM; private _current: Histogram; private _lastUpdateTime: HrTime; private readonly _boundaries: number[]; @@ -53,7 +59,7 @@ export class HistogramAggregator implements Aggregator { this._current.buckets.counts[this._boundaries.length] += 1; } - toPoint(): Point { + toPoint(): Point { return { value: this._current, timestamp: this._lastUpdateTime, diff --git a/packages/opentelemetry-metrics/src/export/aggregators/MinMaxLastSumCount.ts b/packages/opentelemetry-metrics/src/export/aggregators/MinMaxLastSumCount.ts index 7f5a9df431..ee030f7247 100644 --- a/packages/opentelemetry-metrics/src/export/aggregators/MinMaxLastSumCount.ts +++ b/packages/opentelemetry-metrics/src/export/aggregators/MinMaxLastSumCount.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Aggregator, Point } from '../types'; +import { Point, AggregatorKind, DistributionAggregatorType } from '../types'; import { HrTime } from '@opentelemetry/api'; import { hrTime } from '@opentelemetry/core'; import { Distribution } from '../types'; @@ -22,7 +22,9 @@ import { Distribution } from '../types'; /** * Basic aggregator keeping all raw values (events, sum, max, last and min). */ -export class MinMaxLastSumCountAggregator implements Aggregator { +export class MinMaxLastSumCountAggregator + implements DistributionAggregatorType { + public kind: AggregatorKind.DISTRIBUTION = AggregatorKind.DISTRIBUTION; private _distribution: Distribution; private _lastUpdateTime: HrTime = [0, 0]; @@ -45,7 +47,7 @@ export class MinMaxLastSumCountAggregator implements Aggregator { this._lastUpdateTime = hrTime(); } - toPoint(): Point { + toPoint(): Point { return { value: this._distribution, timestamp: this._lastUpdateTime, diff --git a/packages/opentelemetry-metrics/src/export/aggregators/Sum.ts b/packages/opentelemetry-metrics/src/export/aggregators/Sum.ts index 0475320e5c..3a33e920ba 100644 --- a/packages/opentelemetry-metrics/src/export/aggregators/Sum.ts +++ b/packages/opentelemetry-metrics/src/export/aggregators/Sum.ts @@ -14,12 +14,13 @@ * limitations under the License. */ -import { Aggregator, Point } from '../types'; +import { Point, Sum, AggregatorKind, SumAggregatorType } from '../types'; import { HrTime } from '@opentelemetry/api'; import { hrTime } from '@opentelemetry/core'; /** Basic aggregator which calculates a Sum from individual measurements. */ -export class SumAggregator implements Aggregator { +export class SumAggregator implements SumAggregatorType { + public kind: AggregatorKind.SUM = AggregatorKind.SUM; private _current: number = 0; private _lastUpdateTime: HrTime = [0, 0]; @@ -28,7 +29,7 @@ export class SumAggregator implements Aggregator { this._lastUpdateTime = hrTime(); } - toPoint(): Point { + toPoint(): Point { return { value: this._current, timestamp: this._lastUpdateTime, diff --git a/packages/opentelemetry-metrics/src/export/types.ts b/packages/opentelemetry-metrics/src/export/types.ts index 66c1262e37..37f8912acc 100644 --- a/packages/opentelemetry-metrics/src/export/types.ts +++ b/packages/opentelemetry-metrics/src/export/types.ts @@ -28,12 +28,21 @@ export enum MetricKind { VALUE_OBSERVER, } +/** The kind of aggregator. */ +export enum AggregatorKind { + SUM, + LAST_VALUE, + DISTRIBUTION, + HISTOGRAM, +} + /** Sum returns an aggregated sum. */ export type Sum = number; /** LastValue returns last value. */ export type LastValue = number; +/** Distribution returns an aggregated distribution. */ export interface Distribution { min: number; max: number; @@ -69,6 +78,8 @@ export interface Histogram { count: number; } +export type PointValueType = Sum | LastValue | Distribution | Histogram; + export interface MetricRecord { readonly descriptor: MetricDescriptor; readonly labels: Labels; @@ -102,16 +113,68 @@ export interface MetricExporter { /** * Base interface for aggregators. Aggregators are responsible for holding * aggregated values and taking a snapshot of these values upon export. + * + * Use {@link Aggregator} instead of this BaseAggregator. */ -export interface Aggregator { +interface BaseAggregator { + /** The kind of the aggregator. */ + kind: AggregatorKind; + /** Updates the current with the new value. */ update(value: number): void; +} + +/** SumAggregatorType aggregate values into a {@link Sum} point type. */ +export interface SumAggregatorType extends BaseAggregator { + kind: AggregatorKind.SUM; + + /** Returns snapshot of the current point (value with timestamp). */ + toPoint(): Point; +} + +/** + * LastValueAggregatorType aggregate values into a {@link LastValue} point + * type. + */ +export interface LastValueAggregatorType extends BaseAggregator { + kind: AggregatorKind.LAST_VALUE; + + /** Returns snapshot of the current point (value with timestamp). */ + toPoint(): Point; +} + +/** + * DistributionAggregatorType aggregate values into a {@link Distribution} + * point type. + */ +export interface DistributionAggregatorType extends BaseAggregator { + kind: AggregatorKind.DISTRIBUTION; + + /** Returns snapshot of the current point (value with timestamp). */ + toPoint(): Point; +} + +/** + * HistogramAggregatorType aggregate values into a {@link Histogram} point + * type. + */ +export interface HistogramAggregatorType extends BaseAggregator { + kind: AggregatorKind.HISTOGRAM; /** Returns snapshot of the current point (value with timestamp). */ - toPoint(): Point; + toPoint(): Point; } -export interface Point { - value: Sum | LastValue | Distribution | Histogram; +export type Aggregator = + | SumAggregatorType + | LastValueAggregatorType + | DistributionAggregatorType + | HistogramAggregatorType; + +/** + * Point represents a snapshot of aggregated values of aggregators. + */ +export interface Point { + value: T; timestamp: HrTime; } From d07163a5e0f5967e6d4f3b6cadda9a84d316cc32 Mon Sep 17 00:00:00 2001 From: srjames90 Date: Tue, 4 Aug 2020 14:20:41 -0400 Subject: [PATCH 40/51] Propagate b3 parentspanid and debug flag (#1346) --- .../src/context/propagation/B3Propagator.ts | 134 ++++- .../test/context/B3Propagator.test.ts | 477 +++++++++++++++--- 2 files changed, 503 insertions(+), 108 deletions(-) diff --git a/packages/opentelemetry-core/src/context/propagation/B3Propagator.ts b/packages/opentelemetry-core/src/context/propagation/B3Propagator.ts index 126be42c17..129e457cb6 100644 --- a/packages/opentelemetry-core/src/context/propagation/B3Propagator.ts +++ b/packages/opentelemetry-core/src/context/propagation/B3Propagator.ts @@ -26,9 +26,19 @@ import { getParentSpanContext, setExtractedSpanContext } from '../context'; export const X_B3_TRACE_ID = 'x-b3-traceid'; export const X_B3_SPAN_ID = 'x-b3-spanid'; export const X_B3_SAMPLED = 'x-b3-sampled'; +export const X_B3_PARENT_SPAN_ID = 'x-b3-parentspanid'; +export const X_B3_FLAGS = 'x-b3-flags'; +export const PARENT_SPAN_ID_KEY = Context.createKey( + 'OpenTelemetry Context Key B3 Parent Span Id' +); +export const DEBUG_FLAG_KEY = Context.createKey( + 'OpenTelemetry Context Key B3 Debug Flag' +); const VALID_TRACEID_REGEX = /^([0-9a-f]{16}){1,2}$/i; const VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i; const INVALID_ID_REGEX = /^0+$/i; +const VALID_SAMPLED_VALUES = new Set([true, 'true', 'True', '1', 1]); +const VALID_UNSAMPLED_VALUES = new Set([false, 'false', 'False', '0', 0]); function isValidTraceId(traceId: string): boolean { return VALID_TRACEID_REGEX.test(traceId) && !INVALID_ID_REGEX.test(traceId); @@ -38,6 +48,74 @@ function isValidSpanId(spanId: string): boolean { return VALID_SPANID_REGEX.test(spanId) && !INVALID_ID_REGEX.test(spanId); } +function isValidParentSpanID(spanId: string | undefined): boolean { + return spanId === undefined || isValidSpanId(spanId); +} + +function isValidSampledValue(sampled: TraceFlags | undefined): boolean { + return sampled === TraceFlags.SAMPLED || sampled === TraceFlags.NONE; +} + +function parseHeader(header: unknown) { + return Array.isArray(header) ? header[0] : header; +} + +function getHeaderValue(carrier: unknown, getter: GetterFunction, key: string) { + const header = getter(carrier, key); + return parseHeader(header); +} + +function getTraceId(carrier: unknown, getter: GetterFunction): string { + const traceId = getHeaderValue(carrier, getter, X_B3_TRACE_ID); + if (typeof traceId === 'string') { + return traceId.padStart(32, '0'); + } + return ''; +} + +function getSpanId(carrier: unknown, getter: GetterFunction): string { + const spanId = getHeaderValue(carrier, getter, X_B3_SPAN_ID); + if (typeof spanId === 'string') { + return spanId; + } + return ''; +} + +function getParentSpanId( + carrier: unknown, + getter: GetterFunction +): string | undefined { + const spanId = getHeaderValue(carrier, getter, X_B3_PARENT_SPAN_ID); + if (typeof spanId === 'string') { + return spanId; + } + return; +} + +function getDebug( + carrier: unknown, + getter: GetterFunction +): string | undefined { + const debug = getHeaderValue(carrier, getter, X_B3_FLAGS); + return debug === '1' ? '1' : undefined; +} + +function getTraceFlags( + carrier: unknown, + getter: GetterFunction +): TraceFlags | undefined { + const traceFlags = getHeaderValue(carrier, getter, X_B3_SAMPLED); + const debug = getDebug(carrier, getter); + if (debug === '1' || VALID_SAMPLED_VALUES.has(traceFlags)) { + return TraceFlags.SAMPLED; + } + if (traceFlags === undefined || VALID_UNSAMPLED_VALUES.has(traceFlags)) { + return TraceFlags.NONE; + } + // This indicates to isValidSampledValue that this is not valid + return; +} + /** * Propagator for the B3 HTTP header format. * Based on: https://github.com/openzipkin/b3-propagation @@ -46,17 +124,27 @@ export class B3Propagator implements HttpTextPropagator { inject(context: Context, carrier: unknown, setter: SetterFunction) { const spanContext = getParentSpanContext(context); if (!spanContext) return; - + const parentSpanId = context.getValue(PARENT_SPAN_ID_KEY) as + | undefined + | string; if ( isValidTraceId(spanContext.traceId) && - isValidSpanId(spanContext.spanId) + isValidSpanId(spanContext.spanId) && + isValidParentSpanID(parentSpanId) ) { + const debug = context.getValue(DEBUG_FLAG_KEY); setter(carrier, X_B3_TRACE_ID, spanContext.traceId); setter(carrier, X_B3_SPAN_ID, spanContext.spanId); - - // We set the header only if there is an existing sampling decision. - // Otherwise we will omit it => Absent. - if (spanContext.traceFlags !== undefined) { + if (parentSpanId) { + setter(carrier, X_B3_PARENT_SPAN_ID, parentSpanId); + } + // According to the B3 spec, if the debug flag is set, + // the sampled flag shouldn't be propagated as well. + if (debug === '1') { + setter(carrier, X_B3_FLAGS, debug); + } else if (spanContext.traceFlags !== undefined) { + // We set the header only if there is an existing sampling decision. + // Otherwise we will omit it => Absent. setter( carrier, X_B3_SAMPLED, @@ -69,31 +157,25 @@ export class B3Propagator implements HttpTextPropagator { } extract(context: Context, carrier: unknown, getter: GetterFunction): Context { - const traceIdHeader = getter(carrier, X_B3_TRACE_ID); - const spanIdHeader = getter(carrier, X_B3_SPAN_ID); - const sampledHeader = getter(carrier, X_B3_SAMPLED); - - const traceIdHeaderValue = Array.isArray(traceIdHeader) - ? traceIdHeader[0] - : traceIdHeader; - const spanId = Array.isArray(spanIdHeader) ? spanIdHeader[0] : spanIdHeader; - - const options = Array.isArray(sampledHeader) - ? sampledHeader[0] - : sampledHeader; - - if (typeof traceIdHeaderValue !== 'string' || typeof spanId !== 'string') { - return context; - } - - const traceId = traceIdHeaderValue.padStart(32, '0'); + const traceId = getTraceId(carrier, getter); + const spanId = getSpanId(carrier, getter); + const parentSpanId = getParentSpanId(carrier, getter); + const traceFlags = getTraceFlags(carrier, getter) as TraceFlags; + const debug = getDebug(carrier, getter); - if (isValidTraceId(traceId) && isValidSpanId(spanId)) { + if ( + isValidTraceId(traceId) && + isValidSpanId(spanId) && + isValidParentSpanID(parentSpanId) && + isValidSampledValue(traceFlags) + ) { + context = context.setValue(PARENT_SPAN_ID_KEY, parentSpanId); + context = context.setValue(DEBUG_FLAG_KEY, debug); return setExtractedSpanContext(context, { traceId, spanId, isRemote: true, - traceFlags: isNaN(Number(options)) ? TraceFlags.NONE : Number(options), + traceFlags, }); } return context; diff --git a/packages/opentelemetry-core/test/context/B3Propagator.test.ts b/packages/opentelemetry-core/test/context/B3Propagator.test.ts index 436033480e..567fcc6778 100644 --- a/packages/opentelemetry-core/test/context/B3Propagator.test.ts +++ b/packages/opentelemetry-core/test/context/B3Propagator.test.ts @@ -28,9 +28,13 @@ import { } from '../../src/context/context'; import { B3Propagator, + X_B3_FLAGS, + X_B3_PARENT_SPAN_ID, X_B3_SAMPLED, X_B3_SPAN_ID, X_B3_TRACE_ID, + DEBUG_FLAG_KEY, + PARENT_SPAN_ID_KEY, } from '../../src/context/propagation/B3Propagator'; import { TraceState } from '../../src/trace/TraceState'; @@ -61,6 +65,8 @@ describe('B3Propagator', () => { ); assert.deepStrictEqual(carrier[X_B3_SPAN_ID], '6e0c63257de34c92'); assert.deepStrictEqual(carrier[X_B3_SAMPLED], '1'); + assert.deepStrictEqual(carrier[X_B3_FLAGS], undefined); + assert.deepStrictEqual(carrier[X_B3_PARENT_SPAN_ID], undefined); }); it('should set b3 traceId and spanId headers - ignore tracestate', () => { @@ -83,6 +89,60 @@ describe('B3Propagator', () => { ); assert.deepStrictEqual(carrier[X_B3_SPAN_ID], '6e0c63257de34c92'); assert.deepStrictEqual(carrier[X_B3_SAMPLED], '0'); + assert.deepStrictEqual(carrier[X_B3_FLAGS], undefined); + assert.deepStrictEqual(carrier[X_B3_PARENT_SPAN_ID], undefined); + }); + + it('should set flags headers', () => { + const spanContext: SpanContext = { + traceId: 'd4cda95b652f4a1592b449d5929fda1b', + spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, + }; + const contextWithDebug = Context.ROOT_CONTEXT.setValue( + DEBUG_FLAG_KEY, + '1' + ); + + b3Propagator.inject( + setExtractedSpanContext(contextWithDebug, spanContext), + carrier, + defaultSetter + ); + assert.deepStrictEqual( + carrier[X_B3_TRACE_ID], + 'd4cda95b652f4a1592b449d5929fda1b' + ); + assert.deepStrictEqual(carrier[X_B3_SPAN_ID], '6e0c63257de34c92'); + assert.deepStrictEqual(carrier[X_B3_FLAGS], '1'); + assert.deepStrictEqual(carrier[X_B3_SAMPLED], undefined); + assert.deepStrictEqual(carrier[X_B3_PARENT_SPAN_ID], undefined); + }); + + it('should set parentSpanId headers', () => { + const spanContext: SpanContext = { + traceId: 'd4cda95b652f4a1592b449d5929fda1b', + spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, + }; + + const contextWithParentSpanId = Context.ROOT_CONTEXT.setValue( + PARENT_SPAN_ID_KEY, + 'f4592dc481026a8c' + ); + b3Propagator.inject( + setExtractedSpanContext(contextWithParentSpanId, spanContext), + carrier, + defaultSetter + ); + assert.deepStrictEqual( + carrier[X_B3_TRACE_ID], + 'd4cda95b652f4a1592b449d5929fda1b' + ); + assert.deepStrictEqual(carrier[X_B3_PARENT_SPAN_ID], 'f4592dc481026a8c'); + assert.deepStrictEqual(carrier[X_B3_SPAN_ID], '6e0c63257de34c92'); + assert.deepStrictEqual(carrier[X_B3_FLAGS], undefined); + assert.deepStrictEqual(carrier[X_B3_SAMPLED], '0'); }); it('should not inject empty spancontext', () => { @@ -98,127 +158,376 @@ describe('B3Propagator', () => { ); assert.deepStrictEqual(carrier[X_B3_TRACE_ID], undefined); assert.deepStrictEqual(carrier[X_B3_SPAN_ID], undefined); + assert.deepStrictEqual(carrier[X_B3_FLAGS], undefined); + assert.deepStrictEqual(carrier[X_B3_PARENT_SPAN_ID], undefined); }); }); describe('.extract()', () => { - it('should extract context of a unsampled span from carrier', () => { + it('should extract context of a deferred span from carrier', () => { carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; - const extractedSpanContext = getExtractedSpanContext( - b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter ); - + const extractedSpanContext = getExtractedSpanContext(context); assert.deepStrictEqual(extractedSpanContext, { spanId: 'b7ad6b7169203331', traceId: '0af7651916cd43dd8448eb211c80319c', isRemote: true, traceFlags: TraceFlags.NONE, }); + assert.equal(context.getValue(DEBUG_FLAG_KEY), undefined); + assert.equal(context.getValue(PARENT_SPAN_ID_KEY), undefined); }); - it('should extract context of a sampled span from carrier', () => { - carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; - carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; - carrier[X_B3_SAMPLED] = '1'; - const extractedSpanContext = getExtractedSpanContext( - b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) - ); + describe('when sampled flag is valid', () => { + describe('AND sampled flag is 1', () => { + it('should extract context of a sampled span from carrier', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_SAMPLED] = '1'; + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter + ); + const extractedSpanContext = getExtractedSpanContext(context); + + assert.deepStrictEqual(extractedSpanContext, { + spanId: 'b7ad6b7169203331', + traceId: '0af7651916cd43dd8448eb211c80319c', + isRemote: true, + traceFlags: TraceFlags.SAMPLED, + }); + assert.equal(context.getValue(DEBUG_FLAG_KEY), undefined); + assert.equal(context.getValue(PARENT_SPAN_ID_KEY), undefined); + }); + }); - assert.deepStrictEqual(extractedSpanContext, { - spanId: 'b7ad6b7169203331', - traceId: '0af7651916cd43dd8448eb211c80319c', - isRemote: true, - traceFlags: TraceFlags.SAMPLED, + describe('AND sampled flag is true', () => { + it('should extract context of a sampled span from carrier', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_SAMPLED] = true; + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter + ); + const extractedSpanContext = getExtractedSpanContext(context); + + assert.deepStrictEqual(extractedSpanContext, { + spanId: 'b7ad6b7169203331', + traceId: '0af7651916cd43dd8448eb211c80319c', + isRemote: true, + traceFlags: TraceFlags.SAMPLED, + }); + assert.equal(context.getValue(DEBUG_FLAG_KEY), undefined); + assert.equal(context.getValue(PARENT_SPAN_ID_KEY), undefined); + }); }); - }); - it('should extract context of a sampled span from carrier when sampled is mentioned as boolean true flag', () => { - carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; - carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; - carrier[X_B3_SAMPLED] = true; - const extractedSpanContext = getExtractedSpanContext( - b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) - ); + describe('AND sampled flag is false', () => { + it('should extract context of a sampled span from carrier', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_SAMPLED] = false; + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter + ); + const extractedSpanContext = getExtractedSpanContext(context); + + assert.deepStrictEqual(extractedSpanContext, { + spanId: 'b7ad6b7169203331', + traceId: '0af7651916cd43dd8448eb211c80319c', + isRemote: true, + traceFlags: TraceFlags.NONE, + }); + assert.equal(context.getValue(DEBUG_FLAG_KEY), undefined); + assert.equal(context.getValue(PARENT_SPAN_ID_KEY), undefined); + }); + }); + }); - assert.deepStrictEqual(extractedSpanContext, { - spanId: 'b7ad6b7169203331', - traceId: '0af7651916cd43dd8448eb211c80319c', - isRemote: true, - traceFlags: TraceFlags.SAMPLED, + describe('when debug flag is valid', () => { + describe('AND debug flag is 1', () => { + it('should extract context of a debug span from carrier', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_FLAGS] = '1'; + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter + ); + const extractedSpanContext = getExtractedSpanContext(context); + + assert.deepStrictEqual(extractedSpanContext, { + spanId: 'b7ad6b7169203331', + traceId: '0af7651916cd43dd8448eb211c80319c', + isRemote: true, + traceFlags: TraceFlags.SAMPLED, + }); + assert.strictEqual(context.getValue(DEBUG_FLAG_KEY), '1'); + assert.equal(context.getValue(PARENT_SPAN_ID_KEY), undefined); + }); }); }); - it('should extract context of a sampled span from carrier when sampled is mentioned as boolean false flag', () => { - carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; - carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; - carrier[X_B3_SAMPLED] = false; - const extractedSpanContext = getExtractedSpanContext( - b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) - ); + describe('when debug flag is invalid', () => { + describe('AND debug flag is 0', () => { + it('should extract context of a span from carrier', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_FLAGS] = '0'; + carrier[X_B3_SAMPLED] = '1'; + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter + ); + const extractedSpanContext = getExtractedSpanContext(context); + + assert.deepStrictEqual(extractedSpanContext, { + spanId: 'b7ad6b7169203331', + traceId: '0af7651916cd43dd8448eb211c80319c', + isRemote: true, + traceFlags: TraceFlags.SAMPLED, + }); + assert.equal(context.getValue(DEBUG_FLAG_KEY), undefined); + assert.equal(context.getValue(PARENT_SPAN_ID_KEY), undefined); + }); + }); - assert.deepStrictEqual(extractedSpanContext, { - spanId: 'b7ad6b7169203331', - traceId: '0af7651916cd43dd8448eb211c80319c', - isRemote: true, - traceFlags: TraceFlags.NONE, + describe('AND debug flag is false', () => { + it('should extract context of a span from carrier', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_FLAGS] = 'false'; + carrier[X_B3_SAMPLED] = '0'; + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter + ); + const extractedSpanContext = getExtractedSpanContext(context); + + assert.deepStrictEqual(extractedSpanContext, { + spanId: 'b7ad6b7169203331', + traceId: '0af7651916cd43dd8448eb211c80319c', + isRemote: true, + traceFlags: TraceFlags.NONE, + }); + assert.equal(context.getValue(DEBUG_FLAG_KEY), undefined); + assert.equal(context.getValue(PARENT_SPAN_ID_KEY), undefined); + }); }); - }); - it('should return undefined when traceId is undefined', () => { - carrier[X_B3_TRACE_ID] = undefined; - carrier[X_B3_SPAN_ID] = undefined; - assert.deepStrictEqual( - getExtractedSpanContext( - b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) - ), - undefined - ); - }); + describe('AND debug flag is true', () => { + it('should extract context of a span from carrier', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_FLAGS] = 'true'; + carrier[X_B3_SAMPLED] = '0'; + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter + ); + const extractedSpanContext = getExtractedSpanContext(context); + + assert.deepStrictEqual(extractedSpanContext, { + spanId: 'b7ad6b7169203331', + traceId: '0af7651916cd43dd8448eb211c80319c', + isRemote: true, + traceFlags: TraceFlags.NONE, + }); + assert.equal(context.getValue(DEBUG_FLAG_KEY), undefined); + assert.equal(context.getValue(PARENT_SPAN_ID_KEY), undefined); + }); + }); - it('should return undefined when options and spanId are undefined', () => { - carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; - carrier[X_B3_SPAN_ID] = undefined; - assert.deepStrictEqual( - getExtractedSpanContext( - b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) - ), - undefined - ); + describe('AND debug flag is 2', () => { + it('should extract context of a span from carrier', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_FLAGS] = '3'; + carrier[X_B3_SAMPLED] = '0'; + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter + ); + const extractedSpanContext = getExtractedSpanContext(context); + + assert.deepStrictEqual(extractedSpanContext, { + spanId: 'b7ad6b7169203331', + traceId: '0af7651916cd43dd8448eb211c80319c', + isRemote: true, + traceFlags: TraceFlags.NONE, + }); + assert.equal(context.getValue(DEBUG_FLAG_KEY), undefined); + assert.equal(context.getValue(PARENT_SPAN_ID_KEY), undefined); + }); + }); }); - it('returns undefined if b3 header is missing', () => { - assert.deepStrictEqual( - getExtractedSpanContext( - b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) - ), - undefined - ); + describe('when parent span id is valid', () => { + it('should extract context of a span from carrier', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_PARENT_SPAN_ID] = 'f4592dc481026a8c'; + carrier[X_B3_FLAGS] = '0'; + carrier[X_B3_SAMPLED] = '1'; + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter + ); + const extractedSpanContext = getExtractedSpanContext(context); + + assert.deepStrictEqual(extractedSpanContext, { + spanId: 'b7ad6b7169203331', + traceId: '0af7651916cd43dd8448eb211c80319c', + isRemote: true, + traceFlags: TraceFlags.SAMPLED, + }); + assert.equal(context.getValue(DEBUG_FLAG_KEY), undefined); + assert.equal(context.getValue(PARENT_SPAN_ID_KEY), 'f4592dc481026a8c'); + }); + + describe('AND debug is 1', () => { + it('should extract context of a span from carrier', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_PARENT_SPAN_ID] = 'f4592dc481026a8c'; + carrier[X_B3_FLAGS] = '1'; + carrier[X_B3_SAMPLED] = '0'; + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter + ); + const extractedSpanContext = getExtractedSpanContext(context); + + assert.deepStrictEqual(extractedSpanContext, { + spanId: 'b7ad6b7169203331', + traceId: '0af7651916cd43dd8448eb211c80319c', + isRemote: true, + traceFlags: TraceFlags.SAMPLED, + }); + assert.equal(context.getValue(DEBUG_FLAG_KEY), '1'); + assert.equal( + context.getValue(PARENT_SPAN_ID_KEY), + 'f4592dc481026a8c' + ); + }); + }); }); - it('returns undefined if b3 header is invalid', () => { - carrier[X_B3_TRACE_ID] = 'invalid!'; - assert.deepStrictEqual( - getExtractedSpanContext( - b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) - ), - undefined - ); + describe('when headers are invalid', () => { + describe('AND traceId is undefined', () => { + it('should return undefined', () => { + carrier[X_B3_TRACE_ID] = undefined; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + const context = getExtractedSpanContext( + b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) + ); + assert.deepStrictEqual(context, undefined); + }); + }); + + describe('AND spanId is undefined', () => { + it('should return undefined', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = undefined; + const context = getExtractedSpanContext( + b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) + ); + assert.deepStrictEqual(context, undefined); + }); + }); + + describe('AND parentSpanId is invalid', () => { + it('should return undefined', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_PARENT_SPAN_ID] = 'invalid'; + const context = getExtractedSpanContext( + b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) + ); + assert.deepStrictEqual(context, undefined); + }); + }); + + describe('AND parentSpanId is a trace id', () => { + it('should return undefined', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_PARENT_SPAN_ID] = '0af7651916cd43dd8448eb211c80319d'; + const context = getExtractedSpanContext( + b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) + ); + assert.deepStrictEqual(context, undefined); + }); + }); + + describe('AND sample is 2', () => { + it('should return undefined', () => { + carrier[X_B3_TRACE_ID] = '0af7651916cd43dd8448eb211c80319c'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + carrier[X_B3_SAMPLED] = '2'; + const context = getExtractedSpanContext( + b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) + ); + assert.deepStrictEqual(context, undefined); + }); + }); + + describe('AND b3 header is missing', () => { + it('should return undefined', () => { + const context = getExtractedSpanContext( + b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) + ); + assert.deepStrictEqual(context, undefined); + }); + }); + + describe('AND trace id is invalid', () => { + it('should return undefined', () => { + carrier[X_B3_TRACE_ID] = 'invalid!'; + carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; + const context = getExtractedSpanContext( + b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) + ); + assert.deepStrictEqual(context, undefined); + }); + }); }); it('extracts b3 from list of header', () => { carrier[X_B3_TRACE_ID] = ['0af7651916cd43dd8448eb211c80319c']; carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; - carrier[X_B3_SAMPLED] = '01'; - const extractedSpanContext = getExtractedSpanContext( - b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) + carrier[X_B3_SAMPLED] = '1'; + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter ); + const extractedSpanContext = getExtractedSpanContext(context); assert.deepStrictEqual(extractedSpanContext, { spanId: 'b7ad6b7169203331', traceId: '0af7651916cd43dd8448eb211c80319c', isRemote: true, traceFlags: TraceFlags.SAMPLED, }); + assert.equal(context.getValue(DEBUG_FLAG_KEY), undefined); + assert.equal(context.getValue(PARENT_SPAN_ID_KEY), undefined); }); it('should gracefully handle an invalid b3 header', () => { @@ -260,7 +569,6 @@ describe('B3Propagator', () => { Object.getOwnPropertyNames(testCases).forEach(testCase => { carrier[X_B3_TRACE_ID] = testCases[testCase]; - const extractedSpanContext = getExtractedSpanContext( b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) ); @@ -294,9 +602,12 @@ describe('B3Propagator', () => { carrier[X_B3_TRACE_ID] = '8448eb211c80319c'; carrier[X_B3_SPAN_ID] = 'b7ad6b7169203331'; carrier[X_B3_SAMPLED] = '1'; - const extractedSpanContext = getExtractedSpanContext( - b3Propagator.extract(Context.ROOT_CONTEXT, carrier, defaultGetter) + const context = b3Propagator.extract( + Context.ROOT_CONTEXT, + carrier, + defaultGetter ); + const extractedSpanContext = getExtractedSpanContext(context); assert.deepStrictEqual(extractedSpanContext, { spanId: 'b7ad6b7169203331', @@ -304,6 +615,8 @@ describe('B3Propagator', () => { isRemote: true, traceFlags: TraceFlags.SAMPLED, }); + assert.equal(context.getValue(DEBUG_FLAG_KEY), undefined); + assert.equal(context.getValue(PARENT_SPAN_ID_KEY), undefined); }); }); }); From f0323e6eaed76b4247d1c8957c6f2ff8768a13ac Mon Sep 17 00:00:00 2001 From: David W Date: Tue, 4 Aug 2020 17:04:52 -0400 Subject: [PATCH 41/51] feat: Export MinMaxLastSumCountAggregator metrics to the collector as Summary (#1320) Co-authored-by: Daniel Dyla --- .../src/transformMetrics.ts | 67 +++- .../common/CollectorMetricExporter.test.ts | 4 +- .../test/common/transformMetrics.test.ts | 67 +++- .../test/helper.ts | 295 ++++++++++++------ .../test/node/CollectorMetricExporter.test.ts | 18 +- .../CollectorMetricExporterWithJson.test.ts | 16 +- 6 files changed, 312 insertions(+), 155 deletions(-) diff --git a/packages/opentelemetry-exporter-collector/src/transformMetrics.ts b/packages/opentelemetry-exporter-collector/src/transformMetrics.ts index 96263c2d8a..f192d117bf 100644 --- a/packages/opentelemetry-exporter-collector/src/transformMetrics.ts +++ b/packages/opentelemetry-exporter-collector/src/transformMetrics.ts @@ -28,6 +28,7 @@ import * as core from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; import { toCollectorResource } from './transform'; import { CollectorExporterBase } from './CollectorExporterBase'; +import { HrTime } from '@opentelemetry/api'; /** * Converts labels @@ -60,6 +61,9 @@ export function toCollectorType( if (metric.aggregator instanceof HistogramAggregator) { return opentelemetryProto.metrics.v1.MetricDescriptorType.HISTOGRAM; } + if (metric.aggregator instanceof MinMaxLastSumCountAggregator) { + return opentelemetryProto.metrics.v1.MetricDescriptorType.SUMMARY; + } if (metric.descriptor.valueType == api.ValueType.INT) { return opentelemetryProto.metrics.v1.MetricDescriptorType.INT64; } @@ -67,7 +71,6 @@ export function toCollectorType( return opentelemetryProto.metrics.v1.MetricDescriptorType.DOUBLE; } - // @TODO #1294: Add Summary once implemented return opentelemetryProto.metrics.v1.MetricDescriptorType.INVALID_TYPE; } @@ -132,14 +135,9 @@ export function toSingularPoint( timeUnixNano: number; value: number; } { - const pointValue = - metric.aggregator instanceof MinMaxLastSumCountAggregator - ? (metric.aggregator.toPoint().value as Distribution).last - : (metric.aggregator.toPoint().value as number); - return { labels: toCollectorLabels(metric.labels), - value: pointValue, + value: metric.aggregator.toPoint().value as number, startTimeUnixNano: startTime, timeUnixNano: core.hrTimeToNanoseconds( metric.aggregator.toPoint().timestamp @@ -156,19 +154,47 @@ export function toHistogramPoint( metric: MetricRecord, startTime: number ): opentelemetryProto.metrics.v1.HistogramDataPoint { - const histValue = metric.aggregator.toPoint().value as Histogram; + const { value, timestamp } = metric.aggregator.toPoint() as { + value: Histogram; + timestamp: HrTime; + }; return { labels: toCollectorLabels(metric.labels), - sum: histValue.sum, - count: histValue.count, + sum: value.sum, + count: value.count, startTimeUnixNano: startTime, - timeUnixNano: core.hrTimeToNanoseconds( - metric.aggregator.toPoint().timestamp - ), - buckets: histValue.buckets.counts.map(count => { + timeUnixNano: core.hrTimeToNanoseconds(timestamp), + buckets: value.buckets.counts.map(count => { return { count }; }), - explicitBounds: histValue.buckets.boundaries, + explicitBounds: value.buckets.boundaries, + }; +} + +/** + * Returns a SummaryPoint to the collector + * @param metric + * @param startTime + */ +export function toSummaryPoint( + metric: MetricRecord, + startTime: number +): opentelemetryProto.metrics.v1.SummaryDataPoint { + const { value, timestamp } = metric.aggregator.toPoint() as { + value: Distribution; + timestamp: HrTime; + }; + + return { + labels: toCollectorLabels(metric.labels), + sum: value.sum, + count: value.count, + startTimeUnixNano: startTime, + timeUnixNano: core.hrTimeToNanoseconds(timestamp), + percentileValues: [ + { percentile: 0, value: value.min }, + { percentile: 100, value: value.max }, + ], }; } @@ -190,6 +216,15 @@ export function toCollectorMetric( histogramDataPoints: [toHistogramPoint(metric, startTime)], }; } + if ( + toCollectorType(metric) === + opentelemetryProto.metrics.v1.MetricDescriptorType.SUMMARY + ) { + return { + metricDescriptor: toCollectorMetricDescriptor(metric), + summaryDataPoints: [toSummaryPoint(metric, startTime)], + }; + } if (metric.descriptor.valueType == api.ValueType.INT) { return { metricDescriptor: toCollectorMetricDescriptor(metric), @@ -201,7 +236,7 @@ export function toCollectorMetric( metricDescriptor: toCollectorMetricDescriptor(metric), doubleDataPoints: [toSingularPoint(metric, startTime)], }; - } // TODO: Add support for summary points once implemented + } return { metricDescriptor: toCollectorMetricDescriptor(metric), diff --git a/packages/opentelemetry-exporter-collector/test/common/CollectorMetricExporter.test.ts b/packages/opentelemetry-exporter-collector/test/common/CollectorMetricExporter.test.ts index 086a8ea82f..e7ed4baca0 100644 --- a/packages/opentelemetry-exporter-collector/test/common/CollectorMetricExporter.test.ts +++ b/packages/opentelemetry-exporter-collector/test/common/CollectorMetricExporter.test.ts @@ -63,8 +63,8 @@ describe('CollectorMetricExporter - common', () => { }; collectorExporter = new CollectorMetricExporter(collectorExporterConfig); metrics = []; - metrics.push(Object.assign({}, mockCounter)); - metrics.push(Object.assign({}, mockObserver)); + metrics.push(mockCounter()); + metrics.push(mockObserver()); }); afterEach(() => { diff --git a/packages/opentelemetry-exporter-collector/test/common/transformMetrics.test.ts b/packages/opentelemetry-exporter-collector/test/common/transformMetrics.test.ts index 8cae6cc2cc..e5a42194b2 100644 --- a/packages/opentelemetry-exporter-collector/test/common/transformMetrics.test.ts +++ b/packages/opentelemetry-exporter-collector/test/common/transformMetrics.test.ts @@ -17,57 +17,90 @@ import * as assert from 'assert'; import * as transform from '../../src/transformMetrics'; import { mockCounter, + mockDoubleCounter, mockObserver, mockedResources, mockedInstrumentationLibraries, multiResourceMetrics, multiInstrumentationLibraryMetrics, ensureCounterIsCorrect, + ensureDoubleCounterIsCorrect, ensureObserverIsCorrect, mockHistogram, ensureHistogramIsCorrect, ensureValueRecorderIsCorrect, mockValueRecorder, } from '../helper'; +import { MetricRecord, SumAggregator } from '@opentelemetry/metrics'; import { hrTimeToNanoseconds } from '@opentelemetry/core'; +import { Resource } from '@opentelemetry/resources'; describe('transformMetrics', () => { describe('toCollectorMetric', () => { + const counter: MetricRecord = mockCounter(); + const doubleCounter: MetricRecord = mockDoubleCounter(); + const observer: MetricRecord = mockObserver(); + const histogram: MetricRecord = mockHistogram(); + const recorder: MetricRecord = mockValueRecorder(); + const invalidMetric: MetricRecord = { + descriptor: { + name: 'name', + description: 'description', + unit: 'unit', + metricKind: 8, // Not a valid metricKind + valueType: 2, // Not double or int + }, + labels: {}, + aggregator: new SumAggregator(), + resource: new Resource({}), + instrumentationLibrary: { name: 'x', version: 'y' }, + }; beforeEach(() => { // Counter - mockCounter.aggregator.update(1); + counter.aggregator.update(1); + + // Double Counter + doubleCounter.aggregator.update(8); // Observer - mockObserver.aggregator.update(10); + observer.aggregator.update(3); + observer.aggregator.update(6); // Histogram - mockHistogram.aggregator.update(7); - mockHistogram.aggregator.update(14); + histogram.aggregator.update(7); + histogram.aggregator.update(14); // ValueRecorder - mockValueRecorder.aggregator.update(5); - }); - - afterEach(() => { - mockCounter.aggregator.update(-1); // Reset counter + recorder.aggregator.update(5); }); it('should convert metric', () => { ensureCounterIsCorrect( - transform.toCollectorMetric(mockCounter, 1592602232694000000), - hrTimeToNanoseconds(mockCounter.aggregator.toPoint().timestamp) + transform.toCollectorMetric(counter, 1592602232694000000), + hrTimeToNanoseconds(counter.aggregator.toPoint().timestamp) ); ensureObserverIsCorrect( - transform.toCollectorMetric(mockObserver, 1592602232694000000), - hrTimeToNanoseconds(mockObserver.aggregator.toPoint().timestamp) + transform.toCollectorMetric(observer, 1592602232694000000), + hrTimeToNanoseconds(observer.aggregator.toPoint().timestamp) ); ensureHistogramIsCorrect( - transform.toCollectorMetric(mockHistogram, 1592602232694000000), - hrTimeToNanoseconds(mockHistogram.aggregator.toPoint().timestamp) + transform.toCollectorMetric(histogram, 1592602232694000000), + hrTimeToNanoseconds(histogram.aggregator.toPoint().timestamp) ); ensureValueRecorderIsCorrect( - transform.toCollectorMetric(mockValueRecorder, 1592602232694000000), - hrTimeToNanoseconds(mockValueRecorder.aggregator.toPoint().timestamp) + transform.toCollectorMetric(recorder, 1592602232694000000), + hrTimeToNanoseconds(recorder.aggregator.toPoint().timestamp) + ); + + ensureDoubleCounterIsCorrect( + transform.toCollectorMetric(doubleCounter, 1592602232694000000), + hrTimeToNanoseconds(doubleCounter.aggregator.toPoint().timestamp) + ); + + const emptyMetric = transform.toCollectorMetric( + invalidMetric, + 1592602232694000000 ); + assert.deepStrictEqual(emptyMetric.int64DataPoints, []); }); }); describe('toCollectorMetricDescriptor', () => { diff --git a/packages/opentelemetry-exporter-collector/test/helper.ts b/packages/opentelemetry-exporter-collector/test/helper.ts index 58d70d28eb..697fa7ee90 100644 --- a/packages/opentelemetry-exporter-collector/test/helper.ts +++ b/packages/opentelemetry-exporter-collector/test/helper.ts @@ -38,10 +38,6 @@ if (typeof Buffer === 'undefined') { }; } -type Mutable = { - -readonly [P in keyof T]: T[P]; -}; - const traceIdArr = [ 31, 16, @@ -63,77 +59,105 @@ const traceIdArr = [ const spanIdArr = [94, 16, 114, 97, 246, 79, 165, 62]; const parentIdArr = [120, 168, 145, 80, 152, 134, 67, 136]; -export const mockCounter: MetricRecord = { - descriptor: { - name: 'test-counter', - description: 'sample counter description', - unit: '1', - metricKind: MetricKind.COUNTER, - valueType: ValueType.INT, - }, - labels: {}, - aggregator: new SumAggregator(), - resource: new Resource({ - service: 'ui', - version: 1, - cost: 112.12, - }), - instrumentationLibrary: { name: 'default', version: '0.0.1' }, -}; +export function mockCounter(): MetricRecord { + return { + descriptor: { + name: 'test-counter', + description: 'sample counter description', + unit: '1', + metricKind: MetricKind.COUNTER, + valueType: ValueType.INT, + }, + labels: {}, + aggregator: new SumAggregator(), + resource: new Resource({ + service: 'ui', + version: 1, + cost: 112.12, + }), + instrumentationLibrary: { name: 'default', version: '0.0.1' }, + }; +} -export const mockObserver: MetricRecord = { - descriptor: { - name: 'test-observer', - description: 'sample observer description', - unit: '2', - metricKind: MetricKind.VALUE_OBSERVER, - valueType: ValueType.DOUBLE, - }, - labels: {}, - aggregator: new MinMaxLastSumCountAggregator(), - resource: new Resource({ - service: 'ui', - version: 1, - cost: 112.12, - }), - instrumentationLibrary: { name: 'default', version: '0.0.1' }, -}; +export function mockDoubleCounter(): MetricRecord { + return { + descriptor: { + name: 'test-counter', + description: 'sample counter description', + unit: '1', + metricKind: MetricKind.COUNTER, + valueType: ValueType.DOUBLE, + }, + labels: {}, + aggregator: new SumAggregator(), + resource: new Resource({ + service: 'ui', + version: 1, + cost: 112.12, + }), + instrumentationLibrary: { name: 'default', version: '0.0.1' }, + }; +} -export const mockValueRecorder: MetricRecord = { - descriptor: { - name: 'test-recorder', - description: 'sample recorder description', - unit: '3', - metricKind: MetricKind.VALUE_RECORDER, - valueType: ValueType.INT, - }, - labels: {}, - aggregator: new MinMaxLastSumCountAggregator(), - resource: new Resource({ - service: 'ui', - version: 1, - cost: 112.12, - }), - instrumentationLibrary: { name: 'default', version: '0.0.1' }, -}; +export function mockObserver(): MetricRecord { + return { + descriptor: { + name: 'test-observer', + description: 'sample observer description', + unit: '2', + metricKind: MetricKind.VALUE_OBSERVER, + valueType: ValueType.DOUBLE, + }, + labels: {}, + aggregator: new MinMaxLastSumCountAggregator(), + resource: new Resource({ + service: 'ui', + version: 1, + cost: 112.12, + }), + instrumentationLibrary: { name: 'default', version: '0.0.1' }, + }; +} -export const mockHistogram: Mutable = { - descriptor: { - name: 'test-hist', - description: 'sample observer description', - unit: '2', - metricKind: MetricKind.VALUE_OBSERVER, - valueType: ValueType.DOUBLE, - }, - labels: {}, - aggregator: new HistogramAggregator([10, 20]), - resource: new Resource({ - service: 'ui', - version: 1, - cost: 112.12, - }), - instrumentationLibrary: { name: 'default', version: '0.0.1' }, -}; +export function mockValueRecorder(): MetricRecord { + return { + descriptor: { + name: 'test-recorder', + description: 'sample recorder description', + unit: '3', + metricKind: MetricKind.VALUE_RECORDER, + valueType: ValueType.INT, + }, + labels: {}, + aggregator: new MinMaxLastSumCountAggregator(), + resource: new Resource({ + service: 'ui', + version: 1, + cost: 112.12, + }), + instrumentationLibrary: { name: 'default', version: '0.0.1' }, + }; +} + +export function mockHistogram(): MetricRecord { + return { + descriptor: { + name: 'test-hist', + description: 'sample observer description', + unit: '2', + metricKind: MetricKind.VALUE_OBSERVER, + valueType: ValueType.DOUBLE, + }, + labels: {}, + aggregator: new HistogramAggregator([10, 20]), + resource: new Resource({ + service: 'ui', + version: 1, + cost: 112.12, + }), + instrumentationLibrary: { name: 'default', version: '0.0.1' }, + }; +} const traceIdBase64 = 'HxAI3I4nDoXECg18OTmyeA=='; const spanIdBase64 = 'XhByYfZPpT4='; @@ -289,17 +313,17 @@ export const multiResourceTrace: ReadableSpan[] = [ export const multiResourceMetrics: MetricRecord[] = [ { - ...mockCounter, + ...mockCounter(), resource: mockedResources[0], instrumentationLibrary: mockedInstrumentationLibraries[0], }, { - ...mockObserver, + ...mockObserver(), resource: mockedResources[1], instrumentationLibrary: mockedInstrumentationLibraries[0], }, { - ...mockCounter, + ...mockCounter(), resource: mockedResources[0], instrumentationLibrary: mockedInstrumentationLibraries[0], }, @@ -307,17 +331,17 @@ export const multiResourceMetrics: MetricRecord[] = [ export const multiInstrumentationLibraryMetrics: MetricRecord[] = [ { - ...mockCounter, + ...mockCounter(), resource: mockedResources[0], instrumentationLibrary: mockedInstrumentationLibraries[0], }, { - ...mockObserver, + ...mockObserver(), resource: mockedResources[0], instrumentationLibrary: mockedInstrumentationLibraries[1], }, { - ...mockCounter, + ...mockCounter(), resource: mockedResources[0], instrumentationLibrary: mockedInstrumentationLibraries[0], }, @@ -857,8 +881,12 @@ export function ensureCounterIsCorrect( name: 'test-counter', description: 'sample counter description', unit: '1', - type: 2, - temporality: 3, + type: + collectorTypes.opentelemetryProto.metrics.v1.MetricDescriptorType + .MONOTONIC_INT64, + temporality: + collectorTypes.opentelemetryProto.metrics.v1.MetricDescriptorTemporality + .CUMULATIVE, }, int64DataPoints: [ { @@ -871,6 +899,33 @@ export function ensureCounterIsCorrect( }); } +export function ensureDoubleCounterIsCorrect( + metric: collectorTypes.opentelemetryProto.metrics.v1.Metric, + time: number +) { + assert.deepStrictEqual(metric, { + metricDescriptor: { + name: 'test-counter', + description: 'sample counter description', + unit: '1', + type: + collectorTypes.opentelemetryProto.metrics.v1.MetricDescriptorType + .MONOTONIC_DOUBLE, + temporality: + collectorTypes.opentelemetryProto.metrics.v1.MetricDescriptorTemporality + .CUMULATIVE, + }, + doubleDataPoints: [ + { + labels: [], + value: 8, + startTimeUnixNano: 1592602232694000000, + timeUnixNano: time, + }, + ], + }); +} + export function ensureObserverIsCorrect( metric: collectorTypes.opentelemetryProto.metrics.v1.Metric, time: number @@ -880,15 +935,27 @@ export function ensureObserverIsCorrect( name: 'test-observer', description: 'sample observer description', unit: '2', - type: 3, - temporality: 2, + type: + collectorTypes.opentelemetryProto.metrics.v1.MetricDescriptorType + .SUMMARY, + temporality: + collectorTypes.opentelemetryProto.metrics.v1.MetricDescriptorTemporality + .DELTA, }, - doubleDataPoints: [ + summaryDataPoints: [ { - labels: [], - value: 10, startTimeUnixNano: 1592602232694000000, timeUnixNano: time, + count: 2, + sum: 9, + labels: [], + percentileValues: [ + { + percentile: 0, + value: 3, + }, + { percentile: 100, value: 6 }, + ], }, ], }); @@ -903,13 +970,22 @@ export function ensureValueRecorderIsCorrect( name: 'test-recorder', description: 'sample recorder description', unit: '3', - type: 1, - temporality: 2, + type: + collectorTypes.opentelemetryProto.metrics.v1.MetricDescriptorType + .SUMMARY, + temporality: + collectorTypes.opentelemetryProto.metrics.v1.MetricDescriptorTemporality + .DELTA, }, - int64DataPoints: [ + summaryDataPoints: [ { + count: 1, + sum: 5, labels: [], - value: 5, + percentileValues: [ + { percentile: 0, value: 5 }, + { percentile: 100, value: 5 }, + ], startTimeUnixNano: 1592602232694000000, timeUnixNano: time, }, @@ -926,8 +1002,12 @@ export function ensureHistogramIsCorrect( name: 'test-hist', description: 'sample observer description', unit: '2', - type: 5, - temporality: 2, + type: + collectorTypes.opentelemetryProto.metrics.v1.MetricDescriptorType + .HISTOGRAM, + temporality: + collectorTypes.opentelemetryProto.metrics.v1.MetricDescriptorTemporality + .DELTA, }, histogramDataPoints: [ { @@ -972,20 +1052,25 @@ export function ensureExportedObserverIsCorrect( name: 'test-observer', description: 'sample observer description', unit: '2', - type: 'DOUBLE', + type: 'SUMMARY', temporality: 'DELTA', }); assert.deepStrictEqual(metric.int64DataPoints, []); - assert.deepStrictEqual(metric.summaryDataPoints, []); + assert.deepStrictEqual(metric.doubleDataPoints, []); assert.deepStrictEqual(metric.histogramDataPoints, []); - assert.ok(metric.doubleDataPoints); - assert.deepStrictEqual(metric.doubleDataPoints[0].labels, []); - assert.deepStrictEqual(metric.doubleDataPoints[0].value, 10); + assert.ok(metric.summaryDataPoints); + assert.deepStrictEqual(metric.summaryDataPoints[0].labels, []); + assert.deepStrictEqual(metric.summaryDataPoints[0].sum, 9); + assert.deepStrictEqual(metric.summaryDataPoints[0].count, '2'); assert.deepStrictEqual( - metric.doubleDataPoints[0].startTimeUnixNano, + metric.summaryDataPoints[0].startTimeUnixNano, '1592602232694000128' ); + assert.deepStrictEqual(metric.summaryDataPoints[0].percentileValues, [ + { percentile: 0, value: 3 }, + { percentile: 100, value: 6 }, + ]); } export function ensureExportedHistogramIsCorrect( @@ -1027,18 +1112,24 @@ export function ensureExportedValueRecorderIsCorrect( name: 'test-recorder', description: 'sample recorder description', unit: '3', - type: 'INT64', + type: 'SUMMARY', temporality: 'DELTA', }); assert.deepStrictEqual(metric.histogramDataPoints, []); - assert.deepStrictEqual(metric.summaryDataPoints, []); + assert.deepStrictEqual(metric.int64DataPoints, []); assert.deepStrictEqual(metric.doubleDataPoints, []); - assert.ok(metric.int64DataPoints); - assert.deepStrictEqual(metric.int64DataPoints[0].labels, []); + assert.ok(metric.summaryDataPoints); + assert.deepStrictEqual(metric.summaryDataPoints[0].labels, []); assert.deepStrictEqual( - metric.int64DataPoints[0].startTimeUnixNano, + metric.summaryDataPoints[0].startTimeUnixNano, '1592602232694000128' ); + assert.deepStrictEqual(metric.summaryDataPoints[0].percentileValues, [ + { percentile: 0, value: 5 }, + { percentile: 100, value: 5 }, + ]); + assert.deepStrictEqual(metric.summaryDataPoints[0].count, '1'); + assert.deepStrictEqual(metric.summaryDataPoints[0].sum, 5); } export function ensureResourceIsCorrect( diff --git a/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporter.test.ts b/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporter.test.ts index ee659923d4..18f3b7a444 100644 --- a/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporter.test.ts +++ b/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporter.test.ts @@ -23,7 +23,7 @@ import * as assert from 'assert'; import * as sinon from 'sinon'; import { CollectorMetricExporter } from '../../src/platform/node'; import * as collectorTypes from '../../src/types'; -import { MetricRecord, HistogramAggregator } from '@opentelemetry/metrics'; +import { MetricRecord } from '@opentelemetry/metrics'; import { mockCounter, mockObserver, @@ -137,13 +137,16 @@ const testCollectorMetricExporter = (params: TestParams) => value: 1592602232694000000, }); metrics = []; - metrics.push(Object.assign({}, mockCounter)); - metrics.push(Object.assign({}, mockObserver)); - metrics.push(Object.assign({}, mockHistogram)); - metrics.push(Object.assign({}, mockValueRecorder)); + metrics.push(mockCounter()); + metrics.push(mockObserver()); + metrics.push(mockHistogram()); + metrics.push(mockValueRecorder()); metrics[0].aggregator.update(1); - metrics[1].aggregator.update(10); + + metrics[1].aggregator.update(3); + metrics[1].aggregator.update(6); + metrics[2].aggregator.update(7); metrics[2].aggregator.update(14); metrics[3].aggregator.update(5); @@ -151,9 +154,6 @@ const testCollectorMetricExporter = (params: TestParams) => }); afterEach(() => { - // Aggregator is not deep-copied - metrics[0].aggregator.update(-1); - mockHistogram.aggregator = new HistogramAggregator([10, 20]); exportedData = undefined; reqMetadata = undefined; }); diff --git a/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporterWithJson.test.ts b/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporterWithJson.test.ts index c8f767c82b..433b9d867a 100644 --- a/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporterWithJson.test.ts +++ b/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporterWithJson.test.ts @@ -34,7 +34,7 @@ import { ensureHistogramIsCorrect, ensureObserverIsCorrect, } from '../helper'; -import { MetricRecord, HistogramAggregator } from '@opentelemetry/metrics'; +import { MetricRecord } from '@opentelemetry/metrics'; const fakeRequest = { end: function () {}, @@ -77,20 +77,18 @@ describe('CollectorMetricExporter - node with json over http', () => { value: 1592602232694000000, }); metrics = []; - metrics.push(Object.assign({}, mockCounter)); - metrics.push(Object.assign({}, mockObserver)); - metrics.push(Object.assign({}, mockHistogram)); - metrics.push(Object.assign({}, mockValueRecorder)); + metrics.push(mockCounter()); + metrics.push(mockObserver()); + metrics.push(mockHistogram()); + metrics.push(mockValueRecorder()); metrics[0].aggregator.update(1); - metrics[1].aggregator.update(10); + metrics[1].aggregator.update(3); + metrics[1].aggregator.update(6); metrics[2].aggregator.update(7); metrics[2].aggregator.update(14); metrics[3].aggregator.update(5); }); afterEach(() => { - // Aggregator is not deep-copied - metrics[0].aggregator.update(-1); - mockHistogram.aggregator = new HistogramAggregator([10, 20]); spyRequest.restore(); spyWrite.restore(); }); From 4d92d39a5bbda254ae4ac00e230915956a2580b8 Mon Sep 17 00:00:00 2001 From: David W Date: Wed, 5 Aug 2020 12:49:58 -0400 Subject: [PATCH 42/51] feat: Collector Metric Exporter for the Web (#1308) Co-authored-by: Daniel Dyla --- examples/collector-exporter-node/README.md | 22 +- .../docker/collector-config.yaml | 6 + .../docker/docker-compose.yaml | 15 +- .../docker/prometheus.yaml | 9 + examples/collector-exporter-node/metrics.js | 29 ++ examples/collector-exporter-node/package.json | 4 +- .../{start.js => tracing.js} | 0 .../README.md | 61 ++- .../browser/CollectorExporterBrowserBase.ts | 80 ++++ .../browser/CollectorMetricExporter.ts | 55 +++ .../browser/CollectorTraceExporter.ts | 62 +-- .../src/platform/browser/index.ts | 1 + .../platform/node/CollectorMetricExporter.ts | 1 + .../browser/CollectorMetricExporter.test.ts | 403 ++++++++++++++++++ .../test/helper.ts | 2 +- 15 files changed, 666 insertions(+), 84 deletions(-) create mode 100644 examples/collector-exporter-node/docker/prometheus.yaml create mode 100644 examples/collector-exporter-node/metrics.js rename examples/collector-exporter-node/{start.js => tracing.js} (100%) create mode 100644 packages/opentelemetry-exporter-collector/src/platform/browser/CollectorExporterBrowserBase.ts create mode 100644 packages/opentelemetry-exporter-collector/src/platform/browser/CollectorMetricExporter.ts create mode 100644 packages/opentelemetry-exporter-collector/test/browser/CollectorMetricExporter.test.ts diff --git a/examples/collector-exporter-node/README.md b/examples/collector-exporter-node/README.md index 9d61c6b168..e1b19ffef9 100644 --- a/examples/collector-exporter-node/README.md +++ b/examples/collector-exporter-node/README.md @@ -20,16 +20,32 @@ npm install npm run docker:start ``` -2. Run app +2. Run tracing app ```shell script # from this directory - npm start + npm start:tracing ``` -3. Open page at - you should be able to see the spans in zipkin +3. Run metrics app + + ```shell script + # from this directory + npm start:metrics + ``` + +4. Open page at - you should be able to see the spans in zipkin ![Screenshot of the running example](images/spans.png) +### Prometheus UI + +The prometheus client will be available at . + +Note: It may take some time for the application metrics to appear on the Prometheus dashboard. + +

+

+ ## Useful links - For more information on OpenTelemetry, visit: diff --git a/examples/collector-exporter-node/docker/collector-config.yaml b/examples/collector-exporter-node/docker/collector-config.yaml index f104677f7e..e9a909d78f 100644 --- a/examples/collector-exporter-node/docker/collector-config.yaml +++ b/examples/collector-exporter-node/docker/collector-config.yaml @@ -10,6 +10,8 @@ receivers: exporters: zipkin: endpoint: "http://zipkin-all-in-one:9411/api/v2/spans" + prometheus: + endpoint: "0.0.0.0:9464" processors: batch: @@ -21,3 +23,7 @@ service: receivers: [otlp] exporters: [zipkin] processors: [batch, queued_retry] + metrics: + receivers: [otlp] + exporters: [prometheus] + processors: [batch, queued_retry] diff --git a/examples/collector-exporter-node/docker/docker-compose.yaml b/examples/collector-exporter-node/docker/docker-compose.yaml index 3882379ad3..0dfe1a23f7 100644 --- a/examples/collector-exporter-node/docker/docker-compose.yaml +++ b/examples/collector-exporter-node/docker/docker-compose.yaml @@ -5,11 +5,10 @@ services: image: otel/opentelemetry-collector:latest # image: otel/opentelemetry-collector:0.6.0 command: ["--config=/conf/collector-config.yaml", "--log-level=DEBUG"] - networks: - - otelcol volumes: - ./collector-config.yaml:/conf/collector-config.yaml ports: + - "9464:9464" - "55680:55680" - "55681:55681" depends_on: @@ -18,10 +17,14 @@ services: # Zipkin zipkin-all-in-one: image: openzipkin/zipkin:latest - networks: - - otelcol ports: - "9411:9411" -networks: - otelcol: + # Prometheus + prometheus: + container_name: prometheus + image: prom/prometheus:latest + volumes: + - ./prometheus.yaml:/etc/prometheus/prometheus.yml + ports: + - "9090:9090" diff --git a/examples/collector-exporter-node/docker/prometheus.yaml b/examples/collector-exporter-node/docker/prometheus.yaml new file mode 100644 index 0000000000..b027daf9a0 --- /dev/null +++ b/examples/collector-exporter-node/docker/prometheus.yaml @@ -0,0 +1,9 @@ +global: + scrape_interval: 15s # Default is every 1 minute. + +scrape_configs: + - job_name: 'collector' + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + static_configs: + - targets: ['collector:9464'] diff --git a/examples/collector-exporter-node/metrics.js b/examples/collector-exporter-node/metrics.js new file mode 100644 index 0000000000..f91e105c20 --- /dev/null +++ b/examples/collector-exporter-node/metrics.js @@ -0,0 +1,29 @@ +'use strict'; + +const { CollectorMetricExporter } = require('@opentelemetry/exporter-collector'); +const { MeterProvider } = require('@opentelemetry/metrics'); + +const metricExporter = new CollectorMetricExporter({ + serviceName: 'basic-metric-service', + // logger: new ConsoleLogger(LogLevel.DEBUG), +}); + +const meter = new MeterProvider({ + exporter: metricExporter, + interval: 1000, +}).getMeter('example-prometheus'); + +const requestCounter = meter.createCounter('requests', { + description: 'Example of a Counter', +}); + +const upDownCounter = meter.createUpDownCounter('test_up_down_counter', { + description: 'Example of a UpDownCounter', +}); + +const labels = { pid: process.pid, environment: 'staging' }; + +setInterval(() => { + requestCounter.bind(labels).add(1); + upDownCounter.bind(labels).add(Math.random() > 0.5 ? 1 : -1); +}, 1000); diff --git a/examples/collector-exporter-node/package.json b/examples/collector-exporter-node/package.json index 8e3b821028..7dfeb695fb 100644 --- a/examples/collector-exporter-node/package.json +++ b/examples/collector-exporter-node/package.json @@ -5,7 +5,8 @@ "description": "Example of using @opentelemetry/collector-exporter in Node.js", "main": "index.js", "scripts": { - "start": "node ./start.js", + "start:tracing": "node tracing.js", + "start:metrics": "node metrics.js", "docker:start": "cd ./docker && docker-compose down && docker-compose up", "docker:startd": "cd ./docker && docker-compose down && docker-compose up -d", "docker:stop": "cd ./docker && docker-compose down" @@ -30,6 +31,7 @@ "@opentelemetry/api": "^0.10.2", "@opentelemetry/core": "^0.10.2", "@opentelemetry/exporter-collector": "^0.10.2", + "@opentelemetry/metrics": "^0.10.2", "@opentelemetry/tracing": "^0.10.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" diff --git a/examples/collector-exporter-node/start.js b/examples/collector-exporter-node/tracing.js similarity index 100% rename from examples/collector-exporter-node/start.js rename to examples/collector-exporter-node/tracing.js diff --git a/packages/opentelemetry-exporter-collector/README.md b/packages/opentelemetry-exporter-collector/README.md index 8233384dd1..2c04c06928 100644 --- a/packages/opentelemetry-exporter-collector/README.md +++ b/packages/opentelemetry-exporter-collector/README.md @@ -14,7 +14,7 @@ This module provides exporter for web and node to be used with [opentelemetry-co npm install --save @opentelemetry/exporter-collector ``` -## Usage in Web +## Traces in Web The CollectorTraceExporter in Web expects the endpoint to end in `/v1/trace`. @@ -36,7 +36,32 @@ provider.register(); ``` -## Usage in Node - GRPC +## Metrics in Web + +The CollectorMetricExporter in Web expects the endpoint to end in `/v1/metrics`. + +```js +import { MetricProvider } from '@opentelemetry/metrics'; +import { CollectorMetricExporter } from '@opentelemetry/exporter-collector'; +const collectorOptions = { + url: '', // url is optional and can be omitted - default is http://localhost:55681/v1/metrics + headers: {}, //an optional object containing custom headers to be sent with each request +}; +const exporter = new CollectorMetricExporter(collectorOptions); + +// Register the exporter +const meter = new MeterProvider({ + exporter, + interval: 60000, +}).getMeter('example-meter'); + +// Now, start recording data +const counter = meter.createCounter('metric_name'); +counter.add(10, { 'key': 'value' }); + +``` + +## Traces in Node - GRPC The CollectorTraceExporter in Node expects the URL to only be the hostname. It will not work with `/v1/trace`. @@ -109,7 +134,7 @@ provider.register(); Note, that this will only work if TLS is also configured on the server. -## Usage in Node - JSON over http +## Traces in Node - JSON over http ```js const { BasicTracerProvider, SimpleSpanProcessor } = require('@opentelemetry/tracing'); @@ -132,7 +157,7 @@ provider.register(); ``` -## Usage in Node - PROTO over http +## Traces in Node - PROTO over http ```js const { BasicTracerProvider, SimpleSpanProcessor } = require('@opentelemetry/tracing'); @@ -155,26 +180,28 @@ provider.register(); ``` -## Usage in Node - PROTO over http +## Metrics in Node -```js -const { BasicTracerProvider, SimpleSpanProcessor } = require('@opentelemetry/tracing'); -const { CollectorExporter, CollectorTransportNode } = require('@opentelemetry/exporter-collector'); +The CollectorTraceExporter in Node expects the URL to only be the hostname. It will not work with `/v1/metrics`. All options that work with trace also work with metrics. +```js +const { MeterProvider } = require('@opentelemetry/metrics'); +const { CollectorMetricExporter } = require('@opentelemetry/exporter-collector'); const collectorOptions = { - protocolNode: CollectorTransportNode.HTTP_PROTO, serviceName: 'basic-service', - url: '', // url is optional and can be omitted - default is http://localhost:55680/v1/trace - headers: { - foo: 'bar' - }, //an optional object containing custom headers to be sent with each request will only work with json over http + url: '', // url is optional and can be omitted - default is localhost:55681 }; +const exporter = new CollectorMetricExporter(collectorOptions); -const provider = new BasicTracerProvider(); -const exporter = new CollectorExporter(collectorOptions); -provider.addSpanProcessor(new SimpleSpanProcessor(exporter)); +// Register the exporter +const meter = new MeterProvider({ + exporter, + interval: 60000, +}).getMeter('example-meter'); -provider.register(); +// Now, start recording data +const counter = meter.createCounter('metric_name'); +counter.add(10, { 'key': 'value' }); ``` diff --git a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorExporterBrowserBase.ts b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorExporterBrowserBase.ts new file mode 100644 index 0000000000..ab35cd98ac --- /dev/null +++ b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorExporterBrowserBase.ts @@ -0,0 +1,80 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CollectorExporterBase } from '../../CollectorExporterBase'; +import { CollectorExporterConfigBrowser } from './types'; +import * as collectorTypes from '../../types'; +import { parseHeaders } from '../../util'; +import { sendWithBeacon, sendWithXhr } from './util'; + +/** + * Collector Metric Exporter abstract base class + */ +export abstract class CollectorExporterBrowserBase< + ExportItem, + ServiceRequest +> extends CollectorExporterBase< + CollectorExporterConfigBrowser, + ExportItem, + ServiceRequest +> { + private _headers: Record; + private _useXHR: boolean = false; + + /** + * @param config + */ + constructor(config: CollectorExporterConfigBrowser = {}) { + super(config); + this._useXHR = + !!config.headers || typeof navigator.sendBeacon !== 'function'; + if (this._useXHR) { + this._headers = parseHeaders(config.headers, this.logger); + } else { + this._headers = {}; + } + } + + onInit(): void { + window.addEventListener('unload', this.shutdown); + } + + onShutdown(): void { + window.removeEventListener('unload', this.shutdown); + } + + send( + items: ExportItem[], + onSuccess: () => void, + onError: (error: collectorTypes.CollectorExporterError) => void + ) { + const serviceRequest = this.convert(items); + const body = JSON.stringify(serviceRequest); + + if (this._useXHR) { + sendWithXhr( + body, + this.url, + this._headers, + this.logger, + onSuccess, + onError + ); + } else { + sendWithBeacon(body, this.url, this.logger, onSuccess, onError); + } + } +} diff --git a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorMetricExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorMetricExporter.ts new file mode 100644 index 0000000000..772f7fca29 --- /dev/null +++ b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorMetricExporter.ts @@ -0,0 +1,55 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { MetricRecord, MetricExporter } from '@opentelemetry/metrics'; +import * as collectorTypes from '../../types'; +import { CollectorExporterBrowserBase } from './CollectorExporterBrowserBase'; +import { toCollectorExportMetricServiceRequest } from '../../transformMetrics'; +import { CollectorExporterConfigBrowser } from './types'; + +const DEFAULT_COLLECTOR_URL = 'http://localhost:55680/v1/metrics'; +const DEFAULT_SERVICE_NAME = 'collector-metric-exporter'; + +/** + * Collector Metric Exporter for Web + */ +export class CollectorMetricExporter + extends CollectorExporterBrowserBase< + MetricRecord, + collectorTypes.opentelemetryProto.collector.metrics.v1.ExportMetricsServiceRequest + > + implements MetricExporter { + // Converts time to nanoseconds + private readonly _startTime = new Date().getTime() * 1000000; + + convert( + metrics: MetricRecord[] + ): collectorTypes.opentelemetryProto.collector.metrics.v1.ExportMetricsServiceRequest { + return toCollectorExportMetricServiceRequest( + metrics, + this._startTime, + this + ); + } + + getDefaultUrl(config: CollectorExporterConfigBrowser): string { + return config.url || DEFAULT_COLLECTOR_URL; + } + + getDefaultServiceName(config: CollectorExporterConfigBrowser): string { + return config.serviceName || DEFAULT_SERVICE_NAME; + } +} diff --git a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts index d593e1d44d..6fb89b46cf 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts @@ -14,13 +14,11 @@ * limitations under the License. */ -import { CollectorExporterBase } from '../../CollectorExporterBase'; +import { CollectorExporterBrowserBase } from './CollectorExporterBrowserBase'; import { ReadableSpan, SpanExporter } from '@opentelemetry/tracing'; import { toCollectorExportTraceServiceRequest } from '../../transform'; import { CollectorExporterConfigBrowser } from './types'; import * as collectorTypes from '../../types'; -import { sendWithBeacon, sendWithXhr } from './util'; -import { parseHeaders } from '../../util'; const DEFAULT_SERVICE_NAME = 'collector-trace-exporter'; const DEFAULT_COLLECTOR_URL = 'http://localhost:55681/v1/trace'; @@ -29,35 +27,15 @@ const DEFAULT_COLLECTOR_URL = 'http://localhost:55681/v1/trace'; * Collector Trace Exporter for Web */ export class CollectorTraceExporter - extends CollectorExporterBase< - CollectorExporterConfigBrowser, + extends CollectorExporterBrowserBase< ReadableSpan, collectorTypes.opentelemetryProto.collector.trace.v1.ExportTraceServiceRequest > implements SpanExporter { - private _headers: Record; - private _useXHR: boolean = false; - - /** - * @param config - */ - constructor(config: CollectorExporterConfigBrowser = {}) { - super(config); - this._useXHR = - !!config.headers || typeof navigator.sendBeacon !== 'function'; - if (this._useXHR) { - this._headers = parseHeaders(config.headers, this.logger); - } else { - this._headers = {}; - } - } - - onInit(): void { - window.addEventListener('unload', this.shutdown); - } - - onShutdown(): void { - window.removeEventListener('unload', this.shutdown); + convert( + spans: ReadableSpan[] + ): collectorTypes.opentelemetryProto.collector.trace.v1.ExportTraceServiceRequest { + return toCollectorExportTraceServiceRequest(spans, this); } getDefaultUrl(config: CollectorExporterConfigBrowser) { @@ -67,32 +45,4 @@ export class CollectorTraceExporter getDefaultServiceName(config: CollectorExporterConfigBrowser): string { return config.serviceName || DEFAULT_SERVICE_NAME; } - - convert( - spans: ReadableSpan[] - ): collectorTypes.opentelemetryProto.collector.trace.v1.ExportTraceServiceRequest { - return toCollectorExportTraceServiceRequest(spans, this); - } - - send( - spans: ReadableSpan[], - onSuccess: () => void, - onError: (error: collectorTypes.CollectorExporterError) => void - ) { - const exportTraceServiceRequest = this.convert(spans); - const body = JSON.stringify(exportTraceServiceRequest); - - if (this._useXHR) { - sendWithXhr( - body, - this.url, - this._headers, - this.logger, - onSuccess, - onError - ); - } else { - sendWithBeacon(body, this.url, this.logger, onSuccess, onError); - } - } } diff --git a/packages/opentelemetry-exporter-collector/src/platform/browser/index.ts b/packages/opentelemetry-exporter-collector/src/platform/browser/index.ts index 1c17973de2..fcbe012b52 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/browser/index.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/browser/index.ts @@ -15,3 +15,4 @@ */ export * from './CollectorTraceExporter'; +export * from './CollectorMetricExporter'; diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorMetricExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorMetricExporter.ts index 3f0aa3c8de..8eebc7bdeb 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorMetricExporter.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorMetricExporter.ts @@ -35,6 +35,7 @@ export class CollectorMetricExporter collectorTypes.opentelemetryProto.collector.metrics.v1.ExportMetricsServiceRequest > implements MetricExporter { + // Converts time to nanoseconds protected readonly _startTime = new Date().getTime() * 1000000; convert( diff --git a/packages/opentelemetry-exporter-collector/test/browser/CollectorMetricExporter.test.ts b/packages/opentelemetry-exporter-collector/test/browser/CollectorMetricExporter.test.ts new file mode 100644 index 0000000000..8187bebdf1 --- /dev/null +++ b/packages/opentelemetry-exporter-collector/test/browser/CollectorMetricExporter.test.ts @@ -0,0 +1,403 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { NoopLogger } from '@opentelemetry/core'; +import * as assert from 'assert'; +import * as sinon from 'sinon'; +import { CollectorMetricExporter } from '../../src/platform/browser/index'; +import * as collectorTypes from '../../src/types'; +import { MetricRecord } from '@opentelemetry/metrics'; +import { + mockCounter, + mockObserver, + ensureCounterIsCorrect, + ensureObserverIsCorrect, + ensureWebResourceIsCorrect, + ensureExportMetricsServiceRequestIsSet, + ensureHeadersContain, + mockHistogram, + mockValueRecorder, + ensureValueRecorderIsCorrect, + ensureHistogramIsCorrect, +} from '../helper'; +import { CollectorExporterConfigBrowser } from '../../src/platform/browser/types'; +import { hrTimeToNanoseconds } from '@opentelemetry/core'; +const sendBeacon = navigator.sendBeacon; + +describe('CollectorMetricExporter - web', () => { + let collectorExporter: CollectorMetricExporter; + let spyOpen: any; + let spySend: any; + let spyBeacon: any; + let metrics: MetricRecord[]; + + beforeEach(() => { + spyOpen = sinon.stub(XMLHttpRequest.prototype, 'open'); + spySend = sinon.stub(XMLHttpRequest.prototype, 'send'); + spyBeacon = sinon.stub(navigator, 'sendBeacon'); + metrics = []; + metrics.push(mockCounter()); + metrics.push(mockObserver()); + metrics.push(mockHistogram()); + metrics.push(mockValueRecorder()); + + metrics[0].aggregator.update(1); + metrics[1].aggregator.update(3); + metrics[1].aggregator.update(6); + metrics[2].aggregator.update(7); + metrics[2].aggregator.update(14); + metrics[3].aggregator.update(5); + }); + + afterEach(() => { + navigator.sendBeacon = sendBeacon; + spyOpen.restore(); + spySend.restore(); + spyBeacon.restore(); + }); + + describe('export', () => { + describe('when "sendBeacon" is available', () => { + beforeEach(() => { + collectorExporter = new CollectorMetricExporter({ + logger: new NoopLogger(), + url: 'http://foo.bar.com', + serviceName: 'bar', + }); + // Overwrites the start time to make tests consistent + Object.defineProperty(collectorExporter, '_startTime', { + value: 1592602232694000000, + }); + }); + it('should successfully send metrics using sendBeacon', done => { + collectorExporter.export(metrics, () => {}); + + setTimeout(() => { + const args = spyBeacon.args[0]; + const url = args[0]; + const body = args[1]; + const json = JSON.parse( + body + ) as collectorTypes.opentelemetryProto.collector.metrics.v1.ExportMetricsServiceRequest; + const metric1 = + json.resourceMetrics[0].instrumentationLibraryMetrics[0].metrics[0]; + const metric2 = + json.resourceMetrics[1].instrumentationLibraryMetrics[0].metrics[0]; + const metric3 = + json.resourceMetrics[2].instrumentationLibraryMetrics[0].metrics[0]; + const metric4 = + json.resourceMetrics[3].instrumentationLibraryMetrics[0].metrics[0]; + assert.ok(typeof metric1 !== 'undefined', "metric doesn't exist"); + if (metric1) { + ensureCounterIsCorrect( + metric1, + hrTimeToNanoseconds(metrics[0].aggregator.toPoint().timestamp) + ); + } + + assert.ok( + typeof metric2 !== 'undefined', + "second metric doesn't exist" + ); + if (metric2) { + ensureObserverIsCorrect( + metric2, + hrTimeToNanoseconds(metrics[1].aggregator.toPoint().timestamp) + ); + } + + assert.ok( + typeof metric3 !== 'undefined', + "third metric doesn't exist" + ); + if (metric3) { + ensureHistogramIsCorrect( + metric3, + hrTimeToNanoseconds(metrics[2].aggregator.toPoint().timestamp) + ); + } + + assert.ok( + typeof metric4 !== 'undefined', + "fourth metric doesn't exist" + ); + if (metric4) { + ensureValueRecorderIsCorrect( + metric4, + hrTimeToNanoseconds(metrics[3].aggregator.toPoint().timestamp) + ); + } + + const resource = json.resourceMetrics[0].resource; + assert.ok(typeof resource !== 'undefined', "resource doesn't exist"); + if (resource) { + ensureWebResourceIsCorrect(resource); + } + + assert.strictEqual(url, 'http://foo.bar.com'); + assert.strictEqual(spyBeacon.callCount, 1); + + assert.strictEqual(spyOpen.callCount, 0); + + ensureExportMetricsServiceRequestIsSet(json); + + done(); + }); + }); + + it('should log the successful message', done => { + const spyLoggerDebug = sinon.stub(collectorExporter.logger, 'debug'); + const spyLoggerError = sinon.stub(collectorExporter.logger, 'error'); + spyBeacon.restore(); + spyBeacon = sinon.stub(window.navigator, 'sendBeacon').returns(true); + + collectorExporter.export(metrics, () => {}); + + setTimeout(() => { + const response: any = spyLoggerDebug.args[1][0]; + assert.strictEqual(response, 'sendBeacon - can send'); + assert.strictEqual(spyLoggerError.args.length, 0); + + done(); + }); + }); + + it('should log the error message', done => { + const spyLoggerDebug = sinon.stub(collectorExporter.logger, 'debug'); + const spyLoggerError = sinon.stub(collectorExporter.logger, 'error'); + spyBeacon.restore(); + spyBeacon = sinon.stub(window.navigator, 'sendBeacon').returns(false); + + collectorExporter.export(metrics, () => {}); + + setTimeout(() => { + const response: any = spyLoggerError.args[0][0]; + assert.strictEqual(response, 'sendBeacon - cannot send'); + assert.strictEqual(spyLoggerDebug.args.length, 1); + + done(); + }); + }); + }); + + describe('when "sendBeacon" is NOT available', () => { + let server: any; + beforeEach(() => { + (window.navigator as any).sendBeacon = false; + collectorExporter = new CollectorMetricExporter({ + logger: new NoopLogger(), + url: 'http://foo.bar.com', + serviceName: 'bar', + }); + // Overwrites the start time to make tests consistent + Object.defineProperty(collectorExporter, '_startTime', { + value: 1592602232694000000, + }); + server = sinon.fakeServer.create(); + }); + afterEach(() => { + server.restore(); + }); + + it('should successfully send the metrics using XMLHttpRequest', done => { + collectorExporter.export(metrics, () => {}); + + setTimeout(() => { + const request = server.requests[0]; + assert.strictEqual(request.method, 'POST'); + assert.strictEqual(request.url, 'http://foo.bar.com'); + + const body = request.requestBody; + const json = JSON.parse( + body + ) as collectorTypes.opentelemetryProto.collector.metrics.v1.ExportMetricsServiceRequest; + const metric1 = + json.resourceMetrics[0].instrumentationLibraryMetrics[0].metrics[0]; + const metric2 = + json.resourceMetrics[1].instrumentationLibraryMetrics[0].metrics[0]; + const metric3 = + json.resourceMetrics[2].instrumentationLibraryMetrics[0].metrics[0]; + const metric4 = + json.resourceMetrics[3].instrumentationLibraryMetrics[0].metrics[0]; + assert.ok(typeof metric1 !== 'undefined', "metric doesn't exist"); + if (metric1) { + ensureCounterIsCorrect( + metric1, + hrTimeToNanoseconds(metrics[0].aggregator.toPoint().timestamp) + ); + } + assert.ok( + typeof metric2 !== 'undefined', + "second metric doesn't exist" + ); + if (metric2) { + ensureObserverIsCorrect( + metric2, + hrTimeToNanoseconds(metrics[1].aggregator.toPoint().timestamp) + ); + } + + assert.ok( + typeof metric3 !== 'undefined', + "third metric doesn't exist" + ); + if (metric3) { + ensureHistogramIsCorrect( + metric3, + hrTimeToNanoseconds(metrics[2].aggregator.toPoint().timestamp) + ); + } + + assert.ok( + typeof metric4 !== 'undefined', + "fourth metric doesn't exist" + ); + if (metric4) { + ensureValueRecorderIsCorrect( + metric4, + hrTimeToNanoseconds(metrics[3].aggregator.toPoint().timestamp) + ); + } + + const resource = json.resourceMetrics[0].resource; + assert.ok(typeof resource !== 'undefined', "resource doesn't exist"); + if (resource) { + ensureWebResourceIsCorrect(resource); + } + + assert.strictEqual(spyBeacon.callCount, 0); + ensureExportMetricsServiceRequestIsSet(json); + + done(); + }); + }); + + it('should log the successful message', done => { + const spyLoggerDebug = sinon.stub(collectorExporter.logger, 'debug'); + const spyLoggerError = sinon.stub(collectorExporter.logger, 'error'); + + collectorExporter.export(metrics, () => {}); + + setTimeout(() => { + const request = server.requests[0]; + request.respond(200); + + const response: any = spyLoggerDebug.args[1][0]; + assert.strictEqual(response, 'xhr success'); + assert.strictEqual(spyLoggerError.args.length, 0); + + assert.strictEqual(spyBeacon.callCount, 0); + done(); + }); + }); + + it('should log the error message', done => { + const spyLoggerError = sinon.stub(collectorExporter.logger, 'error'); + + collectorExporter.export(metrics, () => {}); + + setTimeout(() => { + const request = server.requests[0]; + request.respond(400); + + const response1: any = spyLoggerError.args[0][0]; + const response2: any = spyLoggerError.args[1][0]; + assert.strictEqual(response1, 'body'); + assert.strictEqual(response2, 'xhr error'); + + assert.strictEqual(spyBeacon.callCount, 0); + done(); + }); + }); + it('should send custom headers', done => { + collectorExporter.export(metrics, () => {}); + + setTimeout(() => { + const request = server.requests[0]; + request.respond(200); + + assert.strictEqual(spyBeacon.callCount, 0); + done(); + }); + }); + }); + }); + + describe('export with custom headers', () => { + let server: any; + const customHeaders = { + foo: 'bar', + bar: 'baz', + }; + let collectorExporterConfig: CollectorExporterConfigBrowser; + + beforeEach(() => { + collectorExporterConfig = { + logger: new NoopLogger(), + headers: customHeaders, + }; + server = sinon.fakeServer.create(); + }); + + afterEach(() => { + server.restore(); + }); + + describe('when "sendBeacon" is available', () => { + beforeEach(() => { + collectorExporter = new CollectorMetricExporter( + collectorExporterConfig + ); + }); + it('should successfully send custom headers using XMLHTTPRequest', done => { + collectorExporter.export(metrics, () => {}); + + setTimeout(() => { + const [{ requestHeaders }] = server.requests; + + ensureHeadersContain(requestHeaders, customHeaders); + assert.strictEqual(spyBeacon.callCount, 0); + assert.strictEqual(spyOpen.callCount, 0); + + done(); + }); + }); + }); + + describe('when "sendBeacon" is NOT available', () => { + beforeEach(() => { + (window.navigator as any).sendBeacon = false; + collectorExporter = new CollectorMetricExporter( + collectorExporterConfig + ); + }); + + it('should successfully send metrics using XMLHttpRequest', done => { + collectorExporter.export(metrics, () => {}); + + setTimeout(() => { + const [{ requestHeaders }] = server.requests; + + ensureHeadersContain(requestHeaders, customHeaders); + assert.strictEqual(spyBeacon.callCount, 0); + assert.strictEqual(spyOpen.callCount, 0); + + done(); + }); + }); + }); + }); +}); diff --git a/packages/opentelemetry-exporter-collector/test/helper.ts b/packages/opentelemetry-exporter-collector/test/helper.ts index 697fa7ee90..be51825e8f 100644 --- a/packages/opentelemetry-exporter-collector/test/helper.ts +++ b/packages/opentelemetry-exporter-collector/test/helper.ts @@ -1243,7 +1243,7 @@ export function ensureExportMetricsServiceRequestIsSet( assert.strictEqual( resourceMetrics.length, 4, - 'resourceMetrics is the incorrect length' + 'resourceMetrics has incorrect length' ); const resource = resourceMetrics[0].resource; From 70bee583e693bc21aa705d966a6b5c332c252b69 Mon Sep 17 00:00:00 2001 From: Mick Dekkers Date: Wed, 5 Aug 2020 18:53:08 +0200 Subject: [PATCH 43/51] Fix issues in TypeScript getting started example code (#1374) Co-authored-by: Daniel Dyla --- getting-started/ts-example/monitoring.ts | 7 ++++--- getting-started/ts-example/package.json | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/getting-started/ts-example/monitoring.ts b/getting-started/ts-example/monitoring.ts index cd393823c8..da90cbd1ab 100644 --- a/getting-started/ts-example/monitoring.ts +++ b/getting-started/ts-example/monitoring.ts @@ -1,6 +1,7 @@ import { MeterProvider } from '@opentelemetry/metrics'; -import { Metric, BoundCounter } from '@opentelemetry/api'; +import { Counter } from '@opentelemetry/api'; import { PrometheusExporter } from '@opentelemetry/exporter-prometheus'; +import { RequestHandler } from "express"; const exporter = new PrometheusExporter( { @@ -18,13 +19,13 @@ const meter = new MeterProvider({ interval: 1000, }).getMeter('example-ts'); -const requestCount: Metric = meter.createCounter("requests", { +const requestCount: Counter = meter.createCounter("requests", { description: "Count all incoming requests" }); const handles = new Map(); -export const countAllRequests = () => { +export const countAllRequests = (): RequestHandler => { return (req, res, next) => { if (!handles.has(req.path)) { const labels = { route: req.path }; diff --git a/getting-started/ts-example/package.json b/getting-started/ts-example/package.json index d0a3d48615..207fe290f1 100644 --- a/getting-started/ts-example/package.json +++ b/getting-started/ts-example/package.json @@ -10,6 +10,8 @@ "author": "OpenTelemetry Authors", "license": "Apache-2.0", "devDependencies": { + "@types/express": "^4.17.7", + "@types/node": "^14.0.27", "ts-node": "8.10.2" }, "dependencies": { From ef046b9e689787e3c98a67a7d25032aaf2efa80a Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Thu, 6 Aug 2020 08:28:28 -0400 Subject: [PATCH 44/51] chore: deploy canary releases (#1384) --- .github/workflows/canary.yaml | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/workflows/canary.yaml diff --git a/.github/workflows/canary.yaml b/.github/workflows/canary.yaml new file mode 100644 index 0000000000..12fd32458d --- /dev/null +++ b/.github/workflows/canary.yaml @@ -0,0 +1,38 @@ +name: Deploy Canary Release + +on: + push: + branches: + - master + +jobs: + build-and-test: + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v2 + - name: Set up Node.js + uses: actions/setup-node@master + with: + node-version: 14.x + + - name: restore lerna + uses: actions/cache@master # must use unreleased master to cache multiple paths + id: cache + with: + path: | + node_modules + packages/*/node_modules + metapackages/*/node_modules + key: ${{ runner.os }}-${{ hashFiles('**/package.json') }} + + - name: Install and Build 🔧 + if: steps.cache.outputs.cache-hit != 'true' + run: | + npm install --ignore-scripts + npx lerna bootstrap --no-ci + + - name: Publish + run: npx lerna publish --canary --dist-tag canary --preid canary --yes + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} From 12b18fd816291e7c830c57e269b45a98142f9d1b Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Fri, 7 Aug 2020 21:04:48 +0000 Subject: [PATCH 45/51] fix: protos pull --- .../opentelemetry-exporter-collector/src/platform/node/protos | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/protos b/packages/opentelemetry-exporter-collector/src/platform/node/protos index b546885691..9ffeee0ec5 160000 --- a/packages/opentelemetry-exporter-collector/src/platform/node/protos +++ b/packages/opentelemetry-exporter-collector/src/platform/node/protos @@ -1 +1 @@ -Subproject commit b54688569186e0b862bf7462a983ccf2c50c0547 +Subproject commit 9ffeee0ec532efe02285af84880deb2a53a3eab1 From b0fdffdb17105520f87e83245ee973a055faeb39 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Tue, 11 Aug 2020 17:47:38 +0000 Subject: [PATCH 46/51] fix: address marius' feedback --- .../src/platform/browser/ShutdownNotifier.ts | 2 +- .../src/platform/node/ShutdownNotifier.ts | 2 +- .../src/MeterProvider.ts | 2 +- .../src/export/Controller.ts | 19 +++++++++---------- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts index 6a405554dd..3f05d19214 100644 --- a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -export function notifyOnGlobalShutdown(cb: () => void) { +export function notifyOnGlobalShutdown(cb: () => void): () => void { window.addEventListener('unload', cb, { once: true }); return function removeCallbackFromGlobalShutdown() { window.removeEventListener('unload', cb, false); diff --git a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts index bb03d1e810..642b1dbbe8 100644 --- a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -export function notifyOnGlobalShutdown(cb: () => void) { +export function notifyOnGlobalShutdown(cb: () => void): () => void { process.once('SIGTERM', cb); return function removeCallbackFromGlobalShutdown() { process.removeListener('SIGTERM', cb); diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index e58402344f..50a4b05df5 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -58,7 +58,7 @@ export class MeterProvider implements api.MeterProvider { return this._meters.get(key)!; } - shutdown(cb: () => void = () => {}) { + shutdown(cb: () => void = () => {}): void { this._shutdownAllMeters().then(() => { setTimeout(cb, 0); }); diff --git a/packages/opentelemetry-metrics/src/export/Controller.ts b/packages/opentelemetry-metrics/src/export/Controller.ts index 0947c3445b..ef7fc28d0a 100644 --- a/packages/opentelemetry-metrics/src/export/Controller.ts +++ b/packages/opentelemetry-metrics/src/export/Controller.ts @@ -38,20 +38,19 @@ export class PushController extends Controller { unrefTimer(this._timer); } - async shutdown() { + async shutdown(): Promise { await this._collect(); } private async _collect() { - await this._meter.collect().then(() => { - this._exporter.export( - this._meter.getBatcher().checkPointSet(), - result => { - if (result !== ExportResult.SUCCESS) { - // @todo: log error - } + await this._meter.collect(); + await this._exporter.export( + this._meter.getBatcher().checkPointSet(), + result => { + if (result !== ExportResult.SUCCESS) { + // @todo: log error } - ); - }); + } + ); } } From 93719b94a4a347ebc241edd5de25e80d2e8de802 Mon Sep 17 00:00:00 2001 From: Bartlomiej Obecny Date: Tue, 11 Aug 2020 22:43:07 +0200 Subject: [PATCH 47/51] chore: deleting removeAllListeners from prometheus, fixing tests, cleanu of events when using shutdown notifier --- .../test/prometheus.test.ts | 1 - .../src/MeterProvider.ts | 9 ++++- .../test/MeterProvider.test.ts | 36 ++++++++----------- .../src/BasicTracerProvider.ts | 9 ++++- .../test/export/InMemorySpanExporter.test.ts | 12 +++---- 5 files changed, 37 insertions(+), 30 deletions(-) diff --git a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts index 2c071655e9..04930d1d73 100644 --- a/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts +++ b/packages/opentelemetry-exporter-prometheus/test/prometheus.test.ts @@ -506,7 +506,6 @@ describe('PrometheusExporter', () => { beforeEach(() => { meter = new MeterProvider().getMeter('test-prometheus'); - process.removeAllListeners('SIGTERM'); counter = meter.createCounter('counter') as CounterMetric; counter.bind({ key1: 'labelValue1' }).add(10); }); diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index 50a4b05df5..6d0db04ff7 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -26,6 +26,7 @@ import { DEFAULT_CONFIG, MeterConfig } from './types'; export class MeterProvider implements api.MeterProvider { private readonly _config: MeterConfig; private readonly _meters: Map = new Map(); + private _cleanNotifyOnGlobalShutdown: Function | undefined; readonly resource: Resource; readonly logger: api.Logger; @@ -37,7 +38,9 @@ export class MeterProvider implements api.MeterProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - notifyOnGlobalShutdown(this._shutdownAllMeters.bind(this)); + this._cleanNotifyOnGlobalShutdown = notifyOnGlobalShutdown( + this._shutdownAllMeters.bind(this) + ); } } @@ -62,6 +65,10 @@ export class MeterProvider implements api.MeterProvider { this._shutdownAllMeters().then(() => { setTimeout(cb, 0); }); + if (this._cleanNotifyOnGlobalShutdown) { + this._cleanNotifyOnGlobalShutdown(); + this._cleanNotifyOnGlobalShutdown = undefined; + } } private async _shutdownAllMeters() { diff --git a/packages/opentelemetry-metrics/test/MeterProvider.test.ts b/packages/opentelemetry-metrics/test/MeterProvider.test.ts index cfc867adf4..8a26eccb99 100644 --- a/packages/opentelemetry-metrics/test/MeterProvider.test.ts +++ b/packages/opentelemetry-metrics/test/MeterProvider.test.ts @@ -60,15 +60,12 @@ describe('MeterProvider', () => { assert.strictEqual(counter.resource, meterProvider.resource); }); - it( - 'should return the meter with default version without a version option', - () => { - const provider = new MeterProvider(); - const meter1 = provider.getMeter('default'); - const meter2 = provider.getMeter('default', '*'); - assert.deepEqual(meter1, meter2); - } - ); + it('should return the meter with default version without a version option', () => { + const provider = new MeterProvider(); + const meter1 = provider.getMeter('default'); + const meter2 = provider.getMeter('default', '*'); + assert.deepEqual(meter1, meter2); + }); it('should return the same Meter instance with same name & version', () => { const provider = new MeterProvider(); @@ -77,20 +74,17 @@ describe('MeterProvider', () => { assert.deepEqual(meter1, meter2); }); - it( - 'should return different Meter instance with different name or version', - () => { - const provider = new MeterProvider(); + it('should return different Meter instance with different name or version', () => { + const provider = new MeterProvider(); - const meter1 = provider.getMeter('meter1', 'ver1'); - const meter2 = provider.getMeter('meter1'); - assert.notEqual(meter1, meter2); + const meter1 = provider.getMeter('meter1', 'ver1'); + const meter2 = provider.getMeter('meter1'); + assert.notEqual(meter1, meter2); - const meter3 = provider.getMeter('meter2', 'ver2'); - const meter4 = provider.getMeter('meter3', 'ver2'); - assert.notEqual(meter3, meter4); - } - ); + const meter3 = provider.getMeter('meter2', 'ver2'); + const meter4 = provider.getMeter('meter3', 'ver2'); + assert.notEqual(meter3, meter4); + }); }); describe('shutdown()', () => { diff --git a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts index 269439bcf9..87299e30fc 100644 --- a/packages/opentelemetry-tracing/src/BasicTracerProvider.ts +++ b/packages/opentelemetry-tracing/src/BasicTracerProvider.ts @@ -36,6 +36,7 @@ export class BasicTracerProvider implements api.TracerProvider { private readonly _config: TracerConfig; private readonly _registeredSpanProcessors: SpanProcessor[] = []; private readonly _tracers: Map = new Map(); + private _cleanNotifyOnGlobalShutdown: Function | undefined; activeSpanProcessor = new NoopSpanProcessor(); readonly logger: api.Logger; @@ -49,7 +50,9 @@ export class BasicTracerProvider implements api.TracerProvider { resource: this.resource, }); if (this._config.gracefulShutdown) { - notifyOnGlobalShutdown(this._shutdownActiveProcessor.bind(this)); + this._cleanNotifyOnGlobalShutdown = notifyOnGlobalShutdown( + this._shutdownActiveProcessor.bind(this) + ); } } @@ -106,6 +109,10 @@ export class BasicTracerProvider implements api.TracerProvider { shutdown(cb: () => void = () => {}) { this.activeSpanProcessor.shutdown(cb); + if (this._cleanNotifyOnGlobalShutdown) { + this._cleanNotifyOnGlobalShutdown(); + this._cleanNotifyOnGlobalShutdown = undefined; + } } private _shutdownActiveProcessor() { diff --git a/packages/opentelemetry-tracing/test/export/InMemorySpanExporter.test.ts b/packages/opentelemetry-tracing/test/export/InMemorySpanExporter.test.ts index 47af46580e..b8c05e4a0f 100644 --- a/packages/opentelemetry-tracing/test/export/InMemorySpanExporter.test.ts +++ b/packages/opentelemetry-tracing/test/export/InMemorySpanExporter.test.ts @@ -24,13 +24,13 @@ import { context } from '@opentelemetry/api'; import { ExportResult, setActiveSpan } from '@opentelemetry/core'; describe('InMemorySpanExporter', () => { - const memoryExporter = new InMemorySpanExporter(); - const provider = new BasicTracerProvider(); - provider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); + let memoryExporter: InMemorySpanExporter; + let provider: BasicTracerProvider; - afterEach(() => { - // reset spans in memory. - memoryExporter.reset(); + beforeEach(() => { + memoryExporter = new InMemorySpanExporter(); + provider = new BasicTracerProvider(); + provider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); }); it('should get finished spans', () => { From bfa1a0abfb794eb232b99257eb2dd6faceb5a66a Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Wed, 12 Aug 2020 20:06:21 +0000 Subject: [PATCH 48/51] fix: add documentation and cleanup code --- .../src/platform/browser/ShutdownNotifier.ts | 6 ++++++ .../src/platform/node/ShutdownNotifier.ts | 6 ++++++ packages/opentelemetry-metrics/src/MeterProvider.ts | 2 +- .../opentelemetry-metrics/src/export/Controller.ts | 11 ++++------- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts index 3f05d19214..05ccc38e01 100644 --- a/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/browser/ShutdownNotifier.ts @@ -14,6 +14,9 @@ * limitations under the License. */ +/** + * Adds an event listener to trigger a callback when an unload event in the window is detected + */ export function notifyOnGlobalShutdown(cb: () => void): () => void { window.addEventListener('unload', cb, { once: true }); return function removeCallbackFromGlobalShutdown() { @@ -21,6 +24,9 @@ export function notifyOnGlobalShutdown(cb: () => void): () => void { }; } +/** + * Warning: meant for internal use only! Closes the current window, triggering the unload event + */ export function _invokeGlobalShutdown() { window.close(); } diff --git a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts index 642b1dbbe8..f9868105af 100644 --- a/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts +++ b/packages/opentelemetry-core/src/platform/node/ShutdownNotifier.ts @@ -14,6 +14,9 @@ * limitations under the License. */ +/** + * Adds an event listener to trigger a callback when a SIGTERM is detected in the process + */ export function notifyOnGlobalShutdown(cb: () => void): () => void { process.once('SIGTERM', cb); return function removeCallbackFromGlobalShutdown() { @@ -21,6 +24,9 @@ export function notifyOnGlobalShutdown(cb: () => void): () => void { }; } +/** + * Warning: meant for internal use only! Sends a SIGTERM to the current process + */ export function _invokeGlobalShutdown() { process.kill(process.pid, 'SIGTERM'); } diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index 6d0db04ff7..11ba779672 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -75,7 +75,7 @@ export class MeterProvider implements api.MeterProvider { if (this._config.exporter) { this._config.exporter.shutdown(); } - await Promise.all( + return Promise.all( Array.from(this._meters, ([_, meter]) => meter.shutdown()) ); } diff --git a/packages/opentelemetry-metrics/src/export/Controller.ts b/packages/opentelemetry-metrics/src/export/Controller.ts index ef7fc28d0a..10a025e2a7 100644 --- a/packages/opentelemetry-metrics/src/export/Controller.ts +++ b/packages/opentelemetry-metrics/src/export/Controller.ts @@ -44,13 +44,10 @@ export class PushController extends Controller { private async _collect() { await this._meter.collect(); - await this._exporter.export( - this._meter.getBatcher().checkPointSet(), - result => { - if (result !== ExportResult.SUCCESS) { - // @todo: log error - } + this._exporter.export(this._meter.getBatcher().checkPointSet(), result => { + if (result !== ExportResult.SUCCESS) { + // @todo: log error } - ); + }); } } From ec3ce127640677e3962aa7c83341c037c17ac66e Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Wed, 12 Aug 2020 22:12:43 +0000 Subject: [PATCH 49/51] fix: remove async label from shutdown and cleanup test case --- .../src/MeterProvider.ts | 2 +- .../test/MeterProvider.test.ts | 30 ++++++++++++++++--- .../test/BasicTracerProvider.test.ts | 10 +++++++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index 11ba779672..349d3514d5 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -71,7 +71,7 @@ export class MeterProvider implements api.MeterProvider { } } - private async _shutdownAllMeters() { + private _shutdownAllMeters() { if (this._config.exporter) { this._config.exporter.shutdown(); } diff --git a/packages/opentelemetry-metrics/test/MeterProvider.test.ts b/packages/opentelemetry-metrics/test/MeterProvider.test.ts index 8a26eccb99..55cdafd66b 100644 --- a/packages/opentelemetry-metrics/test/MeterProvider.test.ts +++ b/packages/opentelemetry-metrics/test/MeterProvider.test.ts @@ -25,6 +25,12 @@ import { describe('MeterProvider', () => { let removeEvent: Function | undefined; + let sandbox: sinon.SinonSandbox; + + beforeEach(() => { + sandbox = sinon.createSandbox(); + }); + afterEach(() => { if (removeEvent) { removeEvent(); @@ -93,7 +99,6 @@ describe('MeterProvider', () => { interval: Math.pow(2, 31) - 1, gracefulShutdown: true, }); - const sandbox = sinon.createSandbox(); const shutdownStub1 = sandbox.stub( meterProvider.getMeter('meter1'), 'shutdown' @@ -105,24 +110,41 @@ describe('MeterProvider', () => { removeEvent = notifyOnGlobalShutdown(() => { sinon.assert.calledOnce(shutdownStub1); sinon.assert.calledOnce(shutdownStub2); - sandbox.restore(); }); _invokeGlobalShutdown(); }); + it('should call shutdown when manually invoked', () => { + const meterProvider = new MeterProvider({ + interval: Math.pow(2, 31) - 1, + gracefulShutdown: true, + }); + const sandbox = sinon.createSandbox(); + const shutdownStub1 = sandbox.stub( + meterProvider.getMeter('meter1'), + 'shutdown' + ); + const shutdownStub2 = sandbox.stub( + meterProvider.getMeter('meter2'), + 'shutdown' + ); + meterProvider.shutdown(() => { + sinon.assert.calledOnce(shutdownStub1); + sinon.assert.calledOnce(shutdownStub2); + }); + }); + it('should not trigger shutdown if graceful shutdown is turned off', () => { const meterProvider = new MeterProvider({ interval: Math.pow(2, 31) - 1, gracefulShutdown: false, }); - const sandbox = sinon.createSandbox(); const shutdownStub = sandbox.stub( meterProvider.getMeter('meter1'), 'shutdown' ); removeEvent = notifyOnGlobalShutdown(() => { sinon.assert.notCalled(shutdownStub); - sandbox.restore(); }); _invokeGlobalShutdown(); }); diff --git a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts index 2527a701bc..2e95fce020 100644 --- a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts +++ b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts @@ -381,6 +381,16 @@ describe('BasicTracerProvider', () => { _invokeGlobalShutdown(); }); + it('should trigger shutdown when manually invoked', () => { + const tracerProvider = new BasicTracerProvider(); + const shutdownStub = sandbox.stub( + tracerProvider.getActiveSpanProcessor(), + 'shutdown' + ); + tracerProvider.shutdown(); + sinon.assert.calledOnce(shutdownStub); + }); + it('should not trigger shutdown if graceful shutdown is turned off', () => { const tracerProvider = new BasicTracerProvider({ gracefulShutdown: false, From 49e1a69f4f4a93313f0ffff4bc30b8e92dbda370 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Wed, 12 Aug 2020 22:25:16 +0000 Subject: [PATCH 50/51] fix: update controller collect to return promise --- .../src/export/Controller.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/opentelemetry-metrics/src/export/Controller.ts b/packages/opentelemetry-metrics/src/export/Controller.ts index 10a025e2a7..2c48b73820 100644 --- a/packages/opentelemetry-metrics/src/export/Controller.ts +++ b/packages/opentelemetry-metrics/src/export/Controller.ts @@ -42,12 +42,20 @@ export class PushController extends Controller { await this._collect(); } - private async _collect() { + private async _collect(): Promise { await this._meter.collect(); - this._exporter.export(this._meter.getBatcher().checkPointSet(), result => { - if (result !== ExportResult.SUCCESS) { - // @todo: log error - } + return new Promise((resolve, reject) => { + this._exporter.export( + this._meter.getBatcher().checkPointSet(), + result => { + if (result === ExportResult.SUCCESS) { + resolve(); + } else { + // @todo log error + reject(); + } + } + ); }); } } From 8afa9a13fcf420ba2d881da291dad35197eec538 Mon Sep 17 00:00:00 2001 From: jonahrosenblum Date: Sat, 15 Aug 2020 01:06:18 +0000 Subject: [PATCH 51/51] fix: make downsides of disabling graceful shutdown more apparent --- packages/opentelemetry-metrics/src/types.ts | 2 +- packages/opentelemetry-tracing/src/types.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/opentelemetry-metrics/src/types.ts b/packages/opentelemetry-metrics/src/types.ts index e5be74d2d6..87e07df10f 100644 --- a/packages/opentelemetry-metrics/src/types.ts +++ b/packages/opentelemetry-metrics/src/types.ts @@ -40,7 +40,7 @@ export interface MeterConfig { /** Metric batcher. */ batcher?: Batcher; - /** Bool for whether or not graceful shutdown is enabled */ + /** Bool for whether or not graceful shutdown is enabled. If disabled metrics will not be exported when SIGTERM is recieved */ gracefulShutdown?: boolean; } diff --git a/packages/opentelemetry-tracing/src/types.ts b/packages/opentelemetry-tracing/src/types.ts index 675f90d817..4e5059cea3 100644 --- a/packages/opentelemetry-tracing/src/types.ts +++ b/packages/opentelemetry-tracing/src/types.ts @@ -43,7 +43,7 @@ export interface TracerConfig { /** Resource associated with trace telemetry */ resource?: Resource; - /** Bool for whether or not graceful shutdown is enabled */ + /** Bool for whether or not graceful shutdown is enabled. If disabled spans will not be exported when SIGTERM is recieved */ gracefulShutdown?: boolean; /**