From a675ae817b51ea6b8853e62ea460e3e944cd0930 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 5 Jul 2023 11:21:20 +0200 Subject: [PATCH 01/70] chore(deps): update all patch versions to v7.22.6 (#3965) --- .../packages/exporter-logs-otlp-grpc/package.json | 2 +- .../packages/exporter-logs-otlp-http/package.json | 2 +- .../packages/exporter-logs-otlp-proto/package.json | 2 +- .../packages/exporter-trace-otlp-grpc/package.json | 2 +- .../packages/exporter-trace-otlp-http/package.json | 2 +- .../packages/exporter-trace-otlp-proto/package.json | 2 +- .../packages/opentelemetry-browser-detector/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-http/package.json | 2 +- .../package.json | 2 +- .../opentelemetry-instrumentation-fetch/package.json | 2 +- .../package.json | 2 +- .../packages/opentelemetry-instrumentation/package.json | 2 +- .../packages/otlp-grpc-exporter-base/package.json | 2 +- .../packages/otlp-proto-exporter-base/package.json | 2 +- packages/opentelemetry-context-zone-peer-dep/package.json | 2 +- packages/opentelemetry-context-zone/package.json | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- packages/opentelemetry-sdk-trace-web/package.json | 2 +- selenium-tests/package.json | 8 ++++---- 20 files changed, 23 insertions(+), 23 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index 43dc22d2232..fc70f70d075 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/api-logs": "0.40.0", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index a1ff9572533..351eaa0cc7e 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -71,7 +71,7 @@ ], "sideEffects": false, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api-logs": "0.40.0", "@opentelemetry/resources": "1.14.0", "@types/mocha": "10.0.1", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 204414966fa..b8b685c42fb 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index fce71adbd5b..5b888affd73 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-exporter-base": "0.40.0", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 9e55231aa69..8d41fc08731 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index 5f0deff40b5..27acfa4e122 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -62,7 +62,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 788fb3dd99d..52bc1e7f27a 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index cebe38c3c9f..17e35ee07b0 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index e26bbcd17b3..fa10515d333 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index f10cf504cac..f384dec9818 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index c8f1bfcb39f..742ec40861b 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", "@opentelemetry/context-zone": "1.14.0", "@opentelemetry/propagator-b3": "1.14.0", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 4eb469da078..a9d38e65f34 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", "@opentelemetry/context-zone": "1.14.0", "@opentelemetry/propagator-b3": "1.14.0", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 944258ad8f8..bdfaa89e584 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -82,7 +82,7 @@ "@opentelemetry/api": "^1.3.0" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", "@opentelemetry/sdk-metrics": "1.14.0", "@types/mocha": "10.0.1", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 4956fbee143..65d86fe705b 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-transformer": "0.40.0", "@opentelemetry/resources": "1.14.0", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index 0587dc9de59..46b31d990dd 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -59,7 +59,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 9904e9da844..b2905d6da9c 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 84a937ce933..1edc610e320 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -50,7 +50,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index bbe473b6507..ff26a83e19e 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -60,7 +60,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": "^1.0.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index b3bfc15586e..8e16b16378a 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -55,7 +55,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@opentelemetry/api": ">=1.0.0 <1.5.0", "@opentelemetry/context-zone": "1.14.0", "@opentelemetry/propagator-b3": "1.14.0", diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 6d7726c1345..3cdfb5d9d47 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -31,11 +31,11 @@ "access": "restricted" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.6", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-proposal-decorators": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.5", - "@babel/preset-env": "7.22.5", + "@babel/plugin-proposal-decorators": "7.22.6", + "@babel/plugin-transform-runtime": "7.22.6", + "@babel/preset-env": "7.22.6", "@opentelemetry/api": "^1.0.0", "babel-loader": "8.3.0", "babel-polyfill": "6.26.0", From 06e919d6c909e8cc8e28b6624d9843f401d9b059 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Thu, 6 Jul 2023 13:06:26 +0200 Subject: [PATCH 02/70] chore: prepare release 1.15 / 0.41 (#3963) --- CHANGELOG.md | 17 ++++++----- examples/esm-http-ts/package.json | 16 +++++----- examples/http/package.json | 18 +++++------ examples/https/package.json | 18 +++++------ examples/opentelemetry-web/package.json | 30 +++++++++---------- examples/otlp-exporter-node/package.json | 24 +++++++-------- experimental/CHANGELOG.md | 19 ++++++++++-- .../node14/package.json | 6 ++-- .../node16/package.json | 6 ++-- experimental/examples/logs/package.json | 6 ++-- .../examples/opencensus-shim/package.json | 17 +++++------ experimental/examples/prometheus/package.json | 6 ++-- experimental/packages/api-events/package.json | 2 +- experimental/packages/api-logs/package.json | 2 +- .../exporter-logs-otlp-grpc/package.json | 16 +++++----- .../exporter-logs-otlp-http/package.json | 14 ++++----- .../exporter-logs-otlp-proto/package.json | 18 +++++------ .../exporter-trace-otlp-grpc/package.json | 14 ++++----- .../exporter-trace-otlp-http/package.json | 12 ++++---- .../exporter-trace-otlp-proto/package.json | 14 ++++----- .../package.json | 6 ++-- .../package.json | 14 ++++----- .../package.json | 12 ++++---- .../package.json | 16 +++++----- .../package.json | 10 +++---- .../package.json | 16 +++++----- .../package.json | 14 ++++----- .../package.json | 16 +++++----- .../package.json | 16 +++++----- .../package.json | 4 +-- .../opentelemetry-sdk-node/package.json | 28 ++++++++--------- .../packages/otlp-exporter-base/package.json | 4 +-- .../otlp-grpc-exporter-base/package.json | 12 ++++---- .../otlp-proto-exporter-base/package.json | 6 ++-- .../packages/otlp-transformer/package.json | 14 ++++----- experimental/packages/sdk-logs/package.json | 8 ++--- .../packages/shim-opencensus/package.json | 8 ++--- .../package.json | 8 ++--- .../package.json | 2 +- .../package.json | 2 +- .../opentelemetry-context-zone/package.json | 8 ++--- packages/opentelemetry-core/package.json | 4 +-- .../package.json | 10 +++---- .../package.json | 10 +++---- .../opentelemetry-propagator-b3/package.json | 4 +-- .../package.json | 4 +-- packages/opentelemetry-resources/package.json | 6 ++-- .../opentelemetry-sdk-trace-base/package.json | 8 ++--- .../opentelemetry-sdk-trace-node/package.json | 16 +++++----- .../opentelemetry-sdk-trace-web/package.json | 14 ++++----- .../package.json | 2 +- .../package.json | 12 ++++---- packages/sdk-metrics/package.json | 6 ++-- packages/template/package.json | 2 +- selenium-tests/package.json | 22 +++++++------- 55 files changed, 316 insertions(+), 303 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42ca36c051e..6f72946061b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,22 +11,24 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :rocket: (Enhancement) -* feat(exporter-metrics-otlp-*)!: add LowMemory metrics temporality preference [#3915](https://github.com/open-telemetry/opentelemetry-js/pull/3915) - * Breaking: From now on `AggregationTemporalityPreference` has to be used instead of `AggregationTemporality` when configuring the exporter. - * Adds support for [LowMemory temporality preference](https://github.com/open-telemetry/opentelemetry-specification/blob/f09624bb97e9be3be259733b93be507df18927bd/specification/metrics/sdk_exporters/otlp.md#additional-configuration) - * Adds support for `lowmemory` in `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` +### :bug: (Bug Fix) + +### :books: (Refine Doc) + +### :house: (Internal) + +## 1.15.0 ### :bug: (Bug Fix) * fix(opentelemetry-exporter-prometheus): Update default PrometheusExporter to not append a timestamp to match the text based exposition format [#3961](https://github.com/open-telemetry/opentelemetry-js/pull/3961) @JacksonWeber * fix(sdk-metrics): Update default Histogram's boundary to match OTEL's spec [#3893](https://github.com/open-telemetry/opentelemetry-js/pull/3893/) @chigia001 * fix(sdk-metrics): preserve startTime for cumulative ExponentialHistograms [#3934](https://github.com/open-telemetry/opentelemetry-js/pull/3934/) @aabmass - -### :books: (Refine Doc) +* fix(sdk-trace-web): add secureConnectionStart to https only [#3879](https://github.com/open-telemetry/opentelemetry-js/pull/3879) @Abinet18 ### :house: (Internal) -* feat(minification): [Minification] Add noEmitHelpers, importHelpers and tslib as a dependency [#3913](https://github.com/open-telemetry/opentelemetry-js/issues/3913) +* feat(minification): [Minification] Add noEmitHelpers, importHelpers and tslib as a dependency [#3913](https://github.com/open-telemetry/opentelemetry-js/issues/3913) @MSNev ## 1.14.0 @@ -42,7 +44,6 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) -* fix(sdk-trace-web): add secureConnectionStart to https only [#3879](https://github.com/open-telemetry/opentelemetry-js/pull/3879) @Abinet18 * fix(http-instrumentation): stop listening to `request`'s `close` event once it has emitted `response` [#3625](https://github.com/open-telemetry/opentelemetry-js/pull/3625) @SimenB * fix(sdk-node): fix initialization in bundled environments by not loading @opentelemetry/exporter-jaeger [#3739](https://github.com/open-telemetry/opentelemetry-js/pull/3739) @pichlermarc diff --git a/examples/esm-http-ts/package.json b/examples/esm-http-ts/package.json index 71977f73ff1..4dcbbf60090 100644 --- a/examples/esm-http-ts/package.json +++ b/examples/esm-http-ts/package.json @@ -1,7 +1,7 @@ { "name": "esm-http-ts", "private": true, - "version": "0.40.0", + "version": "0.41.0", "description": "Example of HTTP integration with OpenTelemetry using ESM and TypeScript", "main": "build/index.js", "type": "module", @@ -31,12 +31,12 @@ "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/", "dependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.40.0", - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/instrumentation-http": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/sdk-trace-node": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/exporter-trace-otlp-proto": "0.41.0", + "@opentelemetry/instrumentation": "0.41.0", + "@opentelemetry/instrumentation-http": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/sdk-trace-node": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0" } } diff --git a/examples/http/package.json b/examples/http/package.json index a48f8e2c1b7..22d3d29d9c1 100644 --- a/examples/http/package.json +++ b/examples/http/package.json @@ -1,7 +1,7 @@ { "name": "http-example", "private": true, - "version": "0.40.0", + "version": "0.41.0", "description": "Example of HTTP integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -29,14 +29,14 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/exporter-jaeger": "1.14.0", - "@opentelemetry/exporter-zipkin": "1.14.0", - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/instrumentation-http": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/sdk-trace-node": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/exporter-jaeger": "1.15.0", + "@opentelemetry/exporter-zipkin": "1.15.0", + "@opentelemetry/instrumentation": "0.41.0", + "@opentelemetry/instrumentation-http": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/sdk-trace-node": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/http", "devDependencies": { diff --git a/examples/https/package.json b/examples/https/package.json index 2a63c724c96..15b3ac513d7 100644 --- a/examples/https/package.json +++ b/examples/https/package.json @@ -1,7 +1,7 @@ { "name": "https-example", "private": true, - "version": "0.40.0", + "version": "0.41.0", "description": "Example of HTTPs integration with OpenTelemetry", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -33,14 +33,14 @@ }, "dependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/exporter-jaeger": "1.14.0", - "@opentelemetry/exporter-zipkin": "1.14.0", - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/instrumentation-http": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/sdk-trace-node": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/exporter-jaeger": "1.15.0", + "@opentelemetry/exporter-zipkin": "1.15.0", + "@opentelemetry/instrumentation": "0.41.0", + "@opentelemetry/instrumentation-http": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/sdk-trace-node": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/https", "devDependencies": { diff --git a/examples/opentelemetry-web/package.json b/examples/opentelemetry-web/package.json index 7caa50413f9..762f17d65f7 100644 --- a/examples/opentelemetry-web/package.json +++ b/examples/opentelemetry-web/package.json @@ -1,7 +1,7 @@ { "name": "web-opentelemetry-example", "private": true, - "version": "0.40.0", + "version": "0.41.0", "description": "Example of using @opentelemetry/sdk-trace-web and @opentelemetry/sdk-metrics in browser", "main": "index.js", "scripts": { @@ -43,20 +43,20 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/context-zone": "1.14.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.40.0", - "@opentelemetry/exporter-trace-otlp-http": "0.40.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.40.0", - "@opentelemetry/exporter-zipkin": "1.14.0", - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/instrumentation-fetch": "0.40.0", - "@opentelemetry/instrumentation-xml-http-request": "0.40.0", - "@opentelemetry/propagator-b3": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/sdk-trace-web": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/context-zone": "1.15.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.0", + "@opentelemetry/exporter-trace-otlp-http": "0.41.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.41.0", + "@opentelemetry/exporter-zipkin": "1.15.0", + "@opentelemetry/instrumentation": "0.41.0", + "@opentelemetry/instrumentation-fetch": "0.41.0", + "@opentelemetry/instrumentation-xml-http-request": "0.41.0", + "@opentelemetry/propagator-b3": "1.15.0", + "@opentelemetry/sdk-metrics": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/sdk-trace-web": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/tracer-web" diff --git a/examples/otlp-exporter-node/package.json b/examples/otlp-exporter-node/package.json index bb5fa251361..888a0b1be80 100644 --- a/examples/otlp-exporter-node/package.json +++ b/examples/otlp-exporter-node/package.json @@ -1,7 +1,7 @@ { "name": "example-otlp-exporter-node", "private": true, - "version": "0.40.0", + "version": "0.41.0", "description": "Example of using @opentelemetry/collector-exporter in Node.js", "main": "index.js", "scripts": { @@ -29,17 +29,17 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/exporter-metrics-otlp-grpc": "0.40.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.40.0", - "@opentelemetry/exporter-metrics-otlp-proto": "0.40.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.40.0", - "@opentelemetry/exporter-trace-otlp-http": "0.40.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/core": "1.15.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.41.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.0", + "@opentelemetry/exporter-metrics-otlp-proto": "0.41.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.0", + "@opentelemetry/exporter-trace-otlp-http": "0.41.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-metrics": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/otlp-exporter-node" } diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 2ad8923f8ba..7d22becab6b 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -6,22 +6,35 @@ All notable changes to experimental packages in this project will be documented ### :boom: Breaking Change +### :rocket: (Enhancement) + +### :bug: (Bug Fix) + +### :books: (Refine Doc) + +### :house: (Internal) + +## 0.41.0 + +### :boom: Breaking Change + * chore(instrumentation-grpc): Drop support for package `grpc`. [#3807](https://github.com/open-telemetry/opentelemetry-js/pull/3807) @llc1123 ### :rocket: (Enhancement) * feat(otlp-grpc-exporters): add support for UDS endpoints. [#3853](https://github.com/open-telemetry/opentelemetry-js/pull/3853) @llc1123 * feat(otlp-exporters): bump otlp proto to 0.20.0 [#3932](https://github.com/open-telemetry/opentelemetry-js/pull/3932) @pichlermarc +* feat(exporter-metrics-otlp-*): add LowMemory metrics temporality preference [#3915](https://github.com/open-telemetry/opentelemetry-js/pull/3915) @martinkuba + * Adds support for [LowMemory temporality preference](https://github.com/open-telemetry/opentelemetry-specification/blob/f09624bb97e9be3be259733b93be507df18927bd/specification/metrics/sdk_exporters/otlp.md#additional-configuration) + * Adds support for `lowmemory` in `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` ### :bug: (Bug Fix) * fix(exporter-logs-otlp-http): set useHex to true [#3875](https://github.com/open-telemetry/opentelemetry-js/pull/3875) @Nico385412 - fix(otlp-proto-exporter-base): add missing type import [#3937](https://github.com/open-telemetry/opentelemetry-js/pull/3937) @pichlermarc +* fix(otlp-proto-exporter-base): add missing type import [#3937](https://github.com/open-telemetry/opentelemetry-js/pull/3937) @pichlermarc * fix(example-opencensus-shim): avoid OpenCensus auto instrumentations [#3951](https://github.com/open-telemetry/opentelemetry-js/pull/3951) @llc1123 * fix(http-intrumentation): prevent request socket null from throwing uncaught error [#3858](https://github.com/open-telemetry/opentelemetry-js/pull/3858) @aodysseos -### :books: (Refine Doc) - ### :house: (Internal) * chore(instrumentation-grpc): Cleanup remnants of grpc-native support. [#3886](https://github.com/open-telemetry/opentelemetry-js/pull/3886) @llc1123 diff --git a/experimental/backwards-compatibility/node14/package.json b/experimental/backwards-compatibility/node14/package.json index a18a2795f49..1fc32b91f50 100644 --- a/experimental/backwards-compatibility/node14/package.json +++ b/experimental/backwards-compatibility/node14/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node14", - "version": "0.40.0", + "version": "0.41.0", "private": true, "description": "Backwards compatibility app for node 14 types and the OpenTelemetry Node.js SDK", "main": "index.js", @@ -9,8 +9,8 @@ "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "dependencies": { - "@opentelemetry/sdk-node": "0.40.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/sdk-node": "0.41.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "tslib": "^2.3.1" }, "devDependencies": { diff --git a/experimental/backwards-compatibility/node16/package.json b/experimental/backwards-compatibility/node16/package.json index aaeb4db421b..136ff5ff0ba 100644 --- a/experimental/backwards-compatibility/node16/package.json +++ b/experimental/backwards-compatibility/node16/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node16", - "version": "0.40.0", + "version": "0.41.0", "private": true, "description": "Backwards compatibility app for node 16 types and the OpenTelemetry Node.js SDK", "main": "index.js", @@ -9,8 +9,8 @@ "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "dependencies": { - "@opentelemetry/sdk-node": "0.40.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/sdk-node": "0.41.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "tslib": "^2.3.1" }, "devDependencies": { diff --git a/experimental/examples/logs/package.json b/experimental/examples/logs/package.json index 0df41c352fa..f4295a7c908 100644 --- a/experimental/examples/logs/package.json +++ b/experimental/examples/logs/package.json @@ -1,14 +1,14 @@ { "name": "logs-example", - "version": "0.40.0", + "version": "0.41.0", "private": true, "scripts": { "start": "ts-node index.ts" }, "dependencies": { "@opentelemetry/api": "^1.4.1", - "@opentelemetry/api-logs": "0.40.0", - "@opentelemetry/sdk-logs": "0.40.0" + "@opentelemetry/api-logs": "0.41.0", + "@opentelemetry/sdk-logs": "0.41.0" }, "devDependencies": { "@types/node": "18.6.5", diff --git a/experimental/examples/opencensus-shim/package.json b/experimental/examples/opencensus-shim/package.json index fd231ef119b..ee201e1171e 100644 --- a/experimental/examples/opencensus-shim/package.json +++ b/experimental/examples/opencensus-shim/package.json @@ -1,7 +1,7 @@ { "name": "opencensus-shim", "private": true, - "version": "0.40.0", + "version": "0.41.0", "description": "Example of using @opentelemetry/shim-opencensus in Node.js", "main": "index.js", "scripts": { @@ -27,15 +27,14 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "1.4.1", - "@opentelemetry/sdk-trace-node": "1.14.0", "@opencensus/core": "0.1.0", "@opencensus/nodejs-base": "0.1.0", - "@opentelemetry/semantic-conventions": "1.14.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/shim-opencensus": "0.40.0" + "@opentelemetry/api": "1.4.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-trace-node": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", + "@opentelemetry/shim-opencensus": "0.41.0" }, - "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/opencensus-shim", - "devDependencies": {} + "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/opencensus-shim" } diff --git a/experimental/examples/prometheus/package.json b/experimental/examples/prometheus/package.json index 037e147dc9a..45c9f661dcc 100644 --- a/experimental/examples/prometheus/package.json +++ b/experimental/examples/prometheus/package.json @@ -1,6 +1,6 @@ { "name": "prometheus-example", - "version": "0.40.0", + "version": "0.41.0", "private": true, "description": "Example of using @opentelemetry/sdk-metrics and @opentelemetry/exporter-prometheus", "main": "index.js", @@ -11,7 +11,7 @@ "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/exporter-prometheus": "0.40.0", - "@opentelemetry/sdk-metrics": "1.14.0" + "@opentelemetry/exporter-prometheus": "0.41.0", + "@opentelemetry/sdk-metrics": "1.15.0" } } diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index ec768c61886..1976e7ced38 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api-events", - "version": "0.40.0", + "version": "0.41.0", "description": "Public events API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 7be2db96e3d..1591770cae1 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api-logs", - "version": "0.40.0", + "version": "0.41.0", "description": "Public logs API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index fc70f70d075..9a8244e50e0 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-grpc", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry Collector Exporter allows user to send collected log records to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -51,9 +51,9 @@ "@babel/core": "7.22.6", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/api-logs": "0.40.0", - "@opentelemetry/otlp-exporter-base": "0.40.0", - "@opentelemetry/resources": "1.14.0", + "@opentelemetry/api-logs": "0.41.0", + "@opentelemetry/otlp-exporter-base": "0.41.0", + "@opentelemetry/resources": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -73,10 +73,10 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/sdk-logs": "0.40.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.41.0", + "@opentelemetry/otlp-transformer": "0.41.0", + "@opentelemetry/sdk-logs": "0.41.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-grpc", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 351eaa0cc7e..f0db30c4439 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-http", - "version": "0.40.0", + "version": "0.41.0", "publishConfig": { "access": "public" }, @@ -72,8 +72,8 @@ "sideEffects": false, "devDependencies": { "@babel/core": "7.22.6", - "@opentelemetry/api-logs": "0.40.0", - "@opentelemetry/resources": "1.14.0", + "@opentelemetry/api-logs": "0.41.0", + "@opentelemetry/resources": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -104,10 +104,10 @@ "@opentelemetry/api-logs": ">=0.38.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/otlp-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/sdk-logs": "0.40.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/otlp-exporter-base": "0.41.0", + "@opentelemetry/otlp-transformer": "0.41.0", + "@opentelemetry/sdk-logs": "0.41.0", "tslib": "^2.3.1" } } diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index b8b685c42fb..f7f08642e8d 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-proto", - "version": "0.40.0", + "version": "0.41.0", "description": "An OTLP exporter to send logs using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -83,14 +83,14 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/api-logs": "0.40.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/otlp-exporter-base": "0.40.0", - "@opentelemetry/otlp-proto-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-logs": "0.40.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/api-logs": "0.41.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/otlp-exporter-base": "0.41.0", + "@opentelemetry/otlp-proto-exporter-base": "0.41.0", + "@opentelemetry/otlp-transformer": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-logs": "0.41.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-proto", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 5b888affd73..2cf8e237a6f 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-grpc", - "version": "0.40.0", + "version": "0.41.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", @@ -50,7 +50,7 @@ "@babel/core": "7.22.6", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/otlp-exporter-base": "0.40.0", + "@opentelemetry/otlp-exporter-base": "0.41.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -70,11 +70,11 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.41.0", + "@opentelemetry/otlp-transformer": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-grpc", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 8d41fc08731..ac6a84593a2 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-http", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry Collector Trace Exporter allows user to send collected traces to the OpenTelemetry Collector", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -95,11 +95,11 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/otlp-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/otlp-exporter-base": "0.41.0", + "@opentelemetry/otlp-transformer": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-http", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index 27acfa4e122..f01322ce03b 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-proto", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry Collector Exporter allows user to send collected traces to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -82,12 +82,12 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/otlp-exporter-base": "0.40.0", - "@opentelemetry/otlp-proto-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/otlp-exporter-base": "0.41.0", + "@opentelemetry/otlp-proto-exporter-base": "0.41.0", + "@opentelemetry/otlp-transformer": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-proto", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 52bc1e7f27a..0a6cd39d192 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/opentelemetry-browser-detector", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry Resource Detector for Browser", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -72,8 +72,8 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/browser-detector" diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 17e35ee07b0..380c0e212ea 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-grpc", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -69,12 +69,12 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.40.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.41.0", + "@opentelemetry/otlp-transformer": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-metrics": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index fa10515d333..556fbf9a9ce 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-http", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -95,11 +95,11 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/otlp-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/otlp-exporter-base": "0.41.0", + "@opentelemetry/otlp-transformer": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-metrics": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-http", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index f384dec9818..440af69cb01 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-proto", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -67,13 +67,13 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.40.0", - "@opentelemetry/otlp-exporter-base": "0.40.0", - "@opentelemetry/otlp-proto-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.0", + "@opentelemetry/otlp-exporter-base": "0.41.0", + "@opentelemetry/otlp-proto-exporter-base": "0.41.0", + "@opentelemetry/otlp-transformer": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-metrics": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-proto", diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index 8ae497886f3..c9ffe2cdccd 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-prometheus", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry Exporter Prometheus provides a metrics endpoint for Prometheus", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,7 +44,7 @@ }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/semantic-conventions": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -61,9 +61,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-metrics": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-prometheus", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 742ec40861b..bf8d3256354 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-fetch", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry fetch automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -56,9 +56,9 @@ "devDependencies": { "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-zone": "1.14.0", - "@opentelemetry/propagator-b3": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/context-zone": "1.15.0", + "@opentelemetry/propagator-b3": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -88,10 +88,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/sdk-trace-web": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/instrumentation": "0.41.0", + "@opentelemetry/sdk-trace-web": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-fetch", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index f8b247ffa64..ca20eade98a 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-grpc", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry grpc automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -48,10 +48,10 @@ "@grpc/grpc-js": "^1.7.1", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.14.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/sdk-trace-node": "1.14.0", + "@opentelemetry/context-async-hooks": "1.15.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/sdk-trace-node": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", @@ -70,8 +70,8 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/instrumentation": "0.41.0", + "@opentelemetry/semantic-conventions": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-grpc", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index c39d34ace9d..93ed303fa6e 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-http", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry http/https automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -46,10 +46,10 @@ }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/sdk-trace-node": "1.14.0", + "@opentelemetry/context-async-hooks": "1.15.0", + "@opentelemetry/sdk-metrics": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/sdk-trace-node": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/request-promise-native": "1.0.18", @@ -74,9 +74,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/instrumentation": "0.41.0", + "@opentelemetry/semantic-conventions": "1.15.0", "semver": "^7.5.1", "tslib": "^2.3.1" }, diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index a9d38e65f34..62852cb31ac 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-xml-http-request", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry XMLHttpRequest automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -56,9 +56,9 @@ "devDependencies": { "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-zone": "1.14.0", - "@opentelemetry/propagator-b3": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/context-zone": "1.15.0", + "@opentelemetry/propagator-b3": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -88,10 +88,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/sdk-trace-web": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/instrumentation": "0.41.0", + "@opentelemetry/sdk-trace-web": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-xml-http-request", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index bdfaa89e584..e2c06c4ff8e 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation", - "version": "0.40.0", + "version": "0.41.0", "description": "Base class for node which OpenTelemetry instrumentation modules extend", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation", @@ -84,7 +84,7 @@ "devDependencies": { "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", - "@opentelemetry/sdk-metrics": "1.14.0", + "@opentelemetry/sdk-metrics": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 5db8e3ced7f..e21bf699951 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-node", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry SDK for Node.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,18 +44,18 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/exporter-jaeger": "1.14.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.40.0", - "@opentelemetry/exporter-trace-otlp-http": "0.40.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.40.0", - "@opentelemetry/exporter-zipkin": "1.14.0", - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/sdk-trace-node": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/exporter-jaeger": "1.15.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.0", + "@opentelemetry/exporter-trace-otlp-http": "0.41.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.41.0", + "@opentelemetry/exporter-zipkin": "1.15.0", + "@opentelemetry/instrumentation": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-metrics": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/sdk-trace-node": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", "tslib": "^2.3.1" }, "peerDependencies": { @@ -63,7 +63,7 @@ }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.14.0", + "@opentelemetry/context-async-hooks": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index de1a7019963..b6d15f7ae2e 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-exporter-base", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry OTLP Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -61,7 +61,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.14.0", + "@opentelemetry/core": "1.15.0", "tslib": "^2.3.1" }, "devDependencies": { diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 65d86fe705b..c8fcd6fcdaa 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-grpc-exporter-base", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry OTLP-gRPC Exporter base (for internal use only)", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,9 +50,9 @@ "devDependencies": { "@babel/core": "7.22.6", "@opentelemetry/api": "1.4.1", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/otlp-transformer": "0.41.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -73,8 +73,8 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/otlp-exporter-base": "0.40.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/otlp-exporter-base": "0.41.0", "protobufjs": "^7.2.3", "tslib": "^2.3.1" }, diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index 46b31d990dd..fb8a8ce047d 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-proto-exporter-base", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenTelemetry OTLP-HTTP-protobuf Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -79,8 +79,8 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/otlp-exporter-base": "0.40.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/otlp-exporter-base": "0.41.0", "protobufjs": "^7.2.3", "tslib": "^2.3.1" }, diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index 4e2a8313897..d0cb3701e35 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -4,7 +4,7 @@ "publishConfig": { "access": "public" }, - "version": "0.40.0", + "version": "0.41.0", "description": "Transform OpenTelemetry SDK data into OTLP", "module": "build/esm/index.js", "esnext": "build/esnext/index.js", @@ -78,12 +78,12 @@ "webpack": "4.46.0" }, "dependencies": { - "@opentelemetry/api-logs": "0.40.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-logs": "0.40.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/api-logs": "0.41.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-logs": "0.41.0", + "@opentelemetry/sdk-metrics": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-transformer", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index be245fbe159..61415c040a1 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-logs", - "version": "0.40.0", + "version": "0.41.0", "publishConfig": { "access": "public" }, @@ -73,7 +73,7 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.4.0 <1.5.0", - "@opentelemetry/api-logs": "0.40.0", + "@opentelemetry/api-logs": "0.41.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -93,8 +93,8 @@ "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/resources": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/resources": "1.15.0", "tslib": "^2.3.1" } } diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index 636efed8760..b57628d38f1 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opencensus", - "version": "0.40.0", + "version": "0.41.0", "description": "OpenCensus to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,8 +50,8 @@ "devDependencies": { "@opencensus/core": "0.1.0", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/context-async-hooks": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -69,7 +69,7 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", + "@opentelemetry/core": "1.15.0", "require-in-the-middle": "^7.1.1", "semver": "^7.5.1", "tslib": "^2.3.1" diff --git a/integration-tests/propagation-validation-server/package.json b/integration-tests/propagation-validation-server/package.json index 880251c5035..8d577ea6596 100644 --- a/integration-tests/propagation-validation-server/package.json +++ b/integration-tests/propagation-validation-server/package.json @@ -1,6 +1,6 @@ { "name": "propagation-validation-server", - "version": "1.14.0", + "version": "1.15.0", "description": "server for w3c tests", "main": "validation_server.js", "private": true, @@ -12,9 +12,9 @@ }, "dependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/context-async-hooks": "1.14.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/context-async-hooks": "1.15.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "axios": "1.4.0", "body-parser": "1.19.0", "express": "4.17.3", diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 64366b205c6..23e3e65eebe 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": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry AsyncHooks-based Context Manager", "main": "build/src/index.js", "types": "build/src/index.d.ts", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index b2905d6da9c..cf65319c1fb 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": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry Context Zone with peer dependency for zone.js", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 1edc610e320..b2735c90140 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-zone", - "version": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry Context Zone", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -75,9 +75,9 @@ "webpack-merge": "5.9.0" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "1.14.0", - "zone.js": "^0.11.0", - "tslib": "^2.3.1" + "@opentelemetry/context-zone-peer-dep": "1.15.0", + "tslib": "^2.3.1", + "zone.js": "^0.11.0" }, "sideEffects": true, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-context-zone" diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 23e11a9e5c5..3fa3c7b2089 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/core", - "version": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -91,7 +91,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/semantic-conventions": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-core", diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 3b4164d3f96..89e57e4c7b0 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-jaeger", - "version": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry Exporter Jaeger allows user to send collected traces to Jaeger", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,7 +45,7 @@ }, "devDependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/resources": "1.14.0", + "@opentelemetry/resources": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -63,9 +63,9 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", "jaeger-client": "^3.15.0", "tslib": "^2.3.1" }, diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index ff26a83e19e..dc3a8aaa4ee 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-zipkin", - "version": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry Zipkin Exporter allows the user to send collected traces to Zipkin.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -92,10 +92,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-zipkin", diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index 89dcef29be2..85bc3787922 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-b3", - "version": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry B3 propagator provides context propagation for systems that are using the B3 header format", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -51,7 +51,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.14.0", + "@opentelemetry/core": "1.15.0", "tslib": "^2.3.1" }, "peerDependencies": { diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index de2e90601f0..5d67b474c6a 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-jaeger", - "version": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry Jaeger propagator provides HTTP header propagation for systems that are using Jaeger HTTP header format.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -81,7 +81,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", + "@opentelemetry/core": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-propagator-jaeger", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 17de24f2237..b450f1d577b 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resources", - "version": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry SDK resources", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -91,8 +91,8 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-resources", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 6cceaa64d5c..0b08b67d82e 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-base", - "version": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry Tracing", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -93,9 +93,9 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-base", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index bd4fb782fe8..1608b10f301 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-node", - "version": "1.14.0", + "version": "1.15.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", @@ -46,8 +46,8 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/resources": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", @@ -65,11 +65,11 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/context-async-hooks": "1.14.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/propagator-b3": "1.14.0", - "@opentelemetry/propagator-jaeger": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/context-async-hooks": "1.15.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/propagator-b3": "1.15.0", + "@opentelemetry/propagator-jaeger": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "semver": "^7.5.1", "tslib": "^2.3.1" }, diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 8e16b16378a..551fbaab116 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-web", - "version": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry Web Tracer", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -57,9 +57,9 @@ "devDependencies": { "@babel/core": "7.22.6", "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/context-zone": "1.14.0", - "@opentelemetry/propagator-b3": "1.14.0", - "@opentelemetry/resources": "1.14.0", + "@opentelemetry/context-zone": "1.15.0", + "@opentelemetry/propagator-b3": "1.15.0", + "@opentelemetry/resources": "1.15.0", "@types/jquery": "3.5.16", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -92,9 +92,9 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", "tslib": "^2.3.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-web", diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index c7585e68f38..93cff0e7cf1 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/semantic-conventions", - "version": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry semantic conventions", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index 9b05c66d6ce..0555f0d708f 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opentracing", - "version": "1.14.0", + "version": "1.15.0", "description": "OpenTracing to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -43,9 +43,9 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/propagator-b3": "1.14.0", - "@opentelemetry/propagator-jaeger": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/propagator-b3": "1.15.0", + "@opentelemetry/propagator-jaeger": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", @@ -60,8 +60,8 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.0", "opentracing": "^0.14.4", "tslib": "^2.3.1" }, diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 2e327b6acd6..37184d2d0f8 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-metrics", - "version": "1.14.0", + "version": "1.15.0", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -78,8 +78,8 @@ "@opentelemetry/api": ">=1.3.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/resources": "1.14.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/resources": "1.15.0", "lodash.merge": "^4.6.2", "tslib": "^2.3.1" }, diff --git a/packages/template/package.json b/packages/template/package.json index 00876cf2c42..451da5d1e2c 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/template", - "version": "1.14.0", + "version": "1.15.0", "private": true, "publishConfig": { "access": "restricted" diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 3cdfb5d9d47..829be06e364 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/selenium-tests", - "version": "1.14.0", + "version": "1.15.0", "private": true, "description": "OpenTelemetry Selenium Tests", "main": "index.js", @@ -56,16 +56,16 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "1.14.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/exporter-trace-otlp-http": "0.40.0", - "@opentelemetry/exporter-zipkin": "1.14.0", - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/instrumentation-fetch": "0.40.0", - "@opentelemetry/instrumentation-xml-http-request": "0.40.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/sdk-trace-web": "1.14.0", + "@opentelemetry/context-zone-peer-dep": "1.15.0", + "@opentelemetry/core": "1.15.0", + "@opentelemetry/exporter-trace-otlp-http": "0.41.0", + "@opentelemetry/exporter-zipkin": "1.15.0", + "@opentelemetry/instrumentation": "0.41.0", + "@opentelemetry/instrumentation-fetch": "0.41.0", + "@opentelemetry/instrumentation-xml-http-request": "0.41.0", + "@opentelemetry/sdk-metrics": "1.15.0", + "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/sdk-trace-web": "1.15.0", "zone.js": "0.11.4" } } From 02c1d95608d3cb05e93edb68007a46456337ec3c Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Thu, 6 Jul 2023 15:06:00 +0200 Subject: [PATCH 03/70] chore: replace istanbul-instrumenter-loader with maintained component (#3918) --- .nycrc | 1 - api/package.json | 8 ++++---- experimental/packages/api-events/package.json | 6 +++--- experimental/packages/api-logs/package.json | 6 +++--- .../exporter-logs-otlp-http/package.json | 6 +++--- .../exporter-logs-otlp-proto/package.json | 14 ++++++++++++-- .../exporter-trace-otlp-http/package.json | 6 +++--- .../exporter-trace-otlp-proto/package.json | 14 ++++++++++++-- .../opentelemetry-browser-detector/package.json | 14 ++++++++++++-- .../package.json | 6 +++--- .../package.json | 6 +++--- .../package.json | 6 +++--- .../opentelemetry-instrumentation/package.json | 6 +++--- .../opentelemetry-sdk-node/package.json | 1 - .../packages/otlp-exporter-base/package.json | 17 +++++++++++++---- .../packages/otlp-transformer/package.json | 6 +++--- experimental/packages/sdk-logs/package.json | 12 +++++++++--- karma.base.js | 10 +++++----- karma.webpack.js | 6 ++++-- .../package.json | 6 +++--- packages/opentelemetry-core/package.json | 6 +++--- .../opentelemetry-exporter-zipkin/package.json | 6 +++--- .../opentelemetry-propagator-b3/package.json | 1 - .../package.json | 6 +++--- packages/opentelemetry-resources/package.json | 6 +++--- .../opentelemetry-sdk-trace-base/package.json | 8 ++++---- .../opentelemetry-sdk-trace-web/package.json | 8 ++++---- packages/sdk-metrics/package.json | 12 +++++++++--- packages/template/package.json | 8 ++++---- tsconfig.tsbuildinfo | 1 + 30 files changed, 135 insertions(+), 84 deletions(-) create mode 100644 tsconfig.tsbuildinfo diff --git a/.nycrc b/.nycrc index 22383d8abab..eb64eeca29c 100644 --- a/.nycrc +++ b/.nycrc @@ -8,7 +8,6 @@ "build/**/*.*", "src/index.ts", "src/platform/**/index.ts", - "src/platform/browser/*.ts", "src/version.ts", "test/**/*.*", ".eslintrc.js", diff --git a/api/package.json b/api/package.json index 888e602e5e1..296c86d4c8b 100644 --- a/api/package.json +++ b/api/package.json @@ -23,9 +23,9 @@ "docs:test": "linkinator docs/out --silent && linkinator docs/*.md *.md --markdown --silent", "lint:fix": "eslint . --ext .ts --fix", "lint": "eslint . --ext .ts", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", - "test:webworker": "nyc karma start karma.worker.js --single-run", + "test:webworker": "karma start karma.worker.js --single-run", "cycle-check": "dpdm --exit-code circular:1 src/index.ts", "version": "node ../scripts/version-update.js", "prewatch": "npm run precompile", @@ -68,10 +68,10 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "dpdm": "3.13.1", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index 1976e7ced38..4b3f8660cca 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -18,7 +18,7 @@ "compile": "tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "test": "nyc ts-mocha -p tsconfig.json test/**/*.test.ts", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "build": "npm run compile", @@ -70,10 +70,10 @@ "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 1591770cae1..315534d6bd4 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -18,7 +18,7 @@ "compile": "tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "test": "nyc ts-mocha -p tsconfig.json test/**/*.test.ts", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "build": "npm run compile", @@ -70,10 +70,10 @@ "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index f0db30c4439..b29e26ec07d 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -38,7 +38,7 @@ "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", @@ -82,10 +82,10 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index f7f08642e8d..5935d171918 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -21,7 +21,7 @@ "lint:fix": "eslint . --ext .ts --fix", "tdd": "npm run test -- --watch-extensions ts --watch", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", @@ -71,13 +71,23 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", + "babel-plugin-istanbul": "6.1.1", + "karma": "6.4.2", + "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.0", + "karma-mocha": "2.0.1", + "karma-spec-reporter": "0.0.36", + "karma-webpack": "4.0.2", "lerna": "7.1.1", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "typescript": "4.4.4" + "typescript": "4.4.4", + "webpack": "4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index ac6a84593a2..ce26e946308 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -23,7 +23,7 @@ "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", @@ -73,10 +73,10 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index f01322ce03b..a812a1e7ca6 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -21,7 +21,7 @@ "lint:fix": "eslint . --ext .ts --fix", "tdd": "npm run test -- --watch-extensions ts --watch", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", @@ -70,13 +70,23 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", + "babel-plugin-istanbul": "6.1.1", + "karma": "6.4.2", + "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.0", + "karma-mocha": "2.0.1", + "karma-spec-reporter": "0.0.36", + "karma-webpack": "4.0.2", "lerna": "7.1.1", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "typescript": "4.4.4" + "typescript": "4.4.4", + "webpack": "4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 0a6cd39d192..5c20aa95b06 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -14,7 +14,7 @@ "lint": "eslint . --ext .ts", "lint:fix": "eslint . --ext .ts --fix", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", @@ -60,13 +60,23 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", + "babel-plugin-istanbul": "6.1.1", + "karma": "6.4.2", + "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.0", + "karma-mocha": "2.0.1", + "karma-spec-reporter": "0.0.36", + "karma-webpack": "4.0.2", "lerna": "7.1.1", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "typescript": "4.4.4" + "typescript": "4.4.4", + "webpack": "4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 556fbf9a9ce..6190a4144e3 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -23,7 +23,7 @@ "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", @@ -73,10 +73,10 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index bf8d3256354..f641b9ec494 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -16,7 +16,7 @@ "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "version": "node ../../../scripts/version-update.js", "tdd": "karma start", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "node ../../../scripts/version-update.js", @@ -66,10 +66,10 @@ "babel-loader": "8.3.0", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 62852cb31ac..f628c633ef8 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -16,7 +16,7 @@ "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "version": "node ../../../scripts/version-update.js", "tdd": "karma start", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "node ../../../scripts/version-update.js", @@ -66,10 +66,10 @@ "babel-loader": "8.3.0", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index e2c06c4ff8e..4141beed00b 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -51,7 +51,7 @@ "test:cjs": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", "test:esm": "nyc node --experimental-loader=./hook.mjs ../../../node_modules/mocha/bin/mocha 'test/node/*.test.mjs' test/node/*.test.mjs", "test": "npm run test:cjs && npm run test:esm", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", @@ -94,10 +94,10 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index e21bf699951..9ec166cb751 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -70,7 +70,6 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", "lerna": "7.1.1", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index b6d15f7ae2e..77c49bfaa27 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -24,7 +24,7 @@ "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", @@ -65,21 +65,30 @@ "tslib": "^2.3.1" }, "devDependencies": { + "@babel/core": "7.22.5", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", + "karma": "6.4.2", + "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.0", + "karma-mocha": "2.0.1", + "karma-spec-reporter": "0.0.36", + "karma-webpack": "4.0.2", "lerna": "7.1.1", "mocha": "10.2.0", - "nock": "13.3.1", "nyc": "15.1.0", "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "typescript": "4.4.4" + "typescript": "4.4.4", + "webpack": "4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index d0cb3701e35..6c020a16f42 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -20,7 +20,7 @@ "lint:fix": "eslint . --ext .ts --fix", "tdd": "npm run test -- --watch-extensions ts --watch", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "prewatch": "node ../../../scripts/version-update.js", "watch": "tsc --build -w tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "peer-api-check": "node ../../../scripts/peer-api-check.js", @@ -62,10 +62,10 @@ "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 61415c040a1..898bb86bedf 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -33,7 +33,7 @@ "compile": "tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", @@ -74,14 +74,16 @@ "devDependencies": { "@opentelemetry/api": ">=1.4.0 <1.5.0", "@opentelemetry/api-logs": "0.41.0", + "@babel/core": "7.22.5", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", @@ -89,8 +91,12 @@ "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", + "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "typescript": "4.4.4" + "typescript": "4.4.4", + "webpack": "4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" }, "dependencies": { "@opentelemetry/core": "1.15.0", diff --git a/karma.base.js b/karma.base.js index 7df76d7b132..2af28693688 100644 --- a/karma.base.js +++ b/karma.base.js @@ -19,12 +19,12 @@ module.exports = { hostname: 'localhost', browsers: ['ChromeHeadless'], frameworks: ['mocha'], - coverageIstanbulReporter: { - reports: ['html', 'json'], - dir: '.nyc_output', - fixWebpackSourcePaths: true + coverageReporter: { + type : 'json', + subdir: '.', + dir : '.nyc_output/' }, - reporters: ['spec', 'coverage-istanbul'], + reporters: ['spec', 'coverage'], files: ['test/index-webpack.ts'], preprocessors: { 'test/index-webpack*.ts': ['webpack'] diff --git a/karma.webpack.js b/karma.webpack.js index 138112547bc..b7fa7acb978 100644 --- a/karma.webpack.js +++ b/karma.webpack.js @@ -31,8 +31,10 @@ module.exports = { exclude: /(node_modules|\.test\.[tj]sx?$)/, test: /\.ts$/, use: { - loader: 'istanbul-instrumenter-loader', - options: { esModules: true }, + loader: 'babel-loader', + options: { + plugins: ['babel-plugin-istanbul'], + } }, }, // This setting configures Node polyfills for the browser that will be diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index cf65319c1fb..fa1ef04204f 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -16,7 +16,7 @@ "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "version": "node ../../scripts/version-update.js", "tdd": "karma start", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "npm run precompile", @@ -63,10 +63,10 @@ "babel-loader": "8.3.0", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 3fa3c7b2089..70d32b5dec0 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -18,7 +18,7 @@ "compile": "tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "test": "nyc ts-mocha -p tsconfig.json test/**/*.test.ts --exclude 'test/platform/browser/**/*.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "tdd": "npm run tdd:node", "tdd:node": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", @@ -71,10 +71,10 @@ "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index dc3a8aaa4ee..e8bd41837ee 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -23,7 +23,7 @@ "lint:fix": "eslint . --ext .ts --fix", "tdd": "npm run test -- --watch-extensions ts --watch", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "version": "node ../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", @@ -69,10 +69,10 @@ "babel-loader": "8.3.0", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index 85bc3787922..1cb95ba6b1e 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -63,7 +63,6 @@ "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", "lerna": "7.1.1", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index 5d67b474c6a..fdabf7a7e8d 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -10,7 +10,7 @@ "prepublishOnly": "npm run compile", "compile": "tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/index-webpack.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "tdd": "npm run tdd:node", "tdd:node": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", @@ -61,10 +61,10 @@ "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index b450f1d577b..a5862f44d53 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -22,8 +22,8 @@ "lint": "eslint . --ext .ts", "lint:fix": "eslint . --ext .ts --fix", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", - "test:browser": "nyc karma start --single-run", - "test:webworker": "nyc karma start karma.worker.js --single-run", + "test:browser": "karma start --single-run", + "test:webworker": "karma start karma.worker.js --single-run", "tdd": "npm run test -- --watch-extensions ts --watch", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "version": "node ../../scripts/version-update.js", @@ -71,7 +71,7 @@ "cross-var": "1.1.0", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 0b08b67d82e..884e0e8c73c 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -18,8 +18,8 @@ "compile": "tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", - "test:browser": "nyc karma start --single-run", - "test:webworker": "nyc karma start karma.worker.js --single-run", + "test:browser": "karma start --single-run", + "test:webworker": "karma start karma.worker.js --single-run", "tdd": "npm run tdd:node", "tdd:node": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", @@ -72,10 +72,10 @@ "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 551fbaab116..ab668e3c47f 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -17,8 +17,8 @@ "codecov:webworker": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "version": "node ../../scripts/version-update.js", "tdd": "karma start", - "test:browser": "nyc karma start --single-run", - "test:webworker": "nyc karma start karma.worker.js --single-run", + "test:browser": "karma start --single-run", + "test:webworker": "karma start karma.worker.js --single-run", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "npm run precompile", @@ -68,10 +68,10 @@ "babel-loader": "8.3.0", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-jquery": "0.2.4", "karma-mocha": "2.0.1", "karma-mocha-webworker": "1.3.0", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 37184d2d0f8..e7d695ca934 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -12,7 +12,7 @@ "compile": "tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", @@ -56,14 +56,16 @@ "devDependencies": { "@opentelemetry/api": ">=1.3.0 <1.5.0", "@types/lodash.merge": "4.6.7", + "@babel/core": "7.22.5", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", + "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", @@ -71,8 +73,12 @@ "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", + "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "typescript": "4.4.4" + "typescript": "4.4.4", + "webpack": "4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.5.0" diff --git a/packages/template/package.json b/packages/template/package.json index 451da5d1e2c..7d04d854ace 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -47,7 +47,7 @@ "Add/change these to scripts if browser is supported": { "compile": "tsc --build tsconfig.json", "clean": "tsc --build --clean tsconfig.json", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "watch": "tsc --build --watch tsconfig.json" }, @@ -97,10 +97,10 @@ }, "Add these to devDependencies if browser is targeted": { "@types/webpack-env": "1.16.0", - "istanbul-instrumenter-loader": "3.0.1", - "karma": "5.2.3", + "babel-plugin-istanbul": "6.1.1", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo new file mode 100644 index 00000000000..bd9c8b8eabf --- /dev/null +++ b/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"version":"4.4.4"} \ No newline at end of file From b34c39bf3223cf2a3302ab762fa5743fe83e4414 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Thu, 6 Jul 2023 15:14:56 +0200 Subject: [PATCH 04/70] chore(deps): update dependency eslint to v8.43.0 (#3929) Co-authored-by: Renovate Bot --- api/.eslintrc.js | 2 +- eslint.config.js => eslint.base.js | 0 experimental/examples/.eslintrc.js | 2 +- experimental/packages/api-events/.eslintrc.js | 2 +- experimental/packages/api-logs/.eslintrc.js | 2 +- experimental/packages/exporter-logs-otlp-grpc/.eslintrc.js | 2 +- experimental/packages/exporter-logs-otlp-http/.eslintrc.js | 2 +- experimental/packages/exporter-logs-otlp-proto/.eslintrc.js | 2 +- experimental/packages/exporter-trace-otlp-grpc/.eslintrc.js | 2 +- experimental/packages/exporter-trace-otlp-http/.eslintrc.js | 2 +- experimental/packages/exporter-trace-otlp-proto/.eslintrc.js | 2 +- .../packages/opentelemetry-browser-detector/.eslintrc.js | 2 +- .../opentelemetry-exporter-metrics-otlp-grpc/.eslintrc.js | 2 +- .../opentelemetry-exporter-metrics-otlp-http/.eslintrc.js | 2 +- .../opentelemetry-exporter-metrics-otlp-proto/.eslintrc.js | 2 +- .../packages/opentelemetry-exporter-prometheus/.eslintrc.js | 2 +- .../packages/opentelemetry-instrumentation-fetch/.eslintrc.js | 2 +- .../packages/opentelemetry-instrumentation-grpc/.eslintrc.js | 2 +- .../packages/opentelemetry-instrumentation-http/.eslintrc.js | 2 +- .../opentelemetry-instrumentation-xml-http-request/.eslintrc.js | 2 +- .../packages/opentelemetry-instrumentation/.eslintrc.js | 2 +- experimental/packages/opentelemetry-sdk-node/.eslintrc.js | 2 +- experimental/packages/otlp-exporter-base/.eslintrc.js | 2 +- experimental/packages/otlp-grpc-exporter-base/.eslintrc.js | 2 +- experimental/packages/otlp-proto-exporter-base/.eslintrc.js | 2 +- experimental/packages/otlp-transformer/.eslintrc.js | 2 +- experimental/packages/sdk-logs/.eslintrc.js | 2 +- experimental/packages/shim-opencensus/.eslintrc.js | 2 +- package.json | 2 +- packages/opentelemetry-context-async-hooks/.eslintrc.js | 2 +- packages/opentelemetry-context-zone-peer-dep/.eslintrc.js | 2 +- packages/opentelemetry-context-zone/.eslintrc.js | 2 +- packages/opentelemetry-core/.eslintrc.js | 2 +- packages/opentelemetry-exporter-jaeger/.eslintrc.js | 2 +- packages/opentelemetry-exporter-zipkin/.eslintrc.js | 2 +- packages/opentelemetry-propagator-b3/.eslintrc.js | 2 +- packages/opentelemetry-propagator-jaeger/.eslintrc.js | 2 +- packages/opentelemetry-resources/.eslintrc.js | 2 +- packages/opentelemetry-sdk-trace-base/.eslintrc.js | 2 +- packages/opentelemetry-sdk-trace-node/.eslintrc.js | 2 +- packages/opentelemetry-sdk-trace-web/.eslintrc.js | 2 +- packages/opentelemetry-semantic-conventions/.eslintrc.js | 2 +- packages/opentelemetry-shim-opentracing/.eslintrc.js | 2 +- packages/sdk-metrics/.eslintrc.js | 2 +- packages/template/.eslintrc.js | 2 +- 45 files changed, 44 insertions(+), 44 deletions(-) rename eslint.config.js => eslint.base.js (100%) diff --git a/api/.eslintrc.js b/api/.eslintrc.js index 7d5c10c7f97..08f88d4912a 100644 --- a/api/.eslintrc.js +++ b/api/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "shared-node-browser": true }, - ...require('../eslint.config.js') + ...require('../eslint.base.js') } diff --git a/eslint.config.js b/eslint.base.js similarity index 100% rename from eslint.config.js rename to eslint.base.js diff --git a/experimental/examples/.eslintrc.js b/experimental/examples/.eslintrc.js index 7927fa0c360..3f58849df99 100644 --- a/experimental/examples/.eslintrc.js +++ b/experimental/examples/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/experimental/packages/api-events/.eslintrc.js b/experimental/packages/api-events/.eslintrc.js index 7654abb6ac1..5cb19b0298c 100644 --- a/experimental/packages/api-events/.eslintrc.js +++ b/experimental/packages/api-events/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "shared-node-browser": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/api-logs/.eslintrc.js b/experimental/packages/api-logs/.eslintrc.js index 7654abb6ac1..5cb19b0298c 100644 --- a/experimental/packages/api-logs/.eslintrc.js +++ b/experimental/packages/api-logs/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "shared-node-browser": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/exporter-logs-otlp-grpc/.eslintrc.js b/experimental/packages/exporter-logs-otlp-grpc/.eslintrc.js index 3ed0fbeba38..9cfb3fd423b 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/.eslintrc.js +++ b/experimental/packages/exporter-logs-otlp-grpc/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/exporter-logs-otlp-http/.eslintrc.js b/experimental/packages/exporter-logs-otlp-http/.eslintrc.js index f3f22e86174..24f29328f9b 100644 --- a/experimental/packages/exporter-logs-otlp-http/.eslintrc.js +++ b/experimental/packages/exporter-logs-otlp-http/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { node: true, browser: true, }, - ...require('../../../eslint.config.js'), + ...require('../../../eslint.base.js'), }; diff --git a/experimental/packages/exporter-logs-otlp-proto/.eslintrc.js b/experimental/packages/exporter-logs-otlp-proto/.eslintrc.js index 3ed0fbeba38..9cfb3fd423b 100644 --- a/experimental/packages/exporter-logs-otlp-proto/.eslintrc.js +++ b/experimental/packages/exporter-logs-otlp-proto/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/exporter-trace-otlp-grpc/.eslintrc.js b/experimental/packages/exporter-trace-otlp-grpc/.eslintrc.js index 3ed0fbeba38..9cfb3fd423b 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/.eslintrc.js +++ b/experimental/packages/exporter-trace-otlp-grpc/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/exporter-trace-otlp-http/.eslintrc.js b/experimental/packages/exporter-trace-otlp-http/.eslintrc.js index e41d9a9299b..c0540890421 100644 --- a/experimental/packages/exporter-trace-otlp-http/.eslintrc.js +++ b/experimental/packages/exporter-trace-otlp-http/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/exporter-trace-otlp-proto/.eslintrc.js b/experimental/packages/exporter-trace-otlp-proto/.eslintrc.js index 3ed0fbeba38..9cfb3fd423b 100644 --- a/experimental/packages/exporter-trace-otlp-proto/.eslintrc.js +++ b/experimental/packages/exporter-trace-otlp-proto/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/opentelemetry-browser-detector/.eslintrc.js b/experimental/packages/opentelemetry-browser-detector/.eslintrc.js index 3ed0fbeba38..9cfb3fd423b 100644 --- a/experimental/packages/opentelemetry-browser-detector/.eslintrc.js +++ b/experimental/packages/opentelemetry-browser-detector/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/.eslintrc.js b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/.eslintrc.js index 3ed0fbeba38..9cfb3fd423b 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/.eslintrc.js +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/.eslintrc.js b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/.eslintrc.js index e41d9a9299b..c0540890421 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/.eslintrc.js +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/.eslintrc.js b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/.eslintrc.js index 3ed0fbeba38..9cfb3fd423b 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/.eslintrc.js +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/opentelemetry-exporter-prometheus/.eslintrc.js b/experimental/packages/opentelemetry-exporter-prometheus/.eslintrc.js index f756f4488b2..9baf1b49565 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/.eslintrc.js +++ b/experimental/packages/opentelemetry-exporter-prometheus/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/.eslintrc.js b/experimental/packages/opentelemetry-instrumentation-fetch/.eslintrc.js index e41d9a9299b..c0540890421 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/.eslintrc.js +++ b/experimental/packages/opentelemetry-instrumentation-fetch/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/.eslintrc.js b/experimental/packages/opentelemetry-instrumentation-grpc/.eslintrc.js index f756f4488b2..9baf1b49565 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/.eslintrc.js +++ b/experimental/packages/opentelemetry-instrumentation-grpc/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/opentelemetry-instrumentation-http/.eslintrc.js b/experimental/packages/opentelemetry-instrumentation-http/.eslintrc.js index f756f4488b2..9baf1b49565 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/.eslintrc.js +++ b/experimental/packages/opentelemetry-instrumentation-http/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/.eslintrc.js b/experimental/packages/opentelemetry-instrumentation-xml-http-request/.eslintrc.js index b50dfd815b9..7364a382d0a 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/.eslintrc.js +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "browser": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/opentelemetry-instrumentation/.eslintrc.js b/experimental/packages/opentelemetry-instrumentation/.eslintrc.js index e41d9a9299b..c0540890421 100644 --- a/experimental/packages/opentelemetry-instrumentation/.eslintrc.js +++ b/experimental/packages/opentelemetry-instrumentation/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/opentelemetry-sdk-node/.eslintrc.js b/experimental/packages/opentelemetry-sdk-node/.eslintrc.js index f756f4488b2..9baf1b49565 100644 --- a/experimental/packages/opentelemetry-sdk-node/.eslintrc.js +++ b/experimental/packages/opentelemetry-sdk-node/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/otlp-exporter-base/.eslintrc.js b/experimental/packages/otlp-exporter-base/.eslintrc.js index e41d9a9299b..c0540890421 100644 --- a/experimental/packages/otlp-exporter-base/.eslintrc.js +++ b/experimental/packages/otlp-exporter-base/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/otlp-grpc-exporter-base/.eslintrc.js b/experimental/packages/otlp-grpc-exporter-base/.eslintrc.js index 3ed0fbeba38..9cfb3fd423b 100644 --- a/experimental/packages/otlp-grpc-exporter-base/.eslintrc.js +++ b/experimental/packages/otlp-grpc-exporter-base/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/otlp-proto-exporter-base/.eslintrc.js b/experimental/packages/otlp-proto-exporter-base/.eslintrc.js index 3ed0fbeba38..9cfb3fd423b 100644 --- a/experimental/packages/otlp-proto-exporter-base/.eslintrc.js +++ b/experimental/packages/otlp-proto-exporter-base/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/otlp-transformer/.eslintrc.js b/experimental/packages/otlp-transformer/.eslintrc.js index b9004d20258..0fe1bbf975f 100644 --- a/experimental/packages/otlp-transformer/.eslintrc.js +++ b/experimental/packages/otlp-transformer/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "shared-node-browser": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/experimental/packages/sdk-logs/.eslintrc.js b/experimental/packages/sdk-logs/.eslintrc.js index 0c986a856c3..fc24af194b2 100644 --- a/experimental/packages/sdk-logs/.eslintrc.js +++ b/experimental/packages/sdk-logs/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { mocha: true, node: true, }, - ...require('../../../eslint.config.js'), + ...require('../../../eslint.base.js'), }; diff --git a/experimental/packages/shim-opencensus/.eslintrc.js b/experimental/packages/shim-opencensus/.eslintrc.js index f756f4488b2..9baf1b49565 100644 --- a/experimental/packages/shim-opencensus/.eslintrc.js +++ b/experimental/packages/shim-opencensus/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/package.json b/package.json index c0b6c172ef4..a1fbadf6d00 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "5.59.11", "@typescript-eslint/parser": "5.59.11", - "eslint": "8.22.0", + "eslint": "8.43.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-node": "11.1.0", diff --git a/packages/opentelemetry-context-async-hooks/.eslintrc.js b/packages/opentelemetry-context-async-hooks/.eslintrc.js index f726f3becb6..3d9af536bb6 100644 --- a/packages/opentelemetry-context-async-hooks/.eslintrc.js +++ b/packages/opentelemetry-context-async-hooks/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-context-zone-peer-dep/.eslintrc.js b/packages/opentelemetry-context-zone-peer-dep/.eslintrc.js index f21c674001c..7561e7f833d 100644 --- a/packages/opentelemetry-context-zone-peer-dep/.eslintrc.js +++ b/packages/opentelemetry-context-zone-peer-dep/.eslintrc.js @@ -7,5 +7,5 @@ module.exports = { "globals": { "Zone": "readonly" }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-context-zone/.eslintrc.js b/packages/opentelemetry-context-zone/.eslintrc.js index c21aa0e358a..a374ccda6ac 100644 --- a/packages/opentelemetry-context-zone/.eslintrc.js +++ b/packages/opentelemetry-context-zone/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "browser": true, "commonjs": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-core/.eslintrc.js b/packages/opentelemetry-core/.eslintrc.js index 9dfe62f9b8c..36847df9fb1 100644 --- a/packages/opentelemetry-core/.eslintrc.js +++ b/packages/opentelemetry-core/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-exporter-jaeger/.eslintrc.js b/packages/opentelemetry-exporter-jaeger/.eslintrc.js index f726f3becb6..3d9af536bb6 100644 --- a/packages/opentelemetry-exporter-jaeger/.eslintrc.js +++ b/packages/opentelemetry-exporter-jaeger/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-exporter-zipkin/.eslintrc.js b/packages/opentelemetry-exporter-zipkin/.eslintrc.js index 9dfe62f9b8c..36847df9fb1 100644 --- a/packages/opentelemetry-exporter-zipkin/.eslintrc.js +++ b/packages/opentelemetry-exporter-zipkin/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-propagator-b3/.eslintrc.js b/packages/opentelemetry-propagator-b3/.eslintrc.js index 9dfe62f9b8c..36847df9fb1 100644 --- a/packages/opentelemetry-propagator-b3/.eslintrc.js +++ b/packages/opentelemetry-propagator-b3/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-propagator-jaeger/.eslintrc.js b/packages/opentelemetry-propagator-jaeger/.eslintrc.js index b23ee98fc0f..3913d6d94b8 100644 --- a/packages/opentelemetry-propagator-jaeger/.eslintrc.js +++ b/packages/opentelemetry-propagator-jaeger/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "browser": true, }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-resources/.eslintrc.js b/packages/opentelemetry-resources/.eslintrc.js index 9dfe62f9b8c..36847df9fb1 100644 --- a/packages/opentelemetry-resources/.eslintrc.js +++ b/packages/opentelemetry-resources/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-sdk-trace-base/.eslintrc.js b/packages/opentelemetry-sdk-trace-base/.eslintrc.js index 9dfe62f9b8c..36847df9fb1 100644 --- a/packages/opentelemetry-sdk-trace-base/.eslintrc.js +++ b/packages/opentelemetry-sdk-trace-base/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-sdk-trace-node/.eslintrc.js b/packages/opentelemetry-sdk-trace-node/.eslintrc.js index f726f3becb6..3d9af536bb6 100644 --- a/packages/opentelemetry-sdk-trace-node/.eslintrc.js +++ b/packages/opentelemetry-sdk-trace-node/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-sdk-trace-web/.eslintrc.js b/packages/opentelemetry-sdk-trace-web/.eslintrc.js index 86d794e2f58..359356edd4f 100644 --- a/packages/opentelemetry-sdk-trace-web/.eslintrc.js +++ b/packages/opentelemetry-sdk-trace-web/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "browser": true, }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-semantic-conventions/.eslintrc.js b/packages/opentelemetry-semantic-conventions/.eslintrc.js index 9dfe62f9b8c..36847df9fb1 100644 --- a/packages/opentelemetry-semantic-conventions/.eslintrc.js +++ b/packages/opentelemetry-semantic-conventions/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/opentelemetry-shim-opentracing/.eslintrc.js b/packages/opentelemetry-shim-opentracing/.eslintrc.js index f726f3becb6..3d9af536bb6 100644 --- a/packages/opentelemetry-shim-opentracing/.eslintrc.js +++ b/packages/opentelemetry-shim-opentracing/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/sdk-metrics/.eslintrc.js b/packages/sdk-metrics/.eslintrc.js index f726f3becb6..3d9af536bb6 100644 --- a/packages/sdk-metrics/.eslintrc.js +++ b/packages/sdk-metrics/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/packages/template/.eslintrc.js b/packages/template/.eslintrc.js index 9dfe62f9b8c..36847df9fb1 100644 --- a/packages/template/.eslintrc.js +++ b/packages/template/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } From 68039c55ecc7f8ff6af15c5c430d9202b6bf9f8b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 6 Jul 2023 15:27:02 +0200 Subject: [PATCH 05/70] chore(deps): update dependency eslint to v8.44.0 (#3916) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a1fbadf6d00..2890bbe58c0 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "5.59.11", "@typescript-eslint/parser": "5.59.11", - "eslint": "8.43.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-node": "11.1.0", From cab31aadb14c3e3ff3dda3e501234e717f1461e2 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 7 Jul 2023 10:10:00 +0200 Subject: [PATCH 06/70] chore(deps): update all patch versions (#3972) --- api/package.json | 2 +- experimental/packages/api-events/package.json | 2 +- experimental/packages/api-logs/package.json | 2 +- .../packages/exporter-logs-otlp-grpc/package.json | 2 +- .../packages/exporter-logs-otlp-http/package.json | 4 ++-- .../packages/exporter-logs-otlp-proto/package.json | 4 ++-- .../packages/exporter-trace-otlp-grpc/package.json | 2 +- .../packages/exporter-trace-otlp-http/package.json | 4 ++-- .../packages/exporter-trace-otlp-proto/package.json | 4 ++-- .../packages/opentelemetry-browser-detector/package.json | 4 ++-- .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-http/package.json | 4 ++-- .../package.json | 2 +- .../opentelemetry-instrumentation-fetch/package.json | 4 ++-- .../package.json | 4 ++-- .../packages/opentelemetry-instrumentation/package.json | 4 ++-- experimental/packages/otlp-exporter-base/package.json | 4 ++-- .../packages/otlp-grpc-exporter-base/package.json | 2 +- .../packages/otlp-proto-exporter-base/package.json | 2 +- experimental/packages/otlp-transformer/package.json | 2 +- experimental/packages/sdk-logs/package.json | 4 ++-- packages/opentelemetry-context-zone-peer-dep/package.json | 4 ++-- packages/opentelemetry-context-zone/package.json | 2 +- packages/opentelemetry-core/package.json | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 4 ++-- packages/opentelemetry-propagator-jaeger/package.json | 2 +- packages/opentelemetry-resources/package.json | 2 +- packages/opentelemetry-sdk-trace-base/package.json | 2 +- packages/opentelemetry-sdk-trace-web/package.json | 4 ++-- packages/sdk-metrics/package.json | 4 ++-- selenium-tests/package.json | 8 ++++---- 31 files changed, 49 insertions(+), 49 deletions(-) diff --git a/api/package.json b/api/package.json index 296c86d4c8b..e8952c3cf18 100644 --- a/api/package.json +++ b/api/package.json @@ -71,7 +71,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index 4b3f8660cca..fe43dbc6943 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -73,7 +73,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 315534d6bd4..02cc0bc2b0b 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -73,7 +73,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index 9a8244e50e0..1a71d47cf87 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/api-logs": "0.41.0", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index b29e26ec07d..459612e2c0b 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -71,7 +71,7 @@ ], "sideEffects": false, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api-logs": "0.41.0", "@opentelemetry/resources": "1.15.0", "@types/mocha": "10.0.1", @@ -85,7 +85,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 5935d171918..a166f624162 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -74,7 +74,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 2cf8e237a6f..524adb1065a 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-exporter-base": "0.41.0", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index ce26e946308..cdb697283a4 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -76,7 +76,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index a812a1e7ca6..ef8f876acf3 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -62,7 +62,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -73,7 +73,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 5c20aa95b06..29373f30592 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -63,7 +63,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 380c0e212ea..15624bac4ce 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 6190a4144e3..1e696f52700 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -76,7 +76,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 440af69cb01..2168d2864e4 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index f641b9ec494..c1213ea31a7 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": "1.4.1", "@opentelemetry/context-zone": "1.15.0", "@opentelemetry/propagator-b3": "1.15.0", @@ -69,7 +69,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index f628c633ef8..c7179d59d34 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": "1.4.1", "@opentelemetry/context-zone": "1.15.0", "@opentelemetry/propagator-b3": "1.15.0", @@ -69,7 +69,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 4141beed00b..b788dea267f 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -82,7 +82,7 @@ "@opentelemetry/api": "^1.3.0" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": "1.4.1", "@opentelemetry/sdk-metrics": "1.15.0", "@types/mocha": "10.0.1", @@ -97,7 +97,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 77c49bfaa27..142f9ca8866 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -65,7 +65,7 @@ "tslib": "^2.3.1" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.8", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -75,7 +75,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index c8fcd6fcdaa..0610cb9d4fc 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-transformer": "0.41.0", "@opentelemetry/resources": "1.15.0", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index fb8a8ce047d..a764299858f 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -59,7 +59,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index 6c020a16f42..ca8d12685f5 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -65,7 +65,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 898bb86bedf..106a3dbf4a3 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -74,7 +74,7 @@ "devDependencies": { "@opentelemetry/api": ">=1.4.0 <1.5.0", "@opentelemetry/api-logs": "0.41.0", - "@babel/core": "7.22.5", + "@babel/core": "7.22.8", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -83,7 +83,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index fa1ef04204f..8026461c6fc 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -66,7 +66,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index b2735c90140..70f79503fbb 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -50,7 +50,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 70d32b5dec0..1e9d1d8c662 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -74,7 +74,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index e8bd41837ee..4b979ec13cf 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -60,7 +60,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": "^1.0.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -72,7 +72,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index fdabf7a7e8d..f110f2d8d21 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -64,7 +64,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index a5862f44d53..997635f42bd 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -71,7 +71,7 @@ "cross-var": "1.1.0", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 884e0e8c73c..4c306805cf1 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -75,7 +75,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index ab668e3c47f..f7dd504e762 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -55,7 +55,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@opentelemetry/api": ">=1.0.0 <1.5.0", "@opentelemetry/context-zone": "1.15.0", "@opentelemetry/propagator-b3": "1.15.0", @@ -71,7 +71,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-jquery": "0.2.4", "karma-mocha": "2.0.1", "karma-mocha-webworker": "1.3.0", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index e7d695ca934..f85e67fafc5 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -56,7 +56,7 @@ "devDependencies": { "@opentelemetry/api": ">=1.3.0 <1.5.0", "@types/lodash.merge": "4.6.7", - "@babel/core": "7.22.5", + "@babel/core": "7.22.8", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -65,7 +65,7 @@ "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.0", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 829be06e364..5c0fe40dad4 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -31,11 +31,11 @@ "access": "restricted" }, "devDependencies": { - "@babel/core": "7.22.6", + "@babel/core": "7.22.8", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-proposal-decorators": "7.22.6", - "@babel/plugin-transform-runtime": "7.22.6", - "@babel/preset-env": "7.22.6", + "@babel/plugin-proposal-decorators": "7.22.7", + "@babel/plugin-transform-runtime": "7.22.7", + "@babel/preset-env": "7.22.7", "@opentelemetry/api": "^1.0.0", "babel-loader": "8.3.0", "babel-polyfill": "6.26.0", From 6d13eb437932e46e021c840ac5d327d556eb3c52 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 10 Jul 2023 10:36:44 +0200 Subject: [PATCH 07/70] chore(deps): update dependency semver to v7.5.4 (#3977) --- .../packages/opentelemetry-instrumentation-grpc/package.json | 2 +- experimental/packages/opentelemetry-sdk-node/package.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index ca20eade98a..10019d25cca 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -61,7 +61,7 @@ "lerna": "7.1.1", "mocha": "10.2.0", "nyc": "15.1.0", - "semver": "7.5.3", + "semver": "7.5.4", "sinon": "15.1.2", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 9ec166cb751..dcf827d0fd5 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -73,7 +73,7 @@ "lerna": "7.1.1", "mocha": "10.2.0", "nyc": "15.1.0", - "semver": "7.5.3", + "semver": "7.5.4", "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", diff --git a/package.json b/package.json index 2890bbe58c0..2b8572602f8 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "linkinator": "5.0.1", "markdownlint-cli": "0.35.0", "prettier": "2.8.8", - "semver": "7.5.3", + "semver": "7.5.4", "typedoc": "0.22.18", "typedoc-plugin-missing-exports": "1.0.0", "typedoc-plugin-resolve-crossmodule-references": "0.2.2", From fc28665d090f4426ece597ea44546dbc1d95d665 Mon Sep 17 00:00:00 2001 From: Jamie Danielson Date: Mon, 10 Jul 2023 11:31:57 -0400 Subject: [PATCH 08/70] docs(sdk-metrics): add example of exponential histogram metric (#3855) Co-authored-by: Chengzhong Wu Co-authored-by: Marc Pichler --- doc/metrics.md | 8 ++--- examples/otlp-exporter-node/metrics.js | 44 ++++++++++++++++++++++---- experimental/CHANGELOG.md | 4 +++ 3 files changed, 45 insertions(+), 11 deletions(-) diff --git a/doc/metrics.md b/doc/metrics.md index 7162f43638f..e2f2b5a1472 100644 --- a/doc/metrics.md +++ b/doc/metrics.md @@ -20,7 +20,7 @@ _Metrics API Reference: { requestCounter.add(1, attributes); upDownCounter.add(Math.random() > 0.5 ? 1 : -1, attributes); histogram.record(Math.random(), attributes); + exponentialHistogram.record(Math.random(), attributes); }, 1000); diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 7d22becab6b..762a2b9aa64 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to experimental packages in this project will be documented ## Unreleased +### :books: (Refine Doc) + +* docs(sdk-metrics): add example of exponential histogram metric [#3855](https://github.com/open-telemetry/opentelemetry-js/pull/3855) @JamieDanielson + ### :boom: Breaking Change ### :rocket: (Enhancement) From 552abc822178212edf48e56123928d86bad6f092 Mon Sep 17 00:00:00 2001 From: Pushpak Prateek <56984884+psk001@users.noreply.github.com> Date: Mon, 10 Jul 2023 22:25:53 +0530 Subject: [PATCH 09/70] feat(sdk-node): logs support added (#3969) --- experimental/CHANGELOG.md | 2 + .../opentelemetry-sdk-node/package.json | 2 + .../opentelemetry-sdk-node/src/index.ts | 1 + .../opentelemetry-sdk-node/src/sdk.ts | 58 +++++++++++++++++ .../opentelemetry-sdk-node/src/types.ts | 2 + .../opentelemetry-sdk-node/test/sdk.test.ts | 63 +++++++++++++++++++ .../opentelemetry-sdk-node/tsconfig.json | 6 ++ 7 files changed, 134 insertions(+) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 762a2b9aa64..c6299318870 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -12,6 +12,8 @@ All notable changes to experimental packages in this project will be documented ### :rocket: (Enhancement) +* feat(sdk-node): logs support added [#3969](https://github.com/open-telemetry/opentelemetry-js/pull/3969) @psk001 + ### :bug: (Bug Fix) ### :books: (Refine Doc) diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index dcf827d0fd5..a99bab01a96 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -44,6 +44,7 @@ "access": "public" }, "dependencies": { + "@opentelemetry/api-logs":"0.41.0", "@opentelemetry/core": "1.15.0", "@opentelemetry/exporter-jaeger": "1.15.0", "@opentelemetry/exporter-trace-otlp-grpc": "0.41.0", @@ -52,6 +53,7 @@ "@opentelemetry/exporter-zipkin": "1.15.0", "@opentelemetry/instrumentation": "0.41.0", "@opentelemetry/resources": "1.15.0", + "@opentelemetry/sdk-logs":"0.41.0", "@opentelemetry/sdk-metrics": "1.15.0", "@opentelemetry/sdk-trace-base": "1.15.0", "@opentelemetry/sdk-trace-node": "1.15.0", diff --git a/experimental/packages/opentelemetry-sdk-node/src/index.ts b/experimental/packages/opentelemetry-sdk-node/src/index.ts index d2461742083..891288ee6e6 100644 --- a/experimental/packages/opentelemetry-sdk-node/src/index.ts +++ b/experimental/packages/opentelemetry-sdk-node/src/index.ts @@ -17,6 +17,7 @@ export * as api from '@opentelemetry/api'; export * as contextBase from '@opentelemetry/api'; export * as core from '@opentelemetry/core'; +export * as logs from '@opentelemetry/sdk-logs'; export * as metrics from '@opentelemetry/sdk-metrics'; export * as node from '@opentelemetry/sdk-trace-node'; export * as resources from '@opentelemetry/resources'; diff --git a/experimental/packages/opentelemetry-sdk-node/src/sdk.ts b/experimental/packages/opentelemetry-sdk-node/src/sdk.ts index 07921a88b90..8b96dddeab8 100644 --- a/experimental/packages/opentelemetry-sdk-node/src/sdk.ts +++ b/experimental/packages/opentelemetry-sdk-node/src/sdk.ts @@ -21,6 +21,7 @@ import { diag, DiagConsoleLogger, } from '@opentelemetry/api'; +import { logs } from '@opentelemetry/api-logs'; import { InstrumentationOption, registerInstrumentations, @@ -35,6 +36,7 @@ import { Resource, ResourceDetectionConfig, } from '@opentelemetry/resources'; +import { LogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs'; import { MeterProvider, MetricReader, View } from '@opentelemetry/sdk-metrics'; import { BatchSpanProcessor, @@ -63,6 +65,13 @@ export type MeterProviderConfig = { views?: View[]; }; +export type LoggerProviderConfig = { + /** + * Reference to the LoggerRecordProcessor instance by the NodeSDK + */ + logRecordProcessor: LogRecordProcessor; +}; + export class NodeSDK { private _tracerProviderConfig?: { tracerConfig: NodeTracerConfig; @@ -70,6 +79,7 @@ export class NodeSDK { contextManager?: ContextManager; textMapPropagator?: TextMapPropagator; }; + private _loggerProviderConfig?: LoggerProviderConfig; private _meterProviderConfig?: MeterProviderConfig; private _instrumentations: InstrumentationOption[]; @@ -79,6 +89,7 @@ export class NodeSDK { private _autoDetectResources: boolean; private _tracerProvider?: NodeTracerProvider | TracerProviderWithEnvExporters; + private _loggerProvider?: LoggerProvider; private _meterProvider?: MeterProvider; private _serviceName?: string; @@ -140,6 +151,13 @@ export class NodeSDK { ); } + if (configuration.logRecordProcessor) { + const loggerProviderConfig: LoggerProviderConfig = { + logRecordProcessor: configuration.logRecordProcessor, + }; + this.configureLoggerProvider(loggerProviderConfig); + } + if (configuration.metricReader || configuration.views) { const meterProviderConfig: MeterProviderConfig = {}; if (configuration.metricReader) { @@ -175,6 +193,30 @@ export class NodeSDK { }; } + /**Set configurations needed to register a LoggerProvider */ + public configureLoggerProvider(config: LoggerProviderConfig): void { + // nothing is set yet, we can set config and then return + if (this._loggerProviderConfig == null) { + this._loggerProviderConfig = config; + return; + } + + // make sure we do not override existing logRecordProcessor with other logRecordProcessors. + if ( + this._loggerProviderConfig.logRecordProcessor != null && + config.logRecordProcessor != null + ) { + throw new Error( + 'LogRecordProcessor passed but LogRecordProcessor has already been configured.' + ); + } + + // set logRecordProcessor, but make sure we do not override existing logRecordProcessors with null/undefined. + if (config.logRecordProcessor != null) { + this._loggerProviderConfig.logRecordProcessor = config.logRecordProcessor; + } + } + /** Set configurations needed to register a MeterProvider */ public configureMeterProvider(config: MeterProviderConfig): void { // nothing is set yet, we can set config and return. @@ -269,6 +311,19 @@ export class NodeSDK { propagator: this._tracerProviderConfig?.textMapPropagator, }); + if (this._loggerProviderConfig) { + const loggerProvider = new LoggerProvider({ + resource: this._resource, + }); + loggerProvider.addLogRecordProcessor( + this._loggerProviderConfig.logRecordProcessor + ); + + this._loggerProvider = loggerProvider; + + logs.setGlobalLoggerProvider(loggerProvider); + } + if (this._meterProviderConfig) { const meterProvider = new MeterProvider({ resource: this._resource, @@ -299,6 +354,9 @@ export class NodeSDK { if (this._tracerProvider) { promises.push(this._tracerProvider.shutdown()); } + if (this._loggerProvider) { + promises.push(this._loggerProvider.shutdown()); + } if (this._meterProvider) { promises.push(this._meterProvider.shutdown()); } diff --git a/experimental/packages/opentelemetry-sdk-node/src/types.ts b/experimental/packages/opentelemetry-sdk-node/src/types.ts index 03efc311420..9292e0ae70e 100644 --- a/experimental/packages/opentelemetry-sdk-node/src/types.ts +++ b/experimental/packages/opentelemetry-sdk-node/src/types.ts @@ -18,6 +18,7 @@ import type { ContextManager } from '@opentelemetry/api'; import { TextMapPropagator } from '@opentelemetry/api'; import { InstrumentationOption } from '@opentelemetry/instrumentation'; import { Detector, DetectorSync, IResource } from '@opentelemetry/resources'; +import { LogRecordProcessor } from '@opentelemetry/sdk-logs'; import { MetricReader, View } from '@opentelemetry/sdk-metrics'; import { Sampler, @@ -31,6 +32,7 @@ export interface NodeSDKConfiguration { autoDetectResources: boolean; contextManager: ContextManager; textMapPropagator: TextMapPropagator; + logRecordProcessor: LogRecordProcessor; metricReader: MetricReader; views: View[]; instrumentations: InstrumentationOption[]; diff --git a/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts b/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts index 7a385a7604d..6fb76f3dadb 100644 --- a/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts +++ b/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts @@ -59,6 +59,12 @@ import { Resource, } from '@opentelemetry/resources'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; +import { logs } from '@opentelemetry/api-logs'; +import { + SimpleLogRecordProcessor, + InMemoryLogRecordExporter, + LoggerProvider, +} from '@opentelemetry/sdk-logs'; const DefaultContextManager = semver.gte(process.version, '14.8.0') ? AsyncLocalStorageContextManager @@ -112,6 +118,7 @@ describe('Node SDK', () => { 'tracer provider should not have changed' ); assert.ok(!(metrics.getMeterProvider() instanceof MeterProvider)); + assert.ok(!(logs.getLoggerProvider() instanceof LoggerProvider)); delete env.OTEL_TRACES_EXPORTER; }); @@ -233,6 +240,40 @@ describe('Node SDK', () => { await sdk.shutdown(); delete env.OTEL_TRACES_EXPORTER; }); + + it('should register a logger provider if a log record processor is provided', async () => { + env.OTEL_TRACES_EXPORTER = 'none'; + const logRecordExporter = new InMemoryLogRecordExporter(); + const logRecordProcessor = new SimpleLogRecordProcessor( + logRecordExporter + ); + const sdk = new NodeSDK({ + logRecordProcessor: logRecordProcessor, + autoDetectResources: false, + }); + + sdk.start(); + + assert.strictEqual( + context['_getContextManager'](), + ctxManager, + 'context manager should not change' + ); + assert.strictEqual( + propagation['_getGlobalPropagator'](), + propagator, + 'propagator should not change' + ); + assert.strictEqual( + (trace.getTracerProvider() as ProxyTracerProvider).getDelegate(), + delegate, + 'tracer provider should not have changed' + ); + + assert.ok(logs.getLoggerProvider() instanceof LoggerProvider); + await sdk.shutdown(); + delete env.OTEL_TRACES_EXPORTER; + }); }); async function waitForNumberOfMetrics( @@ -406,6 +447,28 @@ describe('Node SDK', () => { ); }); + it('should throw error when calling configureLoggerProvider when logRecordProcessor is already configured', () => { + const logRecordExporter = new InMemoryLogRecordExporter(); + const logRecordProcessor = new SimpleLogRecordProcessor(logRecordExporter); + const sdk = new NodeSDK({ + logRecordProcessor: logRecordProcessor, + autoDetectResources: false, + }); + + assert.throws( + () => { + sdk.configureLoggerProvider({ + logRecordProcessor: logRecordProcessor, + }); + }, + (error: Error) => { + return error.message.includes( + 'LogRecordProcessor passed but LogRecordProcessor has already been configured.' + ); + } + ); + }); + describe('detectResources', async () => { beforeEach(() => { process.env.OTEL_RESOURCE_ATTRIBUTES = diff --git a/experimental/packages/opentelemetry-sdk-node/tsconfig.json b/experimental/packages/opentelemetry-sdk-node/tsconfig.json index add730f8bcf..4091bf66e9b 100644 --- a/experimental/packages/opentelemetry-sdk-node/tsconfig.json +++ b/experimental/packages/opentelemetry-sdk-node/tsconfig.json @@ -12,6 +12,9 @@ { "path": "../../../api" }, + { + "path": "../../packages/api-logs" + }, { "path": "../../../packages/opentelemetry-context-async-hooks" }, @@ -36,6 +39,9 @@ { "path": "../../../packages/opentelemetry-semantic-conventions" }, + { + "path": "../../packages/sdk-logs" + }, { "path": "../../../packages/sdk-metrics" }, From 013695d45d5c77dfee658ec1ee0675a87977657d Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 11 Jul 2023 08:51:11 +0200 Subject: [PATCH 10/70] docs(api-logs): add disclaimers (#3979) --- experimental/packages/api-logs/README.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/experimental/packages/api-logs/README.md b/experimental/packages/api-logs/README.md index b36d5bf06e3..a4e3459f017 100644 --- a/experimental/packages/api-logs/README.md +++ b/experimental/packages/api-logs/README.md @@ -1,13 +1,19 @@ -# OpenTelemetry API for JavaScript +# OpenTelemetry Logs Bridge API for JavaScript [![NPM Published Version][npm-img]][npm-url] [![Apache License][license-image]][license-image] -This package provides everything needed to interact with the unstable OpenTelemetry Logs API, including all TypeScript interfaces, enums, and no-op implementations. It is intended for use both on the server and in the browser. +**Note: This is an experimental package under active development. New releases may include breaking changes.** -## Beta Software - Use at your own risk +This package provides everything needed to interact with the unstable OpenTelemetry Logs Bridge API, including all TypeScript interfaces, enums, and no-op implementations. It is intended for use both on the server and in the browser. -The logs API is considered alpha software and there is no guarantee of stability or long-term support. When the API is stabilized, it will be made available and supported long-term in the `@opentelemetry/api` package and this package will be deprecated. +**Note: This module defines a log backend API. The API is not intended to be called by application developers directly. +It is provided for logging library authors to build log appenders, which use this API to bridge between existing +logging libraries and the OpenTelemetry log data model.** + +## Alpha Software - Use at your own risk + +The Logs Bridge API is considered alpha software and there is no guarantee of stability or long-term support. When the API is stabilized, it will be made available and supported long-term in the `@opentelemetry/api` package and this package will be deprecated. ## Quick Start From 5352cc78b6e61a4816977e250f5e5fa279e5550f Mon Sep 17 00:00:00 2001 From: Chengzhong Wu Date: Thu, 13 Jul 2023 18:58:25 +0800 Subject: [PATCH 11/70] chore: apply update-ts-configs (#3987) --- .../packages/opentelemetry-sdk-node/tsconfig.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/experimental/packages/opentelemetry-sdk-node/tsconfig.json b/experimental/packages/opentelemetry-sdk-node/tsconfig.json index 4091bf66e9b..94c80b88469 100644 --- a/experimental/packages/opentelemetry-sdk-node/tsconfig.json +++ b/experimental/packages/opentelemetry-sdk-node/tsconfig.json @@ -12,9 +12,6 @@ { "path": "../../../api" }, - { - "path": "../../packages/api-logs" - }, { "path": "../../../packages/opentelemetry-context-async-hooks" }, @@ -40,10 +37,10 @@ "path": "../../../packages/opentelemetry-semantic-conventions" }, { - "path": "../../packages/sdk-logs" + "path": "../../../packages/sdk-metrics" }, { - "path": "../../../packages/sdk-metrics" + "path": "../api-logs" }, { "path": "../exporter-trace-otlp-grpc" @@ -56,6 +53,9 @@ }, { "path": "../opentelemetry-instrumentation" + }, + { + "path": "../sdk-logs" } ] } From 65483a4fe93ff6fc265bbe469150b8b25c68562d Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 13 Jul 2023 15:49:25 +0200 Subject: [PATCH 12/70] chore(deps): update all patch versions (#3984) --- api/package.json | 2 +- experimental/packages/api-events/package.json | 2 +- experimental/packages/api-logs/package.json | 2 +- experimental/packages/exporter-logs-otlp-grpc/package.json | 4 ++-- experimental/packages/exporter-logs-otlp-http/package.json | 4 ++-- experimental/packages/exporter-logs-otlp-proto/package.json | 4 ++-- experimental/packages/exporter-trace-otlp-grpc/package.json | 4 ++-- experimental/packages/exporter-trace-otlp-http/package.json | 4 ++-- .../packages/exporter-trace-otlp-proto/package.json | 4 ++-- .../packages/opentelemetry-browser-detector/package.json | 4 ++-- .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 4 ++-- .../opentelemetry-exporter-metrics-otlp-http/package.json | 4 ++-- .../opentelemetry-exporter-metrics-otlp-proto/package.json | 4 ++-- .../packages/opentelemetry-exporter-prometheus/package.json | 2 +- .../opentelemetry-instrumentation-fetch/package.json | 4 ++-- .../opentelemetry-instrumentation-grpc/package.json | 2 +- .../opentelemetry-instrumentation-http/package.json | 2 +- .../package.json | 4 ++-- .../packages/opentelemetry-instrumentation/package.json | 4 ++-- experimental/packages/opentelemetry-sdk-node/package.json | 2 +- experimental/packages/otlp-exporter-base/package.json | 4 ++-- experimental/packages/otlp-grpc-exporter-base/package.json | 4 ++-- experimental/packages/otlp-proto-exporter-base/package.json | 4 ++-- experimental/packages/otlp-transformer/package.json | 2 +- experimental/packages/sdk-logs/package.json | 4 ++-- experimental/packages/shim-opencensus/package.json | 2 +- package.json | 4 ++-- packages/opentelemetry-context-async-hooks/package.json | 2 +- packages/opentelemetry-context-zone-peer-dep/package.json | 4 ++-- packages/opentelemetry-context-zone/package.json | 4 ++-- packages/opentelemetry-core/package.json | 2 +- packages/opentelemetry-exporter-jaeger/package.json | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 4 ++-- packages/opentelemetry-propagator-b3/package.json | 2 +- packages/opentelemetry-propagator-jaeger/package.json | 2 +- packages/opentelemetry-resources/package.json | 2 +- packages/opentelemetry-sdk-trace-base/package.json | 2 +- packages/opentelemetry-sdk-trace-node/package.json | 2 +- packages/opentelemetry-sdk-trace-web/package.json | 4 ++-- packages/opentelemetry-semantic-conventions/package.json | 2 +- packages/opentelemetry-shim-opentracing/package.json | 2 +- packages/sdk-metrics/package.json | 4 ++-- packages/template/package.json | 2 +- selenium-tests/package.json | 6 +++--- 44 files changed, 69 insertions(+), 69 deletions(-) diff --git a/api/package.json b/api/package.json index e8952c3cf18..d78638160d5 100644 --- a/api/package.json +++ b/api/package.json @@ -76,7 +76,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "memfs": "3.5.3", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index fe43dbc6943..e2fed0e67e0 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -77,7 +77,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 02cc0bc2b0b..15f4d1c8632 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -77,7 +77,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index 1a71d47cf87..643ab186fc1 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/api-logs": "0.41.0", @@ -60,7 +60,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 459612e2c0b..b77b63df221 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -71,7 +71,7 @@ ], "sideEffects": false, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api-logs": "0.41.0", "@opentelemetry/resources": "1.15.0", "@types/mocha": "10.0.1", @@ -89,7 +89,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index a166f624162..355e5333da7 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -78,7 +78,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 524adb1065a..22a4eae7032 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-exporter-base": "0.41.0", @@ -57,7 +57,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index cdb697283a4..56e01988a6b 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -80,7 +80,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index ef8f876acf3..96c327b60fa 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -62,7 +62,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -77,7 +77,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 29373f30592..357f6306117 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -67,7 +67,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 15624bac4ce..4c239a6e261 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", @@ -56,7 +56,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 1e696f52700..89017dfb0be 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -80,7 +80,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 2168d2864e4..d98c421bc1f 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -55,7 +55,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index c9ffe2cdccd..5b44a67c37d 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -50,7 +50,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index c1213ea31a7..b36c60a677e 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", "@opentelemetry/context-zone": "1.15.0", "@opentelemetry/propagator-b3": "1.15.0", @@ -73,7 +73,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 10019d25cca..ac047252ee2 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -58,7 +58,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "semver": "7.5.4", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 93ed303fa6e..d765adc5281 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -59,7 +59,7 @@ "axios": "1.4.0", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index c7179d59d34..71585b4e00d 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", "@opentelemetry/context-zone": "1.15.0", "@opentelemetry/propagator-b3": "1.15.0", @@ -73,7 +73,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index b788dea267f..46ba9af641c 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -82,7 +82,7 @@ "@opentelemetry/api": "^1.3.0" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", "@opentelemetry/sdk-metrics": "1.15.0", "@types/mocha": "10.0.1", @@ -101,7 +101,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index a99bab01a96..8e6f97f27a3 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -72,7 +72,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "semver": "7.5.4", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 142f9ca8866..687fcdf505e 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -65,7 +65,7 @@ "tslib": "^2.3.1" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -79,7 +79,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 0610cb9d4fc..232b83bf6c8 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-transformer": "0.41.0", "@opentelemetry/resources": "1.15.0", @@ -59,7 +59,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "protobufjs-cli": "1.1.1", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index a764299858f..f1fd58623cd 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -59,14 +59,14 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "protobufjs-cli": "1.1.1", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index ca8d12685f5..3a53906d506 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -69,7 +69,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 106a3dbf4a3..14a18889e8d 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -74,7 +74,7 @@ "devDependencies": { "@opentelemetry/api": ">=1.4.0 <1.5.0", "@opentelemetry/api-logs": "0.41.0", - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -87,7 +87,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index b57628d38f1..d5ebb224de1 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -57,7 +57,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/package.json b/package.json index 2b8572602f8..8671540526d 100644 --- a/package.json +++ b/package.json @@ -71,8 +71,8 @@ "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "4.2.1", "gh-pages": "5.0.0", - "lerna": "7.1.1", - "@lerna/legacy-package-management": "7.1.1", + "lerna": "7.1.3", + "@lerna/legacy-package-management": "7.1.3", "linkinator": "5.0.1", "markdownlint-cli": "0.35.0", "prettier": "2.8.8", diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 23e3e65eebe..a1073523bb7 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -52,7 +52,7 @@ "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 8026461c6fc..515059557f2 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -70,7 +70,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 70f79503fbb..342c580ff92 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -50,7 +50,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -63,7 +63,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 1e9d1d8c662..c8ba0b3647e 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -78,7 +78,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 89e57e4c7b0..9419fe10408 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -51,7 +51,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 4b979ec13cf..d4cdf4472d5 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -60,7 +60,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": "^1.0.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -76,7 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index 1cb95ba6b1e..69fce8a126c 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -63,7 +63,7 @@ "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index f110f2d8d21..ef8d9915ab6 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -68,7 +68,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 997635f42bd..a56531034ad 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -76,7 +76,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 4c306805cf1..d220f8cae74 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -80,7 +80,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index 1608b10f301..7afeef5bc3b 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -54,7 +54,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index f7dd504e762..4c1c347cd01 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -55,7 +55,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@opentelemetry/api": ">=1.0.0 <1.5.0", "@opentelemetry/context-zone": "1.15.0", "@opentelemetry/propagator-b3": "1.15.0", @@ -77,7 +77,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index 93cff0e7cf1..6ccbe2ddbed 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -54,7 +54,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index 0555f0d708f..6f28c3c067a 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -50,7 +50,7 @@ "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "ts-mocha": "10.0.0", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index f85e67fafc5..0ce67e77d43 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -56,7 +56,7 @@ "devDependencies": { "@opentelemetry/api": ">=1.3.0 <1.5.0", "@types/lodash.merge": "4.6.7", - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -69,7 +69,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.1", + "lerna": "7.1.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/template/package.json b/packages/template/package.json index 7d04d854ace..89060412790 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -80,7 +80,7 @@ "devDependencies": { "@types/node": "18.6.5", "cross-var": "1.1.0", - "lerna": "7.1.1", + "lerna": "7.1.3", "typescript": "4.4.4" }, "dependencies": { diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 5c0fe40dad4..16f2d6e9bcd 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -31,11 +31,11 @@ "access": "restricted" }, "devDependencies": { - "@babel/core": "7.22.8", + "@babel/core": "7.22.9", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-decorators": "7.22.7", - "@babel/plugin-transform-runtime": "7.22.7", - "@babel/preset-env": "7.22.7", + "@babel/plugin-transform-runtime": "7.22.9", + "@babel/preset-env": "7.22.9", "@opentelemetry/api": "^1.0.0", "babel-loader": "8.3.0", "babel-polyfill": "6.26.0", From 87f21ef8aecaa1e52ff9200a99497276ffa2956b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 14 Jul 2023 12:49:00 +0200 Subject: [PATCH 13/70] chore(deps): update dependency nock to v13.3.2 (#3994) --- .../packages/opentelemetry-instrumentation-http/package.json | 2 +- packages/opentelemetry-exporter-jaeger/package.json | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- packages/opentelemetry-resources/package.json | 2 +- packages/opentelemetry-semantic-conventions/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index d765adc5281..2c5d28cd7f5 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -61,7 +61,7 @@ "cross-var": "1.1.0", "lerna": "7.1.3", "mocha": "10.2.0", - "nock": "13.3.1", + "nock": "13.3.2", "nyc": "15.1.0", "request": "2.88.2", "request-promise-native": "1.0.9", diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 9419fe10408..2158bd30663 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -53,7 +53,7 @@ "cross-var": "1.1.0", "lerna": "7.1.3", "mocha": "10.2.0", - "nock": "13.3.1", + "nock": "13.3.2", "nyc": "15.1.0", "sinon": "15.1.2", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index d4cdf4472d5..6ef32c8de54 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -78,7 +78,7 @@ "karma-webpack": "4.0.2", "lerna": "7.1.3", "mocha": "10.2.0", - "nock": "13.3.1", + "nock": "13.3.2", "nyc": "15.1.0", "sinon": "15.1.2", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index a56531034ad..a121a1c4fd5 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -78,7 +78,7 @@ "karma-webpack": "4.0.2", "lerna": "7.1.3", "mocha": "10.2.0", - "nock": "13.3.1", + "nock": "13.3.2", "nyc": "15.1.0", "sinon": "15.1.2", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index 6ccbe2ddbed..29b28f22f43 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -56,7 +56,7 @@ "cross-var": "1.1.0", "lerna": "7.1.3", "mocha": "10.2.0", - "nock": "13.3.1", + "nock": "13.3.2", "nyc": "15.1.0", "sinon": "15.1.2", "ts-mocha": "10.0.0", From 0f20b2a974f7830929cd690affe0d9055304f1df Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 21 Jul 2023 09:41:09 -0400 Subject: [PATCH 14/70] Revert tslib #3914 (#4011) * Revert "feat(minification): Add noEmitHelpers, importHelpers and tslib as a dependency (#3914)" This reverts commit 74393ac6397dcb130b9d5dae35354a2bf9a0d2c3. * Changelog * Update CHANGELOG.md --- CHANGELOG.md | 3 +++ api/package.json | 3 --- examples/esm-http-ts/tsconfig.json | 3 +-- examples/opentelemetry-web/package.json | 3 +-- .../backwards-compatibility/node14/package.json | 3 +-- .../backwards-compatibility/node16/package.json | 3 +-- experimental/packages/api-events/package.json | 3 +-- experimental/packages/api-logs/package.json | 3 +-- .../packages/exporter-logs-otlp-grpc/package.json | 3 +-- .../packages/exporter-logs-otlp-http/package.json | 3 +-- .../packages/exporter-logs-otlp-proto/package.json | 3 +-- .../packages/exporter-trace-otlp-grpc/package.json | 3 +-- .../packages/exporter-trace-otlp-http/package.json | 3 +-- .../packages/exporter-trace-otlp-proto/package.json | 3 +-- .../opentelemetry-browser-detector/package.json | 3 +-- .../package.json | 3 +-- .../package.json | 3 +-- .../package.json | 3 +-- .../opentelemetry-exporter-prometheus/package.json | 3 +-- .../opentelemetry-instrumentation-fetch/package.json | 3 +-- .../opentelemetry-instrumentation-grpc/package.json | 3 +-- .../opentelemetry-instrumentation-http/package.json | 3 +-- .../package.json | 3 +-- .../opentelemetry-instrumentation/package.json | 3 +-- .../src/platform/browser/index.ts | 2 +- .../src/platform/index.ts | 8 +------- .../src/platform/node/index.ts | 11 ++++------- .../test/node/EsmInstrumentation.test.mjs | 2 +- .../packages/opentelemetry-sdk-node/package.json | 3 +-- experimental/packages/otlp-exporter-base/package.json | 3 +-- .../packages/otlp-grpc-exporter-base/package.json | 3 +-- .../packages/otlp-proto-exporter-base/package.json | 3 +-- experimental/packages/otlp-transformer/package.json | 3 +-- experimental/packages/sdk-logs/package.json | 3 +-- experimental/packages/shim-opencensus/package.json | 3 +-- .../propagation-validation-server/package.json | 3 +-- package.json | 3 +-- .../opentelemetry-context-async-hooks/package.json | 3 --- .../opentelemetry-context-zone-peer-dep/package.json | 3 --- packages/opentelemetry-context-zone/package.json | 1 - packages/opentelemetry-core/package.json | 3 +-- packages/opentelemetry-exporter-jaeger/package.json | 3 +-- packages/opentelemetry-exporter-zipkin/package.json | 3 +-- packages/opentelemetry-propagator-b3/package.json | 3 +-- packages/opentelemetry-propagator-jaeger/package.json | 3 +-- packages/opentelemetry-resources/package.json | 3 +-- packages/opentelemetry-sdk-trace-base/package.json | 3 +-- packages/opentelemetry-sdk-trace-node/package.json | 3 +-- packages/opentelemetry-sdk-trace-web/package.json | 3 +-- .../opentelemetry-semantic-conventions/package.json | 3 --- packages/opentelemetry-shim-opentracing/package.json | 3 +-- packages/sdk-metrics/package.json | 3 +-- packages/template/package.json | 3 --- tsconfig.base.json | 3 +-- 54 files changed, 53 insertions(+), 118 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f72946061b..b30dce0392d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,9 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) +* Revert "feat(minification): Add noEmitHelpers, importHelpers and tslib as a dependency (#3914)" + [#4011](https://github.com/open-telemetry/opentelemetry-js/pull/4011) @dyladan + ### :books: (Refine Doc) ### :house: (Internal) diff --git a/api/package.json b/api/package.json index d78638160d5..d857ae33f4d 100644 --- a/api/package.json +++ b/api/package.json @@ -87,9 +87,6 @@ "unionfs": "4.5.1", "webpack": "4.46.0" }, - "dependencies": { - "tslib": "^2.3.1" - }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/api", "sideEffects": false } diff --git a/examples/esm-http-ts/tsconfig.json b/examples/esm-http-ts/tsconfig.json index f7c20de0d14..5f821d66c7d 100644 --- a/examples/esm-http-ts/tsconfig.json +++ b/examples/esm-http-ts/tsconfig.json @@ -18,8 +18,7 @@ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, /* Completeness */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "importHelpers": true + "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, "include": ["**/*.ts", "**/*.js", "*.config.js"], "exclude": ["node_modules"] diff --git a/examples/opentelemetry-web/package.json b/examples/opentelemetry-web/package.json index 762f17d65f7..e57cc764a39 100644 --- a/examples/opentelemetry-web/package.json +++ b/examples/opentelemetry-web/package.json @@ -56,8 +56,7 @@ "@opentelemetry/sdk-metrics": "1.15.0", "@opentelemetry/sdk-trace-base": "1.15.0", "@opentelemetry/sdk-trace-web": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/tracer-web" } diff --git a/experimental/backwards-compatibility/node14/package.json b/experimental/backwards-compatibility/node14/package.json index 1fc32b91f50..9414b949f57 100644 --- a/experimental/backwards-compatibility/node14/package.json +++ b/experimental/backwards-compatibility/node14/package.json @@ -10,8 +10,7 @@ }, "dependencies": { "@opentelemetry/sdk-node": "0.41.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-trace-base": "1.15.0" }, "devDependencies": { "@types/node": "14.18.25", diff --git a/experimental/backwards-compatibility/node16/package.json b/experimental/backwards-compatibility/node16/package.json index 136ff5ff0ba..ed473eae27f 100644 --- a/experimental/backwards-compatibility/node16/package.json +++ b/experimental/backwards-compatibility/node16/package.json @@ -10,8 +10,7 @@ }, "dependencies": { "@opentelemetry/sdk-node": "0.41.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-trace-base": "1.15.0" }, "devDependencies": { "@types/node": "16.11.52", diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index e2fed0e67e0..dd4111bb3c0 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -61,8 +61,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/api": "^1.0.0", - "tslib": "^2.3.1" + "@opentelemetry/api": "^1.0.0" }, "devDependencies": { "@types/mocha": "10.0.1", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 15f4d1c8632..9bddeaa794b 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -61,8 +61,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/api": "^1.0.0", - "tslib": "^2.3.1" + "@opentelemetry/api": "^1.0.0" }, "devDependencies": { "@types/mocha": "10.0.1", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index 643ab186fc1..6a61908731d 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -76,8 +76,7 @@ "@opentelemetry/core": "1.15.0", "@opentelemetry/otlp-grpc-exporter-base": "0.41.0", "@opentelemetry/otlp-transformer": "0.41.0", - "@opentelemetry/sdk-logs": "0.41.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-logs": "0.41.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index b77b63df221..428d2ed878b 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -107,7 +107,6 @@ "@opentelemetry/core": "1.15.0", "@opentelemetry/otlp-exporter-base": "0.41.0", "@opentelemetry/otlp-transformer": "0.41.0", - "@opentelemetry/sdk-logs": "0.41.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-logs": "0.41.0" } } diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 355e5333da7..6047b0bd62b 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -100,8 +100,7 @@ "@opentelemetry/otlp-transformer": "0.41.0", "@opentelemetry/resources": "1.15.0", "@opentelemetry/sdk-logs": "0.41.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-trace-base": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-proto", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 22a4eae7032..4c89ede04ee 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -74,8 +74,7 @@ "@opentelemetry/otlp-grpc-exporter-base": "0.41.0", "@opentelemetry/otlp-transformer": "0.41.0", "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-trace-base": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 56e01988a6b..631b0ac6d5d 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -99,8 +99,7 @@ "@opentelemetry/otlp-exporter-base": "0.41.0", "@opentelemetry/otlp-transformer": "0.41.0", "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-trace-base": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-http", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index 96c327b60fa..84a44cb055c 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -97,8 +97,7 @@ "@opentelemetry/otlp-proto-exporter-base": "0.41.0", "@opentelemetry/otlp-transformer": "0.41.0", "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-trace-base": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-proto", "sideEffects": false diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 357f6306117..9c90b945e47 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -83,8 +83,7 @@ }, "dependencies": { "@opentelemetry/resources": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/browser-detector" } diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 4c239a6e261..414dae93541 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -74,8 +74,7 @@ "@opentelemetry/otlp-grpc-exporter-base": "0.41.0", "@opentelemetry/otlp-transformer": "0.41.0", "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-metrics": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-metrics": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 89017dfb0be..6f83683c860 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -99,8 +99,7 @@ "@opentelemetry/otlp-exporter-base": "0.41.0", "@opentelemetry/otlp-transformer": "0.41.0", "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-metrics": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-metrics": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-http", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index d98c421bc1f..c92aaae08b9 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -73,8 +73,7 @@ "@opentelemetry/otlp-proto-exporter-base": "0.41.0", "@opentelemetry/otlp-transformer": "0.41.0", "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-metrics": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-metrics": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-proto", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index 5b44a67c37d..b87439eb40d 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -63,8 +63,7 @@ "dependencies": { "@opentelemetry/core": "1.15.0", "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-metrics": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-metrics": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-prometheus", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index b36c60a677e..bbb989e09c8 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -91,8 +91,7 @@ "@opentelemetry/core": "1.15.0", "@opentelemetry/instrumentation": "0.41.0", "@opentelemetry/sdk-trace-web": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-fetch", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index ac047252ee2..8a7d6af1f0a 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -71,8 +71,7 @@ }, "dependencies": { "@opentelemetry/instrumentation": "0.41.0", - "@opentelemetry/semantic-conventions": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-grpc", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 2c5d28cd7f5..50f9c5ea80e 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -77,8 +77,7 @@ "@opentelemetry/core": "1.15.0", "@opentelemetry/instrumentation": "0.41.0", "@opentelemetry/semantic-conventions": "1.15.0", - "semver": "^7.5.1", - "tslib": "^2.3.1" + "semver": "^7.5.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-http", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 71585b4e00d..d823392acf5 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -91,8 +91,7 @@ "@opentelemetry/core": "1.15.0", "@opentelemetry/instrumentation": "0.41.0", "@opentelemetry/sdk-trace-web": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-xml-http-request", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 46ba9af641c..b3e1a2aadf2 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -75,8 +75,7 @@ "import-in-the-middle": "1.4.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.1", - "shimmer": "^1.2.1", - "tslib": "^2.3.1" + "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" diff --git a/experimental/packages/opentelemetry-instrumentation/src/platform/browser/index.ts b/experimental/packages/opentelemetry-instrumentation/src/platform/browser/index.ts index 0b238b42b8a..24c76056a19 100644 --- a/experimental/packages/opentelemetry-instrumentation/src/platform/browser/index.ts +++ b/experimental/packages/opentelemetry-instrumentation/src/platform/browser/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { InstrumentationBase } from './instrumentation'; +export * from './instrumentation'; diff --git a/experimental/packages/opentelemetry-instrumentation/src/platform/index.ts b/experimental/packages/opentelemetry-instrumentation/src/platform/index.ts index 1fc5f5e14a6..cdaf8858ce5 100644 --- a/experimental/packages/opentelemetry-instrumentation/src/platform/index.ts +++ b/experimental/packages/opentelemetry-instrumentation/src/platform/index.ts @@ -14,10 +14,4 @@ * limitations under the License. */ -export { - InstrumentationBase, - InstrumentationModuleDefinition, - InstrumentationModuleFile, - InstrumentationNodeModuleDefinition, - InstrumentationNodeModuleFile, -} from './node'; +export * from './node'; diff --git a/experimental/packages/opentelemetry-instrumentation/src/platform/node/index.ts b/experimental/packages/opentelemetry-instrumentation/src/platform/node/index.ts index d3df10491f4..842797c3419 100644 --- a/experimental/packages/opentelemetry-instrumentation/src/platform/node/index.ts +++ b/experimental/packages/opentelemetry-instrumentation/src/platform/node/index.ts @@ -13,10 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { InstrumentationBase } from './instrumentation'; -export { InstrumentationNodeModuleDefinition } from './instrumentationNodeModuleDefinition'; -export { InstrumentationNodeModuleFile } from './instrumentationNodeModuleFile'; -export { - InstrumentationModuleDefinition, - InstrumentationModuleFile, -} from './types'; +export * from './instrumentation'; +export * from './instrumentationNodeModuleDefinition'; +export * from './instrumentationNodeModuleFile'; +export * from './types'; diff --git a/experimental/packages/opentelemetry-instrumentation/test/node/EsmInstrumentation.test.mjs b/experimental/packages/opentelemetry-instrumentation/test/node/EsmInstrumentation.test.mjs index 715dbdbff22..f09097cd796 100644 --- a/experimental/packages/opentelemetry-instrumentation/test/node/EsmInstrumentation.test.mjs +++ b/experimental/packages/opentelemetry-instrumentation/test/node/EsmInstrumentation.test.mjs @@ -18,7 +18,7 @@ import * as assert from 'assert'; import { InstrumentationBase, InstrumentationNodeModuleDefinition, -} from '../../build/src/platform/index.js'; +} from '../../build/src/index.js'; import * as exported from 'test-esm-module'; class TestInstrumentationWrapFn extends InstrumentationBase { diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 8e6f97f27a3..acaad73e011 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -57,8 +57,7 @@ "@opentelemetry/sdk-metrics": "1.15.0", "@opentelemetry/sdk-trace-base": "1.15.0", "@opentelemetry/sdk-trace-node": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/semantic-conventions": "1.15.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.5.0" diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 687fcdf505e..1b37716befa 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -61,8 +61,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.0" }, "devDependencies": { "@babel/core": "7.22.9", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 232b83bf6c8..4db399497ba 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -75,8 +75,7 @@ "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.15.0", "@opentelemetry/otlp-exporter-base": "0.41.0", - "protobufjs": "^7.2.3", - "tslib": "^2.3.1" + "protobufjs": "^7.2.3" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-grpc-exporter-base", "sideEffects": false diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index f1fd58623cd..5480ef6ce73 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -81,8 +81,7 @@ "dependencies": { "@opentelemetry/core": "1.15.0", "@opentelemetry/otlp-exporter-base": "0.41.0", - "protobufjs": "^7.2.3", - "tslib": "^2.3.1" + "protobufjs": "^7.2.3" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-proto-exporter-base", "sideEffects": false diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index 3a53906d506..66e42442916 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -83,8 +83,7 @@ "@opentelemetry/resources": "1.15.0", "@opentelemetry/sdk-logs": "0.41.0", "@opentelemetry/sdk-metrics": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-trace-base": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-transformer", "sideEffects": false diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 14a18889e8d..54d9063d6f9 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -100,7 +100,6 @@ }, "dependencies": { "@opentelemetry/core": "1.15.0", - "@opentelemetry/resources": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/resources": "1.15.0" } } diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index d5ebb224de1..cf637d1a8d7 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -71,8 +71,7 @@ "dependencies": { "@opentelemetry/core": "1.15.0", "require-in-the-middle": "^7.1.1", - "semver": "^7.5.1", - "tslib": "^2.3.1" + "semver": "^7.5.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/shim-opencensus", "sideEffects": false diff --git a/integration-tests/propagation-validation-server/package.json b/integration-tests/propagation-validation-server/package.json index 8d577ea6596..0158a21f682 100644 --- a/integration-tests/propagation-validation-server/package.json +++ b/integration-tests/propagation-validation-server/package.json @@ -17,8 +17,7 @@ "@opentelemetry/sdk-trace-base": "1.15.0", "axios": "1.4.0", "body-parser": "1.19.0", - "express": "4.17.3", - "tslib": "^2.3.1" + "express": "4.17.3" }, "devDependencies": { "typescript": "4.4.4" diff --git a/package.json b/package.json index 8671540526d..2a6cffca35a 100644 --- a/package.json +++ b/package.json @@ -80,8 +80,7 @@ "typedoc": "0.22.18", "typedoc-plugin-missing-exports": "1.0.0", "typedoc-plugin-resolve-crossmodule-references": "0.2.2", - "typescript": "4.4.4", - "tslib": "^2.3.1" + "typescript": "4.4.4" }, "changelog": { "repo": "open-telemetry/opentelemetry-js", diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index a1073523bb7..01439b30f91 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -43,9 +43,6 @@ "publishConfig": { "access": "public" }, - "dependencies": { - "tslib": "^2.3.1" - }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 515059557f2..0a7cab2c001 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -85,9 +85,6 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0", "zone.js": "^0.10.2 || ^0.11.0" }, - "dependencies": { - "tslib": "^2.3.1" - }, "sideEffects": false, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-context-zone-peer-dep" } diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 342c580ff92..01fafc419f7 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -76,7 +76,6 @@ }, "dependencies": { "@opentelemetry/context-zone-peer-dep": "1.15.0", - "tslib": "^2.3.1", "zone.js": "^0.11.0" }, "sideEffects": true, diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index c8ba0b3647e..5340df95148 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -91,8 +91,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/semantic-conventions": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-core", "sideEffects": false diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 2158bd30663..a595bf3e4cf 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -66,8 +66,7 @@ "@opentelemetry/core": "1.15.0", "@opentelemetry/sdk-trace-base": "1.15.0", "@opentelemetry/semantic-conventions": "1.15.0", - "jaeger-client": "^3.15.0", - "tslib": "^2.3.1" + "jaeger-client": "^3.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-jaeger", "sideEffects": false diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 6ef32c8de54..0de3f4a5de5 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -95,8 +95,7 @@ "@opentelemetry/core": "1.15.0", "@opentelemetry/resources": "1.15.0", "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-zipkin", "sideEffects": false diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index 69fce8a126c..2d0bbb4c51e 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -51,8 +51,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0" diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index ef8d9915ab6..a9b2e156120 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -81,8 +81,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-propagator-jaeger", "sideEffects": false diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index a121a1c4fd5..dac50ececf3 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -92,8 +92,7 @@ }, "dependencies": { "@opentelemetry/core": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-resources", "sideEffects": false diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index d220f8cae74..c0285dd5f46 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -95,8 +95,7 @@ "dependencies": { "@opentelemetry/core": "1.15.0", "@opentelemetry/resources": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-base", "sideEffects": false diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index 7afeef5bc3b..fe776628b03 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -70,8 +70,7 @@ "@opentelemetry/propagator-b3": "1.15.0", "@opentelemetry/propagator-jaeger": "1.15.0", "@opentelemetry/sdk-trace-base": "1.15.0", - "semver": "^7.5.1", - "tslib": "^2.3.1" + "semver": "^7.5.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node", "sideEffects": false diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 4c1c347cd01..e19b365b23d 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -94,8 +94,7 @@ "dependencies": { "@opentelemetry/core": "1.15.0", "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", - "tslib": "^2.3.1" + "@opentelemetry/semantic-conventions": "1.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-web", "sideEffects": false diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index 29b28f22f43..367416299af 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -62,9 +62,6 @@ "ts-mocha": "10.0.0", "typescript": "4.4.4" }, - "dependencies": { - "tslib": "^2.3.1" - }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-semantic-conventions", "sideEffects": false } diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index 6f28c3c067a..fbbb58096ce 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -62,8 +62,7 @@ "dependencies": { "@opentelemetry/core": "1.15.0", "@opentelemetry/semantic-conventions": "1.15.0", - "opentracing": "^0.14.4", - "tslib": "^2.3.1" + "opentracing": "^0.14.4" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-shim-opentracing", "sideEffects": false diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 0ce67e77d43..7aaf05fd682 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -86,8 +86,7 @@ "dependencies": { "@opentelemetry/core": "1.15.0", "@opentelemetry/resources": "1.15.0", - "lodash.merge": "^4.6.2", - "tslib": "^2.3.1" + "lodash.merge": "^4.6.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/sdk-metrics", "sideEffects": false diff --git a/packages/template/package.json b/packages/template/package.json index 89060412790..3949c871fa9 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -83,9 +83,6 @@ "lerna": "7.1.3", "typescript": "4.4.4" }, - "dependencies": { - "tslib": "^2.3.1" - }, "Add these to devDependencies for testing": { "@types/mocha": "9.1.1", "@types/sinon": "10.0.13", diff --git a/tsconfig.base.json b/tsconfig.base.json index 84e684c8a55..cbafb67678a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -21,8 +21,7 @@ "strict": true, "strictNullChecks": true, "target": "es2017", - "useUnknownInCatchVariables": false, - "importHelpers": true + "useUnknownInCatchVariables": false }, "exclude": [ "node_modules" From 9f71800fdc2a5ee5055684037a12498af71955f2 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Mon, 24 Jul 2023 09:44:44 -0400 Subject: [PATCH 15/70] chore: prepare release 1.15.1/0.41.1 (#4016) --- CHANGELOG.md | 10 ++++-- examples/esm-http-ts/package.json | 16 +++++----- examples/http/package.json | 18 +++++------ examples/https/package.json | 18 +++++------ examples/opentelemetry-web/package.json | 30 ++++++++--------- examples/otlp-exporter-node/package.json | 24 +++++++------- experimental/CHANGELOG.md | 19 +++++++++-- .../node14/package.json | 6 ++-- .../node16/package.json | 6 ++-- .../examples/opencensus-shim/package.json | 12 +++---- experimental/examples/prometheus/package.json | 6 ++-- experimental/packages/api-events/package.json | 4 +-- experimental/packages/api-logs/package.json | 4 +-- .../exporter-logs-otlp-grpc/package.json | 16 +++++----- .../exporter-logs-otlp-http/package.json | 16 +++++----- .../exporter-logs-otlp-proto/package.json | 20 ++++++------ .../exporter-trace-otlp-grpc/package.json | 14 ++++---- .../exporter-trace-otlp-http/package.json | 14 ++++---- .../exporter-trace-otlp-proto/package.json | 16 +++++----- .../package.json | 8 ++--- .../package.json | 14 ++++---- .../package.json | 14 ++++---- .../package.json | 16 +++++----- .../package.json | 10 +++--- .../package.json | 18 +++++------ .../package.json | 14 ++++---- .../package.json | 16 +++++----- .../package.json | 18 +++++------ .../package.json | 6 ++-- .../opentelemetry-sdk-node/package.json | 32 +++++++++---------- .../packages/otlp-exporter-base/package.json | 6 ++-- .../otlp-grpc-exporter-base/package.json | 12 +++---- .../otlp-proto-exporter-base/package.json | 6 ++-- .../packages/otlp-transformer/package.json | 16 +++++----- experimental/packages/sdk-logs/package.json | 12 +++---- .../packages/shim-opencensus/package.json | 8 ++--- .../package.json | 8 ++--- .../package.json | 2 +- .../package.json | 4 +-- .../opentelemetry-context-zone/package.json | 4 +-- packages/opentelemetry-core/package.json | 6 ++-- .../package.json | 10 +++--- .../package.json | 12 +++---- .../opentelemetry-propagator-b3/package.json | 4 +-- .../package.json | 6 ++-- packages/opentelemetry-resources/package.json | 6 ++-- .../opentelemetry-sdk-trace-base/package.json | 10 +++--- .../opentelemetry-sdk-trace-node/package.json | 16 +++++----- .../opentelemetry-sdk-trace-web/package.json | 16 +++++----- .../package.json | 2 +- .../package.json | 12 +++---- packages/sdk-metrics/package.json | 10 +++--- packages/template/package.json | 2 +- selenium-tests/package.json | 22 ++++++------- 54 files changed, 332 insertions(+), 315 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b30dce0392d..ea4e3c0caad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,13 +13,17 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) -* Revert "feat(minification): Add noEmitHelpers, importHelpers and tslib as a dependency (#3914)" - [#4011](https://github.com/open-telemetry/opentelemetry-js/pull/4011) @dyladan - ### :books: (Refine Doc) ### :house: (Internal) +## 1.15.1 + +### :bug: (Bug Fix) + +* Revert "feat(minification): Add noEmitHelpers, importHelpers and tslib as a dependency (#3914)" + [#4011](https://github.com/open-telemetry/opentelemetry-js/pull/4011) @dyladan + ## 1.15.0 ### :bug: (Bug Fix) diff --git a/examples/esm-http-ts/package.json b/examples/esm-http-ts/package.json index 4dcbbf60090..a36bbf72254 100644 --- a/examples/esm-http-ts/package.json +++ b/examples/esm-http-ts/package.json @@ -1,7 +1,7 @@ { "name": "esm-http-ts", "private": true, - "version": "0.41.0", + "version": "0.41.1", "description": "Example of HTTP integration with OpenTelemetry using ESM and TypeScript", "main": "build/index.js", "type": "module", @@ -31,12 +31,12 @@ "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/", "dependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.41.0", - "@opentelemetry/instrumentation": "0.41.0", - "@opentelemetry/instrumentation-http": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/sdk-trace-node": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/exporter-trace-otlp-proto": "0.41.1", + "@opentelemetry/instrumentation": "0.41.1", + "@opentelemetry/instrumentation-http": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/sdk-trace-node": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" } } diff --git a/examples/http/package.json b/examples/http/package.json index 22d3d29d9c1..1452ccbd8c1 100644 --- a/examples/http/package.json +++ b/examples/http/package.json @@ -1,7 +1,7 @@ { "name": "http-example", "private": true, - "version": "0.41.0", + "version": "0.41.1", "description": "Example of HTTP integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -29,14 +29,14 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/exporter-jaeger": "1.15.0", - "@opentelemetry/exporter-zipkin": "1.15.0", - "@opentelemetry/instrumentation": "0.41.0", - "@opentelemetry/instrumentation-http": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/sdk-trace-node": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/exporter-jaeger": "1.15.1", + "@opentelemetry/exporter-zipkin": "1.15.1", + "@opentelemetry/instrumentation": "0.41.1", + "@opentelemetry/instrumentation-http": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/sdk-trace-node": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/http", "devDependencies": { diff --git a/examples/https/package.json b/examples/https/package.json index 15b3ac513d7..22417829920 100644 --- a/examples/https/package.json +++ b/examples/https/package.json @@ -1,7 +1,7 @@ { "name": "https-example", "private": true, - "version": "0.41.0", + "version": "0.41.1", "description": "Example of HTTPs integration with OpenTelemetry", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -33,14 +33,14 @@ }, "dependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/exporter-jaeger": "1.15.0", - "@opentelemetry/exporter-zipkin": "1.15.0", - "@opentelemetry/instrumentation": "0.41.0", - "@opentelemetry/instrumentation-http": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/sdk-trace-node": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/exporter-jaeger": "1.15.1", + "@opentelemetry/exporter-zipkin": "1.15.1", + "@opentelemetry/instrumentation": "0.41.1", + "@opentelemetry/instrumentation-http": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/sdk-trace-node": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/https", "devDependencies": { diff --git a/examples/opentelemetry-web/package.json b/examples/opentelemetry-web/package.json index e57cc764a39..6f70a428ae3 100644 --- a/examples/opentelemetry-web/package.json +++ b/examples/opentelemetry-web/package.json @@ -1,7 +1,7 @@ { "name": "web-opentelemetry-example", "private": true, - "version": "0.41.0", + "version": "0.41.1", "description": "Example of using @opentelemetry/sdk-trace-web and @opentelemetry/sdk-metrics in browser", "main": "index.js", "scripts": { @@ -43,20 +43,20 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/context-zone": "1.15.0", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.41.0", - "@opentelemetry/exporter-trace-otlp-http": "0.41.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.41.0", - "@opentelemetry/exporter-zipkin": "1.15.0", - "@opentelemetry/instrumentation": "0.41.0", - "@opentelemetry/instrumentation-fetch": "0.41.0", - "@opentelemetry/instrumentation-xml-http-request": "0.41.0", - "@opentelemetry/propagator-b3": "1.15.0", - "@opentelemetry/sdk-metrics": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/sdk-trace-web": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/context-zone": "1.15.1", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.1", + "@opentelemetry/exporter-trace-otlp-http": "0.41.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.41.1", + "@opentelemetry/exporter-zipkin": "1.15.1", + "@opentelemetry/instrumentation": "0.41.1", + "@opentelemetry/instrumentation-fetch": "0.41.1", + "@opentelemetry/instrumentation-xml-http-request": "0.41.1", + "@opentelemetry/propagator-b3": "1.15.1", + "@opentelemetry/sdk-metrics": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/sdk-trace-web": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/tracer-web" } diff --git a/examples/otlp-exporter-node/package.json b/examples/otlp-exporter-node/package.json index 888a0b1be80..c16a341a26c 100644 --- a/examples/otlp-exporter-node/package.json +++ b/examples/otlp-exporter-node/package.json @@ -1,7 +1,7 @@ { "name": "example-otlp-exporter-node", "private": true, - "version": "0.41.0", + "version": "0.41.1", "description": "Example of using @opentelemetry/collector-exporter in Node.js", "main": "index.js", "scripts": { @@ -29,17 +29,17 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/exporter-metrics-otlp-grpc": "0.41.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.41.0", - "@opentelemetry/exporter-metrics-otlp-proto": "0.41.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.41.0", - "@opentelemetry/exporter-trace-otlp-http": "0.41.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-metrics": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.41.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.1", + "@opentelemetry/exporter-metrics-otlp-proto": "0.41.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.1", + "@opentelemetry/exporter-trace-otlp-http": "0.41.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-metrics": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/otlp-exporter-node" } diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index c6299318870..38d9b83974d 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -6,13 +6,11 @@ All notable changes to experimental packages in this project will be documented ### :books: (Refine Doc) -* docs(sdk-metrics): add example of exponential histogram metric [#3855](https://github.com/open-telemetry/opentelemetry-js/pull/3855) @JamieDanielson - ### :boom: Breaking Change ### :rocket: (Enhancement) -* feat(sdk-node): logs support added [#3969](https://github.com/open-telemetry/opentelemetry-js/pull/3969) @psk001 +### :bug: (Bug Fix) ### :bug: (Bug Fix) @@ -20,6 +18,21 @@ All notable changes to experimental packages in this project will be documented ### :house: (Internal) +## 0.41.1 + +### :books: (Refine Doc) + +* docs(sdk-metrics): add example of exponential histogram metric [#3855](https://github.com/open-telemetry/opentelemetry-js/pull/3855) @JamieDanielson + +### :rocket: (Enhancement) + +* feat(sdk-node): logs support added [#3969](https://github.com/open-telemetry/opentelemetry-js/pull/3969) @psk001 + +### :bug: (Bug Fix) + +* Revert "feat(minification): Add noEmitHelpers, importHelpers and tslib as a dependency (#3914)" + [#4011](https://github.com/open-telemetry/opentelemetry-js/pull/4011) @dyladan + ## 0.41.0 ### :boom: Breaking Change diff --git a/experimental/backwards-compatibility/node14/package.json b/experimental/backwards-compatibility/node14/package.json index 9414b949f57..cf9cc50bec5 100644 --- a/experimental/backwards-compatibility/node14/package.json +++ b/experimental/backwards-compatibility/node14/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node14", - "version": "0.41.0", + "version": "0.41.1", "private": true, "description": "Backwards compatibility app for node 14 types and the OpenTelemetry Node.js SDK", "main": "index.js", @@ -9,8 +9,8 @@ "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "dependencies": { - "@opentelemetry/sdk-node": "0.41.0", - "@opentelemetry/sdk-trace-base": "1.15.0" + "@opentelemetry/sdk-node": "0.41.1", + "@opentelemetry/sdk-trace-base": "1.15.1" }, "devDependencies": { "@types/node": "14.18.25", diff --git a/experimental/backwards-compatibility/node16/package.json b/experimental/backwards-compatibility/node16/package.json index ed473eae27f..92f16e43e51 100644 --- a/experimental/backwards-compatibility/node16/package.json +++ b/experimental/backwards-compatibility/node16/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node16", - "version": "0.41.0", + "version": "0.41.1", "private": true, "description": "Backwards compatibility app for node 16 types and the OpenTelemetry Node.js SDK", "main": "index.js", @@ -9,8 +9,8 @@ "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "dependencies": { - "@opentelemetry/sdk-node": "0.41.0", - "@opentelemetry/sdk-trace-base": "1.15.0" + "@opentelemetry/sdk-node": "0.41.1", + "@opentelemetry/sdk-trace-base": "1.15.1" }, "devDependencies": { "@types/node": "16.11.52", diff --git a/experimental/examples/opencensus-shim/package.json b/experimental/examples/opencensus-shim/package.json index ee201e1171e..ee2bb6e08b3 100644 --- a/experimental/examples/opencensus-shim/package.json +++ b/experimental/examples/opencensus-shim/package.json @@ -1,7 +1,7 @@ { "name": "opencensus-shim", "private": true, - "version": "0.41.0", + "version": "0.41.1", "description": "Example of using @opentelemetry/shim-opencensus in Node.js", "main": "index.js", "scripts": { @@ -30,11 +30,11 @@ "@opencensus/core": "0.1.0", "@opencensus/nodejs-base": "0.1.0", "@opentelemetry/api": "1.4.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-trace-node": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", - "@opentelemetry/shim-opencensus": "0.41.0" + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-trace-node": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1", + "@opentelemetry/shim-opencensus": "0.41.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/opencensus-shim" } diff --git a/experimental/examples/prometheus/package.json b/experimental/examples/prometheus/package.json index 45c9f661dcc..9b51db4a973 100644 --- a/experimental/examples/prometheus/package.json +++ b/experimental/examples/prometheus/package.json @@ -1,6 +1,6 @@ { "name": "prometheus-example", - "version": "0.41.0", + "version": "0.41.1", "private": true, "description": "Example of using @opentelemetry/sdk-metrics and @opentelemetry/exporter-prometheus", "main": "index.js", @@ -11,7 +11,7 @@ "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/exporter-prometheus": "0.41.0", - "@opentelemetry/sdk-metrics": "1.15.0" + "@opentelemetry/exporter-prometheus": "0.41.1", + "@opentelemetry/sdk-metrics": "1.15.1" } } diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index dd4111bb3c0..94c3ce510dd 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api-events", - "version": "0.41.0", + "version": "0.41.1", "description": "Public events API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -67,9 +67,9 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/webpack-env": "1.16.3", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 9bddeaa794b..e99c9fd651a 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api-logs", - "version": "0.41.0", + "version": "0.41.1", "description": "Public logs API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -67,9 +67,9 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/webpack-env": "1.16.3", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index 6a61908731d..bbd94bea1aa 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-grpc", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry Collector Exporter allows user to send collected log records to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -51,9 +51,9 @@ "@babel/core": "7.22.9", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/api-logs": "0.41.0", - "@opentelemetry/otlp-exporter-base": "0.41.0", - "@opentelemetry/resources": "1.15.0", + "@opentelemetry/api-logs": "0.41.1", + "@opentelemetry/otlp-exporter-base": "0.41.1", + "@opentelemetry/resources": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -73,10 +73,10 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.41.0", - "@opentelemetry/otlp-transformer": "0.41.0", - "@opentelemetry/sdk-logs": "0.41.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.41.1", + "@opentelemetry/otlp-transformer": "0.41.1", + "@opentelemetry/sdk-logs": "0.41.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 428d2ed878b..49e2f2eab54 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-http", - "version": "0.41.0", + "version": "0.41.1", "publishConfig": { "access": "public" }, @@ -72,17 +72,17 @@ "sideEffects": false, "devDependencies": { "@babel/core": "7.22.9", - "@opentelemetry/api-logs": "0.41.0", - "@opentelemetry/resources": "1.15.0", + "@opentelemetry/api-logs": "0.41.1", + "@opentelemetry/resources": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -104,9 +104,9 @@ "@opentelemetry/api-logs": ">=0.38.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/otlp-exporter-base": "0.41.0", - "@opentelemetry/otlp-transformer": "0.41.0", - "@opentelemetry/sdk-logs": "0.41.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/otlp-exporter-base": "0.41.1", + "@opentelemetry/otlp-transformer": "0.41.1", + "@opentelemetry/sdk-logs": "0.41.1" } } diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 6047b0bd62b..f24ffbaacda 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-proto", - "version": "0.41.0", + "version": "0.41.1", "description": "An OTLP exporter to send logs using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -68,10 +68,10 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -93,14 +93,14 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/api-logs": "0.41.0", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/otlp-exporter-base": "0.41.0", - "@opentelemetry/otlp-proto-exporter-base": "0.41.0", - "@opentelemetry/otlp-transformer": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-logs": "0.41.0", - "@opentelemetry/sdk-trace-base": "1.15.0" + "@opentelemetry/api-logs": "0.41.1", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/otlp-exporter-base": "0.41.1", + "@opentelemetry/otlp-proto-exporter-base": "0.41.1", + "@opentelemetry/otlp-transformer": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-logs": "0.41.1", + "@opentelemetry/sdk-trace-base": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-proto", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 4c89ede04ee..1a6a0114efc 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-grpc", - "version": "0.41.0", + "version": "0.41.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", @@ -50,7 +50,7 @@ "@babel/core": "7.22.9", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/otlp-exporter-base": "0.41.0", + "@opentelemetry/otlp-exporter-base": "0.41.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -70,11 +70,11 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.41.0", - "@opentelemetry/otlp-transformer": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.41.1", + "@opentelemetry/otlp-transformer": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 631b0ac6d5d..0b51ceb7825 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-http", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry Collector Trace Exporter allows user to send collected traces to the OpenTelemetry Collector", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -70,10 +70,10 @@ "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -95,11 +95,11 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/otlp-exporter-base": "0.41.0", - "@opentelemetry/otlp-transformer": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/otlp-exporter-base": "0.41.1", + "@opentelemetry/otlp-transformer": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-http", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index 84a44cb055c..bf01be8e55a 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-proto", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry Collector Exporter allows user to send collected traces to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -67,10 +67,10 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -92,12 +92,12 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/otlp-exporter-base": "0.41.0", - "@opentelemetry/otlp-proto-exporter-base": "0.41.0", - "@opentelemetry/otlp-transformer": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/otlp-exporter-base": "0.41.1", + "@opentelemetry/otlp-proto-exporter-base": "0.41.1", + "@opentelemetry/otlp-transformer": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-proto", "sideEffects": false diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 9c90b945e47..bdf85669248 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/opentelemetry-browser-detector", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry Resource Detector for Browser", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -58,9 +58,9 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -82,8 +82,8 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/browser-detector" } diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 414dae93541..c5fffbadb24 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-grpc", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -69,12 +69,12 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.41.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.41.0", - "@opentelemetry/otlp-transformer": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-metrics": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.41.1", + "@opentelemetry/otlp-transformer": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-metrics": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 6f83683c860..6adc7387e71 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-http", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -70,10 +70,10 @@ "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -95,11 +95,11 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/otlp-exporter-base": "0.41.0", - "@opentelemetry/otlp-transformer": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-metrics": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/otlp-exporter-base": "0.41.1", + "@opentelemetry/otlp-transformer": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-metrics": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-http", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index c92aaae08b9..59b19416e7c 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-proto", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -67,13 +67,13 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.41.0", - "@opentelemetry/otlp-exporter-base": "0.41.0", - "@opentelemetry/otlp-proto-exporter-base": "0.41.0", - "@opentelemetry/otlp-transformer": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-metrics": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.1", + "@opentelemetry/otlp-exporter-base": "0.41.1", + "@opentelemetry/otlp-proto-exporter-base": "0.41.1", + "@opentelemetry/otlp-transformer": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-metrics": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-proto", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index b87439eb40d..8b9a7251f1b 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-prometheus", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry Exporter Prometheus provides a metrics endpoint for Prometheus", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,7 +44,7 @@ }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/semantic-conventions": "1.15.0", + "@opentelemetry/semantic-conventions": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -61,9 +61,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-metrics": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-metrics": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-prometheus", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index bbb989e09c8..55b7b3565cb 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-fetch", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry fetch automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -56,17 +56,17 @@ "devDependencies": { "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-zone": "1.15.0", - "@opentelemetry/propagator-b3": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/context-zone": "1.15.1", + "@opentelemetry/propagator-b3": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -88,10 +88,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/instrumentation": "0.41.0", - "@opentelemetry/sdk-trace-web": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/instrumentation": "0.41.1", + "@opentelemetry/sdk-trace-web": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-fetch", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 8a7d6af1f0a..51b63587597 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-grpc", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry grpc automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -48,10 +48,10 @@ "@grpc/grpc-js": "^1.7.1", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.15.0", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/sdk-trace-node": "1.15.0", + "@opentelemetry/context-async-hooks": "1.15.1", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/sdk-trace-node": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", @@ -70,8 +70,8 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/instrumentation": "0.41.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/instrumentation": "0.41.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-grpc", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 50f9c5ea80e..f945fbefc1f 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-http", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry http/https automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -46,10 +46,10 @@ }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.15.0", - "@opentelemetry/sdk-metrics": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/sdk-trace-node": "1.15.0", + "@opentelemetry/context-async-hooks": "1.15.1", + "@opentelemetry/sdk-metrics": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/sdk-trace-node": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/request-promise-native": "1.0.18", @@ -74,9 +74,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/instrumentation": "0.41.0", - "@opentelemetry/semantic-conventions": "1.15.0", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/instrumentation": "0.41.1", + "@opentelemetry/semantic-conventions": "1.15.1", "semver": "^7.5.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-http", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index d823392acf5..3c729d4009e 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-xml-http-request", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry XMLHttpRequest automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -56,17 +56,17 @@ "devDependencies": { "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-zone": "1.15.0", - "@opentelemetry/propagator-b3": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/context-zone": "1.15.1", + "@opentelemetry/propagator-b3": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -88,10 +88,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/instrumentation": "0.41.0", - "@opentelemetry/sdk-trace-web": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/instrumentation": "0.41.1", + "@opentelemetry/sdk-trace-web": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-xml-http-request", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index b3e1a2aadf2..faa4b5a8837 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation", - "version": "0.41.0", + "version": "0.41.1", "description": "Base class for node which OpenTelemetry instrumentation modules extend", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation", @@ -83,17 +83,17 @@ "devDependencies": { "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", - "@opentelemetry/sdk-metrics": "1.15.0", + "@opentelemetry/sdk-metrics": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index acaad73e011..a00499ab74b 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-node", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry SDK for Node.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,27 +44,27 @@ "access": "public" }, "dependencies": { - "@opentelemetry/api-logs":"0.41.0", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/exporter-jaeger": "1.15.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.41.0", - "@opentelemetry/exporter-trace-otlp-http": "0.41.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.41.0", - "@opentelemetry/exporter-zipkin": "1.15.0", - "@opentelemetry/instrumentation": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-logs":"0.41.0", - "@opentelemetry/sdk-metrics": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/sdk-trace-node": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/api-logs": "0.41.1", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/exporter-jaeger": "1.15.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.1", + "@opentelemetry/exporter-trace-otlp-http": "0.41.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.41.1", + "@opentelemetry/exporter-zipkin": "1.15.1", + "@opentelemetry/instrumentation": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-logs": "0.41.1", + "@opentelemetry/sdk-metrics": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/sdk-trace-node": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.5.0" }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.15.0", + "@opentelemetry/context-async-hooks": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 1b37716befa..2d3a61a5b8d 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-exporter-base", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry OTLP Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -61,7 +61,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.15.0" + "@opentelemetry/core": "1.15.1" }, "devDependencies": { "@babel/core": "7.22.9", @@ -69,9 +69,9 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 4db399497ba..67330ada1ee 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-grpc-exporter-base", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry OTLP-gRPC Exporter base (for internal use only)", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,9 +50,9 @@ "devDependencies": { "@babel/core": "7.22.9", "@opentelemetry/api": "1.4.1", - "@opentelemetry/otlp-transformer": "0.41.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/otlp-transformer": "0.41.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -73,8 +73,8 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/otlp-exporter-base": "0.41.0", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/otlp-exporter-base": "0.41.1", "protobufjs": "^7.2.3" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-grpc-exporter-base", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index 5480ef6ce73..a411fb4a97f 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-proto-exporter-base", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenTelemetry OTLP-HTTP-protobuf Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -79,8 +79,8 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/otlp-exporter-base": "0.41.0", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/otlp-exporter-base": "0.41.1", "protobufjs": "^7.2.3" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-proto-exporter-base", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index 66e42442916..1ea9fa0db4c 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -4,7 +4,7 @@ "publishConfig": { "access": "public" }, - "version": "0.41.0", + "version": "0.41.1", "description": "Transform OpenTelemetry SDK data into OTLP", "module": "build/esm/index.js", "esnext": "build/esnext/index.js", @@ -60,9 +60,9 @@ "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/webpack-env": "1.16.3", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -78,12 +78,12 @@ "webpack": "4.46.0" }, "dependencies": { - "@opentelemetry/api-logs": "0.41.0", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-logs": "0.41.0", - "@opentelemetry/sdk-metrics": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0" + "@opentelemetry/api-logs": "0.41.1", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-logs": "0.41.1", + "@opentelemetry/sdk-metrics": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-transformer", "sideEffects": false diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 54d9063d6f9..3ac1aba8760 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-logs", - "version": "0.41.0", + "version": "0.41.1", "publishConfig": { "access": "public" }, @@ -72,15 +72,15 @@ "@opentelemetry/api-logs": ">=0.39.1" }, "devDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.5.0", - "@opentelemetry/api-logs": "0.41.0", "@babel/core": "7.22.9", + "@opentelemetry/api": ">=1.4.0 <1.5.0", + "@opentelemetry/api-logs": "0.41.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -99,7 +99,7 @@ "webpack-merge": "5.9.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/resources": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/resources": "1.15.1" } } diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index cf637d1a8d7..b1724c988a4 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opencensus", - "version": "0.41.0", + "version": "0.41.1", "description": "OpenCensus to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,8 +50,8 @@ "devDependencies": { "@opencensus/core": "0.1.0", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/context-async-hooks": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -69,7 +69,7 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", + "@opentelemetry/core": "1.15.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.1" }, diff --git a/integration-tests/propagation-validation-server/package.json b/integration-tests/propagation-validation-server/package.json index 0158a21f682..c027ea34c3d 100644 --- a/integration-tests/propagation-validation-server/package.json +++ b/integration-tests/propagation-validation-server/package.json @@ -1,6 +1,6 @@ { "name": "propagation-validation-server", - "version": "1.15.0", + "version": "1.15.1", "description": "server for w3c tests", "main": "validation_server.js", "private": true, @@ -12,9 +12,9 @@ }, "dependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/context-async-hooks": "1.15.0", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/context-async-hooks": "1.15.1", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", "axios": "1.4.0", "body-parser": "1.19.0", "express": "4.17.3" diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 01439b30f91..a7532117028 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": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry AsyncHooks-based Context Manager", "main": "build/src/index.js", "types": "build/src/index.d.ts", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 0a7cab2c001..b375a49f9ea 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": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry Context Zone with peer dependency for zone.js", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -61,9 +61,9 @@ "@types/webpack-env": "1.16.3", "@types/zone.js": "0.5.12", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 01fafc419f7..ee7ba24069f 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-zone", - "version": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry Context Zone", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -75,7 +75,7 @@ "webpack-merge": "5.9.0" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "1.15.0", + "@opentelemetry/context-zone-peer-dep": "1.15.1", "zone.js": "^0.11.0" }, "sideEffects": true, diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 5340df95148..974185bdf06 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/core", - "version": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -69,9 +69,9 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -91,7 +91,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-core", "sideEffects": false diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index a595bf3e4cf..437b2b1919d 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-jaeger", - "version": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry Exporter Jaeger allows user to send collected traces to Jaeger", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,7 +45,7 @@ }, "devDependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/resources": "1.15.0", + "@opentelemetry/resources": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", @@ -63,9 +63,9 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1", "jaeger-client": "^3.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-jaeger", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 0de3f4a5de5..ff789993aea 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-zipkin", - "version": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry Zipkin Exporter allows the user to send collected traces to Zipkin.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -67,9 +67,9 @@ "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -92,10 +92,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-zipkin", "sideEffects": false diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index 2d0bbb4c51e..dc771041f51 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-b3", - "version": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry B3 propagator provides context propagation for systems that are using the B3 header format", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -51,7 +51,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.15.0" + "@opentelemetry/core": "1.15.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0" diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index a9b2e156120..487e6efa23e 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-jaeger", - "version": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry Jaeger propagator provides HTTP header propagation for systems that are using Jaeger HTTP header format.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -59,9 +59,9 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -81,7 +81,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0" + "@opentelemetry/core": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-propagator-jaeger", "sideEffects": false diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index dac50ececf3..8889e298c65 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resources", - "version": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry SDK resources", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -91,8 +91,8 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-resources", "sideEffects": false diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index c0285dd5f46..7f9cdfe0a5d 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-base", - "version": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry Tracing", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -70,9 +70,9 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -93,9 +93,9 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-base", "sideEffects": false diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index fe776628b03..97b12571bb0 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-node", - "version": "1.15.0", + "version": "1.15.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", @@ -46,8 +46,8 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/resources": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", + "@opentelemetry/resources": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", @@ -65,11 +65,11 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/context-async-hooks": "1.15.0", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/propagator-b3": "1.15.0", - "@opentelemetry/propagator-jaeger": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/context-async-hooks": "1.15.1", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/propagator-b3": "1.15.1", + "@opentelemetry/propagator-jaeger": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", "semver": "^7.5.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index e19b365b23d..bcc00574fc3 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-web", - "version": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry Web Tracer", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -57,18 +57,18 @@ "devDependencies": { "@babel/core": "7.22.9", "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/context-zone": "1.15.0", - "@opentelemetry/propagator-b3": "1.15.0", - "@opentelemetry/resources": "1.15.0", + "@opentelemetry/context-zone": "1.15.1", + "@opentelemetry/propagator-b3": "1.15.1", + "@opentelemetry/resources": "1.15.1", "@types/jquery": "3.5.16", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -92,9 +92,9 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0" + "@opentelemetry/core": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-web", "sideEffects": false diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index 367416299af..59473df709c 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/semantic-conventions", - "version": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry semantic conventions", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index fbbb58096ce..26a8ba076ec 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opentracing", - "version": "1.15.0", + "version": "1.15.1", "description": "OpenTracing to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -43,9 +43,9 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/propagator-b3": "1.15.0", - "@opentelemetry/propagator-jaeger": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", + "@opentelemetry/propagator-b3": "1.15.1", + "@opentelemetry/propagator-jaeger": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", @@ -60,8 +60,8 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/semantic-conventions": "1.15.0", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.1", "opentracing": "^0.14.4" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-shim-opentracing", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 7aaf05fd682..f0abbe927a8 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-metrics", - "version": "1.15.0", + "version": "1.15.1", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -54,15 +54,15 @@ "access": "public" }, "devDependencies": { + "@babel/core": "7.22.9", "@opentelemetry/api": ">=1.3.0 <1.5.0", "@types/lodash.merge": "4.6.7", - "@babel/core": "7.22.9", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "babel-plugin-istanbul": "6.1.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage": "2.2.1", @@ -84,8 +84,8 @@ "@opentelemetry/api": ">=1.3.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.0", - "@opentelemetry/resources": "1.15.0", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/resources": "1.15.1", "lodash.merge": "^4.6.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/sdk-metrics", diff --git a/packages/template/package.json b/packages/template/package.json index 3949c871fa9..4cbc426dde0 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/template", - "version": "1.15.0", + "version": "1.15.1", "private": true, "publishConfig": { "access": "restricted" diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 16f2d6e9bcd..04d420abec7 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/selenium-tests", - "version": "1.15.0", + "version": "1.15.1", "private": true, "description": "OpenTelemetry Selenium Tests", "main": "index.js", @@ -56,16 +56,16 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "1.15.0", - "@opentelemetry/core": "1.15.0", - "@opentelemetry/exporter-trace-otlp-http": "0.41.0", - "@opentelemetry/exporter-zipkin": "1.15.0", - "@opentelemetry/instrumentation": "0.41.0", - "@opentelemetry/instrumentation-fetch": "0.41.0", - "@opentelemetry/instrumentation-xml-http-request": "0.41.0", - "@opentelemetry/sdk-metrics": "1.15.0", - "@opentelemetry/sdk-trace-base": "1.15.0", - "@opentelemetry/sdk-trace-web": "1.15.0", + "@opentelemetry/context-zone-peer-dep": "1.15.1", + "@opentelemetry/core": "1.15.1", + "@opentelemetry/exporter-trace-otlp-http": "0.41.1", + "@opentelemetry/exporter-zipkin": "1.15.1", + "@opentelemetry/instrumentation": "0.41.1", + "@opentelemetry/instrumentation-fetch": "0.41.1", + "@opentelemetry/instrumentation-xml-http-request": "0.41.1", + "@opentelemetry/sdk-metrics": "1.15.1", + "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/sdk-trace-web": "1.15.1", "zone.js": "0.11.4" } } From 2b20565d105d4267de5e19a730c2401eacad43a4 Mon Sep 17 00:00:00 2001 From: Nev <54870357+MSNev@users.noreply.github.com> Date: Wed, 26 Jul 2023 09:43:54 -0700 Subject: [PATCH 16/70] fix: Add otel-api as dev dep for sandbox tests (#4020) * fix: Add otel-api as dev dep for sandbox tests * fix changelog formatting --- CHANGELOG.md | 2 ++ experimental/packages/exporter-logs-otlp-http/package.json | 1 + 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea4e3c0caad..b7b8a06ef38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) +* fix(opentelemetry-exporter-logs-otlp-http): Add otel-api as dev dep for tests as they are directly importing the api and which is breaking the web-sandbox tests which is using rollup + ### :books: (Refine Doc) ### :house: (Internal) diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 49e2f2eab54..8d2c4c2e92d 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -72,6 +72,7 @@ "sideEffects": false, "devDependencies": { "@babel/core": "7.22.9", + "@opentelemetry/api": "1.4.1", "@opentelemetry/api-logs": "0.41.1", "@opentelemetry/resources": "1.15.1", "@types/mocha": "10.0.1", From c021b10b142a3ea924fa29c5becea08f33443695 Mon Sep 17 00:00:00 2001 From: Aaron Abbott Date: Mon, 31 Jul 2023 06:14:12 +0000 Subject: [PATCH 17/70] fix(core): stop rounding to nearest int in hrTimeTo*seconds() functions (#4014) --- CHANGELOG.md | 1 + packages/opentelemetry-core/src/common/time.ts | 4 ++-- packages/opentelemetry-shim-opentracing/test/Shim.test.ts | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7b8a06ef38..c5f1569a883 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) * fix(opentelemetry-exporter-logs-otlp-http): Add otel-api as dev dep for tests as they are directly importing the api and which is breaking the web-sandbox tests which is using rollup +* fix(core): stop rounding to nearest int in hrTimeTo*seconds() functions [#4014](https://github.com/open-telemetry/opentelemetry-js/pull/4014/) @aabmass ### :books: (Refine Doc) diff --git a/packages/opentelemetry-core/src/common/time.ts b/packages/opentelemetry-core/src/common/time.ts index 8dd650a9927..8d3051b00c1 100644 --- a/packages/opentelemetry-core/src/common/time.ts +++ b/packages/opentelemetry-core/src/common/time.ts @@ -129,7 +129,7 @@ export function hrTimeToNanoseconds(time: api.HrTime): number { * @param time */ export function hrTimeToMilliseconds(time: api.HrTime): number { - return Math.round(time[0] * 1e3 + time[1] / 1e6); + return time[0] * 1e3 + time[1] / 1e6; } /** @@ -137,7 +137,7 @@ export function hrTimeToMilliseconds(time: api.HrTime): number { * @param time */ export function hrTimeToMicroseconds(time: api.HrTime): number { - return Math.round(time[0] * 1e6 + time[1] / 1e3); + return time[0] * 1e6 + time[1] / 1e3; } /** diff --git a/packages/opentelemetry-shim-opentracing/test/Shim.test.ts b/packages/opentelemetry-shim-opentracing/test/Shim.test.ts index cd3749a681b..2da2f800035 100644 --- a/packages/opentelemetry-shim-opentracing/test/Shim.test.ts +++ b/packages/opentelemetry-shim-opentracing/test/Shim.test.ts @@ -261,7 +261,7 @@ describe('OpenTracing Shim', () => { assert.strictEqual(otSpan.links.length, 1); assert.deepStrictEqual( hrTimeToMilliseconds(otSpan.startTime), - Math.round(now + adjustment + performance.timeOrigin) + now + adjustment + performance.timeOrigin ); assert.deepStrictEqual(otSpan.attributes, opentracingOptions.tags); }); @@ -495,7 +495,7 @@ describe('OpenTracing Shim', () => { const adjustment = otSpan['_performanceOffset']; assert.deepStrictEqual( hrTimeToMilliseconds(otSpan.endTime), - Math.round(now + adjustment + performance.timeOrigin) + now + adjustment + performance.timeOrigin ); }); From 0755a5c076726f839b2d6bee66a4889ef1fc8d48 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 1 Aug 2023 14:20:02 +0200 Subject: [PATCH 18/70] fix(ci): don't collect coverage for eol tests (#4030) --- .github/workflows/unit-test.yml | 7 ++++++- api/package.json | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index e326aa822eb..241e487cec4 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -201,4 +201,9 @@ jobs: - name: Test working-directory: ./api - run: npm test + # running test:eol as node 8 is not supported anymore by the version of nyc we use, as we don't report coverage + # for this step we leave it out. + # Details: nyc requires istanbul-lib-report, which silently dropped support for Node.js v8 when going from + # 3.0.0 to 3.0.1 by requiring make-dir@^4.0.0 to fix https://github.com/advisories/GHSA-c2qf-rxjj-qqgw. + # make-dir does not support Node.js v8 anymore. + run: npm run test:eol diff --git a/api/package.json b/api/package.json index d857ae33f4d..f73aef244f1 100644 --- a/api/package.json +++ b/api/package.json @@ -25,6 +25,7 @@ "lint": "eslint . --ext .ts", "test:browser": "karma start --single-run", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", + "test:eol": "ts-mocha -p tsconfig.json 'test/**/*.test.ts'", "test:webworker": "karma start karma.worker.js --single-run", "cycle-check": "dpdm --exit-code circular:1 src/index.ts", "version": "node ../scripts/version-update.js", From 1a7488ecdd1b43c5df2b9524b5592160a9023cee Mon Sep 17 00:00:00 2001 From: Aaron Abbott Date: Tue, 1 Aug 2023 13:21:01 +0000 Subject: [PATCH 19/70] chore(exporter-logs-otlp-http): commit missing generated changes to tsconfig.json (#4032) Co-authored-by: Marc Pichler --- .../packages/exporter-logs-otlp-http/tsconfig.esm.json | 3 +++ .../packages/exporter-logs-otlp-http/tsconfig.esnext.json | 3 +++ experimental/packages/exporter-logs-otlp-http/tsconfig.json | 3 +++ 3 files changed, 9 insertions(+) diff --git a/experimental/packages/exporter-logs-otlp-http/tsconfig.esm.json b/experimental/packages/exporter-logs-otlp-http/tsconfig.esm.json index f7353a3e878..0edcb89fa73 100644 --- a/experimental/packages/exporter-logs-otlp-http/tsconfig.esm.json +++ b/experimental/packages/exporter-logs-otlp-http/tsconfig.esm.json @@ -9,6 +9,9 @@ "src/**/*.ts" ], "references": [ + { + "path": "../../../api" + }, { "path": "../../../packages/opentelemetry-core" }, diff --git a/experimental/packages/exporter-logs-otlp-http/tsconfig.esnext.json b/experimental/packages/exporter-logs-otlp-http/tsconfig.esnext.json index 7a3b4e394e3..0c19aa0aaf1 100644 --- a/experimental/packages/exporter-logs-otlp-http/tsconfig.esnext.json +++ b/experimental/packages/exporter-logs-otlp-http/tsconfig.esnext.json @@ -9,6 +9,9 @@ "src/**/*.ts" ], "references": [ + { + "path": "../../../api" + }, { "path": "../../../packages/opentelemetry-core" }, diff --git a/experimental/packages/exporter-logs-otlp-http/tsconfig.json b/experimental/packages/exporter-logs-otlp-http/tsconfig.json index e347a2eef98..96f229bb8ef 100644 --- a/experimental/packages/exporter-logs-otlp-http/tsconfig.json +++ b/experimental/packages/exporter-logs-otlp-http/tsconfig.json @@ -9,6 +9,9 @@ "test/**/*.ts" ], "references": [ + { + "path": "../../../api" + }, { "path": "../../../packages/opentelemetry-core" }, From 87fff2ece4d1d502699dc0f20c9bf951393fb7cb Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 1 Aug 2023 16:12:40 +0200 Subject: [PATCH 20/70] fix(instrumentation-grpc): instrument @grpc/grpc-js Client methods (#3804) --- experimental/CHANGELOG.md | 1 + .../.eslintignore | 1 + .../package.json | 9 +- .../src/grpc-js/clientUtils.ts | 224 ++--- .../src/grpc-js/index.ts | 202 ++++- .../src/grpc-js/types.ts | 4 + .../test/.gitignore | 1 + .../test/fixtures/buf.gen.yaml | 9 + .../test/fixtures/buf.lock | 8 + .../test/fixtures/buf.yaml | 9 + .../test/grpc-protobuf-ts.test.ts | 831 ++++++++++++++++++ .../test/helper.ts | 296 +++---- .../test/protobuf-ts-utils.ts | 111 +++ 13 files changed, 1440 insertions(+), 266 deletions(-) create mode 100644 experimental/packages/opentelemetry-instrumentation-grpc/test/.gitignore create mode 100644 experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.gen.yaml create mode 100644 experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.lock create mode 100644 experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.yaml create mode 100644 experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-protobuf-ts.test.ts create mode 100644 experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 38d9b83974d..fa0d69b5026 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -81,6 +81,7 @@ All notable changes to experimental packages in this project will be documented * fix(sdk-node): use resource interface instead of concrete class [#3803](https://github.com/open-telemetry/opentelemetry-js/pull/3803) @blumamir * fix(sdk-logs): remove includeTraceContext configuration and use LogRecord context when available [#3817](https://github.com/open-telemetry/opentelemetry-js/pull/3817) @hectorhdzg +* fix(instrumentation-grpc): instrument @grpc/grpc-js Client methods [#3804](https://github.com/open-telemetry/opentelemetry-js/pull/3804) @pichlermarc ## 0.39.1 diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/.eslintignore b/experimental/packages/opentelemetry-instrumentation-grpc/.eslintignore index 378eac25d31..cd163f08bef 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/.eslintignore +++ b/experimental/packages/opentelemetry-instrumentation-grpc/.eslintignore @@ -1 +1,2 @@ build +test/proto diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 51b63587597..f3e705dd626 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -9,7 +9,7 @@ "prepublishOnly": "npm run compile", "compile": "tsc --build", "clean": "tsc --build --clean", - "test": "nyc ts-mocha -p tsconfig.json test/**/*.test.ts", + "test": "npm run protos:generate && nyc ts-mocha -p tsconfig.json test/**/*.test.ts", "tdd": "npm run test -- --watch-extensions ts --watch", "lint": "eslint . --ext .ts", "lint:fix": "eslint . --ext .ts --fix", @@ -18,7 +18,8 @@ "watch": "tsc --build --watch", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "node ../../../scripts/version-update.js", - "peer-api-check": "node ../../../scripts/peer-api-check.js" + "peer-api-check": "node ../../../scripts/peer-api-check.js", + "protos:generate": "cd test/fixtures && buf generate" }, "keywords": [ "opentelemetry", @@ -45,6 +46,10 @@ "access": "public" }, "devDependencies": { + "@bufbuild/buf": "1.21.0-1", + "@protobuf-ts/grpc-transport": "2.9.0", + "@protobuf-ts/runtime-rpc": "2.9.0", + "@protobuf-ts/runtime": "2.9.0", "@grpc/grpc-js": "^1.7.1", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/clientUtils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/clientUtils.ts index c61edf771b8..9e26062d1c8 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/clientUtils.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/clientUtils.ts @@ -22,9 +22,8 @@ import type { GrpcJsInstrumentation } from './'; import type { GrpcClientFunc, SendUnaryDataCallback } from './types'; import type { metadataCaptureType } from '../internal-types'; -import { SpanStatusCode, propagation, context } from '@opentelemetry/api'; +import { propagation, context } from '@opentelemetry/api'; import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; -import { CALL_SPAN_ENDED } from './serverUtils'; import { AttributeNames } from '../enums/AttributeNames'; import { GRPC_STATUS_CODE_OK } from '../status-code'; import { @@ -32,6 +31,7 @@ import { _grpcStatusCodeToOpenTelemetryStatusCode, _methodIsIgnored, } from '../utils'; +import { errorMonitor } from 'events'; /** * Parse a package method list and return a list of methods to patch @@ -63,6 +63,91 @@ export function getMethodsToWrap( return methodList; } +/** + * Patches a callback so that the current span for this trace is also ended + * when the callback is invoked. + */ +export function patchedCallback( + span: Span, + callback: SendUnaryDataCallback +) { + const wrappedFn: SendUnaryDataCallback = ( + err: grpcJs.ServiceError | null, + res?: ResponseType + ) => { + if (err) { + if (err.code) { + span.setStatus(_grpcStatusCodeToSpanStatus(err.code)); + span.setAttribute(SemanticAttributes.RPC_GRPC_STATUS_CODE, err.code); + } + span.setAttributes({ + [AttributeNames.GRPC_ERROR_NAME]: err.name, + [AttributeNames.GRPC_ERROR_MESSAGE]: err.message, + }); + } else { + span.setAttribute( + SemanticAttributes.RPC_GRPC_STATUS_CODE, + GRPC_STATUS_CODE_OK + ); + } + + span.end(); + callback(err, res); + }; + return context.bind(context.active(), wrappedFn); +} + +export function patchResponseMetadataEvent( + span: Span, + call: EventEmitter, + metadataCapture: metadataCaptureType +) { + call.on('metadata', (responseMetadata: any) => { + metadataCapture.client.captureResponseMetadata(span, responseMetadata); + }); +} + +export function patchResponseStreamEvents(span: Span, call: EventEmitter) { + // Both error and status events can be emitted + // the first one emitted set spanEnded to true + let spanEnded = false; + const endSpan = () => { + if (!spanEnded) { + span.end(); + spanEnded = true; + } + }; + context.bind(context.active(), call); + call.on(errorMonitor, (err: ServiceError) => { + if (spanEnded) { + return; + } + + span.setStatus({ + code: _grpcStatusCodeToOpenTelemetryStatusCode(err.code), + message: err.message, + }); + span.setAttributes({ + [AttributeNames.GRPC_ERROR_NAME]: err.name, + [AttributeNames.GRPC_ERROR_MESSAGE]: err.message, + [SemanticAttributes.RPC_GRPC_STATUS_CODE]: err.code, + }); + + endSpan(); + }); + + call.on('status', (status: SpanStatus) => { + if (spanEnded) { + return; + } + + span.setStatus(_grpcStatusCodeToSpanStatus(status.code)); + span.setAttribute(SemanticAttributes.RPC_GRPC_STATUS_CODE, status.code); + + endSpan(); + }); +} + /** * Execute grpc client call. Apply completitionspan properties and end the * span on callback or receiving an emitted event. @@ -71,44 +156,9 @@ export function makeGrpcClientRemoteCall( metadataCapture: metadataCaptureType, original: GrpcClientFunc, args: unknown[], - metadata: Metadata, - self: Client + metadata: grpcJs.Metadata, + self: grpcJs.Client ): (span: Span) => EventEmitter { - /** - * Patches a callback so that the current span for this trace is also ended - * when the callback is invoked. - */ - function patchedCallback( - span: Span, - callback: SendUnaryDataCallback - ) { - const wrappedFn: SendUnaryDataCallback = ( - err: ServiceError | null, - res?: ResponseType - ) => { - if (err) { - if (err.code) { - span.setStatus(_grpcStatusCodeToSpanStatus(err.code)); - span.setAttribute(SemanticAttributes.RPC_GRPC_STATUS_CODE, err.code); - } - span.setAttributes({ - [AttributeNames.GRPC_ERROR_NAME]: err.name, - [AttributeNames.GRPC_ERROR_MESSAGE]: err.message, - }); - } else { - span.setStatus({ code: SpanStatusCode.UNSET }); - span.setAttribute( - SemanticAttributes.RPC_GRPC_STATUS_CODE, - GRPC_STATUS_CODE_OK - ); - } - - span.end(); - callback(err, res); - }; - return context.bind(context.active(), wrappedFn); - } - return (span: Span) => { // if unary or clientStream if (!original.responseStream) { @@ -132,67 +182,18 @@ export function makeGrpcClientRemoteCall( // if server stream or bidi if (original.responseStream) { - // Both error and status events can be emitted - // the first one emitted set spanEnded to true - let spanEnded = false; - const endSpan = () => { - if (!spanEnded) { - span.end(); - spanEnded = true; - } - }; - context.bind(context.active(), call); - call.on('error', (err: ServiceError) => { - if (call[CALL_SPAN_ENDED]) { - return; - } - call[CALL_SPAN_ENDED] = true; - - span.setStatus({ - code: _grpcStatusCodeToOpenTelemetryStatusCode(err.code), - message: err.message, - }); - span.setAttributes({ - [AttributeNames.GRPC_ERROR_NAME]: err.name, - [AttributeNames.GRPC_ERROR_MESSAGE]: err.message, - [SemanticAttributes.RPC_GRPC_STATUS_CODE]: err.code, - }); - - endSpan(); - }); - - call.on('status', (status: SpanStatus) => { - if (call[CALL_SPAN_ENDED]) { - return; - } - call[CALL_SPAN_ENDED] = true; - - span.setStatus(_grpcStatusCodeToSpanStatus(status.code)); - span.setAttribute(SemanticAttributes.RPC_GRPC_STATUS_CODE, status.code); - - endSpan(); - }); + patchResponseStreamEvents(span, call); } return call; }; } -/** - * Returns the metadata argument from user provided arguments (`args`) - */ -export function getMetadata( - this: GrpcJsInstrumentation, - original: GrpcClientFunc, - grpcClient: typeof grpcJs, - args: Array -): Metadata { - let metadata: Metadata; - +export function getMetadataIndex(args: Array): number { // This finds an instance of Metadata among the arguments. // A possible issue that could occur is if the 'options' parameter from // the user contains an '_internal_repr' as well as a 'getMap' function, // but this is an extremely rare case. - let metadataIndex = args.findIndex((arg: unknown | Metadata) => { + return args.findIndex((arg: unknown | Metadata) => { return ( arg && typeof arg === 'object' && @@ -200,22 +201,45 @@ export function getMetadata( typeof (arg as Metadata).getMap === 'function' ); }); +} + +/** + * Returns the metadata argument from user provided arguments (`args`) + * If no metadata is provided in `args`: adds empty metadata to `args` and returns that empty metadata + */ +export function extractMetadataOrSplice( + grpcLib: typeof grpcJs, + args: Array, + spliceIndex: number +) { + let metadata: grpcJs.Metadata; + const metadataIndex = getMetadataIndex(args); if (metadataIndex === -1) { - metadata = new grpcClient.Metadata(); - if (!original.requestStream) { - // unary or server stream - metadataIndex = 1; - } else { - // client stream or bidi - metadataIndex = 0; - } - args.splice(metadataIndex, 0, metadata); + // Create metadata if it does not exist + metadata = new grpcLib.Metadata(); + args.splice(spliceIndex, 0, metadata); } else { metadata = args[metadataIndex] as Metadata; } return metadata; } +/** + * Returns the metadata argument from user provided arguments (`args`) + * Adds empty metadata to arguments if the default is used. + */ +export function extractMetadataOrSpliceDefault( + grpcClient: typeof grpcJs, + original: GrpcClientFunc, + args: Array +): grpcJs.Metadata { + return extractMetadataOrSplice( + grpcClient, + args, + original.requestStream ? 0 : 1 + ); +} + /** * Inject opentelemetry trace context into `metadata` for use by another * grpc receiver diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts index 72ad45e3bd2..36be79fd074 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts @@ -26,6 +26,7 @@ import type { loadPackageDefinition, GrpcObject, } from '@grpc/grpc-js'; + import type * as grpcJs from '@grpc/grpc-js'; import type { @@ -36,6 +37,7 @@ import type { MakeClientConstructorFunction, PackageDefinition, GrpcClientFunc, + ClientRequestFunction, } from './types'; import type { GrpcInstrumentationConfig } from '../types'; import type { metadataCaptureType } from '../internal-types'; @@ -47,6 +49,7 @@ import { SpanOptions, SpanKind, trace, + Span, } from '@opentelemetry/api'; import { InstrumentationNodeModuleDefinition, @@ -63,9 +66,19 @@ import { import { getMethodsToWrap, makeGrpcClientRemoteCall, - getMetadata, + extractMetadataOrSpliceDefault, + setSpanContext, + patchedCallback, + patchResponseStreamEvents, + patchResponseMetadataEvent, + extractMetadataOrSplice, } from './clientUtils'; -import { _extractMethodAndService, metadataCapture, URI_REGEX } from '../utils'; +import { + _extractMethodAndService, + metadataCapture, + URI_REGEX, + _methodIsIgnored, +} from '../utils'; import { AttributeValues } from '../enums/AttributeValues'; export class GrpcJsInstrumentation extends InstrumentationBase { @@ -121,6 +134,41 @@ export class GrpcJsInstrumentation extends InstrumentationBase { 'loadPackageDefinition', this._patchLoadPackageDefinition(moduleExports) ); + if (isWrapped(moduleExports.Client.prototype)) { + this._unwrap(moduleExports.Client.prototype, 'makeUnaryRequest'); + this._unwrap( + moduleExports.Client.prototype, + 'makeClientStreamRequest' + ); + this._unwrap( + moduleExports.Client.prototype, + 'makeServerStreamRequest' + ); + this._unwrap( + moduleExports.Client.prototype, + 'makeBidiStreamRequest' + ); + } + this._wrap( + moduleExports.Client.prototype, + 'makeUnaryRequest', + this._patchClientRequestMethod(moduleExports, false) as any + ); + this._wrap( + moduleExports.Client.prototype, + 'makeClientStreamRequest', + this._patchClientRequestMethod(moduleExports, false) as any + ); + this._wrap( + moduleExports.Client.prototype, + 'makeServerStreamRequest', + this._patchClientRequestMethod(moduleExports, true) as any + ); + this._wrap( + moduleExports.Client.prototype, + 'makeBidiStreamRequest', + this._patchClientRequestMethod(moduleExports, true) as any + ); return moduleExports; }, (moduleExports, version) => { @@ -131,6 +179,16 @@ export class GrpcJsInstrumentation extends InstrumentationBase { this._unwrap(moduleExports, 'makeClientConstructor'); this._unwrap(moduleExports, 'makeGenericClientConstructor'); this._unwrap(moduleExports, 'loadPackageDefinition'); + this._unwrap(moduleExports.Client.prototype, 'makeUnaryRequest'); + this._unwrap( + moduleExports.Client.prototype, + 'makeClientStreamRequest' + ); + this._unwrap( + moduleExports.Client.prototype, + 'makeServerStreamRequest' + ); + this._unwrap(moduleExports.Client.prototype, 'makeBidiStreamRequest'); } ), ]; @@ -257,6 +315,84 @@ export class GrpcJsInstrumentation extends InstrumentationBase { }; } + /** + * Patch for grpc.Client.make*Request(...) functions. + * Provides auto-instrumentation for client requests when using a Client without + * makeGenericClientConstructor/makeClientConstructor + */ + private _patchClientRequestMethod( + grpcLib: typeof grpcJs, + hasResponseStream: boolean + ): ( + original: ClientRequestFunction + ) => ClientRequestFunction { + const instrumentation = this; + return (original: ClientRequestFunction) => { + instrumentation._diag.debug( + 'patched makeClientStreamRequest on grpc client' + ); + + return function makeClientStreamRequest(this: grpcJs.Client) { + // method must always be at first position + const method = arguments[0]; + const { name, service, methodAttributeValue } = + instrumentation._splitMethodString(method); + + // Do not attempt to trace/inject context if method is ignored + if ( + method != null && + _methodIsIgnored( + methodAttributeValue, + instrumentation.getConfig().ignoreGrpcMethods + ) + ) { + return original.apply(this, [...arguments]); + } + + const modifiedArgs = [...arguments]; + const metadata = extractMetadataOrSplice(grpcLib, modifiedArgs, 4); + + const span = instrumentation.createClientSpan( + name, + methodAttributeValue, + service, + metadata + ); + instrumentation.extractNetMetadata(this, span); + + // Callback is only present when there is no responseStream + if (!hasResponseStream) { + // Replace the callback with the patched one if it is there. + // If the callback arg is not a function on the last position then the client will throw + // and never call the callback -> so there's nothing to patch + const lastArgIndex = modifiedArgs.length - 1; + const callback = modifiedArgs[lastArgIndex]; + if (typeof callback === 'function') { + modifiedArgs[lastArgIndex] = patchedCallback(span, callback); + } + } + + return context.with(trace.setSpan(context.active(), span), () => { + setSpanContext(metadata); + + const call = original.apply(this, [...modifiedArgs]); + patchResponseMetadataEvent( + span, + call, + instrumentation._metadataCapture + ); + + // Subscribe to response stream events when there's a response stream. + if (hasResponseStream) { + patchResponseStreamEvents(span, call); + } + + return call; + }); + }; + }; + } + /** * Entry point for applying client patches to `grpc.makeClientConstructor(...)` equivalents * @param this GrpcJsPlugin @@ -320,10 +456,10 @@ export class GrpcJsInstrumentation extends InstrumentationBase { function clientMethodTrace(this: Client) { const name = `grpc.${original.path.replace('/', '')}`; const args = [...arguments]; - const metadata = getMetadata.call( + const metadata = extractMetadataOrSpliceDefault.call( instrumentation, - original, grpcClient, + original, args ); const { service, method } = _extractMethodAndService(original.path); @@ -335,18 +471,7 @@ export class GrpcJsInstrumentation extends InstrumentationBase { [SemanticAttributes.RPC_METHOD]: method, [SemanticAttributes.RPC_SERVICE]: service, }); - // set net.peer.* from target (e.g., "dns:otel-productcatalogservice:8080") as a hint to APMs - const parsedUri = URI_REGEX.exec(this.getChannel().getTarget()); - if (parsedUri != null && parsedUri.groups != null) { - span.setAttribute( - SemanticAttributes.NET_PEER_NAME, - parsedUri.groups['name'] - ); - span.setAttribute( - SemanticAttributes.NET_PEER_PORT, - parseInt(parsedUri.groups['port']) - ); - } + instrumentation.extractNetMetadata(this, span); instrumentation._metadataCapture.client.captureRequestMetadata( span, @@ -368,6 +493,51 @@ export class GrpcJsInstrumentation extends InstrumentationBase { }; } + private _splitMethodString(method: string) { + if (method == null) { + return { name: '', service: '', methodAttributeValue: '' }; + } + const name = `grpc.${method.replace('/', '')}`; + const { service, method: methodAttributeValue } = + _extractMethodAndService(method); + return { name, service, methodAttributeValue }; + } + + private createClientSpan( + name: string, + methodAttributeValue: string, + service: string, + metadata?: grpcJs.Metadata + ) { + const span = this.tracer + .startSpan(name, { kind: SpanKind.CLIENT }) + .setAttributes({ + [SemanticAttributes.RPC_SYSTEM]: 'grpc', + [SemanticAttributes.RPC_METHOD]: methodAttributeValue, + [SemanticAttributes.RPC_SERVICE]: service, + }); + + if (metadata != null) { + this._metadataCapture.client.captureRequestMetadata(span, metadata); + } + return span; + } + + private extractNetMetadata(client: grpcJs.Client, span: Span) { + // set net.peer.* from target (e.g., "dns:otel-productcatalogservice:8080") as a hint to APMs + const parsedUri = URI_REGEX.exec(client.getChannel().getTarget()); + if (parsedUri != null && parsedUri.groups != null) { + span.setAttribute( + SemanticAttributes.NET_PEER_NAME, + parsedUri.groups['name'] + ); + span.setAttribute( + SemanticAttributes.NET_PEER_PORT, + parseInt(parsedUri.groups['port']) + ); + } + } + /** * Utility function to patch *all* functions loaded through a proto file. * Recursively searches for Client classes and patches all methods, reversing the diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/types.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/types.ts index e9f15b45ab0..06ca7c0b61c 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/types.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/types.ts @@ -64,6 +64,10 @@ export type GrpcClientFunc = ((...args: unknown[]) => GrpcEmitter) & { export type ServerRegisterFunction = typeof Server.prototype.register; +export type ClientRequestFunction = ( + ...args: unknown[] +) => ReturnType; + export type MakeClientConstructorFunction = typeof makeGenericClientConstructor; export type { HandleCall } from '@grpc/grpc-js/build/src/server-call'; diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/.gitignore b/experimental/packages/opentelemetry-instrumentation-grpc/test/.gitignore new file mode 100644 index 00000000000..c9438a302c0 --- /dev/null +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/.gitignore @@ -0,0 +1 @@ +/proto diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.gen.yaml b/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.gen.yaml new file mode 100644 index 00000000000..a0aba044f1d --- /dev/null +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.gen.yaml @@ -0,0 +1,9 @@ +version: v1 +plugins: + - plugin: buf.build/community/timostamm-protobuf-ts:v2.9.0 + out: ../../test/proto/ts/fixtures + opt: + - long_type_string + - generate_dependencies + - ts_nocheck + diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.lock b/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.lock new file mode 100644 index 00000000000..65d8f1f75c5 --- /dev/null +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.lock @@ -0,0 +1,8 @@ +# Generated by buf. DO NOT EDIT. +version: v1 +deps: + - remote: buf.build + owner: googleapis + repository: googleapis + commit: cc916c31859748a68fd229a3c8d7a2e8 + digest: shake256:469b049d0eb04203d5272062636c078decefc96fec69739159c25d85349c50c34c7706918a8b216c5c27f76939df48452148cff8c5c3ae77fa6ba5c25c1b8bf8 diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.yaml b/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.yaml new file mode 100644 index 00000000000..dc977e439a7 --- /dev/null +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.yaml @@ -0,0 +1,9 @@ +version: v1 +lint: + use: + - DEFAULT +breaking: + use: + - FILE +deps: + - buf.build/googleapis/googleapis diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-protobuf-ts.test.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-protobuf-ts.test.ts new file mode 100644 index 00000000000..8e238a6acc1 --- /dev/null +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-protobuf-ts.test.ts @@ -0,0 +1,831 @@ +/* + * 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 { GrpcInstrumentation } from '../src'; + +const instrumentation = new GrpcInstrumentation(); +instrumentation.enable(); +instrumentation.disable(); + +import { GrpcTransport } from '@protobuf-ts/grpc-transport'; +import * as grpc from '@grpc/grpc-js'; +import { GrpcTesterClient } from './proto/ts/fixtures/grpc-test.client'; +import { + InMemorySpanExporter, + NodeTracerProvider, + SimpleSpanProcessor, +} from '@opentelemetry/sdk-trace-node'; +import * as protoLoader from '@grpc/proto-loader'; +import * as path from 'path'; +import * as assert from 'assert'; +import { + context, + ContextManager, + propagation, + SpanKind, + trace, +} from '@opentelemetry/api'; +import { W3CTraceContextPropagator } from '@opentelemetry/core'; +import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks'; +import { startServer } from './helper'; +import { + assertExportedSpans, + assertNoSpansExported, + SpanAssertionFunction, + TestFunction, +} from './protobuf-ts-utils'; + +const memoryExporter = new InMemorySpanExporter(); +const PROTO_PATH = path.resolve(__dirname, './fixtures/grpc-test.proto'); +const NO_ERROR = grpc.status.UNAUTHENTICATED + 1; + +/** + * Creates a client generated via protobuf-ts that is using the {@link grpc.Client} class + * directly. + */ +function createClient() { + return new GrpcTesterClient( + new GrpcTransport({ + host: 'localhost:3333', + channelCredentials: grpc.credentials.createInsecure(), + }) + ); +} + +/** + * Loads the server from proto and starts it on port 3333. + */ +async function loadAndStartServer() { + const options = { + keepCase: true, + longs: String, + enums: String, + defaults: true, + oneofs: true, + }; + + // Reloading from proto is needed as only servers loaded after the + // instrumentation is enabled will be instrumented. + const packageDefinition = await protoLoader.load(PROTO_PATH, options); + const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + return startServer(proto, 3333); +} + +/** + * Creates a list of test data that includes all possible cases of status codes + * returned by the server, the input for the server to provoke the status codes, + * and the expected result code that should be present on the span. + */ +function getStatusCodeTestData(): { + // Name of the key used in the test (OK, UNAUTHENTICATED, DATA_LOSS, ...) + key: string; + // Input for the server implementation that will provoke the status code from 'key' + input: number; + // The result code that should be present on the created span + expectedResultCode: number; +}[] { + const codes = Object.keys(grpc.status) + .filter(key => !isNaN(Number(grpc.status[key as any]))) + // Remove 'OK' as the test server has special behavior to provoke an 'OK' response + .filter(key => key !== 'OK') + // Create the test data + .map(key => { + return { + key: key, + input: Number(grpc.status[key as any]), + expectedResultCode: Number(grpc.status[key as any]), + }; + }); + + // Push 'OK' with special input to provoke 'OK' response from test-server + codes.push({ + key: 'OK', + input: NO_ERROR, + expectedResultCode: grpc.status.OK, + }); + + return codes; +} + +/** + * Creates tests that assert that no spans are created. + * @param statusCodeTestWithRootSpan function that creates tests that include a root span + * @param statusCodeTestNoRootSpan function that creates tests that do not include a root span + */ +function shouldNotCreateSpans( + statusCodeTestWithRootSpan: TestFunction, + statusCodeTestNoRootSpan: TestFunction +) { + describe('with root span', () => { + getStatusCodeTestData().forEach(({ key, input, expectedResultCode }) => { + statusCodeTestWithRootSpan( + input, + key, + expectedResultCode, + assertNoSpansExported + ); + }); + }); + + describe('without root span', () => { + getStatusCodeTestData().forEach(({ key, input, expectedResultCode }) => { + statusCodeTestNoRootSpan( + input, + key, + expectedResultCode, + assertNoSpansExported + ); + }); + }); +} + +describe('#grpc-protobuf', () => { + let client: GrpcTesterClient; + let server: grpc.Server; + const provider = new NodeTracerProvider(); + let contextManager: ContextManager; + provider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); + + before(() => { + propagation.setGlobalPropagator(new W3CTraceContextPropagator()); + instrumentation.setTracerProvider(provider); + }); + + beforeEach(() => { + memoryExporter.reset(); + contextManager = new AsyncHooksContextManager().enable(); + context.setGlobalContextManager(contextManager); + }); + + describe('client', async () => { + beforeEach(async () => { + instrumentation.enable(); + client = createClient(); + + server = await loadAndStartServer(); + }); + + afterEach(done => { + context.disable(); + server.tryShutdown(() => { + instrumentation.disable(); + done(); + }); + }); + + describe('makeUnaryRequest()', async () => { + async function act(status: number) { + return client.unaryMethod({ + num: status, + }); + } + + function statusCodeTestNoRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, async () => { + // Act + try { + const request = await act(input); + // Assert success results + assert.strictEqual(request.response.num, input); + } catch (e) { + // Assert failure results + assert.strictEqual(e.code, key); + } + // Assert span data + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'UnaryMethod', + expectedSpanStatus + ); + }); + } + + function statusCodeTestWithRootSpan( + input: number, + key: string, + expectedResultCode: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, async () => { + // Arrange + const span = provider + .getTracer('default') + .startSpan('TestSpan', { kind: SpanKind.PRODUCER }); + return context.with( + trace.setSpan(context.active(), span), + async () => { + const rootSpan = trace.getSpan(context.active()); + assert.ok(rootSpan != null); + assert.deepStrictEqual(rootSpan, span); + + // Act + try { + const request = await act(input); + // Assert success results + assert.strictEqual(request.response.num, input); + } catch (e) { + // Assert failure results + assert.strictEqual(e.code, key); + } + + // Assert + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'UnaryMethod', + expectedResultCode, + rootSpan + ); + } + ); + }); + } + + describe('should create root client span and server child span', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestNoRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should create child client span when parent span exists', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestWithRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should not create any spans when disabled', () => { + beforeEach(done => { + instrumentation.disable(); + server.tryShutdown(() => { + loadAndStartServer().then(loadedServer => { + server = loadedServer; + done(); + }); + }); + }); + + afterEach(() => { + instrumentation.enable(); + }); + + shouldNotCreateSpans( + statusCodeTestWithRootSpan, + statusCodeTestNoRootSpan + ); + }); + }); + + describe('makeClientStreamRequest()', () => { + async function act(input: number) { + const call = client.clientStreamMethod({ + num: input, + }); + + await call.requests.send({ num: input }); + await call.requests.send({ num: input }); + await call.requests.complete(); + + return await call.response; + } + + async function statusCodeTestNoRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, async () => { + // Act + try { + const response = await act(input); + // Assert success results + assert.strictEqual(response.num, input * 2); + } catch (e) { + // Assert failure results + assert.strictEqual(e.code, key); + } + + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'ClientStreamMethod', + expectedSpanStatus + ); + }); + } + + async function statusCodeTestWithRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, async () => { + // Arrange + const span = provider + .getTracer('default') + .startSpan('TestSpan', { kind: SpanKind.PRODUCER }); + return context.with( + trace.setSpan(context.active(), span), + async () => { + const rootSpan = trace.getSpan(context.active()); + assert.ok(rootSpan != null); + assert.deepStrictEqual(rootSpan, span); + + // Act + try { + const response = await act(input); + // Assert success results + assert.strictEqual(response.num, input * 2); + } catch (e) { + // Assert failure results + assert.strictEqual(e.code, key); + } + + // Assert + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'ClientStreamMethod', + expectedSpanStatus, + rootSpan + ); + } + ); + }); + } + + describe('should create root client span and server child span', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestNoRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should create child client span when parent span exists', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestWithRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should not create any spans when disabled', () => { + beforeEach(done => { + instrumentation.disable(); + server.tryShutdown(() => { + loadAndStartServer().then(loadedServer => { + server = loadedServer; + done(); + }); + }); + }); + + afterEach(() => { + instrumentation.enable(); + }); + + shouldNotCreateSpans( + statusCodeTestWithRootSpan, + statusCodeTestNoRootSpan + ); + }); + }); + + describe('makeServerStreamRequest()', () => { + function statusCodeTestNoRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, done => { + const serverStream = client.serverStreamMethod({ + num: input, + }); + + serverStream.responses.onMessage(message => { + assert.strictEqual(message.num, input); + }); + + function completeCallback() { + try { + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'ServerStreamMethod', + expectedSpanStatus + ); + } catch (err) { + // catch error and call done() to ensure an error message + // is shown in the test results instead of a test timeout + done(err); + return; + } + done(); + } + + serverStream.responses.onError(completeCallback); + serverStream.responses.onComplete(completeCallback); + }); + } + + function statusCodeTestWithRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, done => { + // Arrange + const span = provider + .getTracer('default') + .startSpan('TestSpan', { kind: SpanKind.PRODUCER }); + context.with(trace.setSpan(context.active(), span), async () => { + const rootSpan = trace.getSpan(context.active()); + assert.ok(rootSpan != null); + assert.deepStrictEqual(rootSpan, span); + + // Act + const serverStream = client.serverStreamMethod({ + num: input, + }); + + serverStream.responses.onMessage(message => { + assert.strictEqual(message.num, input); + }); + + function completeCallback() { + try { + // Assert + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'ServerStreamMethod', + expectedSpanStatus, + rootSpan + ); + } catch (err) { + // catch error and call done() to ensure an error message + // is shown in the test results instead of a test timeout + done(err); + return; + } + done(); + } + + serverStream.responses.onError(completeCallback); + serverStream.responses.onComplete(completeCallback); + }); + }); + } + + describe('should create root client span and server child span', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestNoRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should create child client span when parent span exists', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestWithRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should not create any spans when disabled', () => { + beforeEach(done => { + instrumentation.disable(); + server.tryShutdown(() => { + loadAndStartServer().then(loadedServer => { + server = loadedServer; + done(); + }); + }); + }); + + afterEach(() => { + instrumentation.enable(); + }); + + shouldNotCreateSpans( + statusCodeTestWithRootSpan, + statusCodeTestNoRootSpan + ); + }); + }); + + describe('makeBidiStreamRequest()', () => { + function statusCodeTestNoRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, done => { + const bidiStream = client.bidiStreamMethod(); + + bidiStream.responses.onMessage(message => { + assert.strictEqual(message.num, input); + }); + + function completeHandler() { + try { + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'BidiStreamMethod', + expectedSpanStatus + ); + } catch (err) { + // catch error and call done() to ensure an error message + // is shown in the test results instead of a test timeout + done(err); + return; + } + done(); + } + + bidiStream.responses.onError(completeHandler); + bidiStream.responses.onComplete(completeHandler); + + bidiStream.requests.send({ + num: input, + }); + bidiStream.requests.send({ + num: input, + }); + bidiStream.requests.complete(); + }); + } + + function statusCodeTestWithRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, done => { + // Arrange + const span = provider + .getTracer('default') + .startSpan('TestSpan', { kind: SpanKind.PRODUCER }); + context.with(trace.setSpan(context.active(), span), () => { + const rootSpan = trace.getSpan(context.active()); + assert.ok(rootSpan != null); + assert.deepStrictEqual(rootSpan, span); + + // Act + const bidiStream = client.bidiStreamMethod(); + + function completeHandler() { + try { + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'BidiStreamMethod', + expectedSpanStatus, + rootSpan + ); + } catch (err) { + // catch error and call done() to ensure an error message + // is shown in the test results instead of a test timeout + done(err); + return; + } + done(); + } + + bidiStream.responses.onMessage(message => { + assert.strictEqual(message.num, input); + }); + + bidiStream.responses.onError(completeHandler); + bidiStream.responses.onComplete(completeHandler); + + bidiStream.requests.send({ + num: input, + }); + bidiStream.requests.send({ + num: input, + }); + bidiStream.requests.complete(); + }); + }); + } + + describe('should create root client span and server child span', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestNoRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should create child client span when parent span exists', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestWithRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should not create any spans when disabled', () => { + beforeEach(done => { + instrumentation.disable(); + server.tryShutdown(() => { + loadAndStartServer().then(loadedServer => { + server = loadedServer; + done(); + }); + }); + }); + + afterEach(() => { + instrumentation.enable(); + }); + + shouldNotCreateSpans( + statusCodeTestWithRootSpan, + statusCodeTestNoRootSpan + ); + }); + }); + }); + + describe('should not produce telemetry when ignored via config', () => { + beforeEach(async () => { + instrumentation.disable(); + instrumentation.setConfig({ + ignoreGrpcMethods: [ + 'UnaryMethod', + new RegExp(/^camel.*Method$/), + (str: string) => str === 'BidiStreamMethod', + ], + }); + instrumentation.enable(); + client = createClient(); + + server = await loadAndStartServer(); + }); + + it('when filtered by exact string', async () => { + await client.unaryMethod({ num: NO_ERROR }); + assertNoSpansExported( + memoryExporter, + 'pkg_test.GrpcTester', + 'UnaryMethod', + grpc.status.OK + ); + }); + + it('when filtered by RegExp', async () => { + await client.camelCaseMethod({ num: NO_ERROR }); + assertNoSpansExported( + memoryExporter, + 'pkg_test.GrpcTester', + 'UnaryMethod', + grpc.status.OK + ); + }); + + it('when filtered by predicate', done => { + const stream = client.bidiStreamMethod({ num: NO_ERROR }); + stream.requests.send({ + num: NO_ERROR, + }); + stream.requests.complete(); + + stream.responses.onComplete(() => { + assertNoSpansExported( + memoryExporter, + 'pkg_test.GrpcTester', + 'UnaryMethod', + grpc.status.OK + ); + done(); + }); + }); + + afterEach(done => { + instrumentation.setConfig({}); + context.disable(); + server.tryShutdown(() => { + instrumentation.disable(); + done(); + }); + }); + }); + + describe('should capture metadata when set up in config', () => { + beforeEach(async () => { + instrumentation.setConfig({ + metadataToSpanAttributes: { + client: { + requestMetadata: ['client_metadata_key'], + responseMetadata: ['server_metadata_key'], + }, + server: { + requestMetadata: ['client_metadata_key'], + responseMetadata: ['server_metadata_key'], + }, + }, + }); + instrumentation.enable(); + client = createClient(); + + server = await loadAndStartServer(); + }); + + it('should capture client metadata', async () => { + await client.unaryMethod( + { num: NO_ERROR }, + { + meta: { + client_metadata_key: 'client_metadata_value', + }, + } + ); + const spans = memoryExporter.getFinishedSpans(); + assert.equal( + spans[0].attributes['rpc.request.metadata.client_metadata_key'], + 'client_metadata_value' + ); + }); + + afterEach(done => { + instrumentation.setConfig({}); + context.disable(); + server.tryShutdown(() => { + instrumentation.disable(); + done(); + }); + }); + }); +}); diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts index 693cdeab463..9d861fd6512 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts @@ -34,18 +34,18 @@ import * as assert from 'assert'; import * as protoLoader from '@grpc/proto-loader'; import { status as GrpcStatus, - requestCallback, ServerUnaryCall, + requestCallback, ServerReadableStream, - ServerWritableStream, ServerDuplexStream, + ServerWritableStream, Client, Metadata, ServiceError, Server, - ServerCredentials, credentials, loadPackageDefinition, + ServerCredentials, } from '@grpc/grpc-js'; import { assertPropagation, assertSpan } from './utils/assertionUtils'; import { promisify } from 'util'; @@ -109,13 +109,149 @@ const checkEqual = ? requestEqual(x)(y) : false; +const replicate = (request: TestRequestResponse) => { + const result: TestRequestResponse[] = []; + for (let i = 0; i < request.num; i++) { + result.push(request); + } + return result; +}; + +export async function startServer(proto: any, port: number) { + const MAX_ERROR_STATUS = GrpcStatus.UNAUTHENTICATED; + const server = new Server(); + + function getError(msg: string, code: number): ServiceError | null { + const err: ServiceError = { + ...new Error(msg), + name: msg, + message: msg, + code, + details: msg, + metadata: new Metadata(), + }; + return err; + } + + server.addService(proto.GrpcTester.service, { + // An error is emitted every time + // request.num <= MAX_ERROR_STATUS = (status.UNAUTHENTICATED) + // in those cases, erro.code = request.num + + // This method returns the request + // This method returns the request + unaryMethodWithMetadata( + call: ServerUnaryCall, + callback: requestCallback + ) { + const serverMetadata: any = new Metadata(); + serverMetadata.add('server_metadata_key', 'server_metadata_value'); + + call.sendMetadata(serverMetadata); + + call.request.num <= MAX_ERROR_STATUS + ? callback( + getError( + 'Unary Method with Metadata Error', + call.request.num + ) as ServiceError + ) + : callback(null, { num: call.request.num }); + }, + + // This method returns the request + unaryMethod( + call: ServerUnaryCall, + callback: requestCallback + ) { + call.request.num <= MAX_ERROR_STATUS + ? callback( + getError('Unary Method Error', call.request.num) as ServiceError + ) + : callback(null, { num: call.request.num }); + }, + + // This method returns the request + camelCaseMethod( + call: ServerUnaryCall, + callback: requestCallback + ) { + call.request.num <= MAX_ERROR_STATUS + ? callback( + getError('Unary Method Error', call.request.num) as ServiceError + ) + : callback(null, { num: call.request.num }); + }, + + // This method sums the requests + clientStreamMethod( + call: ServerReadableStream, + callback: requestCallback + ) { + let sum = 0; + let hasError = false; + let code = GrpcStatus.OK; + call.on('data', (data: TestRequestResponse) => { + sum += data.num; + if (data.num <= MAX_ERROR_STATUS) { + hasError = true; + code = data.num; + } + }); + call.on('end', () => { + hasError + ? callback(getError('Client Stream Method Error', code) as any) + : callback(null, { num: sum }); + }); + }, + + // This method returns an array that replicates the request, request.num of + // times + serverStreamMethod: (call: ServerWritableStream) => { + const result = replicate(call.request); + + if (call.request.num <= MAX_ERROR_STATUS) { + call.emit( + 'error', + getError('Server Stream Method Error', call.request.num) + ); + } else { + result.forEach(element => { + call.write(element); + }); + } + call.end(); + }, + + // This method returns the request + bidiStreamMethod: (call: ServerDuplexStream) => { + call.on('data', (data: TestRequestResponse) => { + if (data.num <= MAX_ERROR_STATUS) { + call.emit('error', getError('Server Stream Method Error', data.num)); + } else { + call.write(data); + } + }); + call.on('end', () => { + call.end(); + }); + }, + }); + const bindAwait = promisify(server.bindAsync); + await bindAwait.call( + server, + 'localhost:' + port, + ServerCredentials.createInsecure() + ); + server.start(); + return server; +} + export const runTests = ( plugin: GrpcInstrumentation, moduleName: string, grpcPort: number ) => { - const MAX_ERROR_STATUS = GrpcStatus.UNAUTHENTICATED; - const grpcClient = { unaryMethodWithMetadata: ( client: TestGrpcClient, @@ -275,138 +411,6 @@ export const runTests = ( let server: Server; let client: Client; - const replicate = (request: TestRequestResponse) => { - const result: TestRequestResponse[] = []; - for (let i = 0; i < request.num; i++) { - result.push(request); - } - return result; - }; - - async function startServer(proto: any) { - const server = new Server(); - - function getError(msg: string, code: number): ServiceError | null { - const err: ServiceError = { - ...new Error(msg), - name: msg, - message: msg, - code, - details: msg, - metadata: new Metadata(), - }; - return err; - } - - server.addService(proto.GrpcTester.service, { - // An error is emitted every time - // request.num <= MAX_ERROR_STATUS = (status.UNAUTHENTICATED) - // in those cases, erro.code = request.num - - // This method returns the request - unaryMethodWithMetadata( - call: ServerUnaryCall, - callback: requestCallback - ) { - const serverMetadata = new Metadata(); - serverMetadata.add('server_metadata_key', 'server_metadata_value'); - - call.sendMetadata(serverMetadata); - - call.request.num <= MAX_ERROR_STATUS - ? callback( - getError('Unary Method with Metadata Error', call.request.num) - ) - : callback(null, { num: call.request.num }); - }, - - // This method returns the request - unaryMethod( - call: ServerUnaryCall, - callback: requestCallback - ) { - call.request.num <= MAX_ERROR_STATUS - ? callback(getError('Unary Method Error', call.request.num)) - : callback(null, { num: call.request.num }); - }, - - // This method returns the request - camelCaseMethod( - call: ServerUnaryCall, - callback: requestCallback - ) { - call.request.num <= MAX_ERROR_STATUS - ? callback(getError('Unary Method Error', call.request.num)) - : callback(null, { num: call.request.num }); - }, - - // This method sums the requests - clientStreamMethod( - call: ServerReadableStream, - callback: requestCallback - ) { - let sum = 0; - let hasError = false; - let code = GrpcStatus.OK; - call.on('data', (data: TestRequestResponse) => { - sum += data.num; - if (data.num <= MAX_ERROR_STATUS) { - hasError = true; - code = data.num; - } - }); - call.on('end', () => { - hasError - ? callback(getError('Client Stream Method Error', code) as any) - : callback(null, { num: sum }); - }); - }, - - // This method returns an array that replicates the request, request.num of - // times - serverStreamMethod: (call: ServerWritableStream) => { - const result = replicate(call.request); - - if (call.request.num <= MAX_ERROR_STATUS) { - call.emit( - 'error', - getError('Server Stream Method Error', call.request.num) - ); - } else { - result.forEach(element => { - call.write(element); - }); - } - call.end(); - }, - - // This method returns the request - bidiStreamMethod: (call: ServerDuplexStream) => { - call.on('data', (data: TestRequestResponse) => { - if (data.num <= MAX_ERROR_STATUS) { - call.emit( - 'error', - getError('Server Stream Method Error', data.num) - ); - } else { - call.write(data); - } - }); - call.on('end', () => { - call.end(); - }); - }, - }); - const bindAwait = promisify(server.bindAsync); - await bindAwait.call( - server, - 'localhost:' + grpcPort, - ServerCredentials.createInsecure() - ); - server.start(); - return server; - } - function createClient(proto: any) { return new proto.GrpcTester( 'localhost:' + grpcPort, @@ -590,9 +594,7 @@ export const runTests = ( .startSpan('TestSpan', { kind: SpanKind.PRODUCER }); return context.with(trace.setSpan(context.active(), span), async () => { const rootSpan = trace.getSpan(context.active()); - if (!rootSpan) { - return assert.ok(false); - } + assert.ok(rootSpan != null); assert.deepStrictEqual(rootSpan, span); const args = [client, method.request, method.metadata]; @@ -706,9 +708,7 @@ export const runTests = ( .startSpan('TestSpan', { kind: SpanKind.PRODUCER }); return context.with(trace.setSpan(context.active(), span), async () => { const rootSpan = trace.getSpan(context.active()); - if (!rootSpan) { - return assert.ok(false); - } + assert.ok(rootSpan != null); assert.deepStrictEqual(rootSpan, span); const args = [client, insertError(method.request)(errorCode)]; @@ -768,7 +768,7 @@ export const runTests = ( const packageDefinition = await protoLoader.load(PROTO_PATH, options); const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(proto); + server = await startServer(proto, grpcPort); client = createClient(proto); }); @@ -811,7 +811,7 @@ export const runTests = ( const packageDefinition = await protoLoader.load(PROTO_PATH, options); const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(proto); + server = await startServer(proto, grpcPort); client = createClient(proto); }); @@ -845,7 +845,7 @@ export const runTests = ( const packageDefinition = await protoLoader.load(PROTO_PATH, options); const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(proto); + server = await startServer(proto, grpcPort); client = createClient(proto); }); @@ -889,7 +889,7 @@ export const runTests = ( const packageDefinition = await protoLoader.load(PROTO_PATH, options); const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(proto); + server = await startServer(proto, grpcPort); client = createClient(proto); }); @@ -976,7 +976,7 @@ export const runTests = ( const packageDefinition = await protoLoader.load(PROTO_PATH, options); const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(proto); + server = await startServer(proto, grpcPort); client = createClient(proto); }); diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts new file mode 100644 index 00000000000..2fc2a3d1bec --- /dev/null +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts @@ -0,0 +1,111 @@ +/* + * 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 { Span, SpanKind } from '@opentelemetry/api'; +import * as assert from 'assert'; + +import { + InMemorySpanExporter, + ReadableSpan, +} from '@opentelemetry/sdk-trace-base'; +import { assertPropagation, assertSpan } from './utils/assertionUtils'; +import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; + +export type SpanAssertionFunction = ( + exporter: InMemorySpanExporter, + rpcService: string, + rpcMethod: string, + expectedSpanStatus: number, + rootSpan?: Span +) => void; + +export type TestFunction = ( + input: number, + errorKey: string, + expectedResultCode: number, + assertSpans: SpanAssertionFunction +) => void; + +function validateSpans( + clientSpan: ReadableSpan, + serverSpan: ReadableSpan, + rpcService: string, + rpcMethod: string, + status: number +) { + const validations = { + name: `grpc.${rpcService}/${rpcMethod}`, + netPeerName: 'localhost', + status: status, + netPeerPort: 3333, + }; + + assert.strictEqual( + clientSpan.spanContext().traceId, + serverSpan.spanContext().traceId + ); + assertPropagation(serverSpan, clientSpan); + + assertSpan('grpc', serverSpan, SpanKind.SERVER, validations); + assertSpan('grpc', clientSpan, SpanKind.CLIENT, validations); + assert.strictEqual( + clientSpan.attributes[SemanticAttributes.RPC_METHOD], + rpcMethod + ); + assert.strictEqual( + clientSpan.attributes[SemanticAttributes.RPC_SERVICE], + rpcService + ); +} + +export function assertNoSpansExported( + exporter: InMemorySpanExporter, + _rpcService: string, + _rpcMethod: string, + _expectedSpanStatus: number, + _rootSpan?: Span +) { + const spans = exporter.getFinishedSpans(); + assert.strictEqual(spans.length, 0); +} + +export function assertExportedSpans( + exporter: InMemorySpanExporter, + rpcService: string, + rpcMethod: string, + expectedSpanStatus: number, + rootSpan?: Span +) { + const spans = exporter.getFinishedSpans(); + assert.strictEqual(spans.length, 2); + const serverSpan = spans[0]; + const clientSpan = spans[1]; + + validateSpans( + clientSpan, + serverSpan, + rpcService, + rpcMethod, + expectedSpanStatus + ); + + if (rootSpan) { + assert.strictEqual( + rootSpan?.spanContext().traceId, + serverSpan.spanContext().traceId + ); + assert.strictEqual(rootSpan?.spanContext().spanId, clientSpan.parentSpanId); + } +} From 4cffe5dfeff93071e0489f4bcdf1ec8f972753d9 Mon Sep 17 00:00:00 2001 From: Chengzhong Wu Date: Tue, 1 Aug 2023 23:16:07 +0800 Subject: [PATCH 21/70] fix(sdk-metrics): ignore invalid metric values (#3988) Co-authored-by: Haddas Bronfman <85441461+haddasbronfman@users.noreply.github.com> --- CHANGELOG.md | 1 + packages/sdk-metrics/src/Instruments.ts | 10 ++++ packages/sdk-metrics/src/ObservableResult.ts | 20 ++++++++ packages/sdk-metrics/test/Instruments.test.ts | 34 ++++++++++++-- .../sdk-metrics/test/ObservableResult.test.ts | 46 +++++++++++++++++++ 5 files changed, 107 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5f1569a883..0266669bdf6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ * fix(opentelemetry-exporter-logs-otlp-http): Add otel-api as dev dep for tests as they are directly importing the api and which is breaking the web-sandbox tests which is using rollup * fix(core): stop rounding to nearest int in hrTimeTo*seconds() functions [#4014](https://github.com/open-telemetry/opentelemetry-js/pull/4014/) @aabmass +* fix(sdk-metrics): ignore invalid metric values [#3988](https://github.com/open-telemetry/opentelemetry-js/pull/3988) @legendecas ### :books: (Refine Doc) diff --git a/packages/sdk-metrics/src/Instruments.ts b/packages/sdk-metrics/src/Instruments.ts index d99c621c0b3..f665952f059 100644 --- a/packages/sdk-metrics/src/Instruments.ts +++ b/packages/sdk-metrics/src/Instruments.ts @@ -48,6 +48,12 @@ export class SyncInstrument { attributes: MetricAttributes = {}, context: Context = contextApi.active() ) { + if (typeof value !== 'number') { + diag.warn( + `non-number value provided to metric ${this._descriptor.name}: ${value}` + ); + return; + } if ( this._descriptor.valueType === ValueType.INT && !Number.isInteger(value) @@ -56,6 +62,10 @@ export class SyncInstrument { `INT value type cannot accept a floating-point value for ${this._descriptor.name}, ignoring the fractional digits.` ); value = Math.trunc(value); + // ignore non-finite values. + if (!Number.isInteger(value)) { + return; + } } this._writableMetricStorage.record( value, diff --git a/packages/sdk-metrics/src/ObservableResult.ts b/packages/sdk-metrics/src/ObservableResult.ts index 31e194290ce..9298a46d93e 100644 --- a/packages/sdk-metrics/src/ObservableResult.ts +++ b/packages/sdk-metrics/src/ObservableResult.ts @@ -41,6 +41,12 @@ export class ObservableResultImpl implements ObservableResult { * Observe a measurement of the value associated with the given attributes. */ observe(value: number, attributes: MetricAttributes = {}): void { + if (typeof value !== 'number') { + diag.warn( + `non-number value provided to metric ${this._descriptor.name}: ${value}` + ); + return; + } if ( this._descriptor.valueType === ValueType.INT && !Number.isInteger(value) @@ -49,6 +55,10 @@ export class ObservableResultImpl implements ObservableResult { `INT value type cannot accept a floating-point value for ${this._descriptor.name}, ignoring the fractional digits.` ); value = Math.trunc(value); + // ignore non-finite values. + if (!Number.isInteger(value)) { + return; + } } this._buffer.set(attributes, value); } @@ -79,6 +89,12 @@ export class BatchObservableResultImpl implements BatchObservableResult { map = new AttributeHashMap(); this._buffer.set(metric, map); } + if (typeof value !== 'number') { + diag.warn( + `non-number value provided to metric ${metric._descriptor.name}: ${value}` + ); + return; + } if ( metric._descriptor.valueType === ValueType.INT && !Number.isInteger(value) @@ -87,6 +103,10 @@ export class BatchObservableResultImpl implements BatchObservableResult { `INT value type cannot accept a floating-point value for ${metric._descriptor.name}, ignoring the fractional digits.` ); value = Math.trunc(value); + // ignore non-finite values. + if (!Number.isInteger(value)) { + return; + } } map.set(attributes, value); } diff --git a/packages/sdk-metrics/test/Instruments.test.ts b/packages/sdk-metrics/test/Instruments.test.ts index 8651643fa35..80f834f30cb 100644 --- a/packages/sdk-metrics/test/Instruments.test.ts +++ b/packages/sdk-metrics/test/Instruments.test.ts @@ -74,9 +74,14 @@ describe('Instruments', () => { }); counter.add(1); - // floating-point value should be trunc-ed. - counter.add(1.1); counter.add(1, { foo: 'bar' }); + // floating-point values should be trunc-ed. + counter.add(1.1); + // non-finite/non-number values should be ignored. + counter.add(Infinity); + counter.add(-Infinity); + counter.add(NaN); + counter.add('1' as any); await validateExport(cumulativeReader, { descriptor: { name: 'test', @@ -124,10 +129,13 @@ describe('Instruments', () => { }); counter.add(1); - // add floating-point value. - counter.add(1.1); counter.add(1, { foo: 'bar' }); + // add floating-point values. + counter.add(1.1); counter.add(1.2, { foo: 'bar' }); + // non-number values should be ignored. + counter.add('1' as any); + await validateExport(cumulativeReader, { dataPointType: DataPointType.SUM, isMonotonic: true, @@ -197,6 +205,13 @@ describe('Instruments', () => { upDownCounter.add(-1.1); upDownCounter.add(4, { foo: 'bar' }); upDownCounter.add(1.1, { foo: 'bar' }); + + // non-finite/non-number values should be ignored. + upDownCounter.add(Infinity); + upDownCounter.add(-Infinity); + upDownCounter.add(NaN); + upDownCounter.add('1' as any); + await validateExport(deltaReader, { descriptor: { name: 'test', @@ -230,6 +245,8 @@ describe('Instruments', () => { upDownCounter.add(-1.1); upDownCounter.add(4, { foo: 'bar' }); upDownCounter.add(1.1, { foo: 'bar' }); + // non-number values should be ignored. + upDownCounter.add('1' as any); await validateExport(deltaReader, { dataPointType: DataPointType.SUM, isMonotonic: false, @@ -283,6 +300,12 @@ describe('Instruments', () => { histogram.record(0.1); histogram.record(100, { foo: 'bar' }); histogram.record(0.1, { foo: 'bar' }); + // non-finite/non-number values should be ignored. + histogram.record(Infinity); + histogram.record(-Infinity); + histogram.record(NaN); + histogram.record('1' as any); + await validateExport(deltaReader, { descriptor: { name: 'test', @@ -427,6 +450,9 @@ describe('Instruments', () => { histogram.record(0.1); histogram.record(100, { foo: 'bar' }); histogram.record(0.1, { foo: 'bar' }); + // non-number values should be ignored. + histogram.record('1' as any); + await validateExport(deltaReader, { dataPointType: DataPointType.HISTOGRAM, dataPoints: [ diff --git a/packages/sdk-metrics/test/ObservableResult.test.ts b/packages/sdk-metrics/test/ObservableResult.test.ts index f07b3f9f218..9aacc46066c 100644 --- a/packages/sdk-metrics/test/ObservableResult.test.ts +++ b/packages/sdk-metrics/test/ObservableResult.test.ts @@ -63,8 +63,27 @@ describe('ObservableResultImpl', () => { valueType: ValueType.INT, }); observableResult.observe(1.1, {}); + // should ignore non-finite/non-number values. + observableResult.observe(Infinity, {}); + observableResult.observe(-Infinity, {}); + observableResult.observe(NaN, {}); + assert.strictEqual(observableResult._buffer.get({}), 1); }); + + it('should ignore non-number values', () => { + const observableResult = new ObservableResultImpl({ + name: 'test', + description: '', + type: InstrumentType.COUNTER, + unit: '', + valueType: ValueType.INT, + }); + + observableResult.observe('1' as any, {}); + + assert.strictEqual(observableResult._buffer.get({}), undefined); + }); }); }); @@ -126,7 +145,34 @@ describe('BatchObservableResultImpl', () => { ); observableResult.observe(observable, 1.1, {}); + // should ignore non-finite/non-number values. + observableResult.observe(observable, Infinity, {}); + observableResult.observe(observable, -Infinity, {}); + observableResult.observe(observable, NaN, {}); assert.strictEqual(observableResult._buffer.get(observable)?.get({}), 1); }); + + it('should ignore invalid values', () => { + const observableResult = new BatchObservableResultImpl(); + const observable = new ObservableInstrument( + { + name: 'test', + description: '', + type: InstrumentType.COUNTER, + unit: '', + valueType: ValueType.INT, + }, + [], + new ObservableRegistry() + ); + + observableResult.observe(observable, '1' as any, {}); + observableResult.observe(/** invalid observable */ {} as any, 1, {}); + assert.strictEqual( + observableResult._buffer.get(observable)!.get({}), + undefined + ); + assert.strictEqual(observableResult._buffer.size, 1); + }); }); }); From b4cda7a9db0bef3762490641ef672b0f88e9339b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 2 Aug 2023 12:49:36 +0200 Subject: [PATCH 22/70] chore(deps): update all patch versions (#3997) --- api/package.json | 4 ++-- experimental/packages/api-events/package.json | 2 +- experimental/packages/api-logs/package.json | 2 +- .../packages/exporter-logs-otlp-grpc/package.json | 4 ++-- .../packages/exporter-logs-otlp-http/package.json | 4 ++-- .../packages/exporter-logs-otlp-proto/package.json | 4 ++-- .../packages/exporter-trace-otlp-grpc/package.json | 4 ++-- .../packages/exporter-trace-otlp-http/package.json | 4 ++-- .../packages/exporter-trace-otlp-proto/package.json | 4 ++-- .../opentelemetry-browser-detector/package.json | 4 ++-- .../package.json | 4 ++-- .../package.json | 4 ++-- .../package.json | 4 ++-- .../opentelemetry-exporter-prometheus/package.json | 4 ++-- .../opentelemetry-instrumentation-fetch/package.json | 4 ++-- .../opentelemetry-instrumentation-grpc/package.json | 10 +++++----- .../opentelemetry-instrumentation-http/package.json | 4 ++-- .../package.json | 4 ++-- .../opentelemetry-instrumentation/package.json | 4 ++-- .../packages/opentelemetry-sdk-node/package.json | 4 ++-- experimental/packages/otlp-exporter-base/package.json | 4 ++-- .../packages/otlp-grpc-exporter-base/package.json | 4 ++-- .../packages/otlp-proto-exporter-base/package.json | 4 ++-- experimental/packages/otlp-transformer/package.json | 2 +- experimental/packages/sdk-logs/package.json | 4 ++-- experimental/packages/shim-opencensus/package.json | 4 ++-- package.json | 4 ++-- .../opentelemetry-context-async-hooks/package.json | 2 +- .../opentelemetry-context-zone-peer-dep/package.json | 4 ++-- packages/opentelemetry-context-zone/package.json | 4 ++-- packages/opentelemetry-core/package.json | 4 ++-- packages/opentelemetry-exporter-jaeger/package.json | 4 ++-- packages/opentelemetry-exporter-zipkin/package.json | 4 ++-- packages/opentelemetry-propagator-b3/package.json | 2 +- packages/opentelemetry-propagator-jaeger/package.json | 4 ++-- packages/opentelemetry-resources/package.json | 4 ++-- packages/opentelemetry-sdk-trace-base/package.json | 4 ++-- packages/opentelemetry-sdk-trace-node/package.json | 4 ++-- packages/opentelemetry-sdk-trace-web/package.json | 4 ++-- .../opentelemetry-semantic-conventions/package.json | 4 ++-- packages/opentelemetry-shim-opentracing/package.json | 2 +- packages/sdk-metrics/package.json | 4 ++-- packages/template/package.json | 2 +- selenium-tests/package.json | 2 +- 44 files changed, 83 insertions(+), 83 deletions(-) diff --git a/api/package.json b/api/package.json index f73aef244f1..d2e4572f5f0 100644 --- a/api/package.json +++ b/api/package.json @@ -63,7 +63,7 @@ "devDependencies": { "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack": "4.41.33", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", @@ -77,7 +77,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "memfs": "3.5.3", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index 94c3ce510dd..55d58ba1f3e 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -76,7 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index e99c9fd651a..4a50492b49e 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -76,7 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index bbd94bea1aa..a1e3cbc0ada 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -56,11 +56,11 @@ "@opentelemetry/resources": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 8d2c4c2e92d..c7a7e41f946 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -77,7 +77,7 @@ "@opentelemetry/resources": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", @@ -90,7 +90,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index f24ffbaacda..31b6b025bf6 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -67,7 +67,7 @@ "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cpx": "1.5.0", @@ -78,7 +78,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 1a6a0114efc..f9bcb032e19 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -53,11 +53,11 @@ "@opentelemetry/otlp-exporter-base": "0.41.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 0b51ceb7825..be7ba958f5d 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -67,7 +67,7 @@ "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", @@ -80,7 +80,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index bf01be8e55a..3eea7ce9594 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -66,7 +66,7 @@ "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cpx": "1.5.0", @@ -77,7 +77,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index bdf85669248..75a4a7fde46 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -57,7 +57,7 @@ "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", @@ -67,7 +67,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index c5fffbadb24..70f2e344bfa 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -52,11 +52,11 @@ "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 6adc7387e71..021cdd182c3 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -67,7 +67,7 @@ "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", @@ -80,7 +80,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 59b19416e7c..4b24923e205 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -51,11 +51,11 @@ "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index 8b9a7251f1b..af3ea683314 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -47,10 +47,10 @@ "@opentelemetry/semantic-conventions": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 55b7b3565cb..8f6ebd9a652 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -61,7 +61,7 @@ "@opentelemetry/sdk-trace-base": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", @@ -73,7 +73,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index f3e705dd626..0fc2fd5bfe7 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -47,9 +47,9 @@ }, "devDependencies": { "@bufbuild/buf": "1.21.0-1", - "@protobuf-ts/grpc-transport": "2.9.0", - "@protobuf-ts/runtime-rpc": "2.9.0", - "@protobuf-ts/runtime": "2.9.0", + "@protobuf-ts/grpc-transport": "2.9.1", + "@protobuf-ts/runtime-rpc": "2.9.1", + "@protobuf-ts/runtime": "2.9.1", "@grpc/grpc-js": "^1.7.1", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", @@ -60,10 +60,10 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "semver": "7.5.4", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index f945fbefc1f..32a25479b86 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -54,12 +54,12 @@ "@types/node": "18.6.5", "@types/request-promise-native": "1.0.18", "@types/semver": "7.5.0", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/superagent": "4.1.18", "axios": "1.4.0", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nock": "13.3.2", "nyc": "15.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 3c729d4009e..7ac60c00686 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -61,7 +61,7 @@ "@opentelemetry/sdk-trace-base": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", @@ -73,7 +73,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index faa4b5a8837..2e84dc74cf3 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -87,7 +87,7 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", @@ -100,7 +100,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index a00499ab74b..d5773f83b7b 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -68,10 +68,10 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "semver": "7.5.4", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 2d3a61a5b8d..73407d7801d 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -68,7 +68,7 @@ "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", @@ -78,7 +78,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 67330ada1ee..a29489916d3 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -55,11 +55,11 @@ "@opentelemetry/sdk-trace-base": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "protobufjs-cli": "1.1.1", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index a411fb4a97f..c22110429ab 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -63,10 +63,10 @@ "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "protobufjs-cli": "1.1.1", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index 1ea9fa0db4c..c8a77ae0b42 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -69,7 +69,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 3ac1aba8760..6113aeca58b 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -77,7 +77,7 @@ "@opentelemetry/api-logs": "0.41.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", @@ -87,7 +87,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index b1724c988a4..d2deaae5f1d 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -54,10 +54,10 @@ "@opentelemetry/sdk-trace-base": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/package.json b/package.json index 2a6cffca35a..864a548b051 100644 --- a/package.json +++ b/package.json @@ -71,8 +71,8 @@ "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "4.2.1", "gh-pages": "5.0.0", - "lerna": "7.1.3", - "@lerna/legacy-package-management": "7.1.3", + "lerna": "7.1.4", + "@lerna/legacy-package-management": "7.1.4", "linkinator": "5.0.1", "markdownlint-cli": "0.35.0", "prettier": "2.8.8", diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index a7532117028..f8f4797227d 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -49,7 +49,7 @@ "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index b375a49f9ea..0b6929bcce9 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -57,7 +57,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "@types/zone.js": "0.5.12", "babel-loader": "8.3.0", @@ -70,7 +70,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index ee7ba24069f..0d290af7af3 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -53,7 +53,7 @@ "@babel/core": "7.22.9", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "codecov": "3.8.3", @@ -63,7 +63,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 974185bdf06..cb8da74b130 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -67,7 +67,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", @@ -78,7 +78,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 437b2b1919d..e31c28eaa95 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -48,10 +48,10 @@ "@opentelemetry/resources": "1.15.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nock": "13.3.2", "nyc": "15.1.0", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index ff789993aea..1c325eaafa1 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -64,7 +64,7 @@ "@opentelemetry/api": "^1.0.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", @@ -76,7 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nock": "13.3.2", "nyc": "15.1.0", diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index dc771041f51..a67230166a5 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -62,7 +62,7 @@ "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index 487e6efa23e..26e16812d83 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -57,7 +57,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", @@ -68,7 +68,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 8889e298c65..ddcc1e48d8d 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -65,7 +65,7 @@ "@opentelemetry/resources_1.9.0": "npm:@opentelemetry/resources@1.9.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "cross-var": "1.1.0", @@ -76,7 +76,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nock": "13.3.2", "nyc": "15.1.0", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 7f9cdfe0a5d..c8b2ea54a97 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -68,7 +68,7 @@ "@opentelemetry/resources_1.9.0": "npm:@opentelemetry/resources@1.9.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", @@ -80,7 +80,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index 97b12571bb0..80b0976561e 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -51,10 +51,10 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index bcc00574fc3..58f407d0ba6 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -63,7 +63,7 @@ "@types/jquery": "3.5.16", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", @@ -77,7 +77,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index 59473df709c..778d89dd11a 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -51,10 +51,10 @@ "devDependencies": { "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nock": "13.3.2", "nyc": "15.1.0", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index 26a8ba076ec..473b473cd05 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -50,7 +50,7 @@ "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "ts-mocha": "10.0.0", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index f0abbe927a8..21a56b2191c 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -59,7 +59,7 @@ "@types/lodash.merge": "4.6.7", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", @@ -69,7 +69,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.3", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/template/package.json b/packages/template/package.json index 4cbc426dde0..f7e010f22d9 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -80,7 +80,7 @@ "devDependencies": { "@types/node": "18.6.5", "cross-var": "1.1.0", - "lerna": "7.1.3", + "lerna": "7.1.4", "typescript": "4.4.4" }, "Add these to devDependencies for testing": { diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 04d420abec7..aeff4300664 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -40,7 +40,7 @@ "babel-loader": "8.3.0", "babel-polyfill": "6.26.0", "browserstack-local": "1.4.8", - "chromedriver": "114.0.2", + "chromedriver": "114.0.3", "dotenv": "16.0.0", "fast-safe-stringify": "2.1.1", "geckodriver": "3.0.1", From 5fd656bb08ce2fa34f9ed588c09e99dfca26d42a Mon Sep 17 00:00:00 2001 From: Hunter Paulson Date: Thu, 3 Aug 2023 09:11:24 -0400 Subject: [PATCH 23/70] docs(resources): Fixes detectResources deprecated typos (#4003) Co-authored-by: Marc Pichler --- packages/opentelemetry-resources/src/detect-resources.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opentelemetry-resources/src/detect-resources.ts b/packages/opentelemetry-resources/src/detect-resources.ts index be6943f81d1..4fa477a4f81 100644 --- a/packages/opentelemetry-resources/src/detect-resources.ts +++ b/packages/opentelemetry-resources/src/detect-resources.ts @@ -26,7 +26,7 @@ import { IResource } from './IResource'; * does not resolve until all the underlying detectors have resolved, unlike * detectResourcesSync. * - * @deprecated use detectResourceSync() instead. + * @deprecated use detectResourcesSync() instead. * @param config Configuration for resource detection */ export const detectResources = async ( From 3732256f02c86471cf2016391f255e49a01fbd19 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Mon, 7 Aug 2023 17:14:30 +0200 Subject: [PATCH 24/70] docs(README): clarify browser support (#4037) Co-authored-by: Patrice Chalin --- README.md | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index ca727967475..370dfb17d98 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ ## About this project -This is the JavaScript version of [OpenTelemetry](https://opentelemetry.io/), a framework for collecting traces and metrics from applications. +This is the JavaScript version of [OpenTelemetry](https://opentelemetry.io/), a framework for collecting traces, metrics, and logs from applications. ## Quick Start @@ -109,24 +109,29 @@ If you are a library author looking to build OpenTelemetry into your library, pl ## Supported Runtimes -| Platform Version | Supported | -| ------------------- | ----------------------------------------------- | -| Node.JS `v18` | ✅ | -| Node.JS `v16` | ✅ | -| Node.JS `v14` | ✅ | -| Older Node Versions | See [Node Support](#node-support) | -| Web Browsers | ✅ See [Browser Support](#browser-support) below | +| Platform Version | Supported | +|---------------------|-----------------------------------------------| +| Node.JS `v18` | :heavy_check_mark: | +| Node.JS `v16` | :heavy_check_mark: | +| Node.JS `v14` | :heavy_check_mark: | +| Older Node Versions | See [Node Support](#node-support) | +| Web Browsers | See [Browser Support](#browser-support) below | ### Node Support Only Node.js Active or Maintenance LTS versions are supported. Previous versions of node *may* work, but they are not tested by OpenTelemetry and they are not guaranteed to work. -Please note that versions of Node.JS v8 prior to `v8.12.0` will NOT work, because OpenTelemetry Node depends on the `perf_hooks` module introduced in `v8.5.0` and `performance.timeOrigin` that is set correctly starting in `v8.12.0`. +Note that versions of Node.JS v8 prior to `v8.12.0` will NOT work, because OpenTelemetry Node depends on the +`perf_hooks` module introduced in `v8.5.0` and `performance.timeOrigin` that is set correctly starting in `v8.12.0`. ### Browser Support -Automated browser tests are run in the latest version of Headless Chrome. -There is currently no list of officially supported browsers, but OpenTelemetry is developed using standard web technologies with wide support and should work in currently supported versions of major browsers. +> [!IMPORTANT] +> Client instrumentation for the browser is **experimental** and mostly **unspecified**. If you are interested in +> helping out, get in touch with the [Client Instrumentation SIG][client-instrumentation-sig]. + +There is currently no list of officially supported browsers. OpenTelemetry is developed using standard web +technologies and aims to work in currently supported versions of major browsers. ## Package Version Compatibility @@ -552,6 +557,8 @@ Apache 2.0 - See [LICENSE][license-url] for more information. [up-for-grabs-issues]: https://github.com/open-telemetry/OpenTelemetry-js/issues?q=is%3Aissue+is%3Aopen+label%3Aup-for-grabs [good-first-issues]: https://github.com/open-telemetry/OpenTelemetry-js/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[client-instrumentation-sig]: https://docs.google.com/document/d/16Vsdh-DM72AfMg_FIt9yT9ExEWF4A_vRbQ3jRNBe09w/edit + [docs]: https://open-telemetry.github.io/opentelemetry-js [compliance-matrix]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/spec-compliance-matrix.md [CONTRIBUTING]: https://github.com/open-telemetry/opentelemetry-js/blob/main/CONTRIBUTING.md From a4213183b03664cdf29e622932ea4823a9b8de50 Mon Sep 17 00:00:00 2001 From: Katherine Date: Mon, 7 Aug 2023 12:11:46 -0400 Subject: [PATCH 25/70] fix(parseKeyPairsIntoRecord): allow equals in baggage value #3974 (#3975) Co-authored-by: Marc Pichler --- CHANGELOG.md | 1 + packages/opentelemetry-core/src/baggage/utils.ts | 12 ++++++++---- .../test/baggage/W3CBaggagePropagator.test.ts | 12 ++++-------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0266669bdf6..190756613db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ * fix(sdk-metrics): Update default Histogram's boundary to match OTEL's spec [#3893](https://github.com/open-telemetry/opentelemetry-js/pull/3893/) @chigia001 * fix(sdk-metrics): preserve startTime for cumulative ExponentialHistograms [#3934](https://github.com/open-telemetry/opentelemetry-js/pull/3934/) @aabmass * fix(sdk-trace-web): add secureConnectionStart to https only [#3879](https://github.com/open-telemetry/opentelemetry-js/pull/3879) @Abinet18 +* fix(core): add baggage support for values containing an equals sign [#3975](https://github.com/open-telemetry/opentelemetry-js/pull/3975) @krosenk729 ### :house: (Internal) diff --git a/packages/opentelemetry-core/src/baggage/utils.ts b/packages/opentelemetry-core/src/baggage/utils.ts index 991b8a89a65..bb8b4b0155b 100644 --- a/packages/opentelemetry-core/src/baggage/utils.ts +++ b/packages/opentelemetry-core/src/baggage/utils.ts @@ -61,10 +61,14 @@ export function parsePairKeyValue( if (valueProps.length <= 0) return; const keyPairPart = valueProps.shift(); if (!keyPairPart) return; - const keyPair = keyPairPart.split(BAGGAGE_KEY_PAIR_SEPARATOR); - if (keyPair.length !== 2) return; - const key = decodeURIComponent(keyPair[0].trim()); - const value = decodeURIComponent(keyPair[1].trim()); + const separatorIndex = keyPairPart.indexOf(BAGGAGE_KEY_PAIR_SEPARATOR); + if (separatorIndex <= 0) return; + const key = decodeURIComponent( + keyPairPart.substring(0, separatorIndex).trim() + ); + const value = decodeURIComponent( + keyPairPart.substring(separatorIndex + 1).trim() + ); let metadata; if (valueProps.length > 0) { metadata = baggageEntryMetadataFromString( diff --git a/packages/opentelemetry-core/test/baggage/W3CBaggagePropagator.test.ts b/packages/opentelemetry-core/test/baggage/W3CBaggagePropagator.test.ts index c30bfb3014a..801496513fa 100644 --- a/packages/opentelemetry-core/test/baggage/W3CBaggagePropagator.test.ts +++ b/packages/opentelemetry-core/test/baggage/W3CBaggagePropagator.test.ts @@ -181,9 +181,9 @@ describe('W3CBaggagePropagator', () => { describe('.extract()', () => { const baggageValue = - 'key1=d4cda95b,key3=c88815a7, keyn = valn, keym =valm'; + 'key1=d4cda95b==,key3=c88815a7, keyn = valn, keym =valm'; const expected = propagation.createBaggage({ - key1: { value: 'd4cda95b' }, + key1: { value: 'd4cda95b==' }, key3: { value: 'c88815a7' }, keyn: { value: 'valn' }, keym: { value: 'valm' }, @@ -217,7 +217,7 @@ describe('W3CBaggagePropagator', () => { it('should extract context of a sampled span when the headerValue comes as array with multiple items', () => { carrier[BAGGAGE_HEADER] = [ - 'key1=d4cda95b,key3=c88815a7, keyn = valn', + 'key1=d4cda95b==,key3=c88815a7, keyn = valn', 'keym =valm', ]; const extractedBaggage = propagation.getBaggage( @@ -282,10 +282,6 @@ describe('W3CBaggagePropagator', () => { header: '289371298nekjh2939299283jbk2b', baggage: undefined, }, - invalidDoubleEqual: { - header: 'key1==value;key2=value2', - baggage: undefined, - }, invalidWrongKeyValueFormat: { header: 'key1:value;key2=value2', baggage: undefined, @@ -295,7 +291,7 @@ describe('W3CBaggagePropagator', () => { baggage: undefined, }, mixInvalidAndValidKeys: { - header: 'key1==value,key2=value2', + header: 'key1:value,key2=value2', baggage: propagation.createBaggage({ key2: { value: 'value2', From ffe641c08c69f41ca8d292221dc1804d511efb28 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 8 Aug 2023 10:21:55 +0200 Subject: [PATCH 26/70] chore(deps): update all patch versions (#4043) --- .../packages/exporter-logs-otlp-grpc/package.json | 2 +- .../packages/exporter-logs-otlp-http/package.json | 2 +- .../packages/exporter-logs-otlp-proto/package.json | 2 +- .../packages/exporter-trace-otlp-grpc/package.json | 2 +- .../packages/exporter-trace-otlp-http/package.json | 2 +- .../packages/exporter-trace-otlp-proto/package.json | 2 +- .../packages/opentelemetry-browser-detector/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-http/package.json | 2 +- .../package.json | 2 +- .../opentelemetry-instrumentation-fetch/package.json | 2 +- .../package.json | 2 +- .../packages/opentelemetry-instrumentation/package.json | 4 ++-- experimental/packages/otlp-exporter-base/package.json | 2 +- .../packages/otlp-grpc-exporter-base/package.json | 2 +- .../packages/otlp-proto-exporter-base/package.json | 2 +- experimental/packages/sdk-logs/package.json | 2 +- packages/opentelemetry-context-zone-peer-dep/package.json | 2 +- packages/opentelemetry-context-zone/package.json | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- packages/opentelemetry-sdk-trace-web/package.json | 2 +- packages/sdk-metrics/package.json | 2 +- selenium-tests/package.json | 8 ++++---- 23 files changed, 27 insertions(+), 27 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index a1e3cbc0ada..bc9f28c60ae 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/api-logs": "0.41.1", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index c7a7e41f946..23ad53c6198 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -71,7 +71,7 @@ ], "sideEffects": false, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@opentelemetry/api-logs": "0.41.1", "@opentelemetry/resources": "1.15.1", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 31b6b025bf6..37200e912ac 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index f9bcb032e19..002839950bf 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-exporter-base": "0.41.1", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index be7ba958f5d..9d5f3efc319 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index 3eea7ce9594..d41027bacc4 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -62,7 +62,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 75a4a7fde46..0f29c9c6de1 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 70f2e344bfa..727b5ca2bed 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 021cdd182c3..e0e814bcded 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 4b24923e205..12496de959c 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 8f6ebd9a652..d91814f305f 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@opentelemetry/context-zone": "1.15.1", "@opentelemetry/propagator-b3": "1.15.1", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 7ac60c00686..2ef2fc89419 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@opentelemetry/context-zone": "1.15.1", "@opentelemetry/propagator-b3": "1.15.1", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 2e84dc74cf3..97a8b5d4e94 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -72,7 +72,7 @@ }, "dependencies": { "@types/shimmer": "^1.0.2", - "import-in-the-middle": "1.4.1", + "import-in-the-middle": "1.4.2", "require-in-the-middle": "^7.1.1", "semver": "^7.5.1", "shimmer": "^1.2.1" @@ -81,7 +81,7 @@ "@opentelemetry/api": "^1.3.0" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@opentelemetry/sdk-metrics": "1.15.1", "@types/mocha": "10.0.1", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 73407d7801d..70c6fef1263 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -64,7 +64,7 @@ "@opentelemetry/core": "1.15.1" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index a29489916d3..87def63d63a 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-transformer": "0.41.1", "@opentelemetry/resources": "1.15.1", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index c22110429ab..61873ad1d2f 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -59,7 +59,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 6113aeca58b..a23006ad2ca 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -72,7 +72,7 @@ "@opentelemetry/api-logs": ">=0.39.1" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": ">=1.4.0 <1.5.0", "@opentelemetry/api-logs": "0.41.1", "@types/mocha": "10.0.1", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 0b6929bcce9..65193793ed8 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 0d290af7af3..b827d821108 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -50,7 +50,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 1c325eaafa1..e32960e4bd0 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -60,7 +60,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": "^1.0.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 58f407d0ba6..fa1287b20a2 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -55,7 +55,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": ">=1.0.0 <1.5.0", "@opentelemetry/context-zone": "1.15.1", "@opentelemetry/propagator-b3": "1.15.1", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 21a56b2191c..612036af21e 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@opentelemetry/api": ">=1.3.0 <1.5.0", "@types/lodash.merge": "4.6.7", "@types/mocha": "10.0.1", diff --git a/selenium-tests/package.json b/selenium-tests/package.json index aeff4300664..75854251672 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -31,11 +31,11 @@ "access": "restricted" }, "devDependencies": { - "@babel/core": "7.22.9", + "@babel/core": "7.22.10", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-proposal-decorators": "7.22.7", - "@babel/plugin-transform-runtime": "7.22.9", - "@babel/preset-env": "7.22.9", + "@babel/plugin-proposal-decorators": "7.22.10", + "@babel/plugin-transform-runtime": "7.22.10", + "@babel/preset-env": "7.22.10", "@opentelemetry/api": "^1.0.0", "babel-loader": "8.3.0", "babel-polyfill": "6.26.0", From 48fb15862e801b742059a3e39dbcc8ef4c10b2e2 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 8 Aug 2023 14:59:06 +0200 Subject: [PATCH 27/70] chore: prepare release 1.15.2/0.41.2 (#4036) --- CHANGELOG.md | 13 +++++--- examples/esm-http-ts/package.json | 16 +++++----- examples/http/package.json | 18 +++++------ examples/https/package.json | 18 +++++------ examples/opentelemetry-web/package.json | 30 ++++++++--------- examples/otlp-exporter-node/package.json | 24 +++++++------- experimental/CHANGELOG.md | 10 ++++-- .../node14/package.json | 6 ++-- .../node16/package.json | 6 ++-- experimental/examples/logs/package.json | 2 +- .../examples/opencensus-shim/package.json | 12 +++---- experimental/examples/prometheus/package.json | 6 ++-- experimental/packages/api-events/package.json | 2 +- experimental/packages/api-logs/package.json | 2 +- .../exporter-logs-otlp-grpc/package.json | 16 +++++----- .../exporter-logs-otlp-http/package.json | 14 ++++---- .../exporter-logs-otlp-proto/package.json | 18 +++++------ .../exporter-trace-otlp-grpc/package.json | 14 ++++---- .../exporter-trace-otlp-http/package.json | 12 +++---- .../exporter-trace-otlp-proto/package.json | 14 ++++---- .../package.json | 6 ++-- .../package.json | 14 ++++---- .../package.json | 12 +++---- .../package.json | 16 +++++----- .../package.json | 10 +++--- .../package.json | 16 +++++----- .../package.json | 20 ++++++------ .../package.json | 16 +++++----- .../package.json | 16 +++++----- .../package.json | 4 +-- .../opentelemetry-sdk-node/package.json | 32 +++++++++---------- .../packages/otlp-exporter-base/package.json | 4 +-- .../otlp-grpc-exporter-base/package.json | 12 +++---- .../otlp-proto-exporter-base/package.json | 6 ++-- .../packages/otlp-transformer/package.json | 14 ++++---- experimental/packages/sdk-logs/package.json | 8 ++--- .../packages/shim-opencensus/package.json | 8 ++--- .../package.json | 8 ++--- .../package.json | 2 +- .../package.json | 2 +- .../opentelemetry-context-zone/package.json | 4 +-- packages/opentelemetry-core/package.json | 4 +-- .../package.json | 10 +++--- .../package.json | 10 +++--- .../opentelemetry-propagator-b3/package.json | 4 +-- .../package.json | 4 +-- packages/opentelemetry-resources/package.json | 6 ++-- .../opentelemetry-sdk-trace-base/package.json | 8 ++--- .../opentelemetry-sdk-trace-node/package.json | 16 +++++----- .../opentelemetry-sdk-trace-web/package.json | 14 ++++---- .../package.json | 2 +- .../package.json | 12 +++---- packages/sdk-metrics/package.json | 6 ++-- packages/template/package.json | 2 +- selenium-tests/package.json | 22 ++++++------- 55 files changed, 305 insertions(+), 298 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 190756613db..d449ad83dc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,14 +13,18 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) -* fix(opentelemetry-exporter-logs-otlp-http): Add otel-api as dev dep for tests as they are directly importing the api and which is breaking the web-sandbox tests which is using rollup -* fix(core): stop rounding to nearest int in hrTimeTo*seconds() functions [#4014](https://github.com/open-telemetry/opentelemetry-js/pull/4014/) @aabmass -* fix(sdk-metrics): ignore invalid metric values [#3988](https://github.com/open-telemetry/opentelemetry-js/pull/3988) @legendecas - ### :books: (Refine Doc) ### :house: (Internal) +## 1.15.2 + +### :bug: (Bug Fix) + +* fix(core): stop rounding to nearest int in hrTimeTo*seconds() functions [#4014](https://github.com/open-telemetry/opentelemetry-js/pull/4014/) @aabmass +* fix(sdk-metrics): ignore invalid metric values [#3988](https://github.com/open-telemetry/opentelemetry-js/pull/3988) @legendecas +* fix(core): add baggage support for values containing an equals sign [#3975](https://github.com/open-telemetry/opentelemetry-js/pull/3975) @krosenk729 + ## 1.15.1 ### :bug: (Bug Fix) @@ -36,7 +40,6 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ * fix(sdk-metrics): Update default Histogram's boundary to match OTEL's spec [#3893](https://github.com/open-telemetry/opentelemetry-js/pull/3893/) @chigia001 * fix(sdk-metrics): preserve startTime for cumulative ExponentialHistograms [#3934](https://github.com/open-telemetry/opentelemetry-js/pull/3934/) @aabmass * fix(sdk-trace-web): add secureConnectionStart to https only [#3879](https://github.com/open-telemetry/opentelemetry-js/pull/3879) @Abinet18 -* fix(core): add baggage support for values containing an equals sign [#3975](https://github.com/open-telemetry/opentelemetry-js/pull/3975) @krosenk729 ### :house: (Internal) diff --git a/examples/esm-http-ts/package.json b/examples/esm-http-ts/package.json index a36bbf72254..bc2aa9665e1 100644 --- a/examples/esm-http-ts/package.json +++ b/examples/esm-http-ts/package.json @@ -1,7 +1,7 @@ { "name": "esm-http-ts", "private": true, - "version": "0.41.1", + "version": "0.41.2", "description": "Example of HTTP integration with OpenTelemetry using ESM and TypeScript", "main": "build/index.js", "type": "module", @@ -31,12 +31,12 @@ "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/", "dependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.41.1", - "@opentelemetry/instrumentation": "0.41.1", - "@opentelemetry/instrumentation-http": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", - "@opentelemetry/sdk-trace-node": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/exporter-trace-otlp-proto": "0.41.2", + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/instrumentation-http": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-node": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" } } diff --git a/examples/http/package.json b/examples/http/package.json index 1452ccbd8c1..641344b3f6b 100644 --- a/examples/http/package.json +++ b/examples/http/package.json @@ -1,7 +1,7 @@ { "name": "http-example", "private": true, - "version": "0.41.1", + "version": "0.41.2", "description": "Example of HTTP integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -29,14 +29,14 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/exporter-jaeger": "1.15.1", - "@opentelemetry/exporter-zipkin": "1.15.1", - "@opentelemetry/instrumentation": "0.41.1", - "@opentelemetry/instrumentation-http": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", - "@opentelemetry/sdk-trace-node": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/exporter-jaeger": "1.15.2", + "@opentelemetry/exporter-zipkin": "1.15.2", + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/instrumentation-http": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-node": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/http", "devDependencies": { diff --git a/examples/https/package.json b/examples/https/package.json index 22417829920..8eeac36fa9a 100644 --- a/examples/https/package.json +++ b/examples/https/package.json @@ -1,7 +1,7 @@ { "name": "https-example", "private": true, - "version": "0.41.1", + "version": "0.41.2", "description": "Example of HTTPs integration with OpenTelemetry", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -33,14 +33,14 @@ }, "dependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/exporter-jaeger": "1.15.1", - "@opentelemetry/exporter-zipkin": "1.15.1", - "@opentelemetry/instrumentation": "0.41.1", - "@opentelemetry/instrumentation-http": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", - "@opentelemetry/sdk-trace-node": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/exporter-jaeger": "1.15.2", + "@opentelemetry/exporter-zipkin": "1.15.2", + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/instrumentation-http": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-node": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/https", "devDependencies": { diff --git a/examples/opentelemetry-web/package.json b/examples/opentelemetry-web/package.json index 6f70a428ae3..2b79e07cc2c 100644 --- a/examples/opentelemetry-web/package.json +++ b/examples/opentelemetry-web/package.json @@ -1,7 +1,7 @@ { "name": "web-opentelemetry-example", "private": true, - "version": "0.41.1", + "version": "0.41.2", "description": "Example of using @opentelemetry/sdk-trace-web and @opentelemetry/sdk-metrics in browser", "main": "index.js", "scripts": { @@ -43,20 +43,20 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/context-zone": "1.15.1", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/exporter-metrics-otlp-http": "0.41.1", - "@opentelemetry/exporter-trace-otlp-http": "0.41.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.41.1", - "@opentelemetry/exporter-zipkin": "1.15.1", - "@opentelemetry/instrumentation": "0.41.1", - "@opentelemetry/instrumentation-fetch": "0.41.1", - "@opentelemetry/instrumentation-xml-http-request": "0.41.1", - "@opentelemetry/propagator-b3": "1.15.1", - "@opentelemetry/sdk-metrics": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", - "@opentelemetry/sdk-trace-web": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/context-zone": "1.15.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.2", + "@opentelemetry/exporter-trace-otlp-http": "0.41.2", + "@opentelemetry/exporter-trace-otlp-proto": "0.41.2", + "@opentelemetry/exporter-zipkin": "1.15.2", + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/instrumentation-fetch": "0.41.2", + "@opentelemetry/instrumentation-xml-http-request": "0.41.2", + "@opentelemetry/propagator-b3": "1.15.2", + "@opentelemetry/sdk-metrics": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-web": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/tracer-web" } diff --git a/examples/otlp-exporter-node/package.json b/examples/otlp-exporter-node/package.json index c16a341a26c..c8817d0e45d 100644 --- a/examples/otlp-exporter-node/package.json +++ b/examples/otlp-exporter-node/package.json @@ -1,7 +1,7 @@ { "name": "example-otlp-exporter-node", "private": true, - "version": "0.41.1", + "version": "0.41.2", "description": "Example of using @opentelemetry/collector-exporter in Node.js", "main": "index.js", "scripts": { @@ -29,17 +29,17 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/exporter-metrics-otlp-grpc": "0.41.1", - "@opentelemetry/exporter-metrics-otlp-http": "0.41.1", - "@opentelemetry/exporter-metrics-otlp-proto": "0.41.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.41.1", - "@opentelemetry/exporter-trace-otlp-http": "0.41.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-metrics": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.41.2", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.2", + "@opentelemetry/exporter-metrics-otlp-proto": "0.41.2", + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.2", + "@opentelemetry/exporter-trace-otlp-http": "0.41.2", + "@opentelemetry/exporter-trace-otlp-proto": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-metrics": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/otlp-exporter-node" } diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index fa0d69b5026..0c7912b3a36 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -12,12 +12,17 @@ All notable changes to experimental packages in this project will be documented ### :bug: (Bug Fix) -### :bug: (Bug Fix) - ### :books: (Refine Doc) ### :house: (Internal) +## 0.42.2 + +### :bug: (Bug Fix) + +* fix(opentelemetry-exporter-logs-otlp-http): Add otel-api as dev dep for tests as they are directly importing the api and which is breaking the web-sandbox tests which is using rollup +* fix(instrumentation-grpc): instrument @grpc/grpc-js Client methods [#3804](https://github.com/open-telemetry/opentelemetry-js/pull/3804) @pichlermarc + ## 0.41.1 ### :books: (Refine Doc) @@ -81,7 +86,6 @@ All notable changes to experimental packages in this project will be documented * fix(sdk-node): use resource interface instead of concrete class [#3803](https://github.com/open-telemetry/opentelemetry-js/pull/3803) @blumamir * fix(sdk-logs): remove includeTraceContext configuration and use LogRecord context when available [#3817](https://github.com/open-telemetry/opentelemetry-js/pull/3817) @hectorhdzg -* fix(instrumentation-grpc): instrument @grpc/grpc-js Client methods [#3804](https://github.com/open-telemetry/opentelemetry-js/pull/3804) @pichlermarc ## 0.39.1 diff --git a/experimental/backwards-compatibility/node14/package.json b/experimental/backwards-compatibility/node14/package.json index cf9cc50bec5..fc19e3ddb3d 100644 --- a/experimental/backwards-compatibility/node14/package.json +++ b/experimental/backwards-compatibility/node14/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node14", - "version": "0.41.1", + "version": "0.41.2", "private": true, "description": "Backwards compatibility app for node 14 types and the OpenTelemetry Node.js SDK", "main": "index.js", @@ -9,8 +9,8 @@ "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "dependencies": { - "@opentelemetry/sdk-node": "0.41.1", - "@opentelemetry/sdk-trace-base": "1.15.1" + "@opentelemetry/sdk-node": "0.41.2", + "@opentelemetry/sdk-trace-base": "1.15.2" }, "devDependencies": { "@types/node": "14.18.25", diff --git a/experimental/backwards-compatibility/node16/package.json b/experimental/backwards-compatibility/node16/package.json index 92f16e43e51..6c94e032093 100644 --- a/experimental/backwards-compatibility/node16/package.json +++ b/experimental/backwards-compatibility/node16/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node16", - "version": "0.41.1", + "version": "0.41.2", "private": true, "description": "Backwards compatibility app for node 16 types and the OpenTelemetry Node.js SDK", "main": "index.js", @@ -9,8 +9,8 @@ "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "dependencies": { - "@opentelemetry/sdk-node": "0.41.1", - "@opentelemetry/sdk-trace-base": "1.15.1" + "@opentelemetry/sdk-node": "0.41.2", + "@opentelemetry/sdk-trace-base": "1.15.2" }, "devDependencies": { "@types/node": "16.11.52", diff --git a/experimental/examples/logs/package.json b/experimental/examples/logs/package.json index f4295a7c908..f978265643b 100644 --- a/experimental/examples/logs/package.json +++ b/experimental/examples/logs/package.json @@ -1,6 +1,6 @@ { "name": "logs-example", - "version": "0.41.0", + "version": "0.41.1", "private": true, "scripts": { "start": "ts-node index.ts" diff --git a/experimental/examples/opencensus-shim/package.json b/experimental/examples/opencensus-shim/package.json index ee2bb6e08b3..d3c2726c36d 100644 --- a/experimental/examples/opencensus-shim/package.json +++ b/experimental/examples/opencensus-shim/package.json @@ -1,7 +1,7 @@ { "name": "opencensus-shim", "private": true, - "version": "0.41.1", + "version": "0.41.2", "description": "Example of using @opentelemetry/shim-opencensus in Node.js", "main": "index.js", "scripts": { @@ -30,11 +30,11 @@ "@opencensus/core": "0.1.0", "@opencensus/nodejs-base": "0.1.0", "@opentelemetry/api": "1.4.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-trace-node": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1", - "@opentelemetry/shim-opencensus": "0.41.1" + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-trace-node": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2", + "@opentelemetry/shim-opencensus": "0.41.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/opencensus-shim" } diff --git a/experimental/examples/prometheus/package.json b/experimental/examples/prometheus/package.json index 9b51db4a973..678f2212c40 100644 --- a/experimental/examples/prometheus/package.json +++ b/experimental/examples/prometheus/package.json @@ -1,6 +1,6 @@ { "name": "prometheus-example", - "version": "0.41.1", + "version": "0.41.2", "private": true, "description": "Example of using @opentelemetry/sdk-metrics and @opentelemetry/exporter-prometheus", "main": "index.js", @@ -11,7 +11,7 @@ "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/exporter-prometheus": "0.41.1", - "@opentelemetry/sdk-metrics": "1.15.1" + "@opentelemetry/exporter-prometheus": "0.41.2", + "@opentelemetry/sdk-metrics": "1.15.2" } } diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index 55d58ba1f3e..23d69298f16 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api-events", - "version": "0.41.1", + "version": "0.41.2", "description": "Public events API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 4a50492b49e..06d473b6bd2 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api-logs", - "version": "0.41.1", + "version": "0.41.2", "description": "Public logs API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index bc9f28c60ae..d3c2fb9b1eb 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-grpc", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry Collector Exporter allows user to send collected log records to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -51,9 +51,9 @@ "@babel/core": "7.22.10", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/api-logs": "0.41.1", - "@opentelemetry/otlp-exporter-base": "0.41.1", - "@opentelemetry/resources": "1.15.1", + "@opentelemetry/api-logs": "0.41.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/resources": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -73,10 +73,10 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.41.1", - "@opentelemetry/otlp-transformer": "0.41.1", - "@opentelemetry/sdk-logs": "0.41.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/otlp-grpc-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/sdk-logs": "0.41.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 23ad53c6198..5abf5d1b68b 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-http", - "version": "0.41.1", + "version": "0.41.2", "publishConfig": { "access": "public" }, @@ -73,8 +73,8 @@ "devDependencies": { "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", - "@opentelemetry/api-logs": "0.41.1", - "@opentelemetry/resources": "1.15.1", + "@opentelemetry/api-logs": "0.41.2", + "@opentelemetry/resources": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -105,9 +105,9 @@ "@opentelemetry/api-logs": ">=0.38.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/otlp-exporter-base": "0.41.1", - "@opentelemetry/otlp-transformer": "0.41.1", - "@opentelemetry/sdk-logs": "0.41.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/sdk-logs": "0.41.2" } } diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 37200e912ac..4a210f12227 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-proto", - "version": "0.41.1", + "version": "0.41.2", "description": "An OTLP exporter to send logs using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -93,14 +93,14 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/api-logs": "0.41.1", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/otlp-exporter-base": "0.41.1", - "@opentelemetry/otlp-proto-exporter-base": "0.41.1", - "@opentelemetry/otlp-transformer": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-logs": "0.41.1", - "@opentelemetry/sdk-trace-base": "1.15.1" + "@opentelemetry/api-logs": "0.41.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/otlp-proto-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-logs": "0.41.2", + "@opentelemetry/sdk-trace-base": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-proto", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 002839950bf..7d310c875e4 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-grpc", - "version": "0.41.1", + "version": "0.41.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", @@ -50,7 +50,7 @@ "@babel/core": "7.22.10", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/otlp-exporter-base": "0.41.1", + "@opentelemetry/otlp-exporter-base": "0.41.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -70,11 +70,11 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.41.1", - "@opentelemetry/otlp-transformer": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/otlp-grpc-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 9d5f3efc319..8bed923c849 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-http", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry Collector Trace Exporter allows user to send collected traces to the OpenTelemetry Collector", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -95,11 +95,11 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/otlp-exporter-base": "0.41.1", - "@opentelemetry/otlp-transformer": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-http", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index d41027bacc4..1b143605c8d 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-proto", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry Collector Exporter allows user to send collected traces to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -92,12 +92,12 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/otlp-exporter-base": "0.41.1", - "@opentelemetry/otlp-proto-exporter-base": "0.41.1", - "@opentelemetry/otlp-transformer": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/otlp-proto-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-proto", "sideEffects": false diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 0f29c9c6de1..c5c56290b3e 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/opentelemetry-browser-detector", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry Resource Detector for Browser", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -82,8 +82,8 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/browser-detector" } diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 727b5ca2bed..b1156ba3f7d 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-grpc", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -69,12 +69,12 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/exporter-metrics-otlp-http": "0.41.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.41.1", - "@opentelemetry/otlp-transformer": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-metrics": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.2", + "@opentelemetry/otlp-grpc-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-metrics": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index e0e814bcded..6cfc836a05f 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-http", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -95,11 +95,11 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/otlp-exporter-base": "0.41.1", - "@opentelemetry/otlp-transformer": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-metrics": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-metrics": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-http", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 12496de959c..e27d1c89f37 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-proto", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -67,13 +67,13 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/exporter-metrics-otlp-http": "0.41.1", - "@opentelemetry/otlp-exporter-base": "0.41.1", - "@opentelemetry/otlp-proto-exporter-base": "0.41.1", - "@opentelemetry/otlp-transformer": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-metrics": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/otlp-proto-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-metrics": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-proto", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index af3ea683314..327e452c9d3 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-prometheus", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry Exporter Prometheus provides a metrics endpoint for Prometheus", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,7 +44,7 @@ }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/semantic-conventions": "1.15.1", + "@opentelemetry/semantic-conventions": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -61,9 +61,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-metrics": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-metrics": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-prometheus", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index d91814f305f..2b219797d0d 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-fetch", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry fetch automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -56,9 +56,9 @@ "devDependencies": { "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-zone": "1.15.1", - "@opentelemetry/propagator-b3": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/context-zone": "1.15.2", + "@opentelemetry/propagator-b3": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -88,10 +88,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/instrumentation": "0.41.1", - "@opentelemetry/sdk-trace-web": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/sdk-trace-web": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-fetch", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 0fc2fd5bfe7..4e3b39bcea3 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-grpc", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry grpc automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -47,16 +47,16 @@ }, "devDependencies": { "@bufbuild/buf": "1.21.0-1", - "@protobuf-ts/grpc-transport": "2.9.1", - "@protobuf-ts/runtime-rpc": "2.9.1", - "@protobuf-ts/runtime": "2.9.1", "@grpc/grpc-js": "^1.7.1", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.15.1", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", - "@opentelemetry/sdk-trace-node": "1.15.1", + "@opentelemetry/context-async-hooks": "1.15.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-node": "1.15.2", + "@protobuf-ts/grpc-transport": "2.9.1", + "@protobuf-ts/runtime": "2.9.1", + "@protobuf-ts/runtime-rpc": "2.9.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", @@ -75,8 +75,8 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/instrumentation": "0.41.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-grpc", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 32a25479b86..19b0d565126 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-http", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry http/https automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -46,10 +46,10 @@ }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.15.1", - "@opentelemetry/sdk-metrics": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", - "@opentelemetry/sdk-trace-node": "1.15.1", + "@opentelemetry/context-async-hooks": "1.15.2", + "@opentelemetry/sdk-metrics": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-node": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/request-promise-native": "1.0.18", @@ -74,9 +74,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/instrumentation": "0.41.1", - "@opentelemetry/semantic-conventions": "1.15.1", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/semantic-conventions": "1.15.2", "semver": "^7.5.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-http", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 2ef2fc89419..2b12f444d98 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-xml-http-request", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry XMLHttpRequest automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -56,9 +56,9 @@ "devDependencies": { "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-zone": "1.15.1", - "@opentelemetry/propagator-b3": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/context-zone": "1.15.2", + "@opentelemetry/propagator-b3": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -88,10 +88,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/instrumentation": "0.41.1", - "@opentelemetry/sdk-trace-web": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/sdk-trace-web": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-xml-http-request", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 97a8b5d4e94..85905869530 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation", - "version": "0.41.1", + "version": "0.41.2", "description": "Base class for node which OpenTelemetry instrumentation modules extend", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation", @@ -83,7 +83,7 @@ "devDependencies": { "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", - "@opentelemetry/sdk-metrics": "1.15.1", + "@opentelemetry/sdk-metrics": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index d5773f83b7b..857c8c79d92 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-node", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry SDK for Node.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,27 +44,27 @@ "access": "public" }, "dependencies": { - "@opentelemetry/api-logs": "0.41.1", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/exporter-jaeger": "1.15.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.41.1", - "@opentelemetry/exporter-trace-otlp-http": "0.41.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.41.1", - "@opentelemetry/exporter-zipkin": "1.15.1", - "@opentelemetry/instrumentation": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-logs": "0.41.1", - "@opentelemetry/sdk-metrics": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", - "@opentelemetry/sdk-trace-node": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/api-logs": "0.41.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/exporter-jaeger": "1.15.2", + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.2", + "@opentelemetry/exporter-trace-otlp-http": "0.41.2", + "@opentelemetry/exporter-trace-otlp-proto": "0.41.2", + "@opentelemetry/exporter-zipkin": "1.15.2", + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-logs": "0.41.2", + "@opentelemetry/sdk-metrics": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-node": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.5.0" }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.15.1", + "@opentelemetry/context-async-hooks": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 70c6fef1263..9896eaaf8eb 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-exporter-base", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry OTLP Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -61,7 +61,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.15.1" + "@opentelemetry/core": "1.15.2" }, "devDependencies": { "@babel/core": "7.22.10", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 87def63d63a..66bf284d2f3 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-grpc-exporter-base", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry OTLP-gRPC Exporter base (for internal use only)", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,9 +50,9 @@ "devDependencies": { "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", - "@opentelemetry/otlp-transformer": "0.41.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -73,8 +73,8 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/otlp-exporter-base": "0.41.1", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", "protobufjs": "^7.2.3" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-grpc-exporter-base", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index 61873ad1d2f..6426bf9eb52 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-proto-exporter-base", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenTelemetry OTLP-HTTP-protobuf Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -79,8 +79,8 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/otlp-exporter-base": "0.41.1", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", "protobufjs": "^7.2.3" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-proto-exporter-base", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index c8a77ae0b42..6b48eacda63 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -4,7 +4,7 @@ "publishConfig": { "access": "public" }, - "version": "0.41.1", + "version": "0.41.2", "description": "Transform OpenTelemetry SDK data into OTLP", "module": "build/esm/index.js", "esnext": "build/esnext/index.js", @@ -78,12 +78,12 @@ "webpack": "4.46.0" }, "dependencies": { - "@opentelemetry/api-logs": "0.41.1", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-logs": "0.41.1", - "@opentelemetry/sdk-metrics": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1" + "@opentelemetry/api-logs": "0.41.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-logs": "0.41.2", + "@opentelemetry/sdk-metrics": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-transformer", "sideEffects": false diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index a23006ad2ca..5c53b841775 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-logs", - "version": "0.41.1", + "version": "0.41.2", "publishConfig": { "access": "public" }, @@ -74,7 +74,7 @@ "devDependencies": { "@babel/core": "7.22.10", "@opentelemetry/api": ">=1.4.0 <1.5.0", - "@opentelemetry/api-logs": "0.41.1", + "@opentelemetry/api-logs": "0.41.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -99,7 +99,7 @@ "webpack-merge": "5.9.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/resources": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/resources": "1.15.2" } } diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index d2deaae5f1d..3c9d4e82073 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opencensus", - "version": "0.41.1", + "version": "0.41.2", "description": "OpenCensus to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,8 +50,8 @@ "devDependencies": { "@opencensus/core": "0.1.0", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/context-async-hooks": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -69,7 +69,7 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", + "@opentelemetry/core": "1.15.2", "require-in-the-middle": "^7.1.1", "semver": "^7.5.1" }, diff --git a/integration-tests/propagation-validation-server/package.json b/integration-tests/propagation-validation-server/package.json index c027ea34c3d..5057970074c 100644 --- a/integration-tests/propagation-validation-server/package.json +++ b/integration-tests/propagation-validation-server/package.json @@ -1,6 +1,6 @@ { "name": "propagation-validation-server", - "version": "1.15.1", + "version": "1.15.2", "description": "server for w3c tests", "main": "validation_server.js", "private": true, @@ -12,9 +12,9 @@ }, "dependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/context-async-hooks": "1.15.1", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/context-async-hooks": "1.15.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", "axios": "1.4.0", "body-parser": "1.19.0", "express": "4.17.3" diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index f8f4797227d..3621271019e 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": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry AsyncHooks-based Context Manager", "main": "build/src/index.js", "types": "build/src/index.d.ts", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 65193793ed8..ba41bbe517e 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": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry Context Zone with peer dependency for zone.js", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index b827d821108..5b9581933b1 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-zone", - "version": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry Context Zone", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -75,7 +75,7 @@ "webpack-merge": "5.9.0" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "1.15.1", + "@opentelemetry/context-zone-peer-dep": "1.15.2", "zone.js": "^0.11.0" }, "sideEffects": true, diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index cb8da74b130..061821f1883 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/core", - "version": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -91,7 +91,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-core", "sideEffects": false diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index e31c28eaa95..1629974256d 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-jaeger", - "version": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry Exporter Jaeger allows user to send collected traces to Jaeger", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,7 +45,7 @@ }, "devDependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/resources": "1.15.1", + "@opentelemetry/resources": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -63,9 +63,9 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2", "jaeger-client": "^3.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-jaeger", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index e32960e4bd0..c68c7eb44d1 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-zipkin", - "version": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry Zipkin Exporter allows the user to send collected traces to Zipkin.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -92,10 +92,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-zipkin", "sideEffects": false diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index a67230166a5..2a50fd93ecc 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-b3", - "version": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry B3 propagator provides context propagation for systems that are using the B3 header format", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -51,7 +51,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.15.1" + "@opentelemetry/core": "1.15.2" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0" diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index 26e16812d83..868cb0c2a4d 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-jaeger", - "version": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry Jaeger propagator provides HTTP header propagation for systems that are using Jaeger HTTP header format.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -81,7 +81,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1" + "@opentelemetry/core": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-propagator-jaeger", "sideEffects": false diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index ddcc1e48d8d..bed20a95411 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resources", - "version": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry SDK resources", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -91,8 +91,8 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-resources", "sideEffects": false diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index c8b2ea54a97..2e741d532da 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-base", - "version": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry Tracing", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -93,9 +93,9 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-base", "sideEffects": false diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index 80b0976561e..bd88e07fdb9 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-node", - "version": "1.15.1", + "version": "1.15.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", @@ -46,8 +46,8 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/resources": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", @@ -65,11 +65,11 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/context-async-hooks": "1.15.1", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/propagator-b3": "1.15.1", - "@opentelemetry/propagator-jaeger": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/context-async-hooks": "1.15.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/propagator-b3": "1.15.2", + "@opentelemetry/propagator-jaeger": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", "semver": "^7.5.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index fa1287b20a2..1d31e720e30 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-web", - "version": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry Web Tracer", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -57,9 +57,9 @@ "devDependencies": { "@babel/core": "7.22.10", "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/context-zone": "1.15.1", - "@opentelemetry/propagator-b3": "1.15.1", - "@opentelemetry/resources": "1.15.1", + "@opentelemetry/context-zone": "1.15.2", + "@opentelemetry/propagator-b3": "1.15.2", + "@opentelemetry/resources": "1.15.2", "@types/jquery": "3.5.16", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -92,9 +92,9 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-web", "sideEffects": false diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index 778d89dd11a..bca2bd960f1 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/semantic-conventions", - "version": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry semantic conventions", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index 473b473cd05..123ed49b87d 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opentracing", - "version": "1.15.1", + "version": "1.15.2", "description": "OpenTracing to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -43,9 +43,9 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/propagator-b3": "1.15.1", - "@opentelemetry/propagator-jaeger": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", + "@opentelemetry/propagator-b3": "1.15.2", + "@opentelemetry/propagator-jaeger": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", @@ -60,8 +60,8 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/semantic-conventions": "1.15.1", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2", "opentracing": "^0.14.4" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-shim-opentracing", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 612036af21e..7de85fe7e30 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-metrics", - "version": "1.15.1", + "version": "1.15.2", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -84,8 +84,8 @@ "@opentelemetry/api": ">=1.3.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.15.1", - "@opentelemetry/resources": "1.15.1", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/resources": "1.15.2", "lodash.merge": "^4.6.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/sdk-metrics", diff --git a/packages/template/package.json b/packages/template/package.json index f7e010f22d9..cb538a503d4 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/template", - "version": "1.15.1", + "version": "1.15.2", "private": true, "publishConfig": { "access": "restricted" diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 75854251672..71c40a8ed2f 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/selenium-tests", - "version": "1.15.1", + "version": "1.15.2", "private": true, "description": "OpenTelemetry Selenium Tests", "main": "index.js", @@ -56,16 +56,16 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "1.15.1", - "@opentelemetry/core": "1.15.1", - "@opentelemetry/exporter-trace-otlp-http": "0.41.1", - "@opentelemetry/exporter-zipkin": "1.15.1", - "@opentelemetry/instrumentation": "0.41.1", - "@opentelemetry/instrumentation-fetch": "0.41.1", - "@opentelemetry/instrumentation-xml-http-request": "0.41.1", - "@opentelemetry/sdk-metrics": "1.15.1", - "@opentelemetry/sdk-trace-base": "1.15.1", - "@opentelemetry/sdk-trace-web": "1.15.1", + "@opentelemetry/context-zone-peer-dep": "1.15.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/exporter-trace-otlp-http": "0.41.2", + "@opentelemetry/exporter-zipkin": "1.15.2", + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/instrumentation-fetch": "0.41.2", + "@opentelemetry/instrumentation-xml-http-request": "0.41.2", + "@opentelemetry/sdk-metrics": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-web": "1.15.2", "zone.js": "0.11.4" } } From d3436bfac5fb2bf739808afef305530fce88ef61 Mon Sep 17 00:00:00 2001 From: Aaron Abbott Date: Thu, 10 Aug 2023 04:27:47 -0400 Subject: [PATCH 28/70] feat(sdk-metrics): implement MetricProducer specification (#4007) Co-authored-by: David Ashpole --- CHANGELOG.md | 2 + .../sdk-metrics/src/export/MetricReader.ts | 63 +++++++-- packages/sdk-metrics/src/index.ts | 2 + .../test/export/MetricReader.test.ts | 120 +++++++++++++++++- .../test/export/TestMetricProducer.ts | 17 ++- .../test/export/TestMetricReader.ts | 2 +- 6 files changed, 187 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d449ad83dc8..63e669ceba0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :rocket: (Enhancement) +* feat(sdk-metrics): implement MetricProducer specification [#4007](https://github.com/open-telemetry/opentelemetry-js/pull/4007) + ### :bug: (Bug Fix) ### :books: (Refine Doc) diff --git a/packages/sdk-metrics/src/export/MetricReader.ts b/packages/sdk-metrics/src/export/MetricReader.ts index 3bc4c63a069..8aad601d70f 100644 --- a/packages/sdk-metrics/src/export/MetricReader.ts +++ b/packages/sdk-metrics/src/export/MetricReader.ts @@ -18,7 +18,7 @@ import * as api from '@opentelemetry/api'; import { AggregationTemporality } from './AggregationTemporality'; import { MetricProducer } from './MetricProducer'; import { CollectionResult } from './MetricData'; -import { callWithTimeout } from '../utils'; +import { FlatMap, callWithTimeout } from '../utils'; import { InstrumentType } from '../InstrumentDescriptor'; import { CollectionOptions, @@ -45,6 +45,13 @@ export interface MetricReaderOptions { * not configured, cumulative is used for all instruments. */ aggregationTemporalitySelector?: AggregationTemporalitySelector; + /** + * **Note, this option is experimental**. Additional MetricProducers to use as a source of + * aggregated metric data in addition to the SDK's metric data. The resource returned by + * these MetricProducers is ignored; the SDK's resource will be used instead. + * @experimental + */ + metricProducers?: MetricProducer[]; } /** @@ -55,8 +62,10 @@ export abstract class MetricReader { // Tracks the shutdown state. // TODO: use BindOncePromise here once a new version of @opentelemetry/core is available. private _shutdown = false; - // MetricProducer used by this instance. - private _metricProducer?: MetricProducer; + // Additional MetricProducers which will be combined with the SDK's output + private _metricProducers: MetricProducer[]; + // MetricProducer used by this instance which produces metrics from the SDK + private _sdkMetricProducer?: MetricProducer; private readonly _aggregationTemporalitySelector: AggregationTemporalitySelector; private readonly _aggregationSelector: AggregationSelector; @@ -66,20 +75,26 @@ export abstract class MetricReader { this._aggregationTemporalitySelector = options?.aggregationTemporalitySelector ?? DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR; + this._metricProducers = options?.metricProducers ?? []; } /** - * Set the {@link MetricProducer} used by this instance. + * Set the {@link MetricProducer} used by this instance. **This should only be called by the + * SDK and should be considered internal.** * + * To add additional {@link MetricProducer}s to a {@link MetricReader}, pass them to the + * constructor as {@link MetricReaderOptions.metricProducers}. + * + * @internal * @param metricProducer */ setMetricProducer(metricProducer: MetricProducer) { - if (this._metricProducer) { + if (this._sdkMetricProducer) { throw new Error( 'MetricReader can not be bound to a MeterProvider again.' ); } - this._metricProducer = metricProducer; + this._sdkMetricProducer = metricProducer; this.onInitialized(); } @@ -130,7 +145,7 @@ export abstract class MetricReader { * Collect all metrics from the associated {@link MetricProducer} */ async collect(options?: CollectionOptions): Promise { - if (this._metricProducer === undefined) { + if (this._sdkMetricProducer === undefined) { throw new Error('MetricReader is not bound to a MetricProducer'); } @@ -139,9 +154,37 @@ export abstract class MetricReader { throw new Error('MetricReader is shutdown'); } - return this._metricProducer.collect({ - timeoutMillis: options?.timeoutMillis, - }); + const [sdkCollectionResults, ...additionalCollectionResults] = + await Promise.all([ + this._sdkMetricProducer.collect({ + timeoutMillis: options?.timeoutMillis, + }), + ...this._metricProducers.map(producer => + producer.collect({ + timeoutMillis: options?.timeoutMillis, + }) + ), + ]); + + // Merge the results, keeping the SDK's Resource + const errors = sdkCollectionResults.errors.concat( + FlatMap(additionalCollectionResults, result => result.errors) + ); + const resource = sdkCollectionResults.resourceMetrics.resource; + const scopeMetrics = + sdkCollectionResults.resourceMetrics.scopeMetrics.concat( + FlatMap( + additionalCollectionResults, + result => result.resourceMetrics.scopeMetrics + ) + ); + return { + resourceMetrics: { + resource, + scopeMetrics, + }, + errors, + }; } /** diff --git a/packages/sdk-metrics/src/index.ts b/packages/sdk-metrics/src/index.ts index 4760da3ccce..c9623707f27 100644 --- a/packages/sdk-metrics/src/index.ts +++ b/packages/sdk-metrics/src/index.ts @@ -54,6 +54,8 @@ export { InMemoryMetricExporter } from './export/InMemoryMetricExporter'; export { ConsoleMetricExporter } from './export/ConsoleMetricExporter'; +export { MetricCollectOptions, MetricProducer } from './export/MetricProducer'; + export { InstrumentDescriptor, InstrumentType } from './InstrumentDescriptor'; export { MeterProvider, MeterProviderOptions } from './MeterProvider'; diff --git a/packages/sdk-metrics/test/export/MetricReader.test.ts b/packages/sdk-metrics/test/export/MetricReader.test.ts index 297622982df..c0643a60da9 100644 --- a/packages/sdk-metrics/test/export/MetricReader.test.ts +++ b/packages/sdk-metrics/test/export/MetricReader.test.ts @@ -20,7 +20,13 @@ import { MeterProvider } from '../../src/MeterProvider'; import { assertRejects } from '../test-utils'; import { emptyResourceMetrics, TestMetricProducer } from './TestMetricProducer'; import { TestMetricReader } from './TestMetricReader'; -import { Aggregation, AggregationTemporality } from '../../src'; +import { + Aggregation, + AggregationTemporality, + DataPointType, + InstrumentType, + ScopeMetrics, +} from '../../src'; import { DEFAULT_AGGREGATION_SELECTOR, DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR, @@ -29,6 +35,39 @@ import { assertAggregationSelector, assertAggregationTemporalitySelector, } from './utils'; +import { defaultResource } from '../util'; +import { ValueType } from '@opentelemetry/api'; +import { Resource } from '@opentelemetry/resources'; + +const testScopeMetrics: ScopeMetrics[] = [ + { + scope: { + name: 'additionalMetricProducerMetrics', + }, + metrics: [ + { + aggregationTemporality: AggregationTemporality.CUMULATIVE, + dataPointType: DataPointType.SUM, + dataPoints: [ + { + attributes: {}, + value: 1, + startTime: [0, 0], + endTime: [1, 0], + }, + ], + descriptor: { + name: 'additionalCounter', + unit: '', + type: InstrumentType.COUNTER, + description: '', + valueType: ValueType.INT, + }, + isMonotonic: true, + }, + ], + }, +]; describe('MetricReader', () => { describe('setMetricProducer', () => { @@ -83,20 +122,91 @@ describe('MetricReader', () => { assertRejects(reader.collect(), /MetricReader is shutdown/); }); - it('should call MetricProduce.collect with timeout', async () => { + it('should call MetricProducer.collect with timeout', async () => { const reader = new TestMetricReader(); const producer = new TestMetricProducer(); reader.setMetricProducer(producer); - const collectStub = sinon.stub(producer, 'collect'); + const collectSpy = sinon.spy(producer, 'collect'); await reader.collect({ timeoutMillis: 20 }); - assert(collectStub.calledOnce); - const args = collectStub.args[0]; + assert(collectSpy.calledOnce); + const args = collectSpy.args[0]; assert.deepStrictEqual(args, [{ timeoutMillis: 20 }]); await reader.shutdown(); }); + + it('should collect metrics from the SDK and the additional metricProducers', async () => { + const meterProvider = new MeterProvider({ resource: defaultResource }); + const additionalProducer = new TestMetricProducer({ + resourceMetrics: { + resource: new Resource({ + shouldBeDiscarded: 'should-be-discarded', + }), + scopeMetrics: testScopeMetrics, + }, + }); + const reader = new TestMetricReader({ + metricProducers: [additionalProducer], + }); + meterProvider.addMetricReader(reader); + + // Make a measurement + meterProvider + .getMeter('someSdkMetrics') + .createCounter('sdkCounter') + .add(5, { hello: 'world' }); + const collectionResult = await reader.collect(); + + assert.strictEqual(collectionResult.errors.length, 0); + // Should keep the SDK's Resource only + assert.deepStrictEqual( + collectionResult.resourceMetrics.resource, + defaultResource + ); + assert.strictEqual( + collectionResult.resourceMetrics.scopeMetrics.length, + 2 + ); + const [sdkScopeMetrics, additionalScopeMetrics] = + collectionResult.resourceMetrics.scopeMetrics; + + assert.strictEqual(sdkScopeMetrics.scope.name, 'someSdkMetrics'); + assert.strictEqual( + additionalScopeMetrics.scope.name, + 'additionalMetricProducerMetrics' + ); + + await reader.shutdown(); + }); + + it('should merge the errors from the SDK and all metricProducers', async () => { + const meterProvider = new MeterProvider(); + const reader = new TestMetricReader({ + metricProducers: [ + new TestMetricProducer({ errors: ['err1'] }), + new TestMetricProducer({ errors: ['err2'] }), + ], + }); + meterProvider.addMetricReader(reader); + + // Provide a callback throwing an error too + meterProvider + .getMeter('someSdkMetrics') + .createObservableCounter('sdkCounter') + .addCallback(result => { + throw 'errsdk'; + }); + const collectionResult = await reader.collect(); + + assert.deepStrictEqual(collectionResult.errors, [ + 'errsdk', + 'err1', + 'err2', + ]); + await reader.shutdown(); + }); }); describe('selectAggregation', () => { diff --git a/packages/sdk-metrics/test/export/TestMetricProducer.ts b/packages/sdk-metrics/test/export/TestMetricProducer.ts index 29137d62a4e..d4865724c3d 100644 --- a/packages/sdk-metrics/test/export/TestMetricProducer.ts +++ b/packages/sdk-metrics/test/export/TestMetricProducer.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { CollectionResult } from '../../src/export/MetricData'; +import { CollectionResult, ResourceMetrics } from '../../src/export/MetricData'; import { MetricProducer } from '../../src/export/MetricProducer'; import { defaultResource } from '../util'; @@ -24,10 +24,21 @@ export const emptyResourceMetrics = { }; export class TestMetricProducer implements MetricProducer { + private resourceMetrics: ResourceMetrics; + private errors: unknown[]; + + constructor(params?: { + resourceMetrics?: ResourceMetrics; + errors?: unknown[]; + }) { + this.resourceMetrics = params?.resourceMetrics ?? emptyResourceMetrics; + this.errors = params?.errors ?? []; + } + async collect(): Promise { return { - resourceMetrics: { resource: defaultResource, scopeMetrics: [] }, - errors: [], + resourceMetrics: this.resourceMetrics, + errors: this.errors, }; } } diff --git a/packages/sdk-metrics/test/export/TestMetricReader.ts b/packages/sdk-metrics/test/export/TestMetricReader.ts index 61727322a42..46fd41c0450 100644 --- a/packages/sdk-metrics/test/export/TestMetricReader.ts +++ b/packages/sdk-metrics/test/export/TestMetricReader.ts @@ -31,7 +31,7 @@ export class TestMetricReader extends MetricReader { } getMetricCollector(): MetricCollector { - return this['_metricProducer'] as MetricCollector; + return this['_sdkMetricProducer'] as MetricCollector; } } From 902229afd89a2cf59b120b75892a56bdab5ff039 Mon Sep 17 00:00:00 2001 From: Amir Blum Date: Thu, 10 Aug 2023 12:23:28 +0300 Subject: [PATCH 29/70] chore: update blumamir employee name in the README (#4052) Co-authored-by: Marc Pichler --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 370dfb17d98..dfd297a7bcc 100644 --- a/README.md +++ b/README.md @@ -182,7 +182,7 @@ We have a weekly SIG meeting! See the [community page](https://github.com/open-t #### Maintainers ([@open-telemetry/js-maintainers](https://github.com/orgs/open-telemetry/teams/javascript-maintainers)) -- [Amir Blum](https://github.com/blumamir), Aspecto +- [Amir Blum](https://github.com/blumamir), Keyval - [Chengzhong Wu](https://github.com/legendecas), Alibaba - [Daniel Dyla](https://github.com/dyladan), Dynatrace - [Marc Pichler](https://github.com/pichlermarc), Dynatrace From 853a7b6edeb584e800499dbb65a3b42aa45c87e8 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Sun, 13 Aug 2023 11:08:59 +0200 Subject: [PATCH 30/70] fix(changelog): fix incorrect version for latest experimental release (#4047) --- experimental/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 0c7912b3a36..64b4debd388 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -16,7 +16,7 @@ All notable changes to experimental packages in this project will be documented ### :house: (Internal) -## 0.42.2 +## 0.41.2 ### :bug: (Bug Fix) From 5259a0b928a87d2a9fc8a3a4bf8eb16b1a5b4e4d Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Wed, 16 Aug 2023 14:38:03 +0200 Subject: [PATCH 31/70] chore(sdk-node): deprecate methods in favor of constructor options (#3996) --- experimental/CHANGELOG.md | 8 ++++ .../opentelemetry-sdk-node/src/sdk.ts | 37 ++++++++++++++++--- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 64b4debd388..0c4f724d83e 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -8,6 +8,14 @@ All notable changes to experimental packages in this project will be documented ### :boom: Breaking Change +* chore(sdk-node): deprecate methods in favor of constructor options [#3996](https://github.com/open-telemetry/opentelemetry-js/pull/3996) @pichlermarc + * The following methods are now deprecated and will be removed in `0.43.0` + * `NodeSDK.configureTracerProvider()`, please use constructor options instead + * `NodeSDK.configureMeterProvider()`, please use constructor options instead + * `NodeSDK.configureLoggerProvider()`, please use constructor options instead + * `NodeSDK.addResource()`, please use constructor options instead + * `NodeSDK.detectResources()`, this is not necessary anymore, resources are now auto-detected on startup. + ### :rocket: (Enhancement) ### :bug: (Bug Fix) diff --git a/experimental/packages/opentelemetry-sdk-node/src/sdk.ts b/experimental/packages/opentelemetry-sdk-node/src/sdk.ts index 8b96dddeab8..30a1bea7901 100644 --- a/experimental/packages/opentelemetry-sdk-node/src/sdk.ts +++ b/experimental/packages/opentelemetry-sdk-node/src/sdk.ts @@ -178,7 +178,14 @@ export class NodeSDK { this._instrumentations = instrumentations; } - /** Set configurations required to register a NodeTracerProvider */ + /** + * + * @deprecated Please pass {@code sampler}, {@code generalLimits}, {@code spanLimits}, {@code resource}, + * {@code IdGenerator}, {@code spanProcessor}, {@code contextManager} and {@code textMapPropagator}, + * to the constructor options instead. + * + * Set configurations needed to register a TracerProvider + */ public configureTracerProvider( tracerConfig: NodeTracerConfig, spanProcessor: SpanProcessor, @@ -193,7 +200,11 @@ export class NodeSDK { }; } - /**Set configurations needed to register a LoggerProvider */ + /** + * @deprecated Please pass {@code logRecordProcessor} to the constructor options instead. + * + * Set configurations needed to register a LoggerProvider + */ public configureLoggerProvider(config: LoggerProviderConfig): void { // nothing is set yet, we can set config and then return if (this._loggerProviderConfig == null) { @@ -217,7 +228,11 @@ export class NodeSDK { } } - /** Set configurations needed to register a MeterProvider */ + /** + * @deprecated Please pass {@code views} and {@code reader} to the constructor options instead. + * + * Set configurations needed to register a MeterProvider + */ public configureMeterProvider(config: MeterProviderConfig): void { // nothing is set yet, we can set config and return. if (this._meterProviderConfig == null) { @@ -248,7 +263,12 @@ export class NodeSDK { } } - /** Detect resource attributes */ + /** + * @deprecated Resources are detected automatically on {@link NodeSDK.start()}, when the {@code autoDetectResources} + * constructor option is set to {@code true} or left {@code undefined}. + * + * Detect resource attributes + */ public detectResources(): void { if (this._disabled) { return; @@ -261,13 +281,18 @@ export class NodeSDK { this.addResource(detectResourcesSync(internalConfig)); } - /** Manually add a resource */ + /** + * @deprecated Please pre-merge resources and pass them to the constructor + * + * Manually add a Resource + * @param resource + */ public addResource(resource: IResource): void { 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. + * Call this method to construct SDK components and register them with the OpenTelemetry API. */ public start(): void { if (this._disabled) { From b400c2e5d9729c3528482781a93393602dc6dc9f Mon Sep 17 00:00:00 2001 From: Gabriel Poulenard-Talbot <20546824+n0cloud@users.noreply.github.com> Date: Thu, 17 Aug 2023 11:16:42 -0400 Subject: [PATCH 32/70] fix(zipkin-exporter): round duration for zipkin (#4064) Co-authored-by: Daniel Dyla --- CHANGELOG.md | 2 ++ .../opentelemetry-exporter-zipkin/src/transform.ts | 2 +- .../test/common/transform.test.ts | 12 ++++++------ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63e669ceba0..5468b2b67f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) +* fix(exporter-zipkin): rounding duration to the nearest int to be compliant with zipkin protocol [#4064](https://github.com/open-telemetry/opentelemetry-js/pull/4064) @n0cloud + ### :books: (Refine Doc) ### :house: (Internal) diff --git a/packages/opentelemetry-exporter-zipkin/src/transform.ts b/packages/opentelemetry-exporter-zipkin/src/transform.ts index 94983057f69..54392321f88 100644 --- a/packages/opentelemetry-exporter-zipkin/src/transform.ts +++ b/packages/opentelemetry-exporter-zipkin/src/transform.ts @@ -48,7 +48,7 @@ export function toZipkinSpan( id: span.spanContext().spanId, kind: ZIPKIN_SPAN_KIND_MAPPING[span.kind], timestamp: hrTimeToMicroseconds(span.startTime), - duration: hrTimeToMicroseconds(span.duration), + duration: Math.round(hrTimeToMicroseconds(span.duration)), localEndpoint: { serviceName }, tags: _toZipkinTags(span, statusCodeTagName, statusErrorTagName), annotations: span.events.length diff --git a/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts b/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts index 65a06922af1..810b9e32f93 100644 --- a/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts +++ b/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts @@ -85,8 +85,8 @@ describe('transform', () => { timestamp: hrTimeToMicroseconds(span.events[0].time), }, ], - duration: hrTimeToMicroseconds( - hrTimeDuration(span.startTime, span.endTime) + duration: Math.round( + hrTimeToMicroseconds(hrTimeDuration(span.startTime, span.endTime)) ), id: span.spanContext().spanId, localEndpoint: { @@ -128,8 +128,8 @@ describe('transform', () => { assert.deepStrictEqual(zipkinSpan, { kind: 'SERVER', annotations: undefined, - duration: hrTimeToMicroseconds( - hrTimeDuration(span.startTime, span.endTime) + duration: Math.round( + hrTimeToMicroseconds(hrTimeDuration(span.startTime, span.endTime)) ), id: span.spanContext().spanId, localEndpoint: { @@ -179,8 +179,8 @@ describe('transform', () => { assert.deepStrictEqual(zipkinSpan, { kind: item.zipkin, annotations: undefined, - duration: hrTimeToMicroseconds( - hrTimeDuration(span.startTime, span.endTime) + duration: Math.round( + hrTimeToMicroseconds(hrTimeDuration(span.startTime, span.endTime)) ), id: span.spanContext().spanId, localEndpoint: { From 34660b5372a98cc89073afc869bf01984375e7b6 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 23 Aug 2023 17:13:22 +0200 Subject: [PATCH 33/70] chore(deps): update dependency chromedriver to v116 (#4080) --- selenium-tests/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 71c40a8ed2f..ef11738733d 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -40,7 +40,7 @@ "babel-loader": "8.3.0", "babel-polyfill": "6.26.0", "browserstack-local": "1.4.8", - "chromedriver": "114.0.3", + "chromedriver": "116.0.0", "dotenv": "16.0.0", "fast-safe-stringify": "2.1.1", "geckodriver": "3.0.1", From cd539dd2d0c016ff8c2d5243bc6fa5e729ae2991 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Wed, 23 Aug 2023 17:28:55 +0200 Subject: [PATCH 34/70] chore: move inactive approvers to emeritus (#4069) Co-authored-by: Daniel Dyla --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index dfd297a7bcc..7fbe7879721 100644 --- a/README.md +++ b/README.md @@ -195,13 +195,10 @@ We have a weekly SIG meeting! See the [community page](https://github.com/open-t - [Haddas Bronfman](https://github.com/haddasbronfman), Cisco - [Hector Hernandez](https://github.com/hectorhdzg), Microsoft - [Jamie Danielson](https://github.com/JamieDanielson), Honeycomb -- [John Bley](https://github.com/johnbley), Splunk -- [Mark Wolff](https://github.com/markwolff), Microsoft - [Martin Kuba](https://github.com/martinkuba), Lightstep - [Matthew Wear](https://github.com/mwear), LightStep - [Naseem K. Ullah](https://github.com/naseemkullah), Transit - [Neville Wylie](https://github.com/MSNev), Microsoft -- [Olivier Albertini](https://github.com/OlivierAlbertini), Ville de Montréal - [Purvi Kanal](https://github.com/pkanal), Honeycomb - [Svetlana Brennan](https://github.com/svetlanabrennan), New Relic @@ -216,6 +213,9 @@ We have a weekly SIG meeting! See the [community page](https://github.com/open-t - [Valentin Marchaud](https://github.com/vmarchaud), Maintainer - [Brandon Gonzalez](https://github.com/bg451), LightStep, Approver - [Roch Devost](https://github.com/rochdev), DataDog, Approver +- [John Bley](https://github.com/johnbley), Splunk, Approver +- [Mark Wolff](https://github.com/markwolff), Microsoft, Approver +- [Olivier Albertini](https://github.com/OlivierAlbertini), Ville de Montréal, Approver *Find more about the emeritus role in [community repository](https://github.com/open-telemetry/community/blob/main/community-membership.md#emeritus-maintainerapprovertriager).* From f263ab7134a25f77c536ea35d2cc21c2d27c74fb Mon Sep 17 00:00:00 2001 From: Haddas Bronfman <85441461+haddasbronfman@users.noreply.github.com> Date: Wed, 23 Aug 2023 18:40:57 +0300 Subject: [PATCH 35/70] docs(guidelines): add dependencies guidelines (#4040) * docs(guidelines): add dependencies guidelines * docs(guidelines): add line to CHANGELOG * Update GUIDELINES.md Co-authored-by: Marc Pichler * Update GUIDELINES.md Co-authored-by: Marc Pichler * Update GUIDELINES.md Co-authored-by: Marc Pichler * Update GUIDELINES.md Co-authored-by: Marc Pichler * Update GUIDELINES.md Co-authored-by: Marc Pichler * Update GUIDELINES.md Co-authored-by: Marc Pichler * docs(guidelines): lint * Update GUIDELINES.md Co-authored-by: Marc Pichler * Update GUIDELINES.md Co-authored-by: Marc Pichler * Move guidelines to doc directory --------- Co-authored-by: Marc Pichler Co-authored-by: Daniel Dyla --- CHANGELOG.md | 2 ++ doc/GUIDELINES.md | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 doc/GUIDELINES.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 5468b2b67f8..72e75088279 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :books: (Refine Doc) +* docs(guidelines): add dependencies guidelines [#4040](https://github.com/open-telemetry/opentelemetry-js/pull/4040) + ### :house: (Internal) ## 1.15.2 diff --git a/doc/GUIDELINES.md b/doc/GUIDELINES.md new file mode 100644 index 00000000000..c4b5d09d7bc --- /dev/null +++ b/doc/GUIDELINES.md @@ -0,0 +1,35 @@ +# OpenTelemetry JS Code Contribution Guide + +This document outlines the essential guidelines for contributing code to the OpenTelemetry JS repository. These guidelines are designed to ensure consistency, stability, and the highest quality of code across the project. + +## Dependencies + +This section refers to `"dependencies"` and `"devDependencies"` entries in `package.json` file. +> [!IMPORTANT] +> Not all libraries follow [Semantic Versioning](https://semver.org/). Even those who do might occasionally introduce breaking changes due to human errors. Exceptions to the guidelines in this document MAY be granted by Approvers or Maintainers to work around this. + +### Development Dependencies + +`"devDependencies"` SHOULD be pinned to reduce the risk of autobreaking the build. Since we cannot use the `package-lock.json` file (because the libraries are distributed without it), control over the version our contributors will get is limited. By using pinned versions, we prevent potential disruptions caused by unpinned versions. + +**Example:** `^1.2.3` might inadvertently lead to version `1.2.6` which includes unintended breaking changes). + +> [!NOTE] +> As this approach might leave our project with outdated tooling, we adopt `renovate-bot`. This automated dependency update tool proactively opens pull requests upon the release of new patch/minor/major versions. The complete configuration for renovate-bot can be found in [renovate.json](./renovate.json) file. + +### @opentelemetry/* dependencies + +All packages from the `@opentelemetry/` namespace MUST have the same pinned version, as these dependencies are automatically updated on each release by lerna. + +**Example:** all packages under `packages/` should consistently maintain the same version, as should those under `experimental/packages/`. + +An exception is granted for dependencies on `@opentelemetry/api`, which, if used by the package SHOULD NOT be included as a `dependency`. `@opentelemetry/api` SHOULD be included as a `peerDependency` instead. The version range of the `peerDependency` SHOULD reflect the minimum supported, and SHOULD NOT allow versions greater than the latest released minor version. + +### Third-Party Library Dependencies + +Packages categorized as third-party and listed under the `"dependencies"` section (e.g., @grpc/grpc-js, @grpc/proto-loader, shimmer, etc.) should remain unpinned and utilize the caret (`^`) symbol. This approach offers several advantages: + +* Our users could get bug fixes of those 3rd-party packages easily, without waiting for us to update our library. +* In cases where multiple packages have dependencies on different versions of the same package, npm will opt for the most recent version, saving space and preventing potential disruptions. + +It's important to acknowledge that this approach does expose users to potential breaking changes arising from either human error or libraries that do not strictly follow to semver conventions. This trade-off is an inherent aspect of this approach. From 92050b55adc6a6973426edfae77360e9fc39465a Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Wed, 23 Aug 2023 12:01:51 -0400 Subject: [PATCH 36/70] docs: fix broken link to renovate.json (#4085) --- doc/GUIDELINES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/GUIDELINES.md b/doc/GUIDELINES.md index c4b5d09d7bc..ea349fdde7f 100644 --- a/doc/GUIDELINES.md +++ b/doc/GUIDELINES.md @@ -15,7 +15,7 @@ This section refers to `"dependencies"` and `"devDependencies"` entries in `pack **Example:** `^1.2.3` might inadvertently lead to version `1.2.6` which includes unintended breaking changes). > [!NOTE] -> As this approach might leave our project with outdated tooling, we adopt `renovate-bot`. This automated dependency update tool proactively opens pull requests upon the release of new patch/minor/major versions. The complete configuration for renovate-bot can be found in [renovate.json](./renovate.json) file. +> As this approach might leave our project with outdated tooling, we adopt `renovate-bot`. This automated dependency update tool proactively opens pull requests upon the release of new patch/minor/major versions. The complete configuration for renovate-bot can be found in [renovate.json](../renovate.json) file. ### @opentelemetry/* dependencies From 863c4d4028a485fc70d4868457a57eebd818ea66 Mon Sep 17 00:00:00 2001 From: shashi3kiran3 <142459084+shashi3kiran3@users.noreply.github.com> Date: Wed, 23 Aug 2023 11:14:50 -0700 Subject: [PATCH 37/70] chore(sdk-node): deprecate methods in favor of constructor options (#3996) (#4076) Co-authored-by: Daniel Dyla --- .../packages/opentelemetry-instrumentation-http/package.json | 2 +- .../packages/opentelemetry-instrumentation/package.json | 2 +- experimental/packages/shim-opencensus/package.json | 2 +- packages/opentelemetry-sdk-trace-node/package.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 19b0d565126..ed70652dfe6 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -77,7 +77,7 @@ "@opentelemetry/core": "1.15.2", "@opentelemetry/instrumentation": "0.41.2", "@opentelemetry/semantic-conventions": "1.15.2", - "semver": "^7.5.1" + "semver": "^7.5.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-http", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 85905869530..497ddb1b219 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -74,7 +74,7 @@ "@types/shimmer": "^1.0.2", "import-in-the-middle": "1.4.2", "require-in-the-middle": "^7.1.1", - "semver": "^7.5.1", + "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index 3c9d4e82073..75651fc7538 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -71,7 +71,7 @@ "dependencies": { "@opentelemetry/core": "1.15.2", "require-in-the-middle": "^7.1.1", - "semver": "^7.5.1" + "semver": "^7.5.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/shim-opencensus", "sideEffects": false diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index bd88e07fdb9..f4d44f0f97d 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -70,7 +70,7 @@ "@opentelemetry/propagator-b3": "1.15.2", "@opentelemetry/propagator-jaeger": "1.15.2", "@opentelemetry/sdk-trace-base": "1.15.2", - "semver": "^7.5.1" + "semver": "^7.5.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node", "sideEffects": false From dfe9bdd32cd06c7de31804b86ae6f11131303fbc Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Wed, 23 Aug 2023 20:36:11 +0200 Subject: [PATCH 38/70] chore(deps): update prettier to v3 and prettier-plugin-eslint to v5 (#4075) * chore(deps): update dependency prettier to v3 * chore: bump prettier-plugin-eslint and apply rules --------- Co-authored-by: Mend Renovate Co-authored-by: Daniel Dyla --- api/src/metrics/Meter.ts | 12 ++++++------ api/src/metrics/Metric.ts | 18 +++++++++--------- api/src/metrics/ObservableResult.ts | 4 ++-- .../test/node/OTLPLogExporter.test.ts | 5 ++++- .../exporter-logs-otlp-proto/test/logHelper.ts | 5 ++++- .../test/node/nodeHelpers.ts | 5 ++++- .../test/traceHelper.ts | 5 ++++- .../src/OTLPMetricExporterBase.ts | 2 +- .../test/node/nodeHelpers.ts | 5 ++++- .../test/metricsHelper.ts | 5 ++++- .../src/http.ts | 4 ++-- .../otlp-exporter-base/src/OTLPExporterBase.ts | 2 +- .../browser/OTLPExporterBrowserBase.ts | 2 +- .../src/platform/node/OTLPExporterNodeBase.ts | 2 +- .../src/OTLPGRPCExporterNodeBase.ts | 2 +- .../browser/OTLPProtoExporterBrowserBase.ts | 2 +- .../platform/node/OTLPProtoExporterNodeBase.ts | 2 +- .../src/export/BatchLogRecordProcessorBase.ts | 5 ++++- package.json | 4 ++-- .../opentelemetry-core/src/utils/callback.ts | 7 +++++-- .../test/utils/merge.test.ts | 5 ++++- .../src/export/BatchSpanProcessorBase.ts | 9 ++++++--- .../src/aggregator/ExponentialHistogram.ts | 5 ++++- .../sdk-metrics/src/state/MeterSharedState.ts | 2 +- packages/sdk-metrics/src/view/Aggregation.ts | 5 ++++- 25 files changed, 80 insertions(+), 44 deletions(-) diff --git a/api/src/metrics/Meter.ts b/api/src/metrics/Meter.ts index c399fc5fb71..1405ae74730 100644 --- a/api/src/metrics/Meter.ts +++ b/api/src/metrics/Meter.ts @@ -85,7 +85,7 @@ export interface Meter { * @param [options] the metric options. */ createUpDownCounter< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, >( name: string, options?: MetricOptions @@ -100,7 +100,7 @@ export interface Meter { * @param [options] the metric options. */ createObservableGauge< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, >( name: string, options?: MetricOptions @@ -115,7 +115,7 @@ export interface Meter { * @param [options] the metric options. */ createObservableCounter< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, >( name: string, options?: MetricOptions @@ -130,7 +130,7 @@ export interface Meter { * @param [options] the metric options. */ createObservableUpDownCounter< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, >( name: string, options?: MetricOptions @@ -151,7 +151,7 @@ export interface Meter { * @param observables the observables associated with this batch observable callback */ addBatchObservableCallback< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, >( callback: BatchObservableCallback, observables: Observable[] @@ -167,7 +167,7 @@ export interface Meter { * @param observables the observables associated with this batch observable callback */ removeBatchObservableCallback< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, >( callback: BatchObservableCallback, observables: Observable[] diff --git a/api/src/metrics/Metric.ts b/api/src/metrics/Metric.ts index 36d773441e5..533aa264b14 100644 --- a/api/src/metrics/Metric.ts +++ b/api/src/metrics/Metric.ts @@ -63,7 +63,7 @@ export enum ValueType { *
    */ export interface Counter< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, > { /** * Increment value of counter by the input. Inputs must not be negative. @@ -72,7 +72,7 @@ export interface Counter< } export interface UpDownCounter< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, > { /** * Increment value of counter by the input. Inputs may be negative. @@ -81,7 +81,7 @@ export interface UpDownCounter< } export interface Histogram< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, > { /** * Records a measurement. Value of the measurement must not be negative. @@ -103,7 +103,7 @@ export type MetricAttributeValue = AttributeValue; * The observable callback for Observable instruments. */ export type ObservableCallback< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, > = ( observableResult: ObservableResult ) => void | Promise; @@ -112,13 +112,13 @@ export type ObservableCallback< * The observable callback for a batch of Observable instruments. */ export type BatchObservableCallback< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, > = ( observableResult: BatchObservableResult ) => void | Promise; export interface Observable< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, > { /** * Sets up a function that will be called whenever a metric collection is initiated. @@ -134,11 +134,11 @@ export interface Observable< } export type ObservableCounter< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, > = Observable; export type ObservableUpDownCounter< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, > = Observable; export type ObservableGauge< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, > = Observable; diff --git a/api/src/metrics/ObservableResult.ts b/api/src/metrics/ObservableResult.ts index 5b4f9e962b3..29a82db1206 100644 --- a/api/src/metrics/ObservableResult.ts +++ b/api/src/metrics/ObservableResult.ts @@ -20,7 +20,7 @@ import { MetricAttributes, Observable } from './Metric'; * Interface that is being used in callback function for Observable Metric. */ export interface ObservableResult< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, > { /** * Observe a measurement of the value associated with the given attributes. @@ -41,7 +41,7 @@ export interface ObservableResult< * Interface that is being used in batch observable callback function. */ export interface BatchObservableResult< - AttributesTypes extends MetricAttributes = MetricAttributes + AttributesTypes extends MetricAttributes = MetricAttributes, > { /** * Observe a measurement of the value associated with the given attributes. diff --git a/experimental/packages/exporter-logs-otlp-http/test/node/OTLPLogExporter.test.ts b/experimental/packages/exporter-logs-otlp-http/test/node/OTLPLogExporter.test.ts index 2ae11142ade..6dac23b5809 100644 --- a/experimental/packages/exporter-logs-otlp-http/test/node/OTLPLogExporter.test.ts +++ b/experimental/packages/exporter-logs-otlp-http/test/node/OTLPLogExporter.test.ts @@ -35,7 +35,10 @@ import { ExportResultCode } from '@opentelemetry/core'; let fakeRequest: PassThrough; class MockedResponse extends Stream { - constructor(private _code: number, private _msg?: string) { + constructor( + private _code: number, + private _msg?: string + ) { super(); } diff --git a/experimental/packages/exporter-logs-otlp-proto/test/logHelper.ts b/experimental/packages/exporter-logs-otlp-proto/test/logHelper.ts index 7b8c8e8b9a0..54a752af1e8 100644 --- a/experimental/packages/exporter-logs-otlp-proto/test/logHelper.ts +++ b/experimental/packages/exporter-logs-otlp-proto/test/logHelper.ts @@ -167,7 +167,10 @@ export function ensureExportLogsServiceRequestIsSet( } export class MockedResponse extends Stream { - constructor(private _code: number, private _msg?: string) { + constructor( + private _code: number, + private _msg?: string + ) { super(); } diff --git a/experimental/packages/exporter-trace-otlp-http/test/node/nodeHelpers.ts b/experimental/packages/exporter-trace-otlp-http/test/node/nodeHelpers.ts index 1219f2d976b..d2dce6517b2 100644 --- a/experimental/packages/exporter-trace-otlp-http/test/node/nodeHelpers.ts +++ b/experimental/packages/exporter-trace-otlp-http/test/node/nodeHelpers.ts @@ -17,7 +17,10 @@ import { Stream } from 'stream'; export class MockedResponse extends Stream { - constructor(private _code: number, private _msg?: string) { + constructor( + private _code: number, + private _msg?: string + ) { super(); } diff --git a/experimental/packages/exporter-trace-otlp-proto/test/traceHelper.ts b/experimental/packages/exporter-trace-otlp-proto/test/traceHelper.ts index 5e2b71c5736..ff6a9c7b85d 100644 --- a/experimental/packages/exporter-trace-otlp-proto/test/traceHelper.ts +++ b/experimental/packages/exporter-trace-otlp-proto/test/traceHelper.ts @@ -261,7 +261,10 @@ export function ensureExportTraceServiceRequestIsSet( } export class MockedResponse extends Stream { - constructor(private _code: number, private _msg?: string) { + constructor( + private _code: number, + private _msg?: string + ) { super(); } diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterBase.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterBase.ts index 21177777f6c..db8a4a32ed1 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterBase.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterBase.ts @@ -109,7 +109,7 @@ export class OTLPMetricExporterBase< OTLPMetricExporterOptions, ResourceMetrics, IExportMetricsServiceRequest - > + >, > implements PushMetricExporter { public _otlpExporter: T; diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/nodeHelpers.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/nodeHelpers.ts index 1219f2d976b..d2dce6517b2 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/nodeHelpers.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/nodeHelpers.ts @@ -17,7 +17,10 @@ import { Stream } from 'stream'; export class MockedResponse extends Stream { - constructor(private _code: number, private _msg?: string) { + constructor( + private _code: number, + private _msg?: string + ) { super(); } diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/metricsHelper.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/metricsHelper.ts index 0012f0c1181..27b816fe10c 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/metricsHelper.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/metricsHelper.ts @@ -224,7 +224,10 @@ export function ensureExportMetricsServiceRequestIsSet( } export class MockedResponse extends Stream { - constructor(private _code: number, private _msg?: string) { + constructor( + private _code: number, + private _msg?: string + ) { super(); } diff --git a/experimental/packages/opentelemetry-instrumentation-http/src/http.ts b/experimental/packages/opentelemetry-instrumentation-http/src/http.ts index 15ca92a45eb..9422bbc9efd 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/src/http.ts +++ b/experimental/packages/opentelemetry-instrumentation-http/src/http.ts @@ -105,7 +105,7 @@ export class HttpInstrumentation extends InstrumentationBase { init(): [ InstrumentationNodeModuleDefinition, - InstrumentationNodeModuleDefinition + InstrumentationNodeModuleDefinition, ] { return [this._getHttpsInstrumentation(), this._getHttpInstrumentation()]; } @@ -237,7 +237,7 @@ export class HttpInstrumentation extends InstrumentationBase { // https://nodejs.org/dist/latest/docs/api/http.html#http_http_get_options_callback // https://github.com/googleapis/cloud-trace-nodejs/blob/master/src/instrumentations/instrumentation-http.ts#L198 return function outgoingGetRequest< - T extends http.RequestOptions | string | url.URL + T extends http.RequestOptions | string | url.URL, >(options: T, ...args: HttpRequestArgs): http.ClientRequest { const req = clientRequest(options, ...args); req.end(); diff --git a/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts b/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts index c9603057830..2c55a7f91ce 100644 --- a/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts +++ b/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts @@ -33,7 +33,7 @@ import { configureExporterTimeout } from './util'; export abstract class OTLPExporterBase< T extends OTLPExporterConfigBase, ExportItem, - ServiceRequest + ServiceRequest, > { public readonly url: string; public readonly hostname: string | undefined; diff --git a/experimental/packages/otlp-exporter-base/src/platform/browser/OTLPExporterBrowserBase.ts b/experimental/packages/otlp-exporter-base/src/platform/browser/OTLPExporterBrowserBase.ts index 57556d81a58..2888e317dff 100644 --- a/experimental/packages/otlp-exporter-base/src/platform/browser/OTLPExporterBrowserBase.ts +++ b/experimental/packages/otlp-exporter-base/src/platform/browser/OTLPExporterBrowserBase.ts @@ -27,7 +27,7 @@ import { getEnv, baggageUtils } from '@opentelemetry/core'; */ export abstract class OTLPExporterBrowserBase< ExportItem, - ServiceRequest + ServiceRequest, > extends OTLPExporterBase { protected _headers: Record; private _useXHR: boolean = false; diff --git a/experimental/packages/otlp-exporter-base/src/platform/node/OTLPExporterNodeBase.ts b/experimental/packages/otlp-exporter-base/src/platform/node/OTLPExporterNodeBase.ts index 088a0fd0a02..5a8b1dfdfa5 100644 --- a/experimental/packages/otlp-exporter-base/src/platform/node/OTLPExporterNodeBase.ts +++ b/experimental/packages/otlp-exporter-base/src/platform/node/OTLPExporterNodeBase.ts @@ -30,7 +30,7 @@ import { getEnv, baggageUtils } from '@opentelemetry/core'; */ export abstract class OTLPExporterNodeBase< ExportItem, - ServiceRequest + ServiceRequest, > extends OTLPExporterBase< OTLPExporterNodeConfigBase, ExportItem, diff --git a/experimental/packages/otlp-grpc-exporter-base/src/OTLPGRPCExporterNodeBase.ts b/experimental/packages/otlp-grpc-exporter-base/src/OTLPGRPCExporterNodeBase.ts index 884505daa86..b4f06472c61 100644 --- a/experimental/packages/otlp-grpc-exporter-base/src/OTLPGRPCExporterNodeBase.ts +++ b/experimental/packages/otlp-grpc-exporter-base/src/OTLPGRPCExporterNodeBase.ts @@ -34,7 +34,7 @@ import { */ export abstract class OTLPGRPCExporterNodeBase< ExportItem, - ServiceRequest + ServiceRequest, > extends OTLPExporterBase< OTLPGRPCExporterConfigNode, ExportItem, diff --git a/experimental/packages/otlp-proto-exporter-base/src/platform/browser/OTLPProtoExporterBrowserBase.ts b/experimental/packages/otlp-proto-exporter-base/src/platform/browser/OTLPProtoExporterBrowserBase.ts index 34c80d6e82a..4bc9e5c70ab 100644 --- a/experimental/packages/otlp-proto-exporter-base/src/platform/browser/OTLPProtoExporterBrowserBase.ts +++ b/experimental/packages/otlp-proto-exporter-base/src/platform/browser/OTLPProtoExporterBrowserBase.ts @@ -30,7 +30,7 @@ import { getExportRequestProto } from '../util'; */ export abstract class OTLPProtoExporterBrowserBase< ExportItem, - ServiceRequest + ServiceRequest, > extends OTLPExporterBaseMain { constructor(config: OTLPExporterConfigBase = {}) { super(config); diff --git a/experimental/packages/otlp-proto-exporter-base/src/platform/node/OTLPProtoExporterNodeBase.ts b/experimental/packages/otlp-proto-exporter-base/src/platform/node/OTLPProtoExporterNodeBase.ts index c0ff4b6b391..17804c47b49 100644 --- a/experimental/packages/otlp-proto-exporter-base/src/platform/node/OTLPProtoExporterNodeBase.ts +++ b/experimental/packages/otlp-proto-exporter-base/src/platform/node/OTLPProtoExporterNodeBase.ts @@ -36,7 +36,7 @@ type SendFn = ( */ export abstract class OTLPProtoExporterNodeBase< ExportItem, - ServiceRequest + ServiceRequest, > extends OTLPExporterBaseMain { private _send!: SendFn; diff --git a/experimental/packages/sdk-logs/src/export/BatchLogRecordProcessorBase.ts b/experimental/packages/sdk-logs/src/export/BatchLogRecordProcessorBase.ts index 92d42fe44ba..027f103c07a 100644 --- a/experimental/packages/sdk-logs/src/export/BatchLogRecordProcessorBase.ts +++ b/experimental/packages/sdk-logs/src/export/BatchLogRecordProcessorBase.ts @@ -42,7 +42,10 @@ export abstract class BatchLogRecordProcessorBase private _timer: NodeJS.Timeout | undefined; private _shutdownOnce: BindOnceFuture; - constructor(private readonly _exporter: LogRecordExporter, config?: T) { + constructor( + private readonly _exporter: LogRecordExporter, + config?: T + ) { const env = getEnv(); this._maxExportBatchSize = config?.maxExportBatchSize ?? env.OTEL_BLRP_MAX_EXPORT_BATCH_SIZE; diff --git a/package.json b/package.json index 864a548b051..963f7b826af 100644 --- a/package.json +++ b/package.json @@ -69,13 +69,13 @@ "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-node": "11.1.0", - "eslint-plugin-prettier": "4.2.1", + "eslint-plugin-prettier": "5.0.0", "gh-pages": "5.0.0", "lerna": "7.1.4", "@lerna/legacy-package-management": "7.1.4", "linkinator": "5.0.1", "markdownlint-cli": "0.35.0", - "prettier": "2.8.8", + "prettier": "3.0.2", "semver": "7.5.4", "typedoc": "0.22.18", "typedoc-plugin-missing-exports": "1.0.0", diff --git a/packages/opentelemetry-core/src/utils/callback.ts b/packages/opentelemetry-core/src/utils/callback.ts index ebbad5f96b2..56c900c2abc 100644 --- a/packages/opentelemetry-core/src/utils/callback.ts +++ b/packages/opentelemetry-core/src/utils/callback.ts @@ -22,11 +22,14 @@ import { Deferred } from './promise'; export class BindOnceFuture< R, This = unknown, - T extends (this: This, ...args: unknown[]) => R = () => R + T extends (this: This, ...args: unknown[]) => R = () => R, > { private _isCalled = false; private _deferred = new Deferred(); - constructor(private _callback: T, private _that: This) {} + constructor( + private _callback: T, + private _that: This + ) {} get isCalled() { return this._isCalled; diff --git a/packages/opentelemetry-core/test/utils/merge.test.ts b/packages/opentelemetry-core/test/utils/merge.test.ts index 76e9ab2fe01..56c08c83215 100644 --- a/packages/opentelemetry-core/test/utils/merge.test.ts +++ b/packages/opentelemetry-core/test/utils/merge.test.ts @@ -272,7 +272,10 @@ class A { } class B extends A { - constructor(name = 'foo', private _ver = 1) { + constructor( + name = 'foo', + private _ver = 1 + ) { super(name); } getVer() { diff --git a/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts b/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts index d760ff5809a..7d84e0c7349 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts @@ -46,7 +46,10 @@ export abstract class BatchSpanProcessorBase private _shutdownOnce: BindOnceFuture; private _droppedSpansCount: number = 0; - constructor(private readonly _exporter: SpanExporter, config?: T) { + constructor( + private readonly _exporter: SpanExporter, + config?: T + ) { const env = getEnv(); this._maxExportBatchSize = typeof config?.maxExportBatchSize === 'number' @@ -200,8 +203,8 @@ export abstract class BatchSpanProcessorBase doExport(); } else { Promise.all( - pendingResources.map(resource => - resource.waitForAsyncAttributes?.() + pendingResources.map( + resource => resource.waitForAsyncAttributes?.() ) ).then(doExport, err => { globalErrorHandler(err); diff --git a/packages/sdk-metrics/src/aggregator/ExponentialHistogram.ts b/packages/sdk-metrics/src/aggregator/ExponentialHistogram.ts index 51c71ee2113..bceb86b8ecb 100644 --- a/packages/sdk-metrics/src/aggregator/ExponentialHistogram.ts +++ b/packages/sdk-metrics/src/aggregator/ExponentialHistogram.ts @@ -52,7 +52,10 @@ class HighLow { static combine(h1: HighLow, h2: HighLow): HighLow { return new HighLow(Math.min(h1.low, h2.low), Math.max(h1.high, h2.high)); } - constructor(public low: number, public high: number) {} + constructor( + public low: number, + public high: number + ) {} } const MAX_SCALE = 20; diff --git a/packages/sdk-metrics/src/state/MeterSharedState.ts b/packages/sdk-metrics/src/state/MeterSharedState.ts index 330d293eea8..099a21c0d77 100644 --- a/packages/sdk-metrics/src/state/MeterSharedState.ts +++ b/packages/sdk-metrics/src/state/MeterSharedState.ts @@ -110,7 +110,7 @@ export class MeterSharedState { private _registerMetricStorage< MetricStorageType extends MetricStorageConstructor, - R extends InstanceType + R extends InstanceType, >( descriptor: InstrumentDescriptor, MetricStorageType: MetricStorageType diff --git a/packages/sdk-metrics/src/view/Aggregation.ts b/packages/sdk-metrics/src/view/Aggregation.ts index f36394c5bc5..821b55ec2fa 100644 --- a/packages/sdk-metrics/src/view/Aggregation.ts +++ b/packages/sdk-metrics/src/view/Aggregation.ts @@ -125,7 +125,10 @@ export class ExplicitBucketHistogramAggregation extends Aggregation { * @param boundaries the bucket boundaries of the histogram aggregation * @param _recordMinMax If set to true, min and max will be recorded. Otherwise, min and max will not be recorded. */ - constructor(boundaries: number[], private readonly _recordMinMax = true) { + constructor( + boundaries: number[], + private readonly _recordMinMax = true + ) { super(); if (boundaries === undefined || boundaries.length === 0) { throw new Error('HistogramAggregator should be created with boundaries.'); From c230076c690baefb9de78da821a109699bb5bb72 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 23 Aug 2023 20:42:58 +0200 Subject: [PATCH 39/70] chore(deps): update dependency gh-pages to v6 (#4058) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 963f7b826af..1bc2622a431 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "eslint-plugin-header": "3.1.1", "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "5.0.0", - "gh-pages": "5.0.0", + "gh-pages": "6.0.0", "lerna": "7.1.4", "@lerna/legacy-package-management": "7.1.4", "linkinator": "5.0.1", From 8ac369f87e792702045f9847c7ab4ac72aa48ce2 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 24 Aug 2023 14:48:43 +0200 Subject: [PATCH 40/70] chore(deps): update all patch versions (#4050) --- api/package.json | 2 +- experimental/packages/api-events/package.json | 2 +- experimental/packages/api-logs/package.json | 2 +- experimental/packages/exporter-logs-otlp-grpc/package.json | 2 +- experimental/packages/exporter-logs-otlp-http/package.json | 2 +- experimental/packages/exporter-logs-otlp-proto/package.json | 2 +- experimental/packages/exporter-trace-otlp-grpc/package.json | 2 +- experimental/packages/exporter-trace-otlp-http/package.json | 2 +- .../packages/exporter-trace-otlp-proto/package.json | 2 +- .../packages/opentelemetry-browser-detector/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-http/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-proto/package.json | 2 +- .../packages/opentelemetry-exporter-prometheus/package.json | 2 +- .../opentelemetry-instrumentation-fetch/package.json | 2 +- .../opentelemetry-instrumentation-grpc/package.json | 2 +- .../opentelemetry-instrumentation-http/package.json | 4 ++-- .../package.json | 2 +- .../packages/opentelemetry-instrumentation/package.json | 2 +- experimental/packages/opentelemetry-sdk-node/package.json | 2 +- experimental/packages/otlp-exporter-base/package.json | 2 +- experimental/packages/otlp-grpc-exporter-base/package.json | 4 ++-- experimental/packages/otlp-proto-exporter-base/package.json | 4 ++-- experimental/packages/otlp-transformer/package.json | 2 +- experimental/packages/sdk-logs/package.json | 2 +- experimental/packages/shim-opencensus/package.json | 2 +- package.json | 6 +++--- packages/opentelemetry-context-async-hooks/package.json | 2 +- packages/opentelemetry-context-zone-peer-dep/package.json | 2 +- packages/opentelemetry-context-zone/package.json | 2 +- packages/opentelemetry-core/package.json | 2 +- packages/opentelemetry-exporter-jaeger/package.json | 4 ++-- packages/opentelemetry-exporter-zipkin/package.json | 4 ++-- packages/opentelemetry-propagator-b3/package.json | 2 +- packages/opentelemetry-propagator-jaeger/package.json | 2 +- packages/opentelemetry-resources/package.json | 4 ++-- packages/opentelemetry-sdk-trace-base/package.json | 2 +- packages/opentelemetry-sdk-trace-node/package.json | 2 +- packages/opentelemetry-sdk-trace-web/package.json | 4 ++-- packages/opentelemetry-semantic-conventions/package.json | 4 ++-- packages/opentelemetry-shim-opentracing/package.json | 2 +- packages/sdk-metrics/package.json | 2 +- packages/template/package.json | 2 +- 43 files changed, 53 insertions(+), 53 deletions(-) diff --git a/api/package.json b/api/package.json index d2e4572f5f0..7369e951c03 100644 --- a/api/package.json +++ b/api/package.json @@ -77,7 +77,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "memfs": "3.5.3", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index 23d69298f16..eb7081e519a 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -76,7 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 06d473b6bd2..617a8acfc7b 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -76,7 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index d3c2fb9b1eb..1a9becddccc 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -60,7 +60,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 5abf5d1b68b..487d2bf3eac 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -90,7 +90,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 4a210f12227..b1163fa6dfa 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -78,7 +78,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 7d310c875e4..c9568d70317 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -57,7 +57,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 8bed923c849..ac7287672d1 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -80,7 +80,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index 1b143605c8d..6bc5f4c77e6 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -77,7 +77,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index c5c56290b3e..26608902444 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -67,7 +67,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index b1156ba3f7d..bb20957c854 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -56,7 +56,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 6cfc836a05f..1bfc020b2cc 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -80,7 +80,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index e27d1c89f37..d42edbd998f 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -55,7 +55,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index 327e452c9d3..b81d783d07e 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -50,7 +50,7 @@ "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 2b219797d0d..8b4f2ff8bc0 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -73,7 +73,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 4e3b39bcea3..ebed7aa924e 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -63,7 +63,7 @@ "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "semver": "7.5.4", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index ed70652dfe6..b61e290b48c 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -59,9 +59,9 @@ "axios": "1.4.0", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", - "nock": "13.3.2", + "nock": "13.3.3", "nyc": "15.1.0", "request": "2.88.2", "request-promise-native": "1.0.9", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 2b12f444d98..feab1cc9f7a 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -73,7 +73,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 497ddb1b219..90ccb50553f 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -100,7 +100,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 857c8c79d92..e13f7a31e47 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -71,7 +71,7 @@ "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "semver": "7.5.4", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 9896eaaf8eb..9853508ca4c 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -78,7 +78,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 66bf284d2f3..f9fbf252fc4 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -59,10 +59,10 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", - "protobufjs-cli": "1.1.1", + "protobufjs-cli": "1.1.2", "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index 6426bf9eb52..ff177d8eb1e 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -66,10 +66,10 @@ "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", - "protobufjs-cli": "1.1.1", + "protobufjs-cli": "1.1.2", "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index 6b48eacda63..f5b1a59469d 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -69,7 +69,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 5c53b841775..59b3a049763 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -87,7 +87,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index 75651fc7538..77693eb533a 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -57,7 +57,7 @@ "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/package.json b/package.json index 1bc2622a431..21e1a41ef38 100644 --- a/package.json +++ b/package.json @@ -71,9 +71,9 @@ "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "5.0.0", "gh-pages": "6.0.0", - "lerna": "7.1.4", - "@lerna/legacy-package-management": "7.1.4", - "linkinator": "5.0.1", + "lerna": "7.1.5", + "@lerna/legacy-package-management": "7.1.5", + "linkinator": "5.0.2", "markdownlint-cli": "0.35.0", "prettier": "3.0.2", "semver": "7.5.4", diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 3621271019e..866b103a4b2 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -49,7 +49,7 @@ "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index ba41bbe517e..d945bddb7cc 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -70,7 +70,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 5b9581933b1..0c0efd45b57 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -63,7 +63,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 061821f1883..e2b3e90b609 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -78,7 +78,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 1629974256d..2da2d897160 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -51,9 +51,9 @@ "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", - "nock": "13.3.2", + "nock": "13.3.3", "nyc": "15.1.0", "sinon": "15.1.2", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index c68c7eb44d1..e4272970090 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -76,9 +76,9 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", - "nock": "13.3.2", + "nock": "13.3.3", "nyc": "15.1.0", "sinon": "15.1.2", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index 2a50fd93ecc..9a9674b97d0 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -62,7 +62,7 @@ "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index 868cb0c2a4d..6a6b3a703cf 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -68,7 +68,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index bed20a95411..7615592d7b7 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -76,9 +76,9 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", - "nock": "13.3.2", + "nock": "13.3.3", "nyc": "15.1.0", "sinon": "15.1.2", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 2e741d532da..b4bc4e41c2a 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -80,7 +80,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index f4d44f0f97d..22641f7ed8e 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -54,7 +54,7 @@ "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 1d31e720e30..4c6ee6e89d4 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -60,7 +60,7 @@ "@opentelemetry/context-zone": "1.15.2", "@opentelemetry/propagator-b3": "1.15.2", "@opentelemetry/resources": "1.15.2", - "@types/jquery": "3.5.16", + "@types/jquery": "3.5.17", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -77,7 +77,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index bca2bd960f1..9e17927e396 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -54,9 +54,9 @@ "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", - "nock": "13.3.2", + "nock": "13.3.3", "nyc": "15.1.0", "sinon": "15.1.2", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index 123ed49b87d..a15916ceacf 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -50,7 +50,7 @@ "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "ts-mocha": "10.0.0", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 7de85fe7e30..af3b5952e2b 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -69,7 +69,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.1.4", + "lerna": "7.1.5", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/template/package.json b/packages/template/package.json index cb538a503d4..09b643b65d8 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -80,7 +80,7 @@ "devDependencies": { "@types/node": "18.6.5", "cross-var": "1.1.0", - "lerna": "7.1.4", + "lerna": "7.1.5", "typescript": "4.4.4" }, "Add these to devDependencies for testing": { From 0cc9a0b10bd96b73e2881ee60be6df3c9d49d70b Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 29 Aug 2023 10:36:23 +0200 Subject: [PATCH 41/70] fix(renovate): remove faulty '@types/node' rule and explicitly apply it to the whole repo (#4091) --- renovate.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/renovate.json b/renovate.json index 5a106908e45..c7d143d7977 100644 --- a/renovate.json +++ b/renovate.json @@ -19,14 +19,9 @@ { "matchPackageNames": ["typescript", "webpack", "webpack-cli"], "dependencyDashboardApproval": true - }, - { - "matchPaths": ["experimental/backwards-compatibility/**"], - "matchPackageNames": ["@types/node"], - "enabled": false } ], - "ignoreDeps": ["@opentelemetry/api", "@opentelemetry/resources_1.9.0"], + "ignoreDeps": ["@opentelemetry/api", "@opentelemetry/resources_1.9.0", "@types/node"], "assignees": ["@blumamir", "@dyladan", "@legendecas", "@pichlermarc"], "labels": ["dependencies"] } From a793321c623a79b89caacb720f3cdaa64addc095 Mon Sep 17 00:00:00 2001 From: Aaron Abbott Date: Tue, 29 Aug 2023 08:37:14 -0400 Subject: [PATCH 42/70] feat: update PeriodicExportingMetricReader and PrometheusExporter to accept optional metric producers (#4077) Co-authored-by: Daniel Dyla Co-authored-by: Marc Pichler --- CHANGELOG.md | 1 + experimental/CHANGELOG.md | 2 ++ .../src/PrometheusExporter.ts | 1 + .../src/export/types.ts | 10 ++++++++++ .../src/export/PeriodicExportingMetricReader.ts | 9 +++++++++ 5 files changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 72e75088279..ec685bdbb59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :rocket: (Enhancement) * feat(sdk-metrics): implement MetricProducer specification [#4007](https://github.com/open-telemetry/opentelemetry-js/pull/4007) +* feat: update PeriodicExportingMetricReader and PrometheusExporter to accept optional metric producers [#4077](https://github.com/open-telemetry/opentelemetry-js/pull/4077) @aabmass ### :bug: (Bug Fix) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 0c4f724d83e..3972a9b75a2 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -18,6 +18,8 @@ All notable changes to experimental packages in this project will be documented ### :rocket: (Enhancement) +* feat: update PeriodicExportingMetricReader and PrometheusExporter to accept optional metric producers [#4077](https://github.com/open-telemetry/opentelemetry-js/pull/4077) @aabmass + ### :bug: (Bug Fix) ### :books: (Refine Doc) diff --git a/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts b/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts index 8f84c5134cd..42e4fc41e88 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts @@ -62,6 +62,7 @@ export class PrometheusExporter extends MetricReader { aggregationSelector: _instrumentType => Aggregation.Default(), aggregationTemporalitySelector: _instrumentType => AggregationTemporality.CUMULATIVE, + metricProducers: config.metricProducers, }); this._host = config.host || diff --git a/experimental/packages/opentelemetry-exporter-prometheus/src/export/types.ts b/experimental/packages/opentelemetry-exporter-prometheus/src/export/types.ts index f43c4568138..78721a90c04 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/src/export/types.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/src/export/types.ts @@ -14,6 +14,8 @@ * limitations under the License. */ +import { MetricProducer } from '@opentelemetry/sdk-metrics'; + /** * Configuration interface for prometheus exporter */ @@ -56,4 +58,12 @@ export interface ExporterConfig { * @default false */ preventServerStart?: boolean; + + /** + * **Note, this option is experimental**. Additional MetricProducers to use as a source of + * aggregated metric data in addition to the SDK's metric data. The resource returned by + * these MetricProducers is ignored; the SDK's resource will be used instead. + * @experimental + */ + metricProducers?: MetricProducer[]; } diff --git a/packages/sdk-metrics/src/export/PeriodicExportingMetricReader.ts b/packages/sdk-metrics/src/export/PeriodicExportingMetricReader.ts index 2371ecb67f8..5ecafff6822 100644 --- a/packages/sdk-metrics/src/export/PeriodicExportingMetricReader.ts +++ b/packages/sdk-metrics/src/export/PeriodicExportingMetricReader.ts @@ -25,6 +25,7 @@ import { MetricReader } from './MetricReader'; import { PushMetricExporter } from './MetricExporter'; import { callWithTimeout, TimeoutError } from '../utils'; import { diag } from '@opentelemetry/api'; +import { MetricProducer } from './MetricProducer'; export type PeriodicExportingMetricReaderOptions = { /** @@ -40,6 +41,13 @@ export type PeriodicExportingMetricReaderOptions = { * Milliseconds for the async observable callback to timeout. */ exportTimeoutMillis?: number; + /** + * **Note, this option is experimental**. Additional MetricProducers to use as a source of + * aggregated metric data in addition to the SDK's metric data. The resource returned by + * these MetricProducers is ignored; the SDK's resource will be used instead. + * @experimental + */ + metricProducers?: MetricProducer[]; }; /** @@ -59,6 +67,7 @@ export class PeriodicExportingMetricReader extends MetricReader { ), aggregationTemporalitySelector: options.exporter.selectAggregationTemporality?.bind(options.exporter), + metricProducers: options.metricProducers, }); if ( From 6e7df295bf7cb7c9cba5bf7d4a683ae6dc61408a Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 29 Aug 2023 14:44:46 +0200 Subject: [PATCH 43/70] fix(deps): update dependency axios to v1.5.0 (#4089) Co-authored-by: Marc Pichler --- .../packages/opentelemetry-instrumentation-http/package.json | 2 +- integration-tests/propagation-validation-server/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index b61e290b48c..9777f7a1840 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -56,7 +56,7 @@ "@types/semver": "7.5.0", "@types/sinon": "10.0.16", "@types/superagent": "4.1.18", - "axios": "1.4.0", + "axios": "1.5.0", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/integration-tests/propagation-validation-server/package.json b/integration-tests/propagation-validation-server/package.json index 5057970074c..2e52beae0af 100644 --- a/integration-tests/propagation-validation-server/package.json +++ b/integration-tests/propagation-validation-server/package.json @@ -15,7 +15,7 @@ "@opentelemetry/context-async-hooks": "1.15.2", "@opentelemetry/core": "1.15.2", "@opentelemetry/sdk-trace-base": "1.15.2", - "axios": "1.4.0", + "axios": "1.5.0", "body-parser": "1.19.0", "express": "4.17.3" }, From d8a14ea5b2a5d66e27f4705c5e51f788a024897c Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 29 Aug 2023 14:45:34 +0200 Subject: [PATCH 44/70] chore(deps): update all patch versions (#4087) Co-authored-by: Marc Pichler --- experimental/packages/exporter-logs-otlp-grpc/package.json | 2 +- experimental/packages/exporter-logs-otlp-http/package.json | 2 +- experimental/packages/exporter-logs-otlp-proto/package.json | 2 +- experimental/packages/exporter-trace-otlp-grpc/package.json | 2 +- experimental/packages/exporter-trace-otlp-http/package.json | 2 +- experimental/packages/exporter-trace-otlp-proto/package.json | 2 +- .../packages/opentelemetry-browser-detector/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-http/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-proto/package.json | 2 +- .../packages/opentelemetry-instrumentation-fetch/package.json | 2 +- .../packages/opentelemetry-instrumentation-grpc/package.json | 2 +- .../packages/opentelemetry-instrumentation-http/package.json | 2 +- .../package.json | 2 +- .../packages/opentelemetry-instrumentation/package.json | 4 ++-- experimental/packages/opentelemetry-sdk-node/package.json | 2 +- experimental/packages/otlp-exporter-base/package.json | 2 +- experimental/packages/otlp-grpc-exporter-base/package.json | 2 +- experimental/packages/otlp-proto-exporter-base/package.json | 2 +- experimental/packages/sdk-logs/package.json | 2 +- packages/opentelemetry-context-zone-peer-dep/package.json | 2 +- packages/opentelemetry-context-zone/package.json | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- packages/opentelemetry-sdk-trace-node/package.json | 2 +- packages/opentelemetry-sdk-trace-web/package.json | 2 +- packages/sdk-metrics/package.json | 2 +- selenium-tests/package.json | 2 +- 27 files changed, 28 insertions(+), 28 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index 1a9becddccc..d77260bb81f 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/api-logs": "0.41.2", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 487d2bf3eac..b5b1f8f1ca8 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -71,7 +71,7 @@ ], "sideEffects": false, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@opentelemetry/api-logs": "0.41.2", "@opentelemetry/resources": "1.15.2", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index b1163fa6dfa..70177cc4ff2 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index c9568d70317..46473c9abff 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-exporter-base": "0.41.2", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index ac7287672d1..fc03b1965f1 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index 6bc5f4c77e6..c187fb9cd7c 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -62,7 +62,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 26608902444..6874a8d98e1 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index bb20957c854..4b3c0332a14 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 1bfc020b2cc..7fe60c0dd6e 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index d42edbd998f..7582bbe5175 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 8b4f2ff8bc0..920d0a91b4d 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@opentelemetry/context-zone": "1.15.2", "@opentelemetry/propagator-b3": "1.15.2", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index ebed7aa924e..b85656844fe 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -59,7 +59,7 @@ "@protobuf-ts/runtime-rpc": "2.9.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/semver": "7.5.0", + "@types/semver": "7.5.1", "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 9777f7a1840..6036fa0c18a 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -53,7 +53,7 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/request-promise-native": "1.0.18", - "@types/semver": "7.5.0", + "@types/semver": "7.5.1", "@types/sinon": "10.0.16", "@types/superagent": "4.1.18", "axios": "1.5.0", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index feab1cc9f7a..5e81576c2cf 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@opentelemetry/context-zone": "1.15.2", "@opentelemetry/propagator-b3": "1.15.2", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 90ccb50553f..37f839ea588 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -81,12 +81,12 @@ "@opentelemetry/api": "^1.3.0" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@opentelemetry/sdk-metrics": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/semver": "7.5.0", + "@types/semver": "7.5.1", "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index e13f7a31e47..8870322699a 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -67,7 +67,7 @@ "@opentelemetry/context-async-hooks": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/semver": "7.5.0", + "@types/semver": "7.5.1", "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 9853508ca4c..623a68698c0 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -64,7 +64,7 @@ "@opentelemetry/core": "1.15.2" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index f9fbf252fc4..f91d29e13d4 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-transformer": "0.41.2", "@opentelemetry/resources": "1.15.2", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index ff177d8eb1e..b8b6f6ae1b6 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -59,7 +59,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 59b3a049763..1689f7ccb26 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -72,7 +72,7 @@ "@opentelemetry/api-logs": ">=0.39.1" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": ">=1.4.0 <1.5.0", "@opentelemetry/api-logs": "0.41.2", "@types/mocha": "10.0.1", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index d945bddb7cc..2df641b922d 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 0c0efd45b57..aecb55eb0e8 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -50,7 +50,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index e4272970090..3dedccc8db7 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -60,7 +60,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": "^1.0.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index 22641f7ed8e..dd0ad05ca0f 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -50,7 +50,7 @@ "@opentelemetry/semantic-conventions": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/semver": "7.5.0", + "@types/semver": "7.5.1", "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 4c6ee6e89d4..3e1997cfdf6 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -55,7 +55,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": ">=1.0.0 <1.5.0", "@opentelemetry/context-zone": "1.15.2", "@opentelemetry/propagator-b3": "1.15.2", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index af3b5952e2b..d3f069054a4 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@opentelemetry/api": ">=1.3.0 <1.5.0", "@types/lodash.merge": "4.6.7", "@types/mocha": "10.0.1", diff --git a/selenium-tests/package.json b/selenium-tests/package.json index ef11738733d..3a3483e5753 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -31,7 +31,7 @@ "access": "restricted" }, "devDependencies": { - "@babel/core": "7.22.10", + "@babel/core": "7.22.11", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-decorators": "7.22.10", "@babel/plugin-transform-runtime": "7.22.10", From 432d43942e4114f198465f1c9073d850a7663d4d Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 29 Aug 2023 14:51:46 +0200 Subject: [PATCH 45/70] chore(sdk-node): add notice to manually install '@opentelemetry/exporter-jaeger' (#4068) Co-authored-by: Daniel Dyla --- experimental/CHANGELOG.md | 3 +++ experimental/packages/opentelemetry-sdk-node/package.json | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 3972a9b75a2..76d136bd8dd 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -15,6 +15,9 @@ All notable changes to experimental packages in this project will be documented * `NodeSDK.configureLoggerProvider()`, please use constructor options instead * `NodeSDK.addResource()`, please use constructor options instead * `NodeSDK.detectResources()`, this is not necessary anymore, resources are now auto-detected on startup. +* chore(sdk-node): add notice that '@opentelemetry/exporter-jaeger' has to be installed manually in the next version [#4068](https://github.com/open-telemetry/opentelemetry-js/pull/4068) @pichlermarc + * Starting with 0.43.0 '@opentelemetry/exporter-jaeger' will no longer be a dependency of this package. To continue using '@opentelemetry/exporter-jaeger', please install it manually. + * NOTE: `@opentelemetry/exporter-jaeger` is deprecated, consider switching to one of the alternatives described [here](https://www.npmjs.com/package/@opentelemetry/exporter-jaeger) ### :rocket: (Enhancement) diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 8870322699a..1b705780776 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -17,7 +17,8 @@ "watch": "tsc --build --watch", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "npm run precompile", - "peer-api-check": "node ../../../scripts/peer-api-check.js" + "peer-api-check": "node ../../../scripts/peer-api-check.js", + "postinstall": "node -e \"console.log(\\\"\\x1b[95m%s\\x1b[0m\\\", \\\"@opentelemetry/sdk-node - warning: Starting with 0.43.0 '@opentelemetry/exporter-jaeger' will no longer be automatically installed by this package. To continue using '@opentelemetry/exporter-jaeger', please install it manually.\\n(NOTE: '@opentelemetry/exporter-jaeger' is deprecated, consider switching to one of the alternatives described in https://www.npmjs.com/package/@opentelemetry/exporter-jaeger)\\\");\"" }, "keywords": [ "opentelemetry", From c84637f2640aae39c45ec9a9d07a96c21059a70a Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 29 Aug 2023 15:29:16 +0200 Subject: [PATCH 46/70] fix(exporter-logs-otlp-http): add @opentelemetry/api-logs as dependency (#3968) Co-authored-by: Daniel Dyla --- experimental/CHANGELOG.md | 2 ++ experimental/packages/exporter-logs-otlp-http/package.json | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 76d136bd8dd..b796a557b87 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -25,6 +25,8 @@ All notable changes to experimental packages in this project will be documented ### :bug: (Bug Fix) +* fix(exporter-logs-otlp-http): add @opentelemetry/api-logs as dependency + ### :books: (Refine Doc) ### :house: (Internal) diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index b5b1f8f1ca8..3f0c192b0c9 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -73,7 +73,6 @@ "devDependencies": { "@babel/core": "7.22.11", "@opentelemetry/api": "1.4.1", - "@opentelemetry/api-logs": "0.41.2", "@opentelemetry/resources": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -102,12 +101,13 @@ "webpack-merge": "5.9.0" }, "peerDependencies": { - "@opentelemetry/api-logs": ">=0.38.0" + "@opentelemetry/api": "^1.0.0" }, "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/otlp-exporter-base": "0.41.2", "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/api-logs": "0.41.2", "@opentelemetry/sdk-logs": "0.41.2" } } From cd4998a4b5e29d05f4a11cd93a26ecf712729e9f Mon Sep 17 00:00:00 2001 From: Dima Voytenko Date: Wed, 30 Aug 2023 07:04:34 -0700 Subject: [PATCH 47/70] feat(api): add attributes argument to recordException API (#4071) Co-authored-by: Marc Pichler --- CHANGELOG.md | 1 + api/CHANGELOG.md | 4 ++ api/src/trace/NonRecordingSpan.ts | 6 +- api/src/trace/span.ts | 13 ++++ .../opentelemetry-sdk-trace-base/src/Span.ts | 18 ++++- .../test/common/Span.test.ts | 71 +++++++++++++++++++ 6 files changed, 110 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec685bdbb59..049f668cfc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :rocket: (Enhancement) +* feat(api): add attributes argument to recordException API [#4071](https://github.com/open-telemetry/opentelemetry-js/pull/4071) * feat(sdk-metrics): implement MetricProducer specification [#4007](https://github.com/open-telemetry/opentelemetry-js/pull/4007) * feat: update PeriodicExportingMetricReader and PrometheusExporter to accept optional metric producers [#4077](https://github.com/open-telemetry/opentelemetry-js/pull/4077) @aabmass diff --git a/api/CHANGELOG.md b/api/CHANGELOG.md index 5b520500742..a1dcf67d4f5 100644 --- a/api/CHANGELOG.md +++ b/api/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. ## Unreleased +### :rocket: (Enhancement) + +* feat(api): add attributes argument to recordException API [#4071](https://github.com/open-telemetry/opentelemetry-js/pull/4071) + ## 1.4.1 ### :bug: (Bug Fix) diff --git a/api/src/trace/NonRecordingSpan.ts b/api/src/trace/NonRecordingSpan.ts index a9e5bcaf9be..dc7e3de3d78 100644 --- a/api/src/trace/NonRecordingSpan.ts +++ b/api/src/trace/NonRecordingSpan.ts @@ -71,5 +71,9 @@ export class NonRecordingSpan implements Span { } // By default does nothing - recordException(_exception: Exception, _time?: TimeInput): void {} + recordException( + _exception: Exception, + _attributesOrStartTime?: SpanAttributes | TimeInput, + _time?: TimeInput + ): void {} } diff --git a/api/src/trace/span.ts b/api/src/trace/span.ts index d80b8c2626d..59eb233a85a 100644 --- a/api/src/trace/span.ts +++ b/api/src/trace/span.ts @@ -126,4 +126,17 @@ export interface Span { * use the current time. */ recordException(exception: Exception, time?: TimeInput): void; + + /** + * Sets exception as a span event + * @param exception the exception the only accepted values are string or Error + * @param [attributes] the attributes that will be added to the error event. + * @param [time] the time to set as Span's event time. If not provided, + * use the current time. + */ + recordException( + exception: Exception, + attributes?: SpanAttributes, + time?: TimeInput + ): void; } diff --git a/packages/opentelemetry-sdk-trace-base/src/Span.ts b/packages/opentelemetry-sdk-trace-base/src/Span.ts index 31fb1555ac7..ea3526b29be 100644 --- a/packages/opentelemetry-sdk-trace-base/src/Span.ts +++ b/packages/opentelemetry-sdk-trace-base/src/Span.ts @@ -272,7 +272,18 @@ export class Span implements APISpan, ReadableSpan { return this._ended === false; } - recordException(exception: Exception, time?: TimeInput): void { + recordException( + exception: Exception, + attributesOrStartTime?: SpanAttributes | TimeInput, + timeStamp?: TimeInput + ): void { + if (isTimeInput(attributesOrStartTime)) { + if (!isTimeInput(timeStamp)) { + timeStamp = attributesOrStartTime; + } + attributesOrStartTime = undefined; + } + const attributes: SpanAttributes = {}; if (typeof exception === 'string') { attributes[SemanticAttributes.EXCEPTION_MESSAGE] = exception; @@ -290,13 +301,16 @@ export class Span implements APISpan, ReadableSpan { attributes[SemanticAttributes.EXCEPTION_STACKTRACE] = exception.stack; } } + if (attributesOrStartTime) { + Object.assign(attributes, sanitizeAttributes(attributesOrStartTime)); + } // these are minimum requirements from spec if ( attributes[SemanticAttributes.EXCEPTION_TYPE] || attributes[SemanticAttributes.EXCEPTION_MESSAGE] ) { - this.addEvent(ExceptionEventName, attributes, time); + this.addEvent(ExceptionEventName, attributes, timeStamp); } else { diag.warn(`Failed to record an exception ${exception}`); } diff --git a/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts index 11a94ffc7c2..873865a0dc2 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts @@ -1203,6 +1203,77 @@ describe('Span', () => { const event = span.events[0]; assert.deepStrictEqual(event.time, [0, 123]); }); + + it('should record an exception with provided time as a 3rd arg', () => { + const span = new Span( + tracer, + ROOT_CONTEXT, + name, + spanContext, + SpanKind.CLIENT + ); + // @ts-expect-error writing readonly property. performance time origin is mocked to return ms value of [1,1] + span['_performanceOffset'] = 0; + assert.strictEqual(span.events.length, 0); + span.recordException('boom', undefined, [0, 123]); + const event = span.events[0]; + assert.deepStrictEqual(event.time, [0, 123]); + }); + }); + + describe('when attributes are provided', () => { + it('should sanitized and merge attributes when provided', () => { + const span = new Span( + tracer, + ROOT_CONTEXT, + name, + spanContext, + SpanKind.CLIENT + ); + // @ts-expect-error writing readonly property. performance time origin is mocked to return ms value of [1,1] + span['_performanceOffset'] = 0; + assert.strictEqual(span.events.length, 0); + const exception = { code: 'Error', message: 'boom', stack: 'bar' }; + span.recordException(exception, { + ...validAttributes, + ...invalidAttributes, + } as unknown as SpanAttributes); + const event = span.events[0]; + assert.deepStrictEqual(event.attributes, { + [SemanticAttributes.EXCEPTION_TYPE]: 'Error', + [SemanticAttributes.EXCEPTION_MESSAGE]: 'boom', + [SemanticAttributes.EXCEPTION_STACKTRACE]: 'bar', + ...validAttributes, + }); + }); + + it('should prioritize the provided attributes over generated', () => { + const span = new Span( + tracer, + ROOT_CONTEXT, + name, + spanContext, + SpanKind.CLIENT + ); + // @ts-expect-error writing readonly property. performance time origin is mocked to return ms value of [1,1] + span['_performanceOffset'] = 0; + assert.strictEqual(span.events.length, 0); + const exception = { code: 'Error', message: 'boom', stack: 'bar' }; + span.recordException(exception, { + [SemanticAttributes.EXCEPTION_TYPE]: 'OverrideError', + [SemanticAttributes.EXCEPTION_MESSAGE]: 'override-boom', + [SemanticAttributes.EXCEPTION_STACKTRACE]: 'override-bar', + ...validAttributes, + ...invalidAttributes, + } as unknown as SpanAttributes); + const event = span.events[0]; + assert.deepStrictEqual(event.attributes, { + ...validAttributes, + [SemanticAttributes.EXCEPTION_TYPE]: 'OverrideError', + [SemanticAttributes.EXCEPTION_MESSAGE]: 'override-boom', + [SemanticAttributes.EXCEPTION_STACKTRACE]: 'override-bar', + }); + }); }); describe('when exception code is numeric', () => { From 1da2b1bb1149228dac158b5631cbefd3992fb372 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 30 Aug 2023 16:05:51 +0200 Subject: [PATCH 48/70] chore(deps): update dependency prettier to v3.0.3 (#4092) Co-authored-by: Marc Pichler --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 21e1a41ef38..8dd00b63267 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "@lerna/legacy-package-management": "7.1.5", "linkinator": "5.0.2", "markdownlint-cli": "0.35.0", - "prettier": "3.0.2", + "prettier": "3.0.3", "semver": "7.5.4", "typedoc": "0.22.18", "typedoc-plugin-missing-exports": "1.0.0", From 5b7f619130b7b9b219804289109297cacb55eb1a Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 31 Aug 2023 13:04:59 +0200 Subject: [PATCH 49/70] chore(deps): update dependency @babel/preset-env to v7.22.14 (#4103) --- selenium-tests/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 3a3483e5753..48dfb2108c9 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -35,7 +35,7 @@ "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-decorators": "7.22.10", "@babel/plugin-transform-runtime": "7.22.10", - "@babel/preset-env": "7.22.10", + "@babel/preset-env": "7.22.14", "@opentelemetry/api": "^1.0.0", "babel-loader": "8.3.0", "babel-polyfill": "6.26.0", From cacb8259ef03d0beeeeb31f4b6848a51e3ede371 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Sat, 2 Sep 2023 20:46:58 +0200 Subject: [PATCH 50/70] fix: limit npm to <10.0.0 on node v14 and v16 (#4111) --- .github/workflows/unit-test.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 241e487cec4..26eea6386b3 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -27,6 +27,11 @@ jobs: node-version: ${{ matrix.node_version }} - run: npm install -g npm@latest + if: ${{ matrix.node_version == '18' || matrix.node_version == '20' }} + + # npm@10.0.0 drops support for Node.js v14 and v16 + - run: npm install -g npm@"<10.0.0" + if: ${{ matrix.node_version == '14' || matrix.node_version == '16' }} - name: restore lerna id: cache @@ -70,7 +75,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: '16' + node-version: '18' - run: npm install -g npm@latest @@ -98,6 +103,8 @@ jobs: npm run compile - name: Unit tests + env: + NODE_OPTIONS: --openssl-legacy-provider run: npm run test browser-tests: runs-on: ubuntu-latest From 6d174e2a0689d9386e1aaf69a3c774ce2a9cbca0 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 4 Sep 2023 13:22:14 +0200 Subject: [PATCH 51/70] chore(deps): update dependency markdownlint-cli to v0.36.0 (#4113) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8dd00b63267..c1b6fc02803 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "lerna": "7.1.5", "@lerna/legacy-package-management": "7.1.5", "linkinator": "5.0.2", - "markdownlint-cli": "0.35.0", + "markdownlint-cli": "0.36.0", "prettier": "3.0.3", "semver": "7.5.4", "typedoc": "0.22.18", From 9452607a7f89d71dfdfad570a90eb11924b0187a Mon Sep 17 00:00:00 2001 From: matthew Date: Wed, 6 Sep 2023 18:13:53 +0900 Subject: [PATCH 52/70] docs(guidelines) tiny fix, add comma on docs (#4119) --- doc/tracing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/tracing.md b/doc/tracing.md index ea3e38284bf..fb3371d4fa5 100644 --- a/doc/tracing.md +++ b/doc/tracing.md @@ -79,7 +79,7 @@ server.on("GET", "/user/:id", onGet); Using span relationships, attributes, kind, and the related [semantic conventions](https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/trace/semantic_conventions), we can more accurately describe the span in a way our tracing backend will more easily understand. The following example uses these mechanisms, which are described below. ```typescript -import { NetTransportValues SemanticAttributes } from '@opentelemetry/semantic-conventions'; +import { NetTransportValues, SemanticAttributes } from '@opentelemetry/semantic-conventions'; import { trace, context, SpanKind, SpanStatusCode } from '@opentelemetry/api'; async function onGet(request, response) { From 4d662cf84d75647e92f898dbabcefd7945f561d6 Mon Sep 17 00:00:00 2001 From: Chengzhong Wu Date: Thu, 7 Sep 2023 13:41:06 +0800 Subject: [PATCH 53/70] fix(sdk-metrics): metric names should be case-insensitive (#4059) * fix(sdk-metrics): metric names should be case-insensitive * fixup! * fixup! --- CHANGELOG.md | 1 + .../sdk-metrics/src/InstrumentDescriptor.ts | 18 ++- packages/sdk-metrics/src/utils.ts | 4 + .../test/InstrumentDescriptor.test.ts | 106 ++++++++++++++++++ packages/sdk-metrics/test/Meter.test.ts | 58 +++++++--- packages/sdk-metrics/test/util.ts | 3 + 6 files changed, 173 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 049f668cfc9..47f735d6adf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) * fix(exporter-zipkin): rounding duration to the nearest int to be compliant with zipkin protocol [#4064](https://github.com/open-telemetry/opentelemetry-js/pull/4064) @n0cloud +* fix(sdk-metrics): metric names should be case-insensitive ### :books: (Refine Doc) diff --git a/packages/sdk-metrics/src/InstrumentDescriptor.ts b/packages/sdk-metrics/src/InstrumentDescriptor.ts index 01eabe26148..ac742fc0eee 100644 --- a/packages/sdk-metrics/src/InstrumentDescriptor.ts +++ b/packages/sdk-metrics/src/InstrumentDescriptor.ts @@ -14,8 +14,9 @@ * limitations under the License. */ -import { MetricOptions, ValueType } from '@opentelemetry/api'; +import { MetricOptions, ValueType, diag } from '@opentelemetry/api'; import { View } from './view/View'; +import { equalsCaseInsensitive } from './utils'; /** * Supported types of metric instruments. @@ -45,6 +46,11 @@ export function createInstrumentDescriptor( type: InstrumentType, options?: MetricOptions ): InstrumentDescriptor { + if (!isValidName(name)) { + diag.warn( + `Invalid metric name: "${name}". The metric name should be a ASCII string with a length no greater than 255 characters.` + ); + } return { name, type, @@ -71,10 +77,18 @@ export function isDescriptorCompatibleWith( descriptor: InstrumentDescriptor, otherDescriptor: InstrumentDescriptor ) { + // Names are case-insensitive strings. return ( - descriptor.name === otherDescriptor.name && + equalsCaseInsensitive(descriptor.name, otherDescriptor.name) && descriptor.unit === otherDescriptor.unit && descriptor.type === otherDescriptor.type && descriptor.valueType === otherDescriptor.valueType ); } + +// ASCII string with a length no greater than 255 characters. +// NB: the first character counted separately from the rest. +const NAME_REGEXP = /^[a-z][a-z0-9_.-]{0,254}$/i; +export function isValidName(name: string): boolean { + return name.match(NAME_REGEXP) != null; +} diff --git a/packages/sdk-metrics/src/utils.ts b/packages/sdk-metrics/src/utils.ts index 835de92fe1b..9a8f80abde1 100644 --- a/packages/sdk-metrics/src/utils.ts +++ b/packages/sdk-metrics/src/utils.ts @@ -190,3 +190,7 @@ export function binarySearchLB(arr: number[], value: number): number { } return -1; } + +export function equalsCaseInsensitive(lhs: string, rhs: string): boolean { + return lhs.toLowerCase() === rhs.toLowerCase(); +} diff --git a/packages/sdk-metrics/test/InstrumentDescriptor.test.ts b/packages/sdk-metrics/test/InstrumentDescriptor.test.ts index 7d8796cbf13..5bf3196693f 100644 --- a/packages/sdk-metrics/test/InstrumentDescriptor.test.ts +++ b/packages/sdk-metrics/test/InstrumentDescriptor.test.ts @@ -17,8 +17,13 @@ import * as assert from 'assert'; import { createInstrumentDescriptor, + InstrumentDescriptor, InstrumentType, + isValidName, + isDescriptorCompatibleWith, } from '../src/InstrumentDescriptor'; +import { invalidNames, validNames } from './util'; +import { ValueType } from '@opentelemetry/api'; describe('InstrumentDescriptor', () => { describe('createInstrumentDescriptor', () => { @@ -35,4 +40,105 @@ describe('InstrumentDescriptor', () => { }); } }); + + describe('isDescriptorCompatibleWith', () => { + const tests: [ + string, + boolean, + InstrumentDescriptor, + InstrumentDescriptor, + ][] = [ + [ + 'Compatible with identical descriptors', + true, + { + name: 'foo', + description: 'any descriptions', + unit: 'kB', + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + }, + { + name: 'foo', + description: 'any descriptions', + unit: 'kB', + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + }, + ], + [ + 'Compatible with case-insensitive names', + true, + { + name: 'foo', + description: '', + unit: '', + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + }, + { + name: 'FoO', + description: '', + unit: '', + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + }, + ], + [ + 'Incompatible with different names', + false, + { + name: 'foo', + description: '', + unit: '', + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + }, + { + name: 'foobar', + description: '', + unit: '', + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + }, + ], + [ + 'Incompatible with case-sensitive units', + false, + { + name: 'foo', + description: '', + unit: 'kB', + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + }, + { + name: 'foo', + description: '', + unit: 'kb', + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + }, + ], + ]; + for (const test of tests) { + it(test[0], () => { + assert.ok(isDescriptorCompatibleWith(test[2], test[3]) === test[1]); + }); + } + }); + + describe('isValidName', () => { + it('should validate names', () => { + for (const invalidName of invalidNames) { + assert.ok( + !isValidName(invalidName), + `${invalidName} should be invalid` + ); + } + for (const validName of validNames) { + assert.ok(isValidName(validName), `${validName} should be valid`); + } + }); + }); }); diff --git a/packages/sdk-metrics/test/Meter.test.ts b/packages/sdk-metrics/test/Meter.test.ts index 4ffe41607d9..e40d6aa5076 100644 --- a/packages/sdk-metrics/test/Meter.test.ts +++ b/packages/sdk-metrics/test/Meter.test.ts @@ -14,8 +14,9 @@ * limitations under the License. */ -import { Observable } from '@opentelemetry/api'; +import { Observable, diag } from '@opentelemetry/api'; import * as assert from 'assert'; +import * as sinon from 'sinon'; import { CounterInstrument, HistogramInstrument, @@ -27,78 +28,86 @@ import { import { Meter } from '../src/Meter'; import { MeterProviderSharedState } from '../src/state/MeterProviderSharedState'; import { MeterSharedState } from '../src/state/MeterSharedState'; -import { defaultInstrumentationScope, defaultResource } from './util'; +import { + defaultInstrumentationScope, + defaultResource, + invalidNames, + validNames, +} from './util'; describe('Meter', () => { + afterEach(() => { + sinon.restore(); + }); + describe('createCounter', () => { - it('should create counter', () => { + testWithNames('counter', name => { const meterSharedState = new MeterSharedState( new MeterProviderSharedState(defaultResource), defaultInstrumentationScope ); const meter = new Meter(meterSharedState); - const counter = meter.createCounter('foobar'); + const counter = meter.createCounter(name); assert(counter instanceof CounterInstrument); }); }); describe('createUpDownCounter', () => { - it('should create up down counter', () => { + testWithNames('UpDownCounter', name => { const meterSharedState = new MeterSharedState( new MeterProviderSharedState(defaultResource), defaultInstrumentationScope ); const meter = new Meter(meterSharedState); - const upDownCounter = meter.createUpDownCounter('foobar'); + const upDownCounter = meter.createUpDownCounter(name); assert(upDownCounter instanceof UpDownCounterInstrument); }); }); describe('createHistogram', () => { - it('should create histogram', () => { + testWithNames('Histogram', name => { const meterSharedState = new MeterSharedState( new MeterProviderSharedState(defaultResource), defaultInstrumentationScope ); const meter = new Meter(meterSharedState); - const histogram = meter.createHistogram('foobar'); + const histogram = meter.createHistogram(name); assert(histogram instanceof HistogramInstrument); }); }); describe('createObservableGauge', () => { - it('should create observable gauge', () => { + testWithNames('ObservableGauge', name => { const meterSharedState = new MeterSharedState( new MeterProviderSharedState(defaultResource), defaultInstrumentationScope ); const meter = new Meter(meterSharedState); - const observableGauge = meter.createObservableGauge('foobar'); + const observableGauge = meter.createObservableGauge(name); assert(observableGauge instanceof ObservableGaugeInstrument); }); }); describe('createObservableCounter', () => { - it('should create observable counter', () => { + testWithNames('ObservableCounter', name => { const meterSharedState = new MeterSharedState( new MeterProviderSharedState(defaultResource), defaultInstrumentationScope ); const meter = new Meter(meterSharedState); - const observableCounter = meter.createObservableCounter('foobar'); + const observableCounter = meter.createObservableCounter(name); assert(observableCounter instanceof ObservableCounterInstrument); }); }); describe('createObservableUpDownCounter', () => { - it('should create observable up-down-counter', () => { + testWithNames('ObservableUpDownCounter', name => { const meterSharedState = new MeterSharedState( new MeterProviderSharedState(defaultResource), defaultInstrumentationScope ); const meter = new Meter(meterSharedState); - const observableUpDownCounter = - meter.createObservableUpDownCounter('foobar'); + const observableUpDownCounter = meter.createObservableUpDownCounter(name); assert( observableUpDownCounter instanceof ObservableUpDownCounterInstrument ); @@ -167,3 +176,22 @@ describe('Meter', () => { }); }); }); + +function testWithNames(type: string, tester: (name: string) => void) { + for (const invalidName of invalidNames) { + it(`should warn with invalid name ${invalidName} for ${type}`, () => { + const warnStub = sinon.spy(diag, 'warn'); + tester(invalidName); + assert.strictEqual(warnStub.callCount, 1); + assert.ok(warnStub.calledWithMatch('Invalid metric name')); + }); + } + + for (const validName of validNames) { + it(`should not warn with valid name ${validName} for ${type}`, () => { + const warnStub = sinon.spy(diag, 'warn'); + tester(validName); + assert.strictEqual(warnStub.callCount, 0); + }); + } +} diff --git a/packages/sdk-metrics/test/util.ts b/packages/sdk-metrics/test/util.ts index fa7a54b07fa..ef081cf67a8 100644 --- a/packages/sdk-metrics/test/util.ts +++ b/packages/sdk-metrics/test/util.ts @@ -66,6 +66,9 @@ export const defaultInstrumentationScope: InstrumentationScope = { schemaUrl: 'https://opentelemetry.io/schemas/1.7.0', }; +export const invalidNames = ['', 'a'.repeat(256), '1a', '-a', '.a', '_a']; +export const validNames = ['a', 'a'.repeat(255), 'a1', 'a-1', 'a.1', 'a_1']; + export const commonValues: number[] = [1, -1, 1.0, Infinity, -Infinity, NaN]; export const commonAttributes: MetricAttributes[] = [ {}, From 415b198c03cf6d0cd0ee1d372d20d315ec8f9eb4 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Thu, 7 Sep 2023 10:20:44 +0200 Subject: [PATCH 54/70] fix(ci): pin nx to 15.9.6 for Node.js v14 (#4124) --- .github/workflows/unit-test.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 26eea6386b3..6acd8d20dde 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -46,6 +46,10 @@ jobs: experimental/packages/*/package-lock.json key: node-tests-${{ runner.os }}-${{ matrix.node_version }}-${{ hashFiles('package.json', 'packages/*/package.json', 'experimental/packages/*/package.json') }}-04292022 + # temporary fix for https://github.com/nrwl/nx/issues/19022 + - run: npm install --save-dev nx@16.7.4 @nx/devkit@16.7.4 + if: ${{ matrix.node_version == '14' }} + - name: Bootstrap run: | npm install --ignore-scripts From ba38804c059bc89bf87bbc67469a966b0bbb1cdb Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 8 Sep 2023 18:20:57 +0200 Subject: [PATCH 55/70] chore(deps): update all patch versions (#4114) --- .../packages/exporter-logs-otlp-grpc/package.json | 2 +- .../packages/exporter-logs-otlp-http/package.json | 2 +- .../packages/exporter-logs-otlp-proto/package.json | 2 +- .../packages/exporter-trace-otlp-grpc/package.json | 2 +- .../packages/exporter-trace-otlp-http/package.json | 2 +- .../packages/exporter-trace-otlp-proto/package.json | 2 +- .../packages/opentelemetry-browser-detector/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-http/package.json | 2 +- .../package.json | 2 +- .../opentelemetry-instrumentation-fetch/package.json | 2 +- .../package.json | 2 +- .../packages/opentelemetry-instrumentation/package.json | 2 +- experimental/packages/otlp-exporter-base/package.json | 2 +- .../packages/otlp-grpc-exporter-base/package.json | 2 +- .../packages/otlp-proto-exporter-base/package.json | 2 +- experimental/packages/sdk-logs/package.json | 2 +- packages/opentelemetry-context-zone-peer-dep/package.json | 2 +- packages/opentelemetry-context-zone/package.json | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- packages/opentelemetry-sdk-trace-web/package.json | 4 ++-- packages/sdk-metrics/package.json | 2 +- selenium-tests/package.json | 8 ++++---- 23 files changed, 27 insertions(+), 27 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index d77260bb81f..b4434e31e23 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/api-logs": "0.41.2", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 3f0c192b0c9..f83a9c01258 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -71,7 +71,7 @@ ], "sideEffects": false, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@opentelemetry/resources": "1.15.2", "@types/mocha": "10.0.1", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 70177cc4ff2..9b59b80f617 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 46473c9abff..7443e1fc15b 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-exporter-base": "0.41.2", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index fc03b1965f1..849d2c31d79 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index c187fb9cd7c..a88e105c894 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -62,7 +62,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 6874a8d98e1..eb62c726d09 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 4b3c0332a14..ff1dbab571f 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 7fe60c0dd6e..f7290daa272 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 7582bbe5175..fe6f0419fa0 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 920d0a91b4d..b5aa623cb1f 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@opentelemetry/context-zone": "1.15.2", "@opentelemetry/propagator-b3": "1.15.2", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 5e81576c2cf..cfd84d3b49b 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@opentelemetry/context-zone": "1.15.2", "@opentelemetry/propagator-b3": "1.15.2", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 37f839ea588..96353f6df22 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -81,7 +81,7 @@ "@opentelemetry/api": "^1.3.0" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@opentelemetry/sdk-metrics": "1.15.2", "@types/mocha": "10.0.1", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 623a68698c0..000b8b96ae2 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -64,7 +64,7 @@ "@opentelemetry/core": "1.15.2" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index f91d29e13d4..749fc60cd40 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-transformer": "0.41.2", "@opentelemetry/resources": "1.15.2", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index b8b6f6ae1b6..d02b039fcfe 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -59,7 +59,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 1689f7ccb26..c383c780b75 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -72,7 +72,7 @@ "@opentelemetry/api-logs": ">=0.39.1" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": ">=1.4.0 <1.5.0", "@opentelemetry/api-logs": "0.41.2", "@types/mocha": "10.0.1", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 2df641b922d..0e4987dd12e 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index aecb55eb0e8..cde461f9012 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -50,7 +50,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 3dedccc8db7..2170b91261b 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -60,7 +60,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": "^1.0.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 3e1997cfdf6..79f2b1a0e3d 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -55,12 +55,12 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": ">=1.0.0 <1.5.0", "@opentelemetry/context-zone": "1.15.2", "@opentelemetry/propagator-b3": "1.15.2", "@opentelemetry/resources": "1.15.2", - "@types/jquery": "3.5.17", + "@types/jquery": "3.5.18", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index d3f069054a4..566257915ed 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@opentelemetry/api": ">=1.3.0 <1.5.0", "@types/lodash.merge": "4.6.7", "@types/mocha": "10.0.1", diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 48dfb2108c9..fc9f88b0726 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -31,11 +31,11 @@ "access": "restricted" }, "devDependencies": { - "@babel/core": "7.22.11", + "@babel/core": "7.22.17", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-proposal-decorators": "7.22.10", - "@babel/plugin-transform-runtime": "7.22.10", - "@babel/preset-env": "7.22.14", + "@babel/plugin-proposal-decorators": "7.22.15", + "@babel/plugin-transform-runtime": "7.22.15", + "@babel/preset-env": "7.22.15", "@opentelemetry/api": "^1.0.0", "babel-loader": "8.3.0", "babel-polyfill": "6.26.0", From 5d94185e2ef4dedd34badb20e8266d2caf7ec93e Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 11 Sep 2023 13:57:44 +0200 Subject: [PATCH 56/70] chore(deps): update actions/checkout action to v4 (#4134) --- .github/workflows/changelog.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/docs.yaml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/peer-api.yml | 2 +- .github/workflows/unit-test.yml | 10 +++++----- .github/workflows/w3c-integration-test.yml | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml index 70fb482d600..0d8d88ca730 100644 --- a/.github/workflows/changelog.yml +++ b/.github/workflows/changelog.yml @@ -15,7 +15,7 @@ jobs: if: ${{ !contains(github.event.pull_request.labels.*.name, 'dependencies') && !contains(github.event.pull_request.labels.*.name, 'Skip Changelog')}} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Check for CHANGELOG changes run: | diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 659cde8d2f1..317759ac5b4 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index cde3ca25c70..787e11a91ed 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 79c0f720bea..a8bb9e14dc0 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -16,7 +16,7 @@ jobs: with: node-version: '16' - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Lint changelog file uses: avto-dev/markdown-lint@v1 diff --git a/.github/workflows/peer-api.yml b/.github/workflows/peer-api.yml index e6f52cccd77..bb5094ec406 100644 --- a/.github/workflows/peer-api.yml +++ b/.github/workflows/peer-api.yml @@ -14,7 +14,7 @@ jobs: image: node:20 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install lerna run: npm install -g lerna diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 6acd8d20dde..da15818d5f4 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -20,7 +20,7 @@ jobs: NPM_CONFIG_UNSAFE_PERM: true steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: @@ -75,7 +75,7 @@ jobs: NPM_CONFIG_UNSAFE_PERM: true steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: @@ -116,7 +116,7 @@ jobs: NPM_CONFIG_UNSAFE_PERM: true steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: @@ -154,7 +154,7 @@ jobs: NPM_CONFIG_UNSAFE_PERM: true steps: - name: Checkout - uses: actions/checkout@v3.5.3 + uses: actions/checkout@v4.0.0 - uses: actions/setup-node@v3 with: node-version: 16 @@ -196,7 +196,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: diff --git a/.github/workflows/w3c-integration-test.yml b/.github/workflows/w3c-integration-test.yml index 443fe85fac5..04c07379ab4 100644 --- a/.github/workflows/w3c-integration-test.yml +++ b/.github/workflows/w3c-integration-test.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout 🛎️ - uses: actions/checkout@v3 + uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: From 5fcd8cf136e2235903dde3df9ba03ced594f0e95 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Mon, 11 Sep 2023 14:01:30 +0200 Subject: [PATCH 57/70] chore: prepare release API 1.5.0, SDK 1.16.0/0.42.0 (#4122) --- CHANGELOG.md | 13 +++++-- api/CHANGELOG.md | 2 ++ api/package.json | 2 +- examples/esm-http-ts/package.json | 18 +++++----- examples/http/package.json | 18 +++++----- examples/https/package.json | 18 +++++----- examples/opentelemetry-web/package.json | 30 ++++++++-------- examples/otlp-exporter-node/package.json | 24 ++++++------- experimental/CHANGELOG.md | 16 ++++++--- .../node14/package.json | 6 ++-- .../node16/package.json | 6 ++-- experimental/examples/logs/package.json | 4 +-- .../examples/opencensus-shim/package.json | 14 ++++---- experimental/examples/prometheus/package.json | 6 ++-- experimental/packages/api-events/package.json | 2 +- experimental/packages/api-logs/package.json | 2 +- .../exporter-logs-otlp-grpc/package.json | 18 +++++----- .../exporter-logs-otlp-http/package.json | 16 ++++----- .../exporter-logs-otlp-proto/package.json | 20 +++++------ .../exporter-trace-otlp-grpc/package.json | 16 ++++----- .../exporter-trace-otlp-http/package.json | 14 ++++---- .../exporter-trace-otlp-proto/package.json | 16 ++++----- .../package.json | 8 ++--- .../package.json | 16 ++++----- .../package.json | 14 ++++---- .../package.json | 18 +++++----- .../package.json | 12 +++---- .../package.json | 18 +++++----- .../package.json | 16 ++++----- .../package.json | 18 +++++----- .../package.json | 18 +++++----- .../package.json | 6 ++-- .../opentelemetry-sdk-node/package.json | 36 +++++++++---------- .../packages/otlp-exporter-base/package.json | 6 ++-- .../otlp-grpc-exporter-base/package.json | 14 ++++---- .../otlp-proto-exporter-base/package.json | 8 ++--- .../packages/otlp-transformer/package.json | 18 +++++----- experimental/packages/sdk-logs/package.json | 12 +++---- .../packages/shim-opencensus/package.json | 10 +++--- .../package.json | 8 ++--- .../package.json | 6 ++-- .../package.json | 6 ++-- .../opentelemetry-context-zone/package.json | 4 +-- packages/opentelemetry-core/package.json | 8 ++--- .../package.json | 10 +++--- .../src/version.js | 20 +++++++++++ .../package.json | 10 +++--- .../src/version.js | 20 +++++++++++ .../opentelemetry-propagator-b3/package.json | 8 ++--- .../src/version.js | 20 +++++++++++ .../package.json | 8 ++--- .../src/version.js | 20 +++++++++++ packages/opentelemetry-resources/package.json | 10 +++--- .../opentelemetry-sdk-trace-base/package.json | 12 +++---- .../opentelemetry-sdk-trace-node/package.json | 20 +++++------ .../opentelemetry-sdk-trace-web/package.json | 18 +++++----- .../package.json | 2 +- .../package.json | 16 ++++----- packages/sdk-metrics/package.json | 10 +++--- packages/sdk-metrics/src/version.js | 20 +++++++++++ packages/template/package.json | 2 +- packages/template/src/version.js | 20 +++++++++++ selenium-tests/package.json | 22 ++++++------ 63 files changed, 483 insertions(+), 346 deletions(-) create mode 100644 packages/opentelemetry-exporter-jaeger/src/version.js create mode 100644 packages/opentelemetry-exporter-zipkin/src/version.js create mode 100644 packages/opentelemetry-propagator-b3/src/version.js create mode 100644 packages/opentelemetry-propagator-jaeger/src/version.js create mode 100644 packages/sdk-metrics/src/version.js create mode 100644 packages/template/src/version.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 47f735d6adf..0d84c6aab8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,16 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :rocket: (Enhancement) -* feat(api): add attributes argument to recordException API [#4071](https://github.com/open-telemetry/opentelemetry-js/pull/4071) +### :bug: (Bug Fix) + +### :books: (Refine Doc) + +### :house: (Internal) + +## 1.16.0 + +### :rocket: (Enhancement) + * feat(sdk-metrics): implement MetricProducer specification [#4007](https://github.com/open-telemetry/opentelemetry-js/pull/4007) * feat: update PeriodicExportingMetricReader and PrometheusExporter to accept optional metric producers [#4077](https://github.com/open-telemetry/opentelemetry-js/pull/4077) @aabmass @@ -24,8 +33,6 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ * docs(guidelines): add dependencies guidelines [#4040](https://github.com/open-telemetry/opentelemetry-js/pull/4040) -### :house: (Internal) - ## 1.15.2 ### :bug: (Bug Fix) diff --git a/api/CHANGELOG.md b/api/CHANGELOG.md index a1dcf67d4f5..d88acbd5654 100644 --- a/api/CHANGELOG.md +++ b/api/CHANGELOG.md @@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file. ## Unreleased +## 1.5.0 + ### :rocket: (Enhancement) * feat(api): add attributes argument to recordException API [#4071](https://github.com/open-telemetry/opentelemetry-js/pull/4071) diff --git a/api/package.json b/api/package.json index 7369e951c03..335aad1bb5f 100644 --- a/api/package.json +++ b/api/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api", - "version": "1.4.1", + "version": "1.5.0", "description": "Public API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/examples/esm-http-ts/package.json b/examples/esm-http-ts/package.json index bc2aa9665e1..4067efdcc2f 100644 --- a/examples/esm-http-ts/package.json +++ b/examples/esm-http-ts/package.json @@ -1,7 +1,7 @@ { "name": "esm-http-ts", "private": true, - "version": "0.41.2", + "version": "0.42.0", "description": "Example of HTTP integration with OpenTelemetry using ESM and TypeScript", "main": "build/index.js", "type": "module", @@ -30,13 +30,13 @@ }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/", "dependencies": { - "@opentelemetry/api": "1.4.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.41.2", - "@opentelemetry/instrumentation": "0.41.2", - "@opentelemetry/instrumentation-http": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", - "@opentelemetry/sdk-trace-node": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/api": "1.5.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.42.0", + "@opentelemetry/instrumentation": "0.42.0", + "@opentelemetry/instrumentation-http": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/sdk-trace-node": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" } } diff --git a/examples/http/package.json b/examples/http/package.json index 641344b3f6b..6dbf7f7f680 100644 --- a/examples/http/package.json +++ b/examples/http/package.json @@ -1,7 +1,7 @@ { "name": "http-example", "private": true, - "version": "0.41.2", + "version": "0.42.0", "description": "Example of HTTP integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -29,14 +29,14 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/exporter-jaeger": "1.15.2", - "@opentelemetry/exporter-zipkin": "1.15.2", - "@opentelemetry/instrumentation": "0.41.2", - "@opentelemetry/instrumentation-http": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", - "@opentelemetry/sdk-trace-node": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/exporter-jaeger": "1.16.0", + "@opentelemetry/exporter-zipkin": "1.16.0", + "@opentelemetry/instrumentation": "0.42.0", + "@opentelemetry/instrumentation-http": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/sdk-trace-node": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/http", "devDependencies": { diff --git a/examples/https/package.json b/examples/https/package.json index 8eeac36fa9a..8fbab59d367 100644 --- a/examples/https/package.json +++ b/examples/https/package.json @@ -1,7 +1,7 @@ { "name": "https-example", "private": true, - "version": "0.41.2", + "version": "0.42.0", "description": "Example of HTTPs integration with OpenTelemetry", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -33,14 +33,14 @@ }, "dependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/exporter-jaeger": "1.15.2", - "@opentelemetry/exporter-zipkin": "1.15.2", - "@opentelemetry/instrumentation": "0.41.2", - "@opentelemetry/instrumentation-http": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", - "@opentelemetry/sdk-trace-node": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/exporter-jaeger": "1.16.0", + "@opentelemetry/exporter-zipkin": "1.16.0", + "@opentelemetry/instrumentation": "0.42.0", + "@opentelemetry/instrumentation-http": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/sdk-trace-node": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/https", "devDependencies": { diff --git a/examples/opentelemetry-web/package.json b/examples/opentelemetry-web/package.json index 2b79e07cc2c..5dddfe6088a 100644 --- a/examples/opentelemetry-web/package.json +++ b/examples/opentelemetry-web/package.json @@ -1,7 +1,7 @@ { "name": "web-opentelemetry-example", "private": true, - "version": "0.41.2", + "version": "0.42.0", "description": "Example of using @opentelemetry/sdk-trace-web and @opentelemetry/sdk-metrics in browser", "main": "index.js", "scripts": { @@ -43,20 +43,20 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/context-zone": "1.15.2", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/exporter-metrics-otlp-http": "0.41.2", - "@opentelemetry/exporter-trace-otlp-http": "0.41.2", - "@opentelemetry/exporter-trace-otlp-proto": "0.41.2", - "@opentelemetry/exporter-zipkin": "1.15.2", - "@opentelemetry/instrumentation": "0.41.2", - "@opentelemetry/instrumentation-fetch": "0.41.2", - "@opentelemetry/instrumentation-xml-http-request": "0.41.2", - "@opentelemetry/propagator-b3": "1.15.2", - "@opentelemetry/sdk-metrics": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", - "@opentelemetry/sdk-trace-web": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/context-zone": "1.16.0", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.42.0", + "@opentelemetry/exporter-trace-otlp-http": "0.42.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.42.0", + "@opentelemetry/exporter-zipkin": "1.16.0", + "@opentelemetry/instrumentation": "0.42.0", + "@opentelemetry/instrumentation-fetch": "0.42.0", + "@opentelemetry/instrumentation-xml-http-request": "0.42.0", + "@opentelemetry/propagator-b3": "1.16.0", + "@opentelemetry/sdk-metrics": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/sdk-trace-web": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/tracer-web" } diff --git a/examples/otlp-exporter-node/package.json b/examples/otlp-exporter-node/package.json index c8817d0e45d..df63aa98ecd 100644 --- a/examples/otlp-exporter-node/package.json +++ b/examples/otlp-exporter-node/package.json @@ -1,7 +1,7 @@ { "name": "example-otlp-exporter-node", "private": true, - "version": "0.41.2", + "version": "0.42.0", "description": "Example of using @opentelemetry/collector-exporter in Node.js", "main": "index.js", "scripts": { @@ -29,17 +29,17 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/exporter-metrics-otlp-grpc": "0.41.2", - "@opentelemetry/exporter-metrics-otlp-http": "0.41.2", - "@opentelemetry/exporter-metrics-otlp-proto": "0.41.2", - "@opentelemetry/exporter-trace-otlp-grpc": "0.41.2", - "@opentelemetry/exporter-trace-otlp-http": "0.41.2", - "@opentelemetry/exporter-trace-otlp-proto": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-metrics": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.42.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.42.0", + "@opentelemetry/exporter-metrics-otlp-proto": "0.42.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.42.0", + "@opentelemetry/exporter-trace-otlp-http": "0.42.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-metrics": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/otlp-exporter-node" } diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index b796a557b87..eca8f382d6d 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -8,6 +8,18 @@ All notable changes to experimental packages in this project will be documented ### :boom: Breaking Change +### :rocket: (Enhancement) + +### :bug: (Bug Fix) + +### :books: (Refine Doc) + +### :house: (Internal) + +## 0.42.0 + +### :boom: Breaking Change + * chore(sdk-node): deprecate methods in favor of constructor options [#3996](https://github.com/open-telemetry/opentelemetry-js/pull/3996) @pichlermarc * The following methods are now deprecated and will be removed in `0.43.0` * `NodeSDK.configureTracerProvider()`, please use constructor options instead @@ -27,10 +39,6 @@ All notable changes to experimental packages in this project will be documented * fix(exporter-logs-otlp-http): add @opentelemetry/api-logs as dependency -### :books: (Refine Doc) - -### :house: (Internal) - ## 0.41.2 ### :bug: (Bug Fix) diff --git a/experimental/backwards-compatibility/node14/package.json b/experimental/backwards-compatibility/node14/package.json index fc19e3ddb3d..8b7786469ad 100644 --- a/experimental/backwards-compatibility/node14/package.json +++ b/experimental/backwards-compatibility/node14/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node14", - "version": "0.41.2", + "version": "0.42.0", "private": true, "description": "Backwards compatibility app for node 14 types and the OpenTelemetry Node.js SDK", "main": "index.js", @@ -9,8 +9,8 @@ "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "dependencies": { - "@opentelemetry/sdk-node": "0.41.2", - "@opentelemetry/sdk-trace-base": "1.15.2" + "@opentelemetry/sdk-node": "0.42.0", + "@opentelemetry/sdk-trace-base": "1.16.0" }, "devDependencies": { "@types/node": "14.18.25", diff --git a/experimental/backwards-compatibility/node16/package.json b/experimental/backwards-compatibility/node16/package.json index 6c94e032093..003647376d1 100644 --- a/experimental/backwards-compatibility/node16/package.json +++ b/experimental/backwards-compatibility/node16/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node16", - "version": "0.41.2", + "version": "0.42.0", "private": true, "description": "Backwards compatibility app for node 16 types and the OpenTelemetry Node.js SDK", "main": "index.js", @@ -9,8 +9,8 @@ "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "dependencies": { - "@opentelemetry/sdk-node": "0.41.2", - "@opentelemetry/sdk-trace-base": "1.15.2" + "@opentelemetry/sdk-node": "0.42.0", + "@opentelemetry/sdk-trace-base": "1.16.0" }, "devDependencies": { "@types/node": "16.11.52", diff --git a/experimental/examples/logs/package.json b/experimental/examples/logs/package.json index f978265643b..52d2b9a7191 100644 --- a/experimental/examples/logs/package.json +++ b/experimental/examples/logs/package.json @@ -1,12 +1,12 @@ { "name": "logs-example", - "version": "0.41.1", + "version": "0.42.0", "private": true, "scripts": { "start": "ts-node index.ts" }, "dependencies": { - "@opentelemetry/api": "^1.4.1", + "@opentelemetry/api": "^1.5.0", "@opentelemetry/api-logs": "0.41.0", "@opentelemetry/sdk-logs": "0.41.0" }, diff --git a/experimental/examples/opencensus-shim/package.json b/experimental/examples/opencensus-shim/package.json index d3c2726c36d..1bbfee33c73 100644 --- a/experimental/examples/opencensus-shim/package.json +++ b/experimental/examples/opencensus-shim/package.json @@ -1,7 +1,7 @@ { "name": "opencensus-shim", "private": true, - "version": "0.41.2", + "version": "0.42.0", "description": "Example of using @opentelemetry/shim-opencensus in Node.js", "main": "index.js", "scripts": { @@ -29,12 +29,12 @@ "dependencies": { "@opencensus/core": "0.1.0", "@opencensus/nodejs-base": "0.1.0", - "@opentelemetry/api": "1.4.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-trace-node": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2", - "@opentelemetry/shim-opencensus": "0.41.2" + "@opentelemetry/api": "1.5.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-trace-node": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0", + "@opentelemetry/shim-opencensus": "0.42.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/opencensus-shim" } diff --git a/experimental/examples/prometheus/package.json b/experimental/examples/prometheus/package.json index 678f2212c40..274a4981843 100644 --- a/experimental/examples/prometheus/package.json +++ b/experimental/examples/prometheus/package.json @@ -1,6 +1,6 @@ { "name": "prometheus-example", - "version": "0.41.2", + "version": "0.42.0", "private": true, "description": "Example of using @opentelemetry/sdk-metrics and @opentelemetry/exporter-prometheus", "main": "index.js", @@ -11,7 +11,7 @@ "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/exporter-prometheus": "0.41.2", - "@opentelemetry/sdk-metrics": "1.15.2" + "@opentelemetry/exporter-prometheus": "0.42.0", + "@opentelemetry/sdk-metrics": "1.16.0" } } diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index eb7081e519a..22448f8d34e 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api-events", - "version": "0.41.2", + "version": "0.42.0", "description": "Public events API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 617a8acfc7b..36e38d8ab15 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api-logs", - "version": "0.41.2", + "version": "0.42.0", "description": "Public logs API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index b4434e31e23..9c4a76d6a47 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-grpc", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry Collector Exporter allows user to send collected log records to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,10 +50,10 @@ "devDependencies": { "@babel/core": "7.22.17", "@grpc/proto-loader": "^0.7.3", - "@opentelemetry/api": "1.4.1", - "@opentelemetry/api-logs": "0.41.2", - "@opentelemetry/otlp-exporter-base": "0.41.2", - "@opentelemetry/resources": "1.15.2", + "@opentelemetry/api": "1.5.0", + "@opentelemetry/api-logs": "0.42.0", + "@opentelemetry/otlp-exporter-base": "0.42.0", + "@opentelemetry/resources": "1.16.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -73,10 +73,10 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/otlp-grpc-exporter-base": "0.41.2", - "@opentelemetry/otlp-transformer": "0.41.2", - "@opentelemetry/sdk-logs": "0.41.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.42.0", + "@opentelemetry/otlp-transformer": "0.42.0", + "@opentelemetry/sdk-logs": "0.42.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index f83a9c01258..83d32850f7f 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-http", - "version": "0.41.2", + "version": "0.42.0", "publishConfig": { "access": "public" }, @@ -71,9 +71,9 @@ ], "sideEffects": false, "devDependencies": { + "@opentelemetry/api": "1.5.0", + "@opentelemetry/resources": "1.16.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", - "@opentelemetry/resources": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -104,10 +104,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/otlp-exporter-base": "0.41.2", - "@opentelemetry/otlp-transformer": "0.41.2", - "@opentelemetry/api-logs": "0.41.2", - "@opentelemetry/sdk-logs": "0.41.2" + "@opentelemetry/api-logs": "0.42.0", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/otlp-exporter-base": "0.42.0", + "@opentelemetry/otlp-transformer": "0.42.0", + "@opentelemetry/sdk-logs": "0.42.0" } } diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 9b59b80f617..44cf07e6654 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-proto", - "version": "0.41.2", + "version": "0.42.0", "description": "An OTLP exporter to send logs using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -63,8 +63,8 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -93,14 +93,14 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/api-logs": "0.41.2", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/otlp-exporter-base": "0.41.2", - "@opentelemetry/otlp-proto-exporter-base": "0.41.2", - "@opentelemetry/otlp-transformer": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-logs": "0.41.2", - "@opentelemetry/sdk-trace-base": "1.15.2" + "@opentelemetry/api-logs": "0.42.0", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/otlp-exporter-base": "0.42.0", + "@opentelemetry/otlp-proto-exporter-base": "0.42.0", + "@opentelemetry/otlp-transformer": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-logs": "0.42.0", + "@opentelemetry/sdk-trace-base": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-proto", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 7443e1fc15b..13e7ffc12b3 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-grpc", - "version": "0.41.2", + "version": "0.42.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", @@ -49,8 +49,8 @@ "devDependencies": { "@babel/core": "7.22.17", "@grpc/proto-loader": "^0.7.3", - "@opentelemetry/api": "1.4.1", - "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/api": "1.5.0", + "@opentelemetry/otlp-exporter-base": "0.42.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -70,11 +70,11 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/otlp-grpc-exporter-base": "0.41.2", - "@opentelemetry/otlp-transformer": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.42.0", + "@opentelemetry/otlp-transformer": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 849d2c31d79..04de0761ea1 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-http", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry Collector Trace Exporter allows user to send collected traces to the OpenTelemetry Collector", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -63,8 +63,8 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -95,11 +95,11 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/otlp-exporter-base": "0.41.2", - "@opentelemetry/otlp-transformer": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/otlp-exporter-base": "0.42.0", + "@opentelemetry/otlp-transformer": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-http", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index a88e105c894..f3342898883 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-proto", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry Collector Exporter allows user to send collected traces to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -62,8 +62,8 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -92,12 +92,12 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/otlp-exporter-base": "0.41.2", - "@opentelemetry/otlp-proto-exporter-base": "0.41.2", - "@opentelemetry/otlp-transformer": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/otlp-exporter-base": "0.42.0", + "@opentelemetry/otlp-proto-exporter-base": "0.42.0", + "@opentelemetry/otlp-transformer": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-proto", "sideEffects": false diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index eb62c726d09..63cf5257f21 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/opentelemetry-browser-detector", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry Resource Detector for Browser", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -53,8 +53,8 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -82,8 +82,8 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/browser-detector" } diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index ff1dbab571f..bb822285575 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-grpc", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -49,7 +49,7 @@ "devDependencies": { "@babel/core": "7.22.17", "@grpc/proto-loader": "^0.7.3", - "@opentelemetry/api": "1.4.1", + "@opentelemetry/api": "1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -69,12 +69,12 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/exporter-metrics-otlp-http": "0.41.2", - "@opentelemetry/otlp-grpc-exporter-base": "0.41.2", - "@opentelemetry/otlp-transformer": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-metrics": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.42.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.42.0", + "@opentelemetry/otlp-transformer": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-metrics": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index f7290daa272..d0d9d099c92 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-http", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -63,8 +63,8 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -95,11 +95,11 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/otlp-exporter-base": "0.41.2", - "@opentelemetry/otlp-transformer": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-metrics": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/otlp-exporter-base": "0.42.0", + "@opentelemetry/otlp-transformer": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-metrics": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-http", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index fe6f0419fa0..a905abaf693 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-proto", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -47,8 +47,8 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -67,13 +67,13 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/exporter-metrics-otlp-http": "0.41.2", - "@opentelemetry/otlp-exporter-base": "0.41.2", - "@opentelemetry/otlp-proto-exporter-base": "0.41.2", - "@opentelemetry/otlp-transformer": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-metrics": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.42.0", + "@opentelemetry/otlp-exporter-base": "0.42.0", + "@opentelemetry/otlp-proto-exporter-base": "0.42.0", + "@opentelemetry/otlp-transformer": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-metrics": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-proto", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index b81d783d07e..4ae8fda1c45 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-prometheus", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry Exporter Prometheus provides a metrics endpoint for Prometheus", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -43,8 +43,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.4.1", - "@opentelemetry/semantic-conventions": "1.15.2", + "@opentelemetry/api": "1.5.0", + "@opentelemetry/semantic-conventions": "1.16.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -61,9 +61,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-metrics": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-metrics": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-prometheus", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index b5aa623cb1f..2515fcea429 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-fetch", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry fetch automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -54,11 +54,11 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": "1.5.0", + "@opentelemetry/context-zone": "1.16.0", + "@opentelemetry/propagator-b3": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-zone": "1.15.2", - "@opentelemetry/propagator-b3": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -88,10 +88,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/instrumentation": "0.41.2", - "@opentelemetry/sdk-trace-web": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/instrumentation": "0.42.0", + "@opentelemetry/sdk-trace-web": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-fetch", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index b85656844fe..326aa366ec6 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-grpc", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry grpc automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -49,11 +49,11 @@ "@bufbuild/buf": "1.21.0-1", "@grpc/grpc-js": "^1.7.1", "@grpc/proto-loader": "^0.7.3", - "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.15.2", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", - "@opentelemetry/sdk-trace-node": "1.15.2", + "@opentelemetry/api": "1.5.0", + "@opentelemetry/context-async-hooks": "1.16.0", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/sdk-trace-node": "1.16.0", "@protobuf-ts/grpc-transport": "2.9.1", "@protobuf-ts/runtime": "2.9.1", "@protobuf-ts/runtime-rpc": "2.9.1", @@ -75,8 +75,8 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/instrumentation": "0.41.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/instrumentation": "0.42.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-grpc", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 6036fa0c18a..68ff52d1adb 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-http", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry http/https automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,11 +45,11 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.15.2", - "@opentelemetry/sdk-metrics": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", - "@opentelemetry/sdk-trace-node": "1.15.2", + "@opentelemetry/api": "1.5.0", + "@opentelemetry/context-async-hooks": "1.16.0", + "@opentelemetry/sdk-metrics": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/sdk-trace-node": "1.16.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/request-promise-native": "1.0.18", @@ -74,9 +74,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/instrumentation": "0.41.2", - "@opentelemetry/semantic-conventions": "1.15.2", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/instrumentation": "0.42.0", + "@opentelemetry/semantic-conventions": "1.16.0", "semver": "^7.5.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-http", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index cfd84d3b49b..784baa8c1fd 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-xml-http-request", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry XMLHttpRequest automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -54,11 +54,11 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": "1.5.0", + "@opentelemetry/context-zone": "1.16.0", + "@opentelemetry/propagator-b3": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-zone": "1.15.2", - "@opentelemetry/propagator-b3": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -88,10 +88,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/instrumentation": "0.41.2", - "@opentelemetry/sdk-trace-web": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/instrumentation": "0.42.0", + "@opentelemetry/sdk-trace-web": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-xml-http-request", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 96353f6df22..093a1df687a 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation", - "version": "0.41.2", + "version": "0.42.0", "description": "Base class for node which OpenTelemetry instrumentation modules extend", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation", @@ -81,9 +81,9 @@ "@opentelemetry/api": "^1.3.0" }, "devDependencies": { + "@opentelemetry/api": "1.5.0", + "@opentelemetry/sdk-metrics": "1.16.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", - "@opentelemetry/sdk-metrics": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.1", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 1b705780776..1aec9b6fdf8 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-node", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry SDK for Node.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,27 +45,27 @@ "access": "public" }, "dependencies": { - "@opentelemetry/api-logs": "0.41.2", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/exporter-jaeger": "1.15.2", - "@opentelemetry/exporter-trace-otlp-grpc": "0.41.2", - "@opentelemetry/exporter-trace-otlp-http": "0.41.2", - "@opentelemetry/exporter-trace-otlp-proto": "0.41.2", - "@opentelemetry/exporter-zipkin": "1.15.2", - "@opentelemetry/instrumentation": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-logs": "0.41.2", - "@opentelemetry/sdk-metrics": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", - "@opentelemetry/sdk-trace-node": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/api-logs": "0.42.0", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/exporter-jaeger": "1.16.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.42.0", + "@opentelemetry/exporter-trace-otlp-http": "0.42.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.42.0", + "@opentelemetry/exporter-zipkin": "1.16.0", + "@opentelemetry/instrumentation": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-logs": "0.42.0", + "@opentelemetry/sdk-metrics": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/sdk-trace-node": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.5.0" + "@opentelemetry/api": ">=1.3.0 <1.6.0" }, "devDependencies": { - "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.15.2", + "@opentelemetry/api": "1.5.0", + "@opentelemetry/context-async-hooks": "1.16.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.1", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 000b8b96ae2..0880a926f45 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-exporter-base", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry OTLP Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -61,11 +61,11 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.15.2" + "@opentelemetry/core": "1.16.0" }, "devDependencies": { + "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 749fc60cd40..55ec46943fc 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-grpc-exporter-base", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry OTLP-gRPC Exporter base (for internal use only)", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -48,11 +48,11 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": "1.5.0", + "@opentelemetry/otlp-transformer": "0.42.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", - "@opentelemetry/otlp-transformer": "0.41.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -73,8 +73,8 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/otlp-exporter-base": "0.42.0", "protobufjs": "^7.2.3" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-grpc-exporter-base", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index d02b039fcfe..e742141085e 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-proto-exporter-base", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenTelemetry OTLP-HTTP-protobuf Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -59,8 +59,8 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", - "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -79,8 +79,8 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/otlp-exporter-base": "0.42.0", "protobufjs": "^7.2.3" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-proto-exporter-base", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index f5b1a59469d..b7d77008e54 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -4,7 +4,7 @@ "publishConfig": { "access": "public" }, - "version": "0.41.2", + "version": "0.42.0", "description": "Transform OpenTelemetry SDK data into OTLP", "module": "build/esm/index.js", "esnext": "build/esnext/index.js", @@ -54,10 +54,10 @@ "README.md" ], "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.5.0" + "@opentelemetry/api": ">=1.3.0 <1.6.0" }, "devDependencies": { - "@opentelemetry/api": "1.4.1", + "@opentelemetry/api": "1.5.0", "@types/mocha": "10.0.1", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", @@ -78,12 +78,12 @@ "webpack": "4.46.0" }, "dependencies": { - "@opentelemetry/api-logs": "0.41.2", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-logs": "0.41.2", - "@opentelemetry/sdk-metrics": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2" + "@opentelemetry/api-logs": "0.42.0", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-logs": "0.42.0", + "@opentelemetry/sdk-metrics": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-transformer", "sideEffects": false diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index c383c780b75..7175839918a 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-logs", - "version": "0.41.2", + "version": "0.42.0", "publishConfig": { "access": "public" }, @@ -68,13 +68,13 @@ ], "sideEffects": false, "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.5.0", + "@opentelemetry/api": ">=1.4.0 <1.6.0", "@opentelemetry/api-logs": ">=0.39.1" }, "devDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.6.0", + "@opentelemetry/api-logs": "0.42.0", "@babel/core": "7.22.17", - "@opentelemetry/api": ">=1.4.0 <1.5.0", - "@opentelemetry/api-logs": "0.41.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -99,7 +99,7 @@ "webpack-merge": "5.9.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/resources": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/resources": "1.16.0" } } diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index 77693eb533a..b9710199bdf 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opencensus", - "version": "0.41.2", + "version": "0.42.0", "description": "OpenCensus to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -49,9 +49,9 @@ }, "devDependencies": { "@opencensus/core": "0.1.0", - "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/api": "1.5.0", + "@opentelemetry/context-async-hooks": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -69,7 +69,7 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", + "@opentelemetry/core": "1.16.0", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2" }, diff --git a/integration-tests/propagation-validation-server/package.json b/integration-tests/propagation-validation-server/package.json index 2e52beae0af..5708f1ce34d 100644 --- a/integration-tests/propagation-validation-server/package.json +++ b/integration-tests/propagation-validation-server/package.json @@ -1,6 +1,6 @@ { "name": "propagation-validation-server", - "version": "1.15.2", + "version": "1.16.0", "description": "server for w3c tests", "main": "validation_server.js", "private": true, @@ -12,9 +12,9 @@ }, "dependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/context-async-hooks": "1.15.2", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/context-async-hooks": "1.16.0", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", "axios": "1.5.0", "body-parser": "1.19.0", "express": "4.17.3" diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 866b103a4b2..25601f30d65 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": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry AsyncHooks-based Context Manager", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,7 +44,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0", + "@opentelemetry/api": ">=1.0.0 <1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", @@ -56,7 +56,7 @@ "typescript": "4.4.4" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0" + "@opentelemetry/api": ">=1.0.0 <1.6.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-context-async-hooks", "sideEffects": false diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 0e4987dd12e..40916ce42dc 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": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry Context Zone with peer dependency for zone.js", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -53,8 +53,8 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.6.0", "@babel/core": "7.22.17", - "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -82,7 +82,7 @@ "zone.js": "0.11.4" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0", + "@opentelemetry/api": ">=1.0.0 <1.6.0", "zone.js": "^0.10.2 || ^0.11.0" }, "sideEffects": false, diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index cde461f9012..5b8ffc76f55 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-zone", - "version": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry Context Zone", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -75,7 +75,7 @@ "webpack-merge": "5.9.0" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "1.15.2", + "@opentelemetry/context-zone-peer-dep": "1.16.0", "zone.js": "^0.11.0" }, "sideEffects": true, diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index e2b3e90b609..2d63fadda63 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/core", - "version": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -64,7 +64,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0", + "@opentelemetry/api": ">=1.0.0 <1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -88,10 +88,10 @@ "webpack": "4.46.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0" + "@opentelemetry/api": ">=1.0.0 <1.6.0" }, "dependencies": { - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-core", "sideEffects": false diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 2da2d897160..9712e86c5ce 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-jaeger", - "version": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry Exporter Jaeger allows user to send collected traces to Jaeger", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,7 +45,7 @@ }, "devDependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/resources": "1.15.2", + "@opentelemetry/resources": "1.16.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -63,9 +63,9 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0", "jaeger-client": "^3.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-jaeger", diff --git a/packages/opentelemetry-exporter-jaeger/src/version.js b/packages/opentelemetry-exporter-jaeger/src/version.js new file mode 100644 index 00000000000..2090d63abf3 --- /dev/null +++ b/packages/opentelemetry-exporter-jaeger/src/version.js @@ -0,0 +1,20 @@ +"use strict"; +/* + * 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. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERSION = void 0; +// this is autogenerated file, see scripts/version-update.js +exports.VERSION = '1.16.0'; diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 2170b91261b..4861cdb4c20 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-zipkin", - "version": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry Zipkin Exporter allows the user to send collected traces to Zipkin.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -92,10 +92,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-zipkin", "sideEffects": false diff --git a/packages/opentelemetry-exporter-zipkin/src/version.js b/packages/opentelemetry-exporter-zipkin/src/version.js new file mode 100644 index 00000000000..2090d63abf3 --- /dev/null +++ b/packages/opentelemetry-exporter-zipkin/src/version.js @@ -0,0 +1,20 @@ +"use strict"; +/* + * 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. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERSION = void 0; +// this is autogenerated file, see scripts/version-update.js +exports.VERSION = '1.16.0'; diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index 9a9674b97d0..7c5514603f7 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-b3", - "version": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry B3 propagator provides context propagation for systems that are using the B3 header format", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -51,13 +51,13 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.15.2" + "@opentelemetry/core": "1.16.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0" + "@opentelemetry/api": ">=1.0.0 <1.6.0" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0", + "@opentelemetry/api": ">=1.0.0 <1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", diff --git a/packages/opentelemetry-propagator-b3/src/version.js b/packages/opentelemetry-propagator-b3/src/version.js new file mode 100644 index 00000000000..2090d63abf3 --- /dev/null +++ b/packages/opentelemetry-propagator-b3/src/version.js @@ -0,0 +1,20 @@ +"use strict"; +/* + * 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. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERSION = void 0; +// this is autogenerated file, see scripts/version-update.js +exports.VERSION = '1.16.0'; diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index 6a6b3a703cf..e9b507f5515 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-jaeger", - "version": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry Jaeger propagator provides HTTP header propagation for systems that are using Jaeger HTTP header format.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0", + "@opentelemetry/api": ">=1.0.0 <1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -78,10 +78,10 @@ "webpack": "4.46.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0" + "@opentelemetry/api": ">=1.0.0 <1.6.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2" + "@opentelemetry/core": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-propagator-jaeger", "sideEffects": false diff --git a/packages/opentelemetry-propagator-jaeger/src/version.js b/packages/opentelemetry-propagator-jaeger/src/version.js new file mode 100644 index 00000000000..2090d63abf3 --- /dev/null +++ b/packages/opentelemetry-propagator-jaeger/src/version.js @@ -0,0 +1,20 @@ +"use strict"; +/* + * 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. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERSION = void 0; +// this is autogenerated file, see scripts/version-update.js +exports.VERSION = '1.16.0'; diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 7615592d7b7..308ac6b42ed 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resources", - "version": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry SDK resources", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -61,7 +61,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0", + "@opentelemetry/api": ">=1.0.0 <1.6.0", "@opentelemetry/resources_1.9.0": "npm:@opentelemetry/resources@1.9.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -88,11 +88,11 @@ "webpack-merge": "5.9.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0" + "@opentelemetry/api": ">=1.0.0 <1.6.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-resources", "sideEffects": false diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index b4bc4e41c2a..8ad1b29058a 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-base", - "version": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry Tracing", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -64,7 +64,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0", + "@opentelemetry/api": ">=1.0.0 <1.6.0", "@opentelemetry/resources_1.9.0": "npm:@opentelemetry/resources@1.9.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -90,12 +90,12 @@ "webpack": "4.46.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0" + "@opentelemetry/api": ">=1.0.0 <1.6.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-base", "sideEffects": false diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index dd0ad05ca0f..a4e2a89de06 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-node", - "version": "1.15.2", + "version": "1.16.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", @@ -45,9 +45,9 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/resources": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2", + "@opentelemetry/api": ">=1.0.0 <1.6.0", + "@opentelemetry/resources": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.1", @@ -62,14 +62,14 @@ "typescript": "4.4.4" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0" + "@opentelemetry/api": ">=1.0.0 <1.6.0" }, "dependencies": { - "@opentelemetry/context-async-hooks": "1.15.2", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/propagator-b3": "1.15.2", - "@opentelemetry/propagator-jaeger": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/context-async-hooks": "1.16.0", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/propagator-b3": "1.16.0", + "@opentelemetry/propagator-jaeger": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", "semver": "^7.5.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 79f2b1a0e3d..f71e983bcd0 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-web", - "version": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry Web Tracer", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -55,11 +55,11 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.6.0", + "@opentelemetry/context-zone": "1.16.0", + "@opentelemetry/propagator-b3": "1.16.0", + "@opentelemetry/resources": "1.16.0", "@babel/core": "7.22.17", - "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/context-zone": "1.15.2", - "@opentelemetry/propagator-b3": "1.15.2", - "@opentelemetry/resources": "1.15.2", "@types/jquery": "3.5.18", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -89,12 +89,12 @@ "webpack-merge": "5.9.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0" + "@opentelemetry/api": ">=1.0.0 <1.6.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2" + "@opentelemetry/core": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-web", "sideEffects": false diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index 9e17927e396..cd9b77cbcce 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/semantic-conventions", - "version": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry semantic conventions", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index a15916ceacf..beb200a3343 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opentracing", - "version": "1.15.2", + "version": "1.16.0", "description": "OpenTracing to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,10 +42,10 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/propagator-b3": "1.15.2", - "@opentelemetry/propagator-jaeger": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/api": ">=1.0.0 <1.6.0", + "@opentelemetry/propagator-b3": "1.16.0", + "@opentelemetry/propagator-jaeger": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", @@ -57,11 +57,11 @@ "typescript": "4.4.4" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.5.0" + "@opentelemetry/api": ">=1.0.0 <1.6.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/semantic-conventions": "1.15.2", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/semantic-conventions": "1.16.0", "opentracing": "^0.14.4" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-shim-opentracing", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 566257915ed..f6ea99e54f9 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-metrics", - "version": "1.15.2", + "version": "1.16.0", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -54,8 +54,8 @@ "access": "public" }, "devDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.6.0", "@babel/core": "7.22.17", - "@opentelemetry/api": ">=1.3.0 <1.5.0", "@types/lodash.merge": "4.6.7", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -81,11 +81,11 @@ "webpack-merge": "5.9.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.5.0" + "@opentelemetry/api": ">=1.3.0 <1.6.0" }, "dependencies": { - "@opentelemetry/core": "1.15.2", - "@opentelemetry/resources": "1.15.2", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/resources": "1.16.0", "lodash.merge": "^4.6.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/sdk-metrics", diff --git a/packages/sdk-metrics/src/version.js b/packages/sdk-metrics/src/version.js new file mode 100644 index 00000000000..2090d63abf3 --- /dev/null +++ b/packages/sdk-metrics/src/version.js @@ -0,0 +1,20 @@ +"use strict"; +/* + * 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. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERSION = void 0; +// this is autogenerated file, see scripts/version-update.js +exports.VERSION = '1.16.0'; diff --git a/packages/template/package.json b/packages/template/package.json index 09b643b65d8..4d33d5ec378 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/template", - "version": "1.15.2", + "version": "1.16.0", "private": true, "publishConfig": { "access": "restricted" diff --git a/packages/template/src/version.js b/packages/template/src/version.js new file mode 100644 index 00000000000..2090d63abf3 --- /dev/null +++ b/packages/template/src/version.js @@ -0,0 +1,20 @@ +"use strict"; +/* + * 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. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERSION = void 0; +// this is autogenerated file, see scripts/version-update.js +exports.VERSION = '1.16.0'; diff --git a/selenium-tests/package.json b/selenium-tests/package.json index fc9f88b0726..fad49074b54 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/selenium-tests", - "version": "1.15.2", + "version": "1.16.0", "private": true, "description": "OpenTelemetry Selenium Tests", "main": "index.js", @@ -56,16 +56,16 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "1.15.2", - "@opentelemetry/core": "1.15.2", - "@opentelemetry/exporter-trace-otlp-http": "0.41.2", - "@opentelemetry/exporter-zipkin": "1.15.2", - "@opentelemetry/instrumentation": "0.41.2", - "@opentelemetry/instrumentation-fetch": "0.41.2", - "@opentelemetry/instrumentation-xml-http-request": "0.41.2", - "@opentelemetry/sdk-metrics": "1.15.2", - "@opentelemetry/sdk-trace-base": "1.15.2", - "@opentelemetry/sdk-trace-web": "1.15.2", + "@opentelemetry/context-zone-peer-dep": "1.16.0", + "@opentelemetry/core": "1.16.0", + "@opentelemetry/exporter-trace-otlp-http": "0.42.0", + "@opentelemetry/exporter-zipkin": "1.16.0", + "@opentelemetry/instrumentation": "0.42.0", + "@opentelemetry/instrumentation-fetch": "0.42.0", + "@opentelemetry/instrumentation-xml-http-request": "0.42.0", + "@opentelemetry/sdk-metrics": "1.16.0", + "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/sdk-trace-web": "1.16.0", "zone.js": "0.11.4" } } From 27897d6c34839ee722d92b12c1d55d8bdab5a0c1 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Mon, 11 Sep 2023 17:36:09 +0200 Subject: [PATCH 58/70] Revert "feat(api): add attributes argument to recordException API (#4071)" (#4137) --- api/CHANGELOG.md | 5 ++ api/src/trace/NonRecordingSpan.ts | 6 +- api/src/trace/span.ts | 13 ---- .../opentelemetry-sdk-trace-base/src/Span.ts | 18 +---- .../test/common/Span.test.ts | 71 ------------------- 5 files changed, 8 insertions(+), 105 deletions(-) diff --git a/api/CHANGELOG.md b/api/CHANGELOG.md index d88acbd5654..22c9fd72b07 100644 --- a/api/CHANGELOG.md +++ b/api/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. ## Unreleased +### :bug: (Bug Fix) + +* Revert "feat(api): add attributes argument to recordException API [#4071](https://github.com/open-telemetry/opentelemetry-js/pull/4071)" + * This feature was an unintentional breaking change introduced with 1.5.0 + ## 1.5.0 ### :rocket: (Enhancement) diff --git a/api/src/trace/NonRecordingSpan.ts b/api/src/trace/NonRecordingSpan.ts index dc7e3de3d78..a9e5bcaf9be 100644 --- a/api/src/trace/NonRecordingSpan.ts +++ b/api/src/trace/NonRecordingSpan.ts @@ -71,9 +71,5 @@ export class NonRecordingSpan implements Span { } // By default does nothing - recordException( - _exception: Exception, - _attributesOrStartTime?: SpanAttributes | TimeInput, - _time?: TimeInput - ): void {} + recordException(_exception: Exception, _time?: TimeInput): void {} } diff --git a/api/src/trace/span.ts b/api/src/trace/span.ts index 59eb233a85a..d80b8c2626d 100644 --- a/api/src/trace/span.ts +++ b/api/src/trace/span.ts @@ -126,17 +126,4 @@ export interface Span { * use the current time. */ recordException(exception: Exception, time?: TimeInput): void; - - /** - * Sets exception as a span event - * @param exception the exception the only accepted values are string or Error - * @param [attributes] the attributes that will be added to the error event. - * @param [time] the time to set as Span's event time. If not provided, - * use the current time. - */ - recordException( - exception: Exception, - attributes?: SpanAttributes, - time?: TimeInput - ): void; } diff --git a/packages/opentelemetry-sdk-trace-base/src/Span.ts b/packages/opentelemetry-sdk-trace-base/src/Span.ts index ea3526b29be..31fb1555ac7 100644 --- a/packages/opentelemetry-sdk-trace-base/src/Span.ts +++ b/packages/opentelemetry-sdk-trace-base/src/Span.ts @@ -272,18 +272,7 @@ export class Span implements APISpan, ReadableSpan { return this._ended === false; } - recordException( - exception: Exception, - attributesOrStartTime?: SpanAttributes | TimeInput, - timeStamp?: TimeInput - ): void { - if (isTimeInput(attributesOrStartTime)) { - if (!isTimeInput(timeStamp)) { - timeStamp = attributesOrStartTime; - } - attributesOrStartTime = undefined; - } - + recordException(exception: Exception, time?: TimeInput): void { const attributes: SpanAttributes = {}; if (typeof exception === 'string') { attributes[SemanticAttributes.EXCEPTION_MESSAGE] = exception; @@ -301,16 +290,13 @@ export class Span implements APISpan, ReadableSpan { attributes[SemanticAttributes.EXCEPTION_STACKTRACE] = exception.stack; } } - if (attributesOrStartTime) { - Object.assign(attributes, sanitizeAttributes(attributesOrStartTime)); - } // these are minimum requirements from spec if ( attributes[SemanticAttributes.EXCEPTION_TYPE] || attributes[SemanticAttributes.EXCEPTION_MESSAGE] ) { - this.addEvent(ExceptionEventName, attributes, timeStamp); + this.addEvent(ExceptionEventName, attributes, time); } else { diag.warn(`Failed to record an exception ${exception}`); } diff --git a/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts index 873865a0dc2..11a94ffc7c2 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts @@ -1203,77 +1203,6 @@ describe('Span', () => { const event = span.events[0]; assert.deepStrictEqual(event.time, [0, 123]); }); - - it('should record an exception with provided time as a 3rd arg', () => { - const span = new Span( - tracer, - ROOT_CONTEXT, - name, - spanContext, - SpanKind.CLIENT - ); - // @ts-expect-error writing readonly property. performance time origin is mocked to return ms value of [1,1] - span['_performanceOffset'] = 0; - assert.strictEqual(span.events.length, 0); - span.recordException('boom', undefined, [0, 123]); - const event = span.events[0]; - assert.deepStrictEqual(event.time, [0, 123]); - }); - }); - - describe('when attributes are provided', () => { - it('should sanitized and merge attributes when provided', () => { - const span = new Span( - tracer, - ROOT_CONTEXT, - name, - spanContext, - SpanKind.CLIENT - ); - // @ts-expect-error writing readonly property. performance time origin is mocked to return ms value of [1,1] - span['_performanceOffset'] = 0; - assert.strictEqual(span.events.length, 0); - const exception = { code: 'Error', message: 'boom', stack: 'bar' }; - span.recordException(exception, { - ...validAttributes, - ...invalidAttributes, - } as unknown as SpanAttributes); - const event = span.events[0]; - assert.deepStrictEqual(event.attributes, { - [SemanticAttributes.EXCEPTION_TYPE]: 'Error', - [SemanticAttributes.EXCEPTION_MESSAGE]: 'boom', - [SemanticAttributes.EXCEPTION_STACKTRACE]: 'bar', - ...validAttributes, - }); - }); - - it('should prioritize the provided attributes over generated', () => { - const span = new Span( - tracer, - ROOT_CONTEXT, - name, - spanContext, - SpanKind.CLIENT - ); - // @ts-expect-error writing readonly property. performance time origin is mocked to return ms value of [1,1] - span['_performanceOffset'] = 0; - assert.strictEqual(span.events.length, 0); - const exception = { code: 'Error', message: 'boom', stack: 'bar' }; - span.recordException(exception, { - [SemanticAttributes.EXCEPTION_TYPE]: 'OverrideError', - [SemanticAttributes.EXCEPTION_MESSAGE]: 'override-boom', - [SemanticAttributes.EXCEPTION_STACKTRACE]: 'override-bar', - ...validAttributes, - ...invalidAttributes, - } as unknown as SpanAttributes); - const event = span.events[0]; - assert.deepStrictEqual(event.attributes, { - ...validAttributes, - [SemanticAttributes.EXCEPTION_TYPE]: 'OverrideError', - [SemanticAttributes.EXCEPTION_MESSAGE]: 'override-boom', - [SemanticAttributes.EXCEPTION_STACKTRACE]: 'override-bar', - }); - }); }); describe('when exception code is numeric', () => { From faf939c77591f709afbc23fadbe629c9d3607ef6 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 12 Sep 2023 13:47:22 +0200 Subject: [PATCH 59/70] chore: release API 1.6.0/SDK 1.17.0/Experimental 0.43.0 (#4138) --- CHANGELOG.md | 8 ++++ api/CHANGELOG.md | 2 + api/package.json | 2 +- examples/esm-http-ts/package.json | 18 ++++----- examples/http/package.json | 18 ++++----- examples/https/package.json | 18 ++++----- examples/opentelemetry-web/package.json | 30 +++++++-------- examples/otlp-exporter-node/package.json | 24 ++++++------ experimental/CHANGELOG.md | 8 ++++ .../node14/package.json | 6 +-- .../node16/package.json | 6 +-- experimental/examples/logs/package.json | 4 +- .../examples/opencensus-shim/package.json | 14 +++---- experimental/examples/prometheus/package.json | 6 +-- experimental/packages/api-events/package.json | 2 +- experimental/packages/api-logs/package.json | 2 +- .../exporter-logs-otlp-grpc/package.json | 18 ++++----- .../exporter-logs-otlp-http/package.json | 16 ++++---- .../exporter-logs-otlp-proto/package.json | 20 +++++----- .../exporter-trace-otlp-grpc/package.json | 16 ++++---- .../exporter-trace-otlp-http/package.json | 14 +++---- .../exporter-trace-otlp-proto/package.json | 16 ++++---- .../package.json | 8 ++-- .../package.json | 16 ++++---- .../package.json | 14 +++---- .../package.json | 18 ++++----- .../package.json | 12 +++--- .../package.json | 18 ++++----- .../package.json | 16 ++++---- .../package.json | 18 ++++----- .../package.json | 18 ++++----- .../package.json | 6 +-- .../opentelemetry-sdk-node/package.json | 38 +++++++++---------- .../packages/otlp-exporter-base/package.json | 6 +-- .../otlp-grpc-exporter-base/package.json | 14 +++---- .../otlp-proto-exporter-base/package.json | 8 ++-- .../packages/otlp-transformer/package.json | 18 ++++----- experimental/packages/sdk-logs/package.json | 12 +++--- .../packages/shim-opencensus/package.json | 10 ++--- .../package.json | 8 ++-- .../package.json | 6 +-- .../package.json | 6 +-- .../opentelemetry-context-zone/package.json | 4 +- packages/opentelemetry-core/package.json | 8 ++-- .../package.json | 10 ++--- .../package.json | 10 ++--- .../opentelemetry-propagator-b3/package.json | 8 ++-- .../package.json | 8 ++-- packages/opentelemetry-resources/package.json | 10 ++--- .../opentelemetry-sdk-trace-base/package.json | 12 +++--- .../opentelemetry-sdk-trace-node/package.json | 20 +++++----- .../opentelemetry-sdk-trace-web/package.json | 18 ++++----- .../package.json | 2 +- .../package.json | 16 ++++---- packages/sdk-metrics/package.json | 10 ++--- packages/template/package.json | 2 +- selenium-tests/package.json | 22 +++++------ 57 files changed, 358 insertions(+), 340 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d84c6aab8a..4c48f21a6eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,14 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :house: (Internal) +## 1.17.0 + +### :bug: (Bug Fix) + +* Revert "feat(api): add attributes argument to recordException API [#4071](https://github.com/open-telemetry/opentelemetry-js/pull/4071)" + * This feature was an unintentional breaking change introduced with API 1.5.0 + * This PR updates all SDK packages to allow API 1.6.0, where this change has been reverted. + ## 1.16.0 ### :rocket: (Enhancement) diff --git a/api/CHANGELOG.md b/api/CHANGELOG.md index 22c9fd72b07..cba48a41492 100644 --- a/api/CHANGELOG.md +++ b/api/CHANGELOG.md @@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file. ## Unreleased +## 1.6.0 + ### :bug: (Bug Fix) * Revert "feat(api): add attributes argument to recordException API [#4071](https://github.com/open-telemetry/opentelemetry-js/pull/4071)" diff --git a/api/package.json b/api/package.json index 335aad1bb5f..2b677d2451e 100644 --- a/api/package.json +++ b/api/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api", - "version": "1.5.0", + "version": "1.6.0", "description": "Public API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/examples/esm-http-ts/package.json b/examples/esm-http-ts/package.json index 4067efdcc2f..046ab7fe0a1 100644 --- a/examples/esm-http-ts/package.json +++ b/examples/esm-http-ts/package.json @@ -1,7 +1,7 @@ { "name": "esm-http-ts", "private": true, - "version": "0.42.0", + "version": "0.43.0", "description": "Example of HTTP integration with OpenTelemetry using ESM and TypeScript", "main": "build/index.js", "type": "module", @@ -30,13 +30,13 @@ }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/", "dependencies": { - "@opentelemetry/api": "1.5.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.42.0", - "@opentelemetry/instrumentation": "0.42.0", - "@opentelemetry/instrumentation-http": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", - "@opentelemetry/sdk-trace-node": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/api": "1.6.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.43.0", + "@opentelemetry/instrumentation": "0.43.0", + "@opentelemetry/instrumentation-http": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/sdk-trace-node": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" } } diff --git a/examples/http/package.json b/examples/http/package.json index 6dbf7f7f680..9a3bcb2de40 100644 --- a/examples/http/package.json +++ b/examples/http/package.json @@ -1,7 +1,7 @@ { "name": "http-example", "private": true, - "version": "0.42.0", + "version": "0.43.0", "description": "Example of HTTP integration with OpenTelemetry", "main": "index.js", "scripts": { @@ -29,14 +29,14 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/exporter-jaeger": "1.16.0", - "@opentelemetry/exporter-zipkin": "1.16.0", - "@opentelemetry/instrumentation": "0.42.0", - "@opentelemetry/instrumentation-http": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", - "@opentelemetry/sdk-trace-node": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/exporter-jaeger": "1.17.0", + "@opentelemetry/exporter-zipkin": "1.17.0", + "@opentelemetry/instrumentation": "0.43.0", + "@opentelemetry/instrumentation-http": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/sdk-trace-node": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/http", "devDependencies": { diff --git a/examples/https/package.json b/examples/https/package.json index 8fbab59d367..3653c96ff5f 100644 --- a/examples/https/package.json +++ b/examples/https/package.json @@ -1,7 +1,7 @@ { "name": "https-example", "private": true, - "version": "0.42.0", + "version": "0.43.0", "description": "Example of HTTPs integration with OpenTelemetry", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -33,14 +33,14 @@ }, "dependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/exporter-jaeger": "1.16.0", - "@opentelemetry/exporter-zipkin": "1.16.0", - "@opentelemetry/instrumentation": "0.42.0", - "@opentelemetry/instrumentation-http": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", - "@opentelemetry/sdk-trace-node": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/exporter-jaeger": "1.17.0", + "@opentelemetry/exporter-zipkin": "1.17.0", + "@opentelemetry/instrumentation": "0.43.0", + "@opentelemetry/instrumentation-http": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/sdk-trace-node": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/https", "devDependencies": { diff --git a/examples/opentelemetry-web/package.json b/examples/opentelemetry-web/package.json index 5dddfe6088a..4a8abc9e171 100644 --- a/examples/opentelemetry-web/package.json +++ b/examples/opentelemetry-web/package.json @@ -1,7 +1,7 @@ { "name": "web-opentelemetry-example", "private": true, - "version": "0.42.0", + "version": "0.43.0", "description": "Example of using @opentelemetry/sdk-trace-web and @opentelemetry/sdk-metrics in browser", "main": "index.js", "scripts": { @@ -43,20 +43,20 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/context-zone": "1.16.0", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.42.0", - "@opentelemetry/exporter-trace-otlp-http": "0.42.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.42.0", - "@opentelemetry/exporter-zipkin": "1.16.0", - "@opentelemetry/instrumentation": "0.42.0", - "@opentelemetry/instrumentation-fetch": "0.42.0", - "@opentelemetry/instrumentation-xml-http-request": "0.42.0", - "@opentelemetry/propagator-b3": "1.16.0", - "@opentelemetry/sdk-metrics": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", - "@opentelemetry/sdk-trace-web": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/context-zone": "1.17.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.43.0", + "@opentelemetry/exporter-trace-otlp-http": "0.43.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.43.0", + "@opentelemetry/exporter-zipkin": "1.17.0", + "@opentelemetry/instrumentation": "0.43.0", + "@opentelemetry/instrumentation-fetch": "0.43.0", + "@opentelemetry/instrumentation-xml-http-request": "0.43.0", + "@opentelemetry/propagator-b3": "1.17.0", + "@opentelemetry/sdk-metrics": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/sdk-trace-web": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/tracer-web" } diff --git a/examples/otlp-exporter-node/package.json b/examples/otlp-exporter-node/package.json index df63aa98ecd..5091af08362 100644 --- a/examples/otlp-exporter-node/package.json +++ b/examples/otlp-exporter-node/package.json @@ -1,7 +1,7 @@ { "name": "example-otlp-exporter-node", "private": true, - "version": "0.42.0", + "version": "0.43.0", "description": "Example of using @opentelemetry/collector-exporter in Node.js", "main": "index.js", "scripts": { @@ -29,17 +29,17 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/exporter-metrics-otlp-grpc": "0.42.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.42.0", - "@opentelemetry/exporter-metrics-otlp-proto": "0.42.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.42.0", - "@opentelemetry/exporter-trace-otlp-http": "0.42.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-metrics": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.43.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.43.0", + "@opentelemetry/exporter-metrics-otlp-proto": "0.43.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.43.0", + "@opentelemetry/exporter-trace-otlp-http": "0.43.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-metrics": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/otlp-exporter-node" } diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index eca8f382d6d..42ee34020d5 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -16,6 +16,14 @@ All notable changes to experimental packages in this project will be documented ### :house: (Internal) +## 0.43.0 + +### :bug: (Bug Fix) + +* Revert "feat(api): add attributes argument to recordException API [#4071](https://github.com/open-telemetry/opentelemetry-js/pull/4071)" + * This feature was an unintentional breaking change introduced with API 1.5.0 + * This PR updates all experimental packages to allow API 1.6.0, where this change has been reverted. + ## 0.42.0 ### :boom: Breaking Change diff --git a/experimental/backwards-compatibility/node14/package.json b/experimental/backwards-compatibility/node14/package.json index 8b7786469ad..5e7509407c7 100644 --- a/experimental/backwards-compatibility/node14/package.json +++ b/experimental/backwards-compatibility/node14/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node14", - "version": "0.42.0", + "version": "0.43.0", "private": true, "description": "Backwards compatibility app for node 14 types and the OpenTelemetry Node.js SDK", "main": "index.js", @@ -9,8 +9,8 @@ "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "dependencies": { - "@opentelemetry/sdk-node": "0.42.0", - "@opentelemetry/sdk-trace-base": "1.16.0" + "@opentelemetry/sdk-node": "0.43.0", + "@opentelemetry/sdk-trace-base": "1.17.0" }, "devDependencies": { "@types/node": "14.18.25", diff --git a/experimental/backwards-compatibility/node16/package.json b/experimental/backwards-compatibility/node16/package.json index 003647376d1..2c8c2f8e7fa 100644 --- a/experimental/backwards-compatibility/node16/package.json +++ b/experimental/backwards-compatibility/node16/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node16", - "version": "0.42.0", + "version": "0.43.0", "private": true, "description": "Backwards compatibility app for node 16 types and the OpenTelemetry Node.js SDK", "main": "index.js", @@ -9,8 +9,8 @@ "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "dependencies": { - "@opentelemetry/sdk-node": "0.42.0", - "@opentelemetry/sdk-trace-base": "1.16.0" + "@opentelemetry/sdk-node": "0.43.0", + "@opentelemetry/sdk-trace-base": "1.17.0" }, "devDependencies": { "@types/node": "16.11.52", diff --git a/experimental/examples/logs/package.json b/experimental/examples/logs/package.json index 52d2b9a7191..03ff3e05b16 100644 --- a/experimental/examples/logs/package.json +++ b/experimental/examples/logs/package.json @@ -1,12 +1,12 @@ { "name": "logs-example", - "version": "0.42.0", + "version": "0.43.0", "private": true, "scripts": { "start": "ts-node index.ts" }, "dependencies": { - "@opentelemetry/api": "^1.5.0", + "@opentelemetry/api": "^1.6.0", "@opentelemetry/api-logs": "0.41.0", "@opentelemetry/sdk-logs": "0.41.0" }, diff --git a/experimental/examples/opencensus-shim/package.json b/experimental/examples/opencensus-shim/package.json index 1bbfee33c73..d8615a6b744 100644 --- a/experimental/examples/opencensus-shim/package.json +++ b/experimental/examples/opencensus-shim/package.json @@ -1,7 +1,7 @@ { "name": "opencensus-shim", "private": true, - "version": "0.42.0", + "version": "0.43.0", "description": "Example of using @opentelemetry/shim-opencensus in Node.js", "main": "index.js", "scripts": { @@ -29,12 +29,12 @@ "dependencies": { "@opencensus/core": "0.1.0", "@opencensus/nodejs-base": "0.1.0", - "@opentelemetry/api": "1.5.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-trace-node": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0", - "@opentelemetry/shim-opencensus": "0.42.0" + "@opentelemetry/api": "1.6.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-trace-node": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0", + "@opentelemetry/shim-opencensus": "0.43.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/opencensus-shim" } diff --git a/experimental/examples/prometheus/package.json b/experimental/examples/prometheus/package.json index 274a4981843..9a7beb79e17 100644 --- a/experimental/examples/prometheus/package.json +++ b/experimental/examples/prometheus/package.json @@ -1,6 +1,6 @@ { "name": "prometheus-example", - "version": "0.42.0", + "version": "0.43.0", "private": true, "description": "Example of using @opentelemetry/sdk-metrics and @opentelemetry/exporter-prometheus", "main": "index.js", @@ -11,7 +11,7 @@ "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/exporter-prometheus": "0.42.0", - "@opentelemetry/sdk-metrics": "1.16.0" + "@opentelemetry/exporter-prometheus": "0.43.0", + "@opentelemetry/sdk-metrics": "1.17.0" } } diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index 22448f8d34e..c93878d9091 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api-events", - "version": "0.42.0", + "version": "0.43.0", "description": "Public events API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 36e38d8ab15..18806178ce3 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/api-logs", - "version": "0.42.0", + "version": "0.43.0", "description": "Public logs API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index 9c4a76d6a47..442b003c736 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-grpc", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry Collector Exporter allows user to send collected log records to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,10 +50,10 @@ "devDependencies": { "@babel/core": "7.22.17", "@grpc/proto-loader": "^0.7.3", - "@opentelemetry/api": "1.5.0", - "@opentelemetry/api-logs": "0.42.0", - "@opentelemetry/otlp-exporter-base": "0.42.0", - "@opentelemetry/resources": "1.16.0", + "@opentelemetry/api": "1.6.0", + "@opentelemetry/api-logs": "0.43.0", + "@opentelemetry/otlp-exporter-base": "0.43.0", + "@opentelemetry/resources": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -73,10 +73,10 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.42.0", - "@opentelemetry/otlp-transformer": "0.42.0", - "@opentelemetry/sdk-logs": "0.42.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.43.0", + "@opentelemetry/otlp-transformer": "0.43.0", + "@opentelemetry/sdk-logs": "0.43.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 83d32850f7f..04ed15daf36 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-http", - "version": "0.42.0", + "version": "0.43.0", "publishConfig": { "access": "public" }, @@ -71,9 +71,9 @@ ], "sideEffects": false, "devDependencies": { - "@opentelemetry/api": "1.5.0", - "@opentelemetry/resources": "1.16.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", + "@opentelemetry/resources": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -104,10 +104,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/api-logs": "0.42.0", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/otlp-exporter-base": "0.42.0", - "@opentelemetry/otlp-transformer": "0.42.0", - "@opentelemetry/sdk-logs": "0.42.0" + "@opentelemetry/api-logs": "0.43.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/otlp-exporter-base": "0.43.0", + "@opentelemetry/otlp-transformer": "0.43.0", + "@opentelemetry/sdk-logs": "0.43.0" } } diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 44cf07e6654..742db91b54d 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-proto", - "version": "0.42.0", + "version": "0.43.0", "description": "An OTLP exporter to send logs using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -63,8 +63,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -93,14 +93,14 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/api-logs": "0.42.0", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/otlp-exporter-base": "0.42.0", - "@opentelemetry/otlp-proto-exporter-base": "0.42.0", - "@opentelemetry/otlp-transformer": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-logs": "0.42.0", - "@opentelemetry/sdk-trace-base": "1.16.0" + "@opentelemetry/api-logs": "0.43.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/otlp-exporter-base": "0.43.0", + "@opentelemetry/otlp-proto-exporter-base": "0.43.0", + "@opentelemetry/otlp-transformer": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-logs": "0.43.0", + "@opentelemetry/sdk-trace-base": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-proto", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 13e7ffc12b3..8267c2da210 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-grpc", - "version": "0.42.0", + "version": "0.43.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", @@ -49,8 +49,8 @@ "devDependencies": { "@babel/core": "7.22.17", "@grpc/proto-loader": "^0.7.3", - "@opentelemetry/api": "1.5.0", - "@opentelemetry/otlp-exporter-base": "0.42.0", + "@opentelemetry/api": "1.6.0", + "@opentelemetry/otlp-exporter-base": "0.43.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -70,11 +70,11 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.42.0", - "@opentelemetry/otlp-transformer": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.43.0", + "@opentelemetry/otlp-transformer": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 04de0761ea1..16a64b9c9fa 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-http", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry Collector Trace Exporter allows user to send collected traces to the OpenTelemetry Collector", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -63,8 +63,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -95,11 +95,11 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/otlp-exporter-base": "0.42.0", - "@opentelemetry/otlp-transformer": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/otlp-exporter-base": "0.43.0", + "@opentelemetry/otlp-transformer": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-http", "sideEffects": false diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index f3342898883..5bc540da394 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-proto", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry Collector Exporter allows user to send collected traces to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -62,8 +62,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -92,12 +92,12 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/otlp-exporter-base": "0.42.0", - "@opentelemetry/otlp-proto-exporter-base": "0.42.0", - "@opentelemetry/otlp-transformer": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/otlp-exporter-base": "0.43.0", + "@opentelemetry/otlp-proto-exporter-base": "0.43.0", + "@opentelemetry/otlp-transformer": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-proto", "sideEffects": false diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 63cf5257f21..8a96ab3a763 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/opentelemetry-browser-detector", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry Resource Detector for Browser", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -53,8 +53,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -82,8 +82,8 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/browser-detector" } diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index bb822285575..a6adb42c936 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-grpc", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -49,7 +49,7 @@ "devDependencies": { "@babel/core": "7.22.17", "@grpc/proto-loader": "^0.7.3", - "@opentelemetry/api": "1.5.0", + "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -69,12 +69,12 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.42.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.42.0", - "@opentelemetry/otlp-transformer": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-metrics": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.43.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.43.0", + "@opentelemetry/otlp-transformer": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-metrics": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index d0d9d099c92..2fc757eb1c4 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-http", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -63,8 +63,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -95,11 +95,11 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/otlp-exporter-base": "0.42.0", - "@opentelemetry/otlp-transformer": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-metrics": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/otlp-exporter-base": "0.43.0", + "@opentelemetry/otlp-transformer": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-metrics": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-http", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index a905abaf693..fa2c674ceac 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-proto", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -47,8 +47,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -67,13 +67,13 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.42.0", - "@opentelemetry/otlp-exporter-base": "0.42.0", - "@opentelemetry/otlp-proto-exporter-base": "0.42.0", - "@opentelemetry/otlp-transformer": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-metrics": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.43.0", + "@opentelemetry/otlp-exporter-base": "0.43.0", + "@opentelemetry/otlp-proto-exporter-base": "0.43.0", + "@opentelemetry/otlp-transformer": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-metrics": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-proto", "sideEffects": false diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index 4ae8fda1c45..5b55ececd8f 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-prometheus", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry Exporter Prometheus provides a metrics endpoint for Prometheus", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -43,8 +43,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", - "@opentelemetry/semantic-conventions": "1.16.0", + "@opentelemetry/api": "1.6.0", + "@opentelemetry/semantic-conventions": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -61,9 +61,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-metrics": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-metrics": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-prometheus", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 2515fcea429..009aea12402 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-fetch", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry fetch automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -54,11 +54,11 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", - "@opentelemetry/context-zone": "1.16.0", - "@opentelemetry/propagator-b3": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", + "@opentelemetry/context-zone": "1.17.0", + "@opentelemetry/propagator-b3": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -88,10 +88,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/instrumentation": "0.42.0", - "@opentelemetry/sdk-trace-web": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/instrumentation": "0.43.0", + "@opentelemetry/sdk-trace-web": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-fetch", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 326aa366ec6..2845904d95e 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-grpc", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry grpc automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -49,11 +49,11 @@ "@bufbuild/buf": "1.21.0-1", "@grpc/grpc-js": "^1.7.1", "@grpc/proto-loader": "^0.7.3", - "@opentelemetry/api": "1.5.0", - "@opentelemetry/context-async-hooks": "1.16.0", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", - "@opentelemetry/sdk-trace-node": "1.16.0", + "@opentelemetry/api": "1.6.0", + "@opentelemetry/context-async-hooks": "1.17.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/sdk-trace-node": "1.17.0", "@protobuf-ts/grpc-transport": "2.9.1", "@protobuf-ts/runtime": "2.9.1", "@protobuf-ts/runtime-rpc": "2.9.1", @@ -75,8 +75,8 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/instrumentation": "0.42.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/instrumentation": "0.43.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-grpc", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 68ff52d1adb..91ce71b6344 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-http", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry http/https automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,11 +45,11 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", - "@opentelemetry/context-async-hooks": "1.16.0", - "@opentelemetry/sdk-metrics": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", - "@opentelemetry/sdk-trace-node": "1.16.0", + "@opentelemetry/api": "1.6.0", + "@opentelemetry/context-async-hooks": "1.17.0", + "@opentelemetry/sdk-metrics": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/sdk-trace-node": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/request-promise-native": "1.0.18", @@ -74,9 +74,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/instrumentation": "0.42.0", - "@opentelemetry/semantic-conventions": "1.16.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/instrumentation": "0.43.0", + "@opentelemetry/semantic-conventions": "1.17.0", "semver": "^7.5.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-http", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 784baa8c1fd..1dc318d3269 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-xml-http-request", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry XMLHttpRequest automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -54,11 +54,11 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", - "@opentelemetry/context-zone": "1.16.0", - "@opentelemetry/propagator-b3": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", + "@opentelemetry/context-zone": "1.17.0", + "@opentelemetry/propagator-b3": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -88,10 +88,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/instrumentation": "0.42.0", - "@opentelemetry/sdk-trace-web": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/instrumentation": "0.43.0", + "@opentelemetry/sdk-trace-web": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-xml-http-request", "sideEffects": false diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 093a1df687a..99a6d83016e 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation", - "version": "0.42.0", + "version": "0.43.0", "description": "Base class for node which OpenTelemetry instrumentation modules extend", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation", @@ -81,9 +81,9 @@ "@opentelemetry/api": "^1.3.0" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", - "@opentelemetry/sdk-metrics": "1.16.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", + "@opentelemetry/sdk-metrics": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.1", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 1aec9b6fdf8..40b3ac0201f 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-node", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry SDK for Node.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -18,7 +18,7 @@ "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "npm run precompile", "peer-api-check": "node ../../../scripts/peer-api-check.js", - "postinstall": "node -e \"console.log(\\\"\\x1b[95m%s\\x1b[0m\\\", \\\"@opentelemetry/sdk-node - warning: Starting with 0.43.0 '@opentelemetry/exporter-jaeger' will no longer be automatically installed by this package. To continue using '@opentelemetry/exporter-jaeger', please install it manually.\\n(NOTE: '@opentelemetry/exporter-jaeger' is deprecated, consider switching to one of the alternatives described in https://www.npmjs.com/package/@opentelemetry/exporter-jaeger)\\\");\"" + "postinstall": "node -e \"console.log(\\\"\\x1b[95m%s\\x1b[0m\\\", \\\"@opentelemetry/sdk-node - warning: Starting with 0.44.0 '@opentelemetry/exporter-jaeger' will no longer be automatically installed by this package. To continue using '@opentelemetry/exporter-jaeger', please install it manually.\\n(NOTE: '@opentelemetry/exporter-jaeger' is deprecated, consider switching to one of the alternatives described in https://www.npmjs.com/package/@opentelemetry/exporter-jaeger)\\\");\"" }, "keywords": [ "opentelemetry", @@ -45,27 +45,27 @@ "access": "public" }, "dependencies": { - "@opentelemetry/api-logs": "0.42.0", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/exporter-jaeger": "1.16.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.42.0", - "@opentelemetry/exporter-trace-otlp-http": "0.42.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.42.0", - "@opentelemetry/exporter-zipkin": "1.16.0", - "@opentelemetry/instrumentation": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-logs": "0.42.0", - "@opentelemetry/sdk-metrics": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", - "@opentelemetry/sdk-trace-node": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/api-logs": "0.43.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/exporter-jaeger": "1.17.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.43.0", + "@opentelemetry/exporter-trace-otlp-http": "0.43.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.43.0", + "@opentelemetry/exporter-zipkin": "1.17.0", + "@opentelemetry/instrumentation": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-logs": "0.43.0", + "@opentelemetry/sdk-metrics": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/sdk-trace-node": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.6.0" + "@opentelemetry/api": ">=1.3.0 <1.7.0" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", - "@opentelemetry/context-async-hooks": "1.16.0", + "@opentelemetry/api": "1.6.0", + "@opentelemetry/context-async-hooks": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.1", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 0880a926f45..9e47068c281 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-exporter-base", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry OTLP Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -61,11 +61,11 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.16.0" + "@opentelemetry/core": "1.17.0" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 55ec46943fc..963fbe9fa40 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-grpc-exporter-base", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry OTLP-gRPC Exporter base (for internal use only)", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -48,11 +48,11 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", - "@opentelemetry/otlp-transformer": "0.42.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", + "@opentelemetry/otlp-transformer": "0.43.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -73,8 +73,8 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/otlp-exporter-base": "0.42.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/otlp-exporter-base": "0.43.0", "protobufjs": "^7.2.3" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-grpc-exporter-base", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index e742141085e..5ba695faee6 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-proto-exporter-base", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenTelemetry OTLP-HTTP-protobuf Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -59,8 +59,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", "@babel/core": "7.22.17", + "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -79,8 +79,8 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/otlp-exporter-base": "0.42.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/otlp-exporter-base": "0.43.0", "protobufjs": "^7.2.3" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-proto-exporter-base", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index b7d77008e54..9e138a5cd24 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -4,7 +4,7 @@ "publishConfig": { "access": "public" }, - "version": "0.42.0", + "version": "0.43.0", "description": "Transform OpenTelemetry SDK data into OTLP", "module": "build/esm/index.js", "esnext": "build/esnext/index.js", @@ -54,10 +54,10 @@ "README.md" ], "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.6.0" + "@opentelemetry/api": ">=1.3.0 <1.7.0" }, "devDependencies": { - "@opentelemetry/api": "1.5.0", + "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", @@ -78,12 +78,12 @@ "webpack": "4.46.0" }, "dependencies": { - "@opentelemetry/api-logs": "0.42.0", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-logs": "0.42.0", - "@opentelemetry/sdk-metrics": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0" + "@opentelemetry/api-logs": "0.43.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-logs": "0.43.0", + "@opentelemetry/sdk-metrics": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-transformer", "sideEffects": false diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 7175839918a..fc388cad021 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-logs", - "version": "0.42.0", + "version": "0.43.0", "publishConfig": { "access": "public" }, @@ -68,13 +68,13 @@ ], "sideEffects": false, "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.6.0", + "@opentelemetry/api": ">=1.4.0 <1.7.0", "@opentelemetry/api-logs": ">=0.39.1" }, "devDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.6.0", - "@opentelemetry/api-logs": "0.42.0", "@babel/core": "7.22.17", + "@opentelemetry/api": ">=1.4.0 <1.7.0", + "@opentelemetry/api-logs": "0.43.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -99,7 +99,7 @@ "webpack-merge": "5.9.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/resources": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0" } } diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index b9710199bdf..e1390bb4461 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opencensus", - "version": "0.42.0", + "version": "0.43.0", "description": "OpenCensus to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -49,9 +49,9 @@ }, "devDependencies": { "@opencensus/core": "0.1.0", - "@opentelemetry/api": "1.5.0", - "@opentelemetry/context-async-hooks": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/api": "1.6.0", + "@opentelemetry/context-async-hooks": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -69,7 +69,7 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", + "@opentelemetry/core": "1.17.0", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2" }, diff --git a/integration-tests/propagation-validation-server/package.json b/integration-tests/propagation-validation-server/package.json index 5708f1ce34d..e54a18825cb 100644 --- a/integration-tests/propagation-validation-server/package.json +++ b/integration-tests/propagation-validation-server/package.json @@ -1,6 +1,6 @@ { "name": "propagation-validation-server", - "version": "1.16.0", + "version": "1.17.0", "description": "server for w3c tests", "main": "validation_server.js", "private": true, @@ -12,9 +12,9 @@ }, "dependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/context-async-hooks": "1.16.0", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/context-async-hooks": "1.17.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", "axios": "1.5.0", "body-parser": "1.19.0", "express": "4.17.3" diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 25601f30d65..181fc92dce9 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": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry AsyncHooks-based Context Manager", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,7 +44,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0", + "@opentelemetry/api": ">=1.0.0 <1.7.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", @@ -56,7 +56,7 @@ "typescript": "4.4.4" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0" + "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-context-async-hooks", "sideEffects": false diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 40916ce42dc..477cf0d75df 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": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry Context Zone with peer dependency for zone.js", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -53,8 +53,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0", "@babel/core": "7.22.17", + "@opentelemetry/api": ">=1.0.0 <1.7.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -82,7 +82,7 @@ "zone.js": "0.11.4" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0", + "@opentelemetry/api": ">=1.0.0 <1.7.0", "zone.js": "^0.10.2 || ^0.11.0" }, "sideEffects": false, diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 5b8ffc76f55..d716738c529 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-zone", - "version": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry Context Zone", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -75,7 +75,7 @@ "webpack-merge": "5.9.0" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "1.16.0", + "@opentelemetry/context-zone-peer-dep": "1.17.0", "zone.js": "^0.11.0" }, "sideEffects": true, diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 2d63fadda63..bb1e010b221 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/core", - "version": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -64,7 +64,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0", + "@opentelemetry/api": ">=1.0.0 <1.7.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -88,10 +88,10 @@ "webpack": "4.46.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0" + "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "dependencies": { - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-core", "sideEffects": false diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 9712e86c5ce..9e94b5f2688 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-jaeger", - "version": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry Exporter Jaeger allows user to send collected traces to Jaeger", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,7 +45,7 @@ }, "devDependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/resources": "1.16.0", + "@opentelemetry/resources": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -63,9 +63,9 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0", "jaeger-client": "^3.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-jaeger", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 4861cdb4c20..942a9ee6f5a 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-zipkin", - "version": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry Zipkin Exporter allows the user to send collected traces to Zipkin.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -92,10 +92,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-zipkin", "sideEffects": false diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index 7c5514603f7..353c87b20f3 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-b3", - "version": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry B3 propagator provides context propagation for systems that are using the B3 header format", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -51,13 +51,13 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.16.0" + "@opentelemetry/core": "1.17.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0" + "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0", + "@opentelemetry/api": ">=1.0.0 <1.7.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index e9b507f5515..8d7a70c84b0 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-jaeger", - "version": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry Jaeger propagator provides HTTP header propagation for systems that are using Jaeger HTTP header format.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0", + "@opentelemetry/api": ">=1.0.0 <1.7.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", @@ -78,10 +78,10 @@ "webpack": "4.46.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0" + "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0" + "@opentelemetry/core": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-propagator-jaeger", "sideEffects": false diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 308ac6b42ed..311ea9d90bb 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resources", - "version": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry SDK resources", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -61,7 +61,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0", + "@opentelemetry/api": ">=1.0.0 <1.7.0", "@opentelemetry/resources_1.9.0": "npm:@opentelemetry/resources@1.9.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -88,11 +88,11 @@ "webpack-merge": "5.9.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0" + "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-resources", "sideEffects": false diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 8ad1b29058a..77e7a64c28e 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-base", - "version": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry Tracing", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -64,7 +64,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0", + "@opentelemetry/api": ">=1.0.0 <1.7.0", "@opentelemetry/resources_1.9.0": "npm:@opentelemetry/resources@1.9.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -90,12 +90,12 @@ "webpack": "4.46.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0" + "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-base", "sideEffects": false diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index a4e2a89de06..9d7dfbbc9c9 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-node", - "version": "1.16.0", + "version": "1.17.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", @@ -45,9 +45,9 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0", - "@opentelemetry/resources": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0", + "@opentelemetry/api": ">=1.0.0 <1.7.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.1", @@ -62,14 +62,14 @@ "typescript": "4.4.4" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0" + "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "dependencies": { - "@opentelemetry/context-async-hooks": "1.16.0", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/propagator-b3": "1.16.0", - "@opentelemetry/propagator-jaeger": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/context-async-hooks": "1.17.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/propagator-b3": "1.17.0", + "@opentelemetry/propagator-jaeger": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", "semver": "^7.5.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index f71e983bcd0..a1c9939a0b6 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-web", - "version": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry Web Tracer", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -55,11 +55,11 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0", - "@opentelemetry/context-zone": "1.16.0", - "@opentelemetry/propagator-b3": "1.16.0", - "@opentelemetry/resources": "1.16.0", "@babel/core": "7.22.17", + "@opentelemetry/api": ">=1.0.0 <1.7.0", + "@opentelemetry/context-zone": "1.17.0", + "@opentelemetry/propagator-b3": "1.17.0", + "@opentelemetry/resources": "1.17.0", "@types/jquery": "3.5.18", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -89,12 +89,12 @@ "webpack-merge": "5.9.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0" + "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0" + "@opentelemetry/core": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-web", "sideEffects": false diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index cd9b77cbcce..0cc05eb2dd7 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/semantic-conventions", - "version": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry semantic conventions", "main": "build/src/index.js", "module": "build/esm/index.js", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index beb200a3343..f328e7fce4b 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opentracing", - "version": "1.16.0", + "version": "1.17.0", "description": "OpenTracing to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,10 +42,10 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0", - "@opentelemetry/propagator-b3": "1.16.0", - "@opentelemetry/propagator-jaeger": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", + "@opentelemetry/api": ">=1.0.0 <1.7.0", + "@opentelemetry/propagator-b3": "1.17.0", + "@opentelemetry/propagator-jaeger": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", @@ -57,11 +57,11 @@ "typescript": "4.4.4" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.6.0" + "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/semantic-conventions": "1.16.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.0", "opentracing": "^0.14.4" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-shim-opentracing", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index f6ea99e54f9..dd7963f1c8c 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-metrics", - "version": "1.16.0", + "version": "1.17.0", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -54,8 +54,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.6.0", "@babel/core": "7.22.17", + "@opentelemetry/api": ">=1.3.0 <1.7.0", "@types/lodash.merge": "4.6.7", "@types/mocha": "10.0.1", "@types/node": "18.6.5", @@ -81,11 +81,11 @@ "webpack-merge": "5.9.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.6.0" + "@opentelemetry/api": ">=1.3.0 <1.7.0" }, "dependencies": { - "@opentelemetry/core": "1.16.0", - "@opentelemetry/resources": "1.16.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0", "lodash.merge": "^4.6.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/sdk-metrics", diff --git a/packages/template/package.json b/packages/template/package.json index 4d33d5ec378..b7836e54094 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/template", - "version": "1.16.0", + "version": "1.17.0", "private": true, "publishConfig": { "access": "restricted" diff --git a/selenium-tests/package.json b/selenium-tests/package.json index fad49074b54..a05172df31c 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/selenium-tests", - "version": "1.16.0", + "version": "1.17.0", "private": true, "description": "OpenTelemetry Selenium Tests", "main": "index.js", @@ -56,16 +56,16 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "1.16.0", - "@opentelemetry/core": "1.16.0", - "@opentelemetry/exporter-trace-otlp-http": "0.42.0", - "@opentelemetry/exporter-zipkin": "1.16.0", - "@opentelemetry/instrumentation": "0.42.0", - "@opentelemetry/instrumentation-fetch": "0.42.0", - "@opentelemetry/instrumentation-xml-http-request": "0.42.0", - "@opentelemetry/sdk-metrics": "1.16.0", - "@opentelemetry/sdk-trace-base": "1.16.0", - "@opentelemetry/sdk-trace-web": "1.16.0", + "@opentelemetry/context-zone-peer-dep": "1.17.0", + "@opentelemetry/core": "1.17.0", + "@opentelemetry/exporter-trace-otlp-http": "0.43.0", + "@opentelemetry/exporter-zipkin": "1.17.0", + "@opentelemetry/instrumentation": "0.43.0", + "@opentelemetry/instrumentation-fetch": "0.43.0", + "@opentelemetry/instrumentation-xml-http-request": "0.43.0", + "@opentelemetry/sdk-metrics": "1.17.0", + "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/sdk-trace-web": "1.17.0", "zone.js": "0.11.4" } } From f6ebf0e1d6269fbc3282a47235090b3b99e7c1be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20Adami=C4=87?= <441333+Vunovati@users.noreply.github.com> Date: Tue, 12 Sep 2023 16:46:20 +0200 Subject: [PATCH 60/70] =?UTF-8?q?chore(exporter-logs-otlp-proto):=20rename?= =?UTF-8?q?=20OTLPLogsExporter=20to=20OTLPLogEx=E2=80=A6=20(#4140)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- experimental/CHANGELOG.md | 2 + .../exporter-logs-otlp-proto/README.md | 10 ++--- .../exporter-logs-otlp-proto/src/index.ts | 2 +- ...OTLPLogsExporter.ts => OTLPLogExporter.ts} | 2 +- .../src/platform/browser/index.ts | 2 +- .../src/platform/index.ts | 2 +- ...OTLPLogsExporter.ts => OTLPLogExporter.ts} | 2 +- .../src/platform/node/index.ts | 2 +- ...porter.test.ts => OTLPLogExporter.test.ts} | 10 ++--- ...porter.test.ts => OTLPLogExporter.test.ts} | 40 +++++++++---------- 10 files changed, 38 insertions(+), 36 deletions(-) rename experimental/packages/exporter-logs-otlp-proto/src/platform/browser/{OTLPLogsExporter.ts => OTLPLogExporter.ts} (98%) rename experimental/packages/exporter-logs-otlp-proto/src/platform/node/{OTLPLogsExporter.ts => OTLPLogExporter.ts} (98%) rename experimental/packages/exporter-logs-otlp-proto/test/browser/{OTLPLogsExporter.test.ts => OTLPLogExporter.test.ts} (81%) rename experimental/packages/exporter-logs-otlp-proto/test/node/{OTLPLogsExporter.test.ts => OTLPLogExporter.test.ts} (92%) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 42ee34020d5..aaff8d43898 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -8,6 +8,8 @@ All notable changes to experimental packages in this project will be documented ### :boom: Breaking Change +* fix(exporter-logs-otlp-proto): change OTLPLogExporter to OTLPLogExporter [#4140](https://github.com/open-telemetry/opentelemetry-js/pull/4140) @Vunovati + ### :rocket: (Enhancement) ### :bug: (Bug Fix) diff --git a/experimental/packages/exporter-logs-otlp-proto/README.md b/experimental/packages/exporter-logs-otlp-proto/README.md index 3a00476c329..30f1e8bb341 100644 --- a/experimental/packages/exporter-logs-otlp-proto/README.md +++ b/experimental/packages/exporter-logs-otlp-proto/README.md @@ -22,7 +22,7 @@ To see documentation and sample code for the metric exporter, see the [exporter- ```js const { LoggerProvider, SimpleLogRecordProcessor } = require('@opentelemetry/sdk-logs'); -const { OTLPLogsExporter } = require('@opentelemetry/exporter-logs-otlp-proto'); +const { OTLPLogExporter } = require('@opentelemetry/exporter-logs-otlp-proto'); const collectorOptions = { url: '', // url is optional and can be omitted - default is http://localhost:4318/v1/logs @@ -32,7 +32,7 @@ const collectorOptions = { }; const logProvider = new LoggerProvider({resource: new Resource({'service.name': 'testApp'})}); -const logExporter = new OTLPLogsExporter(collectorOptions); +const logExporter = new OTLPLogExporter(collectorOptions); logProvider.addLogRecordProcessor(new SimpleLogRecordProcessor(exporter)); const logger = logProvider.getLogger('test_log_instrumentation'); @@ -44,7 +44,7 @@ logger.emit({ ## Exporter Timeout Configuration -The OTLPLogsExporter has a timeout configuration option which is the maximum time, in milliseconds, the OTLP exporter will wait for each batch export. The default value is 10000ms. +The OTLPLogExporter has a timeout configuration option which is the maximum time, in milliseconds, the OTLP exporter will wait for each batch export. The default value is 10000ms. To override the default timeout duration, use the following options: @@ -57,7 +57,7 @@ To override the default timeout duration, use the following options: > `OTEL_EXPORTER_OTLP_LOGS_TIMEOUT` takes precedence and overrides `OTEL_EXPORTER_OTLP_TIMEOUT`. -+ Provide `timeoutMillis` to OTLPLogsExporter with `collectorOptions`: ++ Provide `timeoutMillis` to OTLPLogExporter with `collectorOptions`: ```js const collectorOptions = { @@ -68,7 +68,7 @@ To override the default timeout duration, use the following options: }, //an optional object containing custom headers to be sent with each request will only work with http }; - const exporter = new OTLPLogsExporter(collectorOptions); + const exporter = new OTLPLogExporter(collectorOptions); ``` > Providing `timeoutMillis` with `collectorOptions` takes precedence and overrides timeout set with environment variables. diff --git a/experimental/packages/exporter-logs-otlp-proto/src/index.ts b/experimental/packages/exporter-logs-otlp-proto/src/index.ts index 9fde4be45b2..dd74bc70bef 100644 --- a/experimental/packages/exporter-logs-otlp-proto/src/index.ts +++ b/experimental/packages/exporter-logs-otlp-proto/src/index.ts @@ -13,4 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { OTLPLogsExporter } from './platform'; +export { OTLPLogExporter } from './platform'; diff --git a/experimental/packages/exporter-logs-otlp-proto/src/platform/browser/OTLPLogsExporter.ts b/experimental/packages/exporter-logs-otlp-proto/src/platform/browser/OTLPLogExporter.ts similarity index 98% rename from experimental/packages/exporter-logs-otlp-proto/src/platform/browser/OTLPLogsExporter.ts rename to experimental/packages/exporter-logs-otlp-proto/src/platform/browser/OTLPLogExporter.ts index 185d5094f1a..fff28d4e77a 100644 --- a/experimental/packages/exporter-logs-otlp-proto/src/platform/browser/OTLPLogsExporter.ts +++ b/experimental/packages/exporter-logs-otlp-proto/src/platform/browser/OTLPLogExporter.ts @@ -37,7 +37,7 @@ const DEFAULT_COLLECTOR_URL = `http://localhost:4318/${DEFAULT_COLLECTOR_RESOURC /** * Collector Trace Exporter for Web */ -export class OTLPLogsExporter +export class OTLPLogExporter extends OTLPProtoExporterBrowserBase< ReadableLogRecord, IExportLogsServiceRequest diff --git a/experimental/packages/exporter-logs-otlp-proto/src/platform/browser/index.ts b/experimental/packages/exporter-logs-otlp-proto/src/platform/browser/index.ts index e6968b34669..abaa4216f14 100644 --- a/experimental/packages/exporter-logs-otlp-proto/src/platform/browser/index.ts +++ b/experimental/packages/exporter-logs-otlp-proto/src/platform/browser/index.ts @@ -13,4 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { OTLPLogsExporter } from './OTLPLogsExporter'; +export { OTLPLogExporter } from './OTLPLogExporter'; diff --git a/experimental/packages/exporter-logs-otlp-proto/src/platform/index.ts b/experimental/packages/exporter-logs-otlp-proto/src/platform/index.ts index 851ff9a015b..86a29a341c1 100644 --- a/experimental/packages/exporter-logs-otlp-proto/src/platform/index.ts +++ b/experimental/packages/exporter-logs-otlp-proto/src/platform/index.ts @@ -13,4 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { OTLPLogsExporter } from './node'; +export { OTLPLogExporter } from './node'; diff --git a/experimental/packages/exporter-logs-otlp-proto/src/platform/node/OTLPLogsExporter.ts b/experimental/packages/exporter-logs-otlp-proto/src/platform/node/OTLPLogExporter.ts similarity index 98% rename from experimental/packages/exporter-logs-otlp-proto/src/platform/node/OTLPLogsExporter.ts rename to experimental/packages/exporter-logs-otlp-proto/src/platform/node/OTLPLogExporter.ts index 88d97e21d3e..53191c06254 100644 --- a/experimental/packages/exporter-logs-otlp-proto/src/platform/node/OTLPLogsExporter.ts +++ b/experimental/packages/exporter-logs-otlp-proto/src/platform/node/OTLPLogExporter.ts @@ -37,7 +37,7 @@ const DEFAULT_COLLECTOR_URL = `http://localhost:4318/${DEFAULT_COLLECTOR_RESOURC /** * Collector Trace Exporter for Node */ -export class OTLPLogsExporter +export class OTLPLogExporter extends OTLPProtoExporterNodeBase< ReadableLogRecord, IExportLogsServiceRequest diff --git a/experimental/packages/exporter-logs-otlp-proto/src/platform/node/index.ts b/experimental/packages/exporter-logs-otlp-proto/src/platform/node/index.ts index 4797b306510..2472e4a7962 100644 --- a/experimental/packages/exporter-logs-otlp-proto/src/platform/node/index.ts +++ b/experimental/packages/exporter-logs-otlp-proto/src/platform/node/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { OTLPLogsExporter } from './OTLPLogsExporter'; +export { OTLPLogExporter } from './OTLPLogExporter'; diff --git a/experimental/packages/exporter-logs-otlp-proto/test/browser/OTLPLogsExporter.test.ts b/experimental/packages/exporter-logs-otlp-proto/test/browser/OTLPLogExporter.test.ts similarity index 81% rename from experimental/packages/exporter-logs-otlp-proto/test/browser/OTLPLogsExporter.test.ts rename to experimental/packages/exporter-logs-otlp-proto/test/browser/OTLPLogExporter.test.ts index 382a132c3eb..6a76ed24a09 100644 --- a/experimental/packages/exporter-logs-otlp-proto/test/browser/OTLPLogsExporter.test.ts +++ b/experimental/packages/exporter-logs-otlp-proto/test/browser/OTLPLogExporter.test.ts @@ -16,19 +16,19 @@ import * as assert from 'assert'; import * as sinon from 'sinon'; -import { OTLPLogsExporter } from '../../src/platform/browser/index'; +import { OTLPLogExporter } from '../../src/platform/browser/index'; -describe('OTLPLogsExporter - web', () => { - let collectorLogsExporter: OTLPLogsExporter; +describe('OTLPLogExporter - web', () => { + let collectorLogsExporter: OTLPLogExporter; describe('constructor', () => { let onInitSpy: any; beforeEach(() => { - onInitSpy = sinon.stub(OTLPLogsExporter.prototype, 'onInit'); + onInitSpy = sinon.stub(OTLPLogExporter.prototype, 'onInit'); const collectorExporterConfig = { hostname: 'foo', url: 'http://foo.bar.com', }; - collectorLogsExporter = new OTLPLogsExporter(collectorExporterConfig); + collectorLogsExporter = new OTLPLogExporter(collectorExporterConfig); }); afterEach(() => { sinon.restore(); diff --git a/experimental/packages/exporter-logs-otlp-proto/test/node/OTLPLogsExporter.test.ts b/experimental/packages/exporter-logs-otlp-proto/test/node/OTLPLogExporter.test.ts similarity index 92% rename from experimental/packages/exporter-logs-otlp-proto/test/node/OTLPLogsExporter.test.ts rename to experimental/packages/exporter-logs-otlp-proto/test/node/OTLPLogExporter.test.ts index 994a2f0ea47..0810109e817 100644 --- a/experimental/packages/exporter-logs-otlp-proto/test/node/OTLPLogsExporter.test.ts +++ b/experimental/packages/exporter-logs-otlp-proto/test/node/OTLPLogExporter.test.ts @@ -21,7 +21,7 @@ import * as http from 'http'; import * as sinon from 'sinon'; import { Stream, PassThrough } from 'stream'; import * as zlib from 'zlib'; -import { OTLPLogsExporter } from '../../src'; +import { OTLPLogExporter } from '../../src'; import { ensureExportLogsServiceRequestIsSet, ensureExportedLogRecordIsCorrect, @@ -42,8 +42,8 @@ import { ReadableLogRecord } from '@opentelemetry/sdk-logs'; let fakeRequest: PassThrough; -describe('OTLPLogsExporter - node with proto over http', () => { - let collectorExporter: OTLPLogsExporter; +describe('OTLPLogExporter - node with proto over http', () => { + let collectorExporter: OTLPLogExporter; let collectorExporterConfig: OTLPExporterNodeConfigBase; let logs: ReadableLogRecord[]; @@ -56,7 +56,7 @@ describe('OTLPLogsExporter - node with proto over http', () => { const envSource = process.env; it('should use url defined in env that ends with root path and append version and signal path', () => { envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar/'; - const collectorExporter = new OTLPLogsExporter(); + const collectorExporter = new OTLPLogExporter(); assert.strictEqual( collectorExporter.url, `${envSource.OTEL_EXPORTER_OTLP_ENDPOINT}v1/logs` @@ -65,7 +65,7 @@ describe('OTLPLogsExporter - node with proto over http', () => { }); it('should use url defined in env without checking if path is already present', () => { envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar/v1/logs'; - const collectorExporter = new OTLPLogsExporter(); + const collectorExporter = new OTLPLogExporter(); assert.strictEqual( collectorExporter.url, `${envSource.OTEL_EXPORTER_OTLP_ENDPOINT}/v1/logs` @@ -74,7 +74,7 @@ describe('OTLPLogsExporter - node with proto over http', () => { }); it('should use url defined in env and append version and signal', () => { envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; - const collectorExporter = new OTLPLogsExporter(); + const collectorExporter = new OTLPLogExporter(); assert.strictEqual( collectorExporter.url, `${envSource.OTEL_EXPORTER_OTLP_ENDPOINT}/v1/logs` @@ -84,7 +84,7 @@ describe('OTLPLogsExporter - node with proto over http', () => { it('should override global exporter url with signal url defined in env', () => { envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar/'; envSource.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT = 'http://foo.logs/'; - const collectorExporter = new OTLPLogsExporter(); + const collectorExporter = new OTLPLogExporter(); assert.strictEqual( collectorExporter.url, envSource.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT @@ -94,7 +94,7 @@ describe('OTLPLogsExporter - node with proto over http', () => { }); it('should add root path when signal url defined in env contains no path and no root path', () => { envSource.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT = 'http://foo.bar'; - const collectorExporter = new OTLPLogsExporter(); + const collectorExporter = new OTLPLogExporter(); assert.strictEqual( collectorExporter.url, `${envSource.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT}/` @@ -103,7 +103,7 @@ describe('OTLPLogsExporter - node with proto over http', () => { }); it('should not add root path when signal url defined in env contains root path but no path', () => { envSource.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT = 'http://foo.bar/'; - const collectorExporter = new OTLPLogsExporter(); + const collectorExporter = new OTLPLogExporter(); assert.strictEqual( collectorExporter.url, `${envSource.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT}` @@ -112,7 +112,7 @@ describe('OTLPLogsExporter - node with proto over http', () => { }); it('should not add root path when signal url defined in env contains path', () => { envSource.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT = 'http://foo.bar/v1/logs'; - const collectorExporter = new OTLPLogsExporter(); + const collectorExporter = new OTLPLogExporter(); assert.strictEqual( collectorExporter.url, `${envSource.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT}` @@ -121,7 +121,7 @@ describe('OTLPLogsExporter - node with proto over http', () => { }); it('should not add root path when signal url defined in env contains path and ends in /', () => { envSource.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT = 'http://foo.bar/v1/logs/'; - const collectorExporter = new OTLPLogsExporter(); + const collectorExporter = new OTLPLogExporter(); assert.strictEqual( collectorExporter.url, `${envSource.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT}` @@ -130,14 +130,14 @@ describe('OTLPLogsExporter - node with proto over http', () => { }); it('should use headers defined via env', () => { envSource.OTEL_EXPORTER_OTLP_LOGS_HEADERS = 'foo=bar'; - const collectorExporter = new OTLPLogsExporter(); + const collectorExporter = new OTLPLogExporter(); assert.strictEqual(collectorExporter.headers.foo, 'bar'); envSource.OTEL_EXPORTER_OTLP_HEADERS = ''; }); it('should override global headers config with signal headers defined via env', () => { envSource.OTEL_EXPORTER_OTLP_HEADERS = 'foo=bar,bar=foo'; envSource.OTEL_EXPORTER_OTLP_LOGS_HEADERS = 'foo=boo'; - const collectorExporter = new OTLPLogsExporter(); + const collectorExporter = new OTLPLogExporter(); assert.strictEqual(collectorExporter.headers.foo, 'boo'); assert.strictEqual(collectorExporter.headers.bar, 'foo'); envSource.OTEL_EXPORTER_OTLP_LOGS_HEADERS = ''; @@ -156,7 +156,7 @@ describe('OTLPLogsExporter - node with proto over http', () => { keepAlive: true, httpAgentOptions: { keepAliveMsecs: 2000 }, }; - collectorExporter = new OTLPLogsExporter(collectorExporterConfig); + collectorExporter = new OTLPLogExporter(collectorExporterConfig); logs = []; logs.push(Object.assign({}, mockedReadableLogRecord)); }); @@ -286,7 +286,7 @@ describe('OTLPLogsExporter - node with proto over http', () => { compression: CompressionAlgorithm.GZIP, httpAgentOptions: { keepAliveMsecs: 2000 }, }; - collectorExporter = new OTLPLogsExporter(collectorExporterConfig); + collectorExporter = new OTLPLogExporter(collectorExporterConfig); logs = []; logs.push(Object.assign({}, mockedReadableLogRecord)); }); @@ -331,7 +331,7 @@ describe('OTLPLogsExporter - node with proto over http', () => { }); describe('export - real http request destroyed before response received', () => { - let collectorExporter: OTLPLogsExporter; + let collectorExporter: OTLPLogExporter; let collectorExporterConfig: OTLPExporterNodeConfigBase; let logs: ReadableLogRecord[]; const server = http.createServer((_, res) => { @@ -351,7 +351,7 @@ describe('export - real http request destroyed before response received', () => url: 'http://localhost:8082', timeoutMillis: 1, }; - collectorExporter = new OTLPLogsExporter(collectorExporterConfig); + collectorExporter = new OTLPLogExporter(collectorExporterConfig); logs = []; logs.push(Object.assign({}, mockedReadableLogRecord)); @@ -368,7 +368,7 @@ describe('export - real http request destroyed before response received', () => url: 'http://localhost:8082', timeoutMillis: 100, }; - collectorExporter = new OTLPLogsExporter(collectorExporterConfig); + collectorExporter = new OTLPLogExporter(collectorExporterConfig); logs = []; logs.push(Object.assign({}, mockedReadableLogRecord)); @@ -383,7 +383,7 @@ describe('export - real http request destroyed before response received', () => }); describe('export - real http request destroyed after response received', () => { - let collectorExporter: OTLPLogsExporter; + let collectorExporter: OTLPLogExporter; let collectorExporterConfig: OTLPExporterNodeConfigBase; let logs: ReadableLogRecord[]; @@ -401,7 +401,7 @@ describe('export - real http request destroyed after response received', () => { url: 'http://localhost:8082', timeoutMillis: 300, }; - collectorExporter = new OTLPLogsExporter(collectorExporterConfig); + collectorExporter = new OTLPLogExporter(collectorExporterConfig); logs = []; logs.push(Object.assign({}, mockedReadableLogRecord)); From 4f28f90fd9deb578722e05164a29092c6e98ce59 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 12 Sep 2023 17:02:42 +0200 Subject: [PATCH 61/70] fix(codeql): run workflow for pushes to main and pull requests (#4110) --- .github/workflows/codeql-analysis.yml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 317759ac5b4..f67b78fe0ed 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -2,17 +2,9 @@ name: "CodeQL Analysis" on: workflow_dispatch: - schedule: - # ┌───────────── minute (0 - 59) - # │ ┌───────────── hour (0 - 23) - # │ │ ┌───────────── day of the month (1 - 31) - # │ │ │ ┌───────────── month (1 - 12 or JAN-DEC) - # │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT) - # │ │ │ │ │ - # │ │ │ │ │ - # │ │ │ │ │ - # * * * * * - - cron: '30 1 * * *' + push: + branches: [ main ] + pull_request: jobs: CodeQL-Build: From 5615b1c1857606e2ba5e591c924eb45448dbcb61 Mon Sep 17 00:00:00 2001 From: Vadim Korolik Date: Wed, 13 Sep 2023 00:12:20 -0700 Subject: [PATCH 62/70] fix(sdk-node): move @opentelemetry/exporter-jaeger to dev dependencies (#4049) --- experimental/CHANGELOG.md | 1 + experimental/packages/opentelemetry-sdk-node/README.md | 1 + experimental/packages/opentelemetry-sdk-node/package.json | 1 + 3 files changed, 3 insertions(+) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index aaff8d43898..0c3598e32fb 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -48,6 +48,7 @@ All notable changes to experimental packages in this project will be documented ### :bug: (Bug Fix) * fix(exporter-logs-otlp-http): add @opentelemetry/api-logs as dependency +* fix(sdk-node): remove explicit dependency on @opentelemetry/exporter-jaeger. ## 0.41.2 diff --git a/experimental/packages/opentelemetry-sdk-node/README.md b/experimental/packages/opentelemetry-sdk-node/README.md index 2e093089583..b5086b86683 100644 --- a/experimental/packages/opentelemetry-sdk-node/README.md +++ b/experimental/packages/opentelemetry-sdk-node/README.md @@ -36,6 +36,7 @@ Before any other module in your application is loaded, you must initialize the S 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]. +As shown in the installation instructions, exporters passed to the SDK must be installed alongside `@opentelemetry/sdk-node`. ```javascript const opentelemetry = require("@opentelemetry/sdk-node"); diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 40b3ac0201f..70a423c79a2 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -66,6 +66,7 @@ "devDependencies": { "@opentelemetry/api": "1.6.0", "@opentelemetry/context-async-hooks": "1.17.0", + "@opentelemetry/exporter-jaeger": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.1", From 937cfaa64bbf26dcc610ce1a1ce991a574345c1d Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Thu, 14 Sep 2023 11:33:47 +0200 Subject: [PATCH 63/70] fix(readme): update compatibility table and remove API column (#4104) --- README.md | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 7fbe7879721..c07b4e59249 100644 --- a/README.md +++ b/README.md @@ -141,19 +141,27 @@ There may also be API packages for experimental signals in the experimental dire All stable packages are released with the same version, and all experimental packages are released with the same version. The below table describes which versions of each set of packages are expected to work together. -| API | Stable Packages | Experimental Packages | -| ----- | --------------- | --------------------- | -| 1.3.x | 1.9.x | 0.35.x | -| 1.3.x | 1.8.x | 0.34.x | -| 1.2.x | 1.7.x | 0.33.x | -| 1.2.x | 1.6.x | 0.32.x | -| 1.1.x | 1.5.x | 0.31.x | -| 1.1.x | 1.4.x | 0.30.x | -| 1.1.x | 1.3.x | 0.29.x | -| 1.1.x | 1.2.x | 0.29.x | -| 1.1.x | 1.1.x | 0.28.x | -| 1.0.x | 1.0.x | 0.27.x | -| 1.0.x | 1.0.x | 0.26.x | +| Stable Packages | Experimental Packages | +|-----------------------------------------------------------------|-----------------------| +| 1.17.x | 0.43.x | +| 1.16.x | 0.42.x | +| 1.15.x | 0.41.x | +| 1.14.x | 0.40.x | +| 1.13.x | 0.39.x | +| 1.12.x | 0.38.x | +| 1.11.x | 0.37.x | +| 1.10.x | 0.36.x | +| 1.9.x | 0.35.x | +| 1.8.x (this and later versions require API >=1.3.0 for metrics) | 0.34.x | +| 1.7.x | 0.33.x | +| 1.6.x | 0.32.x | +| 1.5.x | 0.31.x | +| 1.4.x | 0.30.x | +| 1.3.x | 0.29.x | +| 1.2.x | 0.29.x | +| 1.1.x | 0.28.x | +| 1.0.x | 0.27.x | +| 1.0.x (this and later versions require API >=1.0.0 for traces) | 0.26.x | ## Versioning From 4a4059bc85a7396121b21dfc75a3c51104e73cc0 Mon Sep 17 00:00:00 2001 From: Aaron Abbott Date: Thu, 14 Sep 2023 17:17:43 -0400 Subject: [PATCH 64/70] feat(opencensus-shim): implement OpenCensus metric producer (#4066) --- experimental/CHANGELOG.md | 1 + .../packages/shim-opencensus/package.json | 2 + .../src/OpenCensusMetricProducer.ts | 104 ++++++ .../packages/shim-opencensus/src/ShimSpan.ts | 2 +- .../shim-opencensus/src/ShimTracer.ts | 2 +- .../packages/shim-opencensus/src/index.ts | 1 + .../shim-opencensus/src/metric-transform.ts | 211 ++++++++++++ .../shim-opencensus/src/propagation.ts | 2 +- .../src/{transform.ts => trace-transform.ts} | 0 .../test/OpenCensusMetricProducer.test.ts | 118 +++++++ .../test/metric-transform.test.ts | 321 ++++++++++++++++++ ...nsform.test.ts => trace-transform.test.ts} | 4 +- .../packages/shim-opencensus/tsconfig.json | 6 + 13 files changed, 769 insertions(+), 5 deletions(-) create mode 100644 experimental/packages/shim-opencensus/src/OpenCensusMetricProducer.ts create mode 100644 experimental/packages/shim-opencensus/src/metric-transform.ts rename experimental/packages/shim-opencensus/src/{transform.ts => trace-transform.ts} (100%) create mode 100644 experimental/packages/shim-opencensus/test/OpenCensusMetricProducer.test.ts create mode 100644 experimental/packages/shim-opencensus/test/metric-transform.test.ts rename experimental/packages/shim-opencensus/test/{transform.test.ts => trace-transform.test.ts} (98%) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 0c3598e32fb..e03d24e8d3d 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -44,6 +44,7 @@ All notable changes to experimental packages in this project will be documented ### :rocket: (Enhancement) * feat: update PeriodicExportingMetricReader and PrometheusExporter to accept optional metric producers [#4077](https://github.com/open-telemetry/opentelemetry-js/pull/4077) @aabmass +* feat(opencensus-shim): implement OpenCensus metric producer [#4066](https://github.com/open-telemetry/opentelemetry-js/pull/4066) @aabmass ### :bug: (Bug Fix) diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index e1390bb4461..2e24690be8c 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -70,6 +70,8 @@ }, "dependencies": { "@opentelemetry/core": "1.17.0", + "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-metrics": "1.17.0", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2" }, diff --git a/experimental/packages/shim-opencensus/src/OpenCensusMetricProducer.ts b/experimental/packages/shim-opencensus/src/OpenCensusMetricProducer.ts new file mode 100644 index 00000000000..04d4a067384 --- /dev/null +++ b/experimental/packages/shim-opencensus/src/OpenCensusMetricProducer.ts @@ -0,0 +1,104 @@ +/* + * Copyright 2018, OpenCensus Authors + * 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 oc from '@opencensus/core'; +import { Resource } from '@opentelemetry/resources'; +import { + CollectionResult, + MetricData, + MetricProducer, + ScopeMetrics, +} from '@opentelemetry/sdk-metrics'; +import { mapOcMetric } from './metric-transform'; +import { VERSION } from './version'; + +const SCOPE = { + name: '@opentelemetry/shim-opencensus', + version: VERSION, +} as const; + +interface OpenCensusMetricProducerOptions { + /** + * An instance of OpenCensus MetricProducerManager. If not provided, + * `oc.Metrics.getMetricProducerManager()` will be used. + */ + openCensusMetricProducerManager?: oc.MetricProducerManager; +} + +/** + * A {@link MetricProducer} which collects metrics from OpenCensus. Provide an instance to your + * {@link MetricReader} when you create it to include all OpenCensus metrics in the collection + * result: + * + * @example + * ``` + * const meterProvider = new MeterProvider(); + * const reader = new PeriodicExportingMetricReader({ + * metricProducers: [new OpenCensusMetricProducer()], + * exporter: exporter, + * }); + * meterProvider.addMetricReader(reader); + * ``` + */ +export class OpenCensusMetricProducer implements MetricProducer { + private _openCensusMetricProducerManager: oc.MetricProducerManager; + + constructor(options?: OpenCensusMetricProducerOptions) { + this._openCensusMetricProducerManager = + options?.openCensusMetricProducerManager ?? + oc.Metrics.getMetricProducerManager(); + } + + async collect(): Promise { + const metrics = await this._collectOpenCensus(); + const scopeMetrics: ScopeMetrics[] = + metrics.length === 0 + ? [] + : [ + { + scope: SCOPE, + metrics, + }, + ]; + + return { + errors: [], + resourceMetrics: { + // Resource is ignored by the SDK, it just uses the SDK's resource + resource: Resource.EMPTY, + scopeMetrics, + }, + }; + } + + private async _collectOpenCensus(): Promise { + const metrics: MetricData[] = []; + + // The use of oc.Metrics.getMetricProducerManager() was adapted from + // https://github.com/census-instrumentation/opencensus-node/blob/d46c8891b15783803d724b717db9a8c22cb73d6a/packages/opencensus-exporter-stackdriver/src/stackdriver-monitoring.ts#L122 + for (const metricProducer of this._openCensusMetricProducerManager.getAllMetricProducer()) { + for (const metric of metricProducer.getMetrics()) { + const metricData = mapOcMetric(metric); + if (metricData !== null) { + metrics.push(metricData); + } + } + } + + return metrics; + } +} diff --git a/experimental/packages/shim-opencensus/src/ShimSpan.ts b/experimental/packages/shim-opencensus/src/ShimSpan.ts index 498c73e5e71..e4eaf47a2d3 100644 --- a/experimental/packages/shim-opencensus/src/ShimSpan.ts +++ b/experimental/packages/shim-opencensus/src/ShimSpan.ts @@ -17,7 +17,7 @@ import * as oc from '@opencensus/core'; import { ShimTracer } from './ShimTracer'; import { AttributeValue, Span, SpanStatusCode, diag } from '@opentelemetry/api'; -import { mapMessageEvent, reverseMapSpanContext } from './transform'; +import { mapMessageEvent, reverseMapSpanContext } from './trace-transform'; // Copied from // https://github.com/census-instrumentation/opencensus-node/blob/v0.1.0/packages/opencensus-core/src/trace/model/span.ts#L61 diff --git a/experimental/packages/shim-opencensus/src/ShimTracer.ts b/experimental/packages/shim-opencensus/src/ShimTracer.ts index f5e8164e3c6..c276b99e53e 100644 --- a/experimental/packages/shim-opencensus/src/ShimTracer.ts +++ b/experimental/packages/shim-opencensus/src/ShimTracer.ts @@ -26,7 +26,7 @@ import { Tracer, } from '@opentelemetry/api'; import { DEFAULT_SPAN_NAME, ShimSpan } from './ShimSpan'; -import { mapSpanContext, mapSpanKind } from './transform'; +import { mapSpanContext, mapSpanKind } from './trace-transform'; import { shimPropagation } from './propagation'; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion diff --git a/experimental/packages/shim-opencensus/src/index.ts b/experimental/packages/shim-opencensus/src/index.ts index 5df2f6c315e..8889608ec39 100644 --- a/experimental/packages/shim-opencensus/src/index.ts +++ b/experimental/packages/shim-opencensus/src/index.ts @@ -15,4 +15,5 @@ */ export { ShimTracer } from './ShimTracer'; +export { OpenCensusMetricProducer } from './OpenCensusMetricProducer'; export { installShim, uninstallShim } from './shim'; diff --git a/experimental/packages/shim-opencensus/src/metric-transform.ts b/experimental/packages/shim-opencensus/src/metric-transform.ts new file mode 100644 index 00000000000..bc136d0ed2b --- /dev/null +++ b/experimental/packages/shim-opencensus/src/metric-transform.ts @@ -0,0 +1,211 @@ +/* + * 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 oc from '@opencensus/core'; +import { Attributes, HrTime, ValueType, diag } from '@opentelemetry/api'; +import { + AggregationTemporality, + DataPoint, + DataPointType, + GaugeMetricData, + HistogramMetricData, + InstrumentType, + MetricData, + SumMetricData, +} from '@opentelemetry/sdk-metrics'; + +type BaseMetric = Omit; +interface MappedType { + type: InstrumentType; + valueType: ValueType; + dataPointType: + | DataPointType.GAUGE + | DataPointType.SUM + | DataPointType.HISTOGRAM; +} +const ZEROED_HRTIME: HrTime = [0, 0]; + +export function mapOcMetric(metric: oc.Metric): MetricData | null { + const { description, name, unit, type } = metric.descriptor; + const mappedType = mapOcMetricDescriptorType(type); + if (mappedType === null) { + return null; + } + + const baseMetric: BaseMetric = { + aggregationTemporality: AggregationTemporality.CUMULATIVE, + descriptor: { + description, + name, + unit, + type: mappedType.type, + valueType: mappedType.valueType, + }, + }; + + switch (mappedType.dataPointType) { + case DataPointType.GAUGE: + return gauge(metric, mappedType.dataPointType, baseMetric); + case DataPointType.SUM: + return sum(metric, mappedType.dataPointType, baseMetric); + case DataPointType.HISTOGRAM: + return histogram(metric, mappedType.dataPointType, baseMetric); + } +} + +function mapOcMetricDescriptorType( + type: oc.MetricDescriptorType +): MappedType | null { + switch (type) { + case oc.MetricDescriptorType.GAUGE_INT64: + return { + type: InstrumentType.OBSERVABLE_GAUGE, + valueType: ValueType.INT, + dataPointType: DataPointType.GAUGE, + }; + case oc.MetricDescriptorType.GAUGE_DOUBLE: + return { + type: InstrumentType.OBSERVABLE_GAUGE, + valueType: ValueType.DOUBLE, + dataPointType: DataPointType.GAUGE, + }; + + case oc.MetricDescriptorType.CUMULATIVE_INT64: + return { + type: InstrumentType.COUNTER, + valueType: ValueType.INT, + dataPointType: DataPointType.SUM, + }; + case oc.MetricDescriptorType.CUMULATIVE_DOUBLE: + return { + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + dataPointType: DataPointType.SUM, + }; + + case oc.MetricDescriptorType.CUMULATIVE_DISTRIBUTION: + return { + type: InstrumentType.HISTOGRAM, + valueType: ValueType.DOUBLE, + dataPointType: DataPointType.HISTOGRAM, + }; + + case oc.MetricDescriptorType.SUMMARY: + case oc.MetricDescriptorType.GAUGE_DISTRIBUTION: + case oc.MetricDescriptorType.UNSPECIFIED: + diag.warn( + 'Got unsupported metric MetricDescriptorType from OpenCensus: %s', + type + ); + return null; + } +} + +function gauge( + metric: oc.Metric, + dataPointType: DataPointType.GAUGE, + baseMetric: BaseMetric +): GaugeMetricData { + return { + ...baseMetric, + dataPoints: dataPoints(metric, value => value as number), + dataPointType, + }; +} + +function sum( + metric: oc.Metric, + dataPointType: DataPointType.SUM, + baseMetric: BaseMetric +): SumMetricData { + return { + ...baseMetric, + dataPoints: dataPoints(metric, value => value as number), + isMonotonic: true, + dataPointType, + }; +} + +function histogram( + metric: oc.Metric, + dataPointType: DataPointType.HISTOGRAM, + baseMetric: BaseMetric +): HistogramMetricData { + return { + ...baseMetric, + dataPoints: dataPoints(metric, value => { + const { + bucketOptions: { + explicit: { bounds }, + }, + buckets, + count, + sum: distSum, + } = value as oc.DistributionValue; + + return { + buckets: { + boundaries: bounds, + counts: buckets.map(bucket => bucket.count), + }, + count, + sum: distSum, + }; + }), + dataPointType, + }; +} + +function dataPoints( + metric: oc.Metric, + valueMapper: (value: oc.TimeSeriesPoint['value']) => T +): DataPoint[] { + return metric.timeseries.flatMap(ts => { + const attributes = zipOcLabels(metric.descriptor.labelKeys, ts.labelValues); + + // use zeroed hrTime if it is undefined, which probably shouldn't happen + const startTime = ocTimestampToHrTime(ts.startTimestamp) ?? ZEROED_HRTIME; + + // points should be an array with a single value, so this will return a single point per + // attribute set. + return ts.points.map( + (point): DataPoint => ({ + startTime, + attributes, + value: valueMapper(point.value), + endTime: ocTimestampToHrTime(point.timestamp) ?? ZEROED_HRTIME, + }) + ); + }); +} + +function ocTimestampToHrTime(ts: oc.Timestamp | undefined): HrTime | null { + if (ts === undefined || ts.seconds === null) { + return null; + } + return [ts.seconds, ts.nanos ?? 0]; +} + +function zipOcLabels( + labelKeys: oc.LabelKey[], + labelValues: oc.LabelValue[] +): Attributes { + const attributes: Attributes = {}; + for (let i = 0; i < labelKeys.length; i++) { + attributes[labelKeys[i].key] = labelValues[i].value ?? ''; + } + return attributes; +} diff --git a/experimental/packages/shim-opencensus/src/propagation.ts b/experimental/packages/shim-opencensus/src/propagation.ts index deb2509fa7b..e0045fe7d95 100644 --- a/experimental/packages/shim-opencensus/src/propagation.ts +++ b/experimental/packages/shim-opencensus/src/propagation.ts @@ -23,7 +23,7 @@ import { TextMapGetter, TextMapSetter, } from '@opentelemetry/api'; -import { mapSpanContext, reverseMapSpanContext } from './transform'; +import { mapSpanContext, reverseMapSpanContext } from './trace-transform'; class Getter implements TextMapGetter { constructor(private ocGetter: oc.HeaderGetter) {} diff --git a/experimental/packages/shim-opencensus/src/transform.ts b/experimental/packages/shim-opencensus/src/trace-transform.ts similarity index 100% rename from experimental/packages/shim-opencensus/src/transform.ts rename to experimental/packages/shim-opencensus/src/trace-transform.ts diff --git a/experimental/packages/shim-opencensus/test/OpenCensusMetricProducer.test.ts b/experimental/packages/shim-opencensus/test/OpenCensusMetricProducer.test.ts new file mode 100644 index 00000000000..15b9cc1a6be --- /dev/null +++ b/experimental/packages/shim-opencensus/test/OpenCensusMetricProducer.test.ts @@ -0,0 +1,118 @@ +/* + * 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 oc from '@opencensus/core'; +import { ValueType } from '@opentelemetry/api'; +import { Resource } from '@opentelemetry/resources'; +import { + AggregationTemporality, + DataPointType, + SumMetricData, +} from '@opentelemetry/sdk-metrics'; +import * as assert from 'assert'; +import * as sinon from 'sinon'; +import { OpenCensusMetricProducer } from '../src/OpenCensusMetricProducer'; + +describe('OpenCensusMetricProducer', () => { + beforeEach(() => { + oc.globalStats.clear(); + sinon.useFakeTimers(); + }); + + afterEach(() => { + sinon.restore(); + }); + + // Since the resource is replaced by the SDK anyway + it('should return an empty Resource', async () => { + const producer = new OpenCensusMetricProducer(); + const resourceMetrics = await producer.collect(); + + assert.deepStrictEqual( + resourceMetrics.resourceMetrics.resource, + Resource.EMPTY + ); + }); + + it('should return no errors when no metrics are collected from OpenCensus', async () => { + const producer = new OpenCensusMetricProducer(); + const resourceMetrics = await producer.collect(); + assert.strictEqual(resourceMetrics.errors.length, 0); + }); + + it('should elide the scope when no metrics are collected from OpenCensus', async () => { + // No OpenCensus setup so won't produce any metrics + const producer = new OpenCensusMetricProducer(); + const resourceMetrics = await producer.collect(); + assert.strictEqual(resourceMetrics.resourceMetrics.scopeMetrics.length, 0); + }); + + it('should include OpenCensus metrics', async () => { + // Initialize OC metrics with one counter, adapted from + // https://opencensus.io/quickstart/nodejs/metrics/ + const measure = oc.globalStats.createMeasureDouble( + 'measure', + oc.MeasureUnit.MS + ); + const tagKey = { name: 'label1' }; + oc.globalStats.registerView( + oc.globalStats.createView( + 'measure', + measure, + oc.AggregationType.SUM, + [tagKey], + 'Test OC description' + ) + ); + + const tagMap = new oc.TagMap(); + tagMap.set(tagKey, { value: 'tagvalue' }); + oc.globalStats.record([{ measure, value: 125 }], tagMap); + + const producer = new OpenCensusMetricProducer(); + const resourceMetrics = await producer.collect(); + + assert.strictEqual(resourceMetrics.errors.length, 0); + assert.strictEqual(resourceMetrics.resourceMetrics.scopeMetrics.length, 1); + assert.strictEqual( + resourceMetrics.resourceMetrics.scopeMetrics[0].scope.name, + '@opentelemetry/shim-opencensus' + ); + assert.strictEqual( + resourceMetrics.resourceMetrics.scopeMetrics[0].metrics.length, + 1 + ); + const ocMetric = resourceMetrics.resourceMetrics.scopeMetrics[0] + .metrics[0] as SumMetricData; + assert.deepStrictEqual(ocMetric.descriptor, { + description: 'Test OC description', + name: 'measure', + type: 'COUNTER', + unit: 'ms', + valueType: ValueType.DOUBLE, + }); + assert.strictEqual(ocMetric.dataPoints[0].value, 125); + assert.deepStrictEqual(ocMetric.dataPoints[0].attributes, { + label1: 'tagvalue', + }); + assert.strictEqual(ocMetric.dataPointType, DataPointType.SUM); + assert.strictEqual(ocMetric.isMonotonic, true); + assert.strictEqual( + ocMetric.aggregationTemporality, + AggregationTemporality.CUMULATIVE + ); + }); +}); diff --git a/experimental/packages/shim-opencensus/test/metric-transform.test.ts b/experimental/packages/shim-opencensus/test/metric-transform.test.ts new file mode 100644 index 00000000000..289fbefd0ce --- /dev/null +++ b/experimental/packages/shim-opencensus/test/metric-transform.test.ts @@ -0,0 +1,321 @@ +/* + * 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 { mapOcMetric } from '../src/metric-transform'; + +import * as oc from '@opencensus/core'; +import { ValueType } from '@opentelemetry/api'; +import { + AggregationTemporality, + DataPointType, + GaugeMetricData, + HistogramMetricData, + InstrumentType, + SumMetricData, +} from '@opentelemetry/sdk-metrics'; +import * as assert from 'assert'; + +describe('metric-transform', () => { + it('should map OpenCensus CUMULATIVE_INT64 to Sum', () => { + const metricData = mapOcMetric({ + descriptor: { + description: 'ocDescription', + name: 'ocMetricName', + type: oc.MetricDescriptorType.CUMULATIVE_INT64, + unit: 'ocUnit', + labelKeys: [ + { key: 'key1', description: '' }, + { key: 'key2', description: '' }, + ], + }, + timeseries: [ + { + startTimestamp: { seconds: 10, nanos: 10 }, + labelValues: [{ value: 'value1' }, { value: 'value2' }], + points: [{ timestamp: { seconds: 20, nanos: 20 }, value: 5 }], + }, + ], + }); + + assert.deepStrictEqual(metricData, { + aggregationTemporality: AggregationTemporality.CUMULATIVE, + dataPointType: DataPointType.SUM, + dataPoints: [ + { + attributes: { key1: 'value1', key2: 'value2' }, + endTime: [20, 20], + startTime: [10, 10], + value: 5, + }, + ], + descriptor: { + description: 'ocDescription', + name: 'ocMetricName', + type: InstrumentType.COUNTER, + unit: 'ocUnit', + valueType: ValueType.INT, + }, + isMonotonic: true, + } as SumMetricData); + }); + + it('should map OpenCensus CUMULATIVE_DOUBLE to Sum', () => { + const metricData = mapOcMetric({ + descriptor: { + description: 'ocDescription', + name: 'ocMetricName', + type: oc.MetricDescriptorType.CUMULATIVE_DOUBLE, + unit: 'ocUnit', + labelKeys: [ + { key: 'key1', description: '' }, + { key: 'key2', description: '' }, + ], + }, + timeseries: [ + { + startTimestamp: { seconds: 10, nanos: 10 }, + labelValues: [{ value: 'value1' }, { value: 'value2' }], + points: [{ timestamp: { seconds: 20, nanos: 20 }, value: 5.5 }], + }, + ], + }); + + assert.deepStrictEqual(metricData, { + aggregationTemporality: AggregationTemporality.CUMULATIVE, + dataPointType: DataPointType.SUM, + dataPoints: [ + { + attributes: { key1: 'value1', key2: 'value2' }, + endTime: [20, 20], + startTime: [10, 10], + value: 5.5, + }, + ], + descriptor: { + description: 'ocDescription', + name: 'ocMetricName', + type: InstrumentType.COUNTER, + unit: 'ocUnit', + valueType: ValueType.DOUBLE, + }, + isMonotonic: true, + } as SumMetricData); + }); + + it('should map OpenCensus CUMULATIVE_DISTRIBUTION to Histogram', () => { + const metricData = mapOcMetric({ + descriptor: { + description: 'ocDescription', + name: 'ocMetricName', + type: oc.MetricDescriptorType.CUMULATIVE_DISTRIBUTION, + unit: 'ocUnit', + labelKeys: [ + { key: 'key1', description: '' }, + { key: 'key2', description: '' }, + ], + }, + timeseries: [ + { + startTimestamp: { seconds: 10, nanos: 10 }, + labelValues: [{ value: 'value1' }, { value: 'value2' }], + points: [ + { + timestamp: { seconds: 20, nanos: 20 }, + value: { + bucketOptions: { + explicit: { + bounds: [1, 10, 100], + }, + }, + buckets: [ + { count: 0 }, + { count: 1 }, + { count: 2 }, + { count: 3 }, + ], + count: 6, + sum: 121, + sumOfSquaredDeviation: 4, + }, + }, + ], + }, + ], + }); + + assert.deepStrictEqual(metricData, { + aggregationTemporality: AggregationTemporality.CUMULATIVE, + dataPointType: DataPointType.HISTOGRAM, + dataPoints: [ + { + attributes: { key1: 'value1', key2: 'value2' }, + endTime: [20, 20], + startTime: [10, 10], + value: { + buckets: { + boundaries: [1, 10, 100], + counts: [0, 1, 2, 3], + }, + count: 6, + sum: 121, + }, + }, + ], + descriptor: { + description: 'ocDescription', + name: 'ocMetricName', + type: InstrumentType.HISTOGRAM, + unit: 'ocUnit', + valueType: ValueType.DOUBLE, + }, + } as HistogramMetricData); + }); + + it('should map OpenCensus GAUGE_INT64 to Gauge', () => { + const metricData = mapOcMetric({ + descriptor: { + description: 'ocDescription', + name: 'ocMetricName', + type: oc.MetricDescriptorType.GAUGE_INT64, + unit: 'ocUnit', + labelKeys: [ + { key: 'key1', description: '' }, + { key: 'key2', description: '' }, + ], + }, + timeseries: [ + { + startTimestamp: { seconds: 10, nanos: 10 }, + labelValues: [{ value: 'value1' }, { value: 'value2' }], + points: [{ timestamp: { seconds: 20, nanos: 20 }, value: 5 }], + }, + ], + }); + + assert.deepStrictEqual(metricData, { + aggregationTemporality: AggregationTemporality.CUMULATIVE, + dataPointType: DataPointType.GAUGE, + dataPoints: [ + { + attributes: { key1: 'value1', key2: 'value2' }, + endTime: [20, 20], + startTime: [10, 10], + value: 5, + }, + ], + descriptor: { + description: 'ocDescription', + name: 'ocMetricName', + type: InstrumentType.OBSERVABLE_GAUGE, + unit: 'ocUnit', + valueType: ValueType.INT, + }, + } as GaugeMetricData); + }); + + it('should map OpenCensus GAUGE_DOUBLE to Gauge', () => { + const metricData = mapOcMetric({ + descriptor: { + description: 'ocDescription', + name: 'ocMetricName', + type: oc.MetricDescriptorType.GAUGE_DOUBLE, + unit: 'ocUnit', + labelKeys: [ + { key: 'key1', description: '' }, + { key: 'key2', description: '' }, + ], + }, + timeseries: [ + { + startTimestamp: { seconds: 10, nanos: 10 }, + labelValues: [{ value: 'value1' }, { value: 'value2' }], + points: [{ timestamp: { seconds: 20, nanos: 20 }, value: 5.5 }], + }, + ], + }); + + assert.deepStrictEqual(metricData, { + aggregationTemporality: AggregationTemporality.CUMULATIVE, + dataPointType: DataPointType.GAUGE, + dataPoints: [ + { + attributes: { key1: 'value1', key2: 'value2' }, + endTime: [20, 20], + startTime: [10, 10], + value: 5.5, + }, + ], + descriptor: { + description: 'ocDescription', + name: 'ocMetricName', + type: InstrumentType.OBSERVABLE_GAUGE, + unit: 'ocUnit', + valueType: ValueType.DOUBLE, + }, + } as GaugeMetricData); + }); + + it('should drop unsupported OpenCensus GAUGE_DISTRIBUTION', () => { + const metricData = mapOcMetric({ + descriptor: { + description: 'ocDescription', + name: 'ocMetricName', + type: oc.MetricDescriptorType.GAUGE_DISTRIBUTION, + unit: 'ocUnit', + labelKeys: [ + { key: 'key1', description: '' }, + { key: 'key2', description: '' }, + ], + }, + timeseries: [ + { + startTimestamp: { seconds: 10, nanos: 10 }, + labelValues: [{ value: 'value1' }, { value: 'value2' }], + points: [{ timestamp: { seconds: 20, nanos: 20 }, value: 5 }], + }, + ], + }); + assert.deepStrictEqual(metricData, null); + }); + + it('should drop unsupported OpenCensus SUMMARY', () => { + const metricData = mapOcMetric({ + descriptor: { + description: 'ocDescription', + name: 'ocMetricName', + type: oc.MetricDescriptorType.SUMMARY, + unit: 'ocUnit', + labelKeys: [ + { key: 'key1', description: '' }, + { key: 'key2', description: '' }, + ], + }, + timeseries: [ + { + startTimestamp: { seconds: 10, nanos: 10 }, + labelValues: [{ value: 'value1' }, { value: 'value2' }], + points: [ + { + timestamp: { seconds: 20, nanos: 20 }, + value: { count: 5, sum: 10 }, + }, + ], + }, + ], + }); + assert.deepStrictEqual(metricData, null); + }); +}); diff --git a/experimental/packages/shim-opencensus/test/transform.test.ts b/experimental/packages/shim-opencensus/test/trace-transform.test.ts similarity index 98% rename from experimental/packages/shim-opencensus/test/transform.test.ts rename to experimental/packages/shim-opencensus/test/trace-transform.test.ts index 9a7f90cda05..6aacd5e951d 100644 --- a/experimental/packages/shim-opencensus/test/transform.test.ts +++ b/experimental/packages/shim-opencensus/test/trace-transform.test.ts @@ -19,14 +19,14 @@ import { mapSpanContext, mapSpanKind, reverseMapSpanContext, -} from '../src/transform'; +} from '../src/trace-transform'; import * as oc from '@opencensus/core'; import { SpanKind } from '@opentelemetry/api'; import { TraceState } from '@opentelemetry/core'; import * as assert from 'assert'; -describe('transform', () => { +describe('trace-transform', () => { describe('mapSpanKind', () => { it('should return undefined with undefined input', () => { assert.strictEqual(mapSpanKind(undefined), undefined); diff --git a/experimental/packages/shim-opencensus/tsconfig.json b/experimental/packages/shim-opencensus/tsconfig.json index 91cebb5ad54..145dd31760d 100644 --- a/experimental/packages/shim-opencensus/tsconfig.json +++ b/experimental/packages/shim-opencensus/tsconfig.json @@ -18,8 +18,14 @@ { "path": "../../../packages/opentelemetry-core" }, + { + "path": "../../../packages/opentelemetry-resources" + }, { "path": "../../../packages/opentelemetry-sdk-trace-base" + }, + { + "path": "../../../packages/sdk-metrics" } ] } From 30d1fcac786ff1cde6dd0b8dee6f58adf5e147bc Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 15 Sep 2023 06:59:39 +0200 Subject: [PATCH 65/70] chore(deps): update all patch versions (#4147) --- experimental/packages/exporter-logs-otlp-grpc/package.json | 2 +- experimental/packages/exporter-logs-otlp-http/package.json | 2 +- experimental/packages/exporter-logs-otlp-proto/package.json | 2 +- experimental/packages/exporter-trace-otlp-grpc/package.json | 2 +- experimental/packages/exporter-trace-otlp-http/package.json | 2 +- experimental/packages/exporter-trace-otlp-proto/package.json | 2 +- .../packages/opentelemetry-browser-detector/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-http/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-proto/package.json | 2 +- .../packages/opentelemetry-instrumentation-fetch/package.json | 2 +- .../packages/opentelemetry-instrumentation-grpc/package.json | 2 +- .../packages/opentelemetry-instrumentation-http/package.json | 2 +- .../package.json | 2 +- .../packages/opentelemetry-instrumentation/package.json | 4 ++-- experimental/packages/opentelemetry-sdk-node/package.json | 2 +- experimental/packages/otlp-exporter-base/package.json | 2 +- experimental/packages/otlp-grpc-exporter-base/package.json | 2 +- experimental/packages/otlp-proto-exporter-base/package.json | 2 +- experimental/packages/sdk-logs/package.json | 2 +- packages/opentelemetry-context-zone-peer-dep/package.json | 2 +- packages/opentelemetry-context-zone/package.json | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- packages/opentelemetry-sdk-trace-node/package.json | 2 +- packages/opentelemetry-sdk-trace-web/package.json | 2 +- packages/sdk-metrics/package.json | 2 +- selenium-tests/package.json | 2 +- 27 files changed, 28 insertions(+), 28 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index 442b003c736..3f08acb3709 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.6.0", "@opentelemetry/api-logs": "0.43.0", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 04ed15daf36..57f0aeed832 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -71,7 +71,7 @@ ], "sideEffects": false, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@opentelemetry/resources": "1.17.0", "@types/mocha": "10.0.1", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 742db91b54d..25de11cf269 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 8267c2da210..bcfcd3ae94d 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.6.0", "@opentelemetry/otlp-exporter-base": "0.43.0", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 16a64b9c9fa..d5a1713205e 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index 5bc540da394..9214b7f84c2 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -62,7 +62,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 8a96ab3a763..67330ddca3c 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index a6adb42c936..74985a4766c 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 2fc757eb1c4..46e60ea29e4 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index fa2c674ceac..92c799b26b6 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 009aea12402..4c155d752b4 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@opentelemetry/context-zone": "1.17.0", "@opentelemetry/propagator-b3": "1.17.0", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 2845904d95e..fbf07ae7161 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -59,7 +59,7 @@ "@protobuf-ts/runtime-rpc": "2.9.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/semver": "7.5.1", + "@types/semver": "7.5.2", "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 91ce71b6344..aebe37781de 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -53,7 +53,7 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/request-promise-native": "1.0.18", - "@types/semver": "7.5.1", + "@types/semver": "7.5.2", "@types/sinon": "10.0.16", "@types/superagent": "4.1.18", "axios": "1.5.0", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 1dc318d3269..41c42d1fdce 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@opentelemetry/context-zone": "1.17.0", "@opentelemetry/propagator-b3": "1.17.0", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 99a6d83016e..589aa1039e9 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -81,12 +81,12 @@ "@opentelemetry/api": "^1.3.0" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@opentelemetry/sdk-metrics": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/semver": "7.5.1", + "@types/semver": "7.5.2", "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 70a423c79a2..8517a076172 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -69,7 +69,7 @@ "@opentelemetry/exporter-jaeger": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/semver": "7.5.1", + "@types/semver": "7.5.2", "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 9e47068c281..9bfde78d9d3 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -64,7 +64,7 @@ "@opentelemetry/core": "1.17.0" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 963fbe9fa40..81c8c4c30f0 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@opentelemetry/otlp-transformer": "0.43.0", "@opentelemetry/resources": "1.17.0", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index 5ba695faee6..5335765695d 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -59,7 +59,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index fc388cad021..8d783b481b1 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -72,7 +72,7 @@ "@opentelemetry/api-logs": ">=0.39.1" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": ">=1.4.0 <1.7.0", "@opentelemetry/api-logs": "0.43.0", "@types/mocha": "10.0.1", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 477cf0d75df..addc0bc3887 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": ">=1.0.0 <1.7.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index d716738c529..b61d91650eb 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -50,7 +50,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 942a9ee6f5a..f5b62186030 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -60,7 +60,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": "^1.0.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index 9d7dfbbc9c9..0bdcc4a090e 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -50,7 +50,7 @@ "@opentelemetry/semantic-conventions": "1.17.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/semver": "7.5.1", + "@types/semver": "7.5.2", "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index a1c9939a0b6..7d467a09b43 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -55,7 +55,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": ">=1.0.0 <1.7.0", "@opentelemetry/context-zone": "1.17.0", "@opentelemetry/propagator-b3": "1.17.0", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index dd7963f1c8c..d61505660ae 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@opentelemetry/api": ">=1.3.0 <1.7.0", "@types/lodash.merge": "4.6.7", "@types/mocha": "10.0.1", diff --git a/selenium-tests/package.json b/selenium-tests/package.json index a05172df31c..31456eb93ac 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -31,7 +31,7 @@ "access": "restricted" }, "devDependencies": { - "@babel/core": "7.22.17", + "@babel/core": "7.22.19", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-decorators": "7.22.15", "@babel/plugin-transform-runtime": "7.22.15", From f038b44fe9e41eefa74d1d07a62875979bdf33e2 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 18 Sep 2023 13:57:30 +0200 Subject: [PATCH 66/70] chore(deps): update all patch versions (#4152) --- experimental/packages/exporter-logs-otlp-grpc/package.json | 2 +- experimental/packages/exporter-logs-otlp-http/package.json | 2 +- experimental/packages/exporter-logs-otlp-proto/package.json | 2 +- experimental/packages/exporter-trace-otlp-grpc/package.json | 2 +- experimental/packages/exporter-trace-otlp-http/package.json | 2 +- experimental/packages/exporter-trace-otlp-proto/package.json | 2 +- .../packages/opentelemetry-browser-detector/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-http/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-proto/package.json | 2 +- .../packages/opentelemetry-instrumentation-fetch/package.json | 2 +- .../package.json | 2 +- .../packages/opentelemetry-instrumentation/package.json | 2 +- experimental/packages/otlp-exporter-base/package.json | 2 +- experimental/packages/otlp-grpc-exporter-base/package.json | 2 +- experimental/packages/otlp-proto-exporter-base/package.json | 2 +- experimental/packages/sdk-logs/package.json | 2 +- packages/opentelemetry-context-zone-peer-dep/package.json | 2 +- packages/opentelemetry-context-zone/package.json | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- packages/opentelemetry-sdk-trace-web/package.json | 4 ++-- packages/sdk-metrics/package.json | 2 +- selenium-tests/package.json | 4 ++-- 23 files changed, 25 insertions(+), 25 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index 3f08acb3709..82146ce4398 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.6.0", "@opentelemetry/api-logs": "0.43.0", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 57f0aeed832..05b217da2d0 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -71,7 +71,7 @@ ], "sideEffects": false, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@opentelemetry/resources": "1.17.0", "@types/mocha": "10.0.1", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 25de11cf269..4aa74b7eb26 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index bcfcd3ae94d..80c2ea3a0c9 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.6.0", "@opentelemetry/otlp-exporter-base": "0.43.0", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index d5a1713205e..cfc2522a53c 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index 9214b7f84c2..935b79963fc 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -62,7 +62,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 67330ddca3c..d983979a06e 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 74985a4766c..3c316d301f8 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 46e60ea29e4..8db6655f592 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -63,7 +63,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 92c799b26b6..700e4ccb202 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -47,7 +47,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 4c155d752b4..948b357d5a1 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@opentelemetry/context-zone": "1.17.0", "@opentelemetry/propagator-b3": "1.17.0", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 41c42d1fdce..511f4fe3e00 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@opentelemetry/context-zone": "1.17.0", "@opentelemetry/propagator-b3": "1.17.0", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 589aa1039e9..ca9e9df4e8f 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -81,7 +81,7 @@ "@opentelemetry/api": "^1.3.0" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@opentelemetry/sdk-metrics": "1.17.0", "@types/mocha": "10.0.1", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 9bfde78d9d3..79813658421 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -64,7 +64,7 @@ "@opentelemetry/core": "1.17.0" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 81c8c4c30f0..cfa48c56e85 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -48,7 +48,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@opentelemetry/otlp-transformer": "0.43.0", "@opentelemetry/resources": "1.17.0", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index 5335765695d..d350c263f6d 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -59,7 +59,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 8d783b481b1..f35a643c077 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -72,7 +72,7 @@ "@opentelemetry/api-logs": ">=0.39.1" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": ">=1.4.0 <1.7.0", "@opentelemetry/api-logs": "0.43.0", "@types/mocha": "10.0.1", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index addc0bc3887..0a673ab4808 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -53,7 +53,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": ">=1.0.0 <1.7.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index b61d91650eb..76adff95781 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -50,7 +50,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index f5b62186030..681d997e340 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -60,7 +60,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": "^1.0.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 7d467a09b43..ebbf2a4025e 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -55,12 +55,12 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": ">=1.0.0 <1.7.0", "@opentelemetry/context-zone": "1.17.0", "@opentelemetry/propagator-b3": "1.17.0", "@opentelemetry/resources": "1.17.0", - "@types/jquery": "3.5.18", + "@types/jquery": "3.5.19", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.16", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index d61505660ae..3d4f5b299e1 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -54,7 +54,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@opentelemetry/api": ">=1.3.0 <1.7.0", "@types/lodash.merge": "4.6.7", "@types/mocha": "10.0.1", diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 31456eb93ac..9592f050ded 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -31,11 +31,11 @@ "access": "restricted" }, "devDependencies": { - "@babel/core": "7.22.19", + "@babel/core": "7.22.20", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-decorators": "7.22.15", "@babel/plugin-transform-runtime": "7.22.15", - "@babel/preset-env": "7.22.15", + "@babel/preset-env": "7.22.20", "@opentelemetry/api": "^1.0.0", "babel-loader": "8.3.0", "babel-polyfill": "6.26.0", From ed27a3767883908cdc0a1a050af1f276c162c8ba Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 18 Sep 2023 16:10:30 +0200 Subject: [PATCH 67/70] chore(deps): update dependency eslint-config-prettier to v9 (#4042) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c1b6fc02803..fb734e564d5 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@typescript-eslint/eslint-plugin": "5.59.11", "@typescript-eslint/parser": "5.59.11", "eslint": "8.44.0", - "eslint-config-prettier": "8.5.0", + "eslint-config-prettier": "9.0.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "5.0.0", From be1627267f6dbba895879a40b79d92011e2d5499 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Mon, 18 Sep 2023 17:30:52 +0200 Subject: [PATCH 68/70] feat(exporter-metrics-otlp-proto): add esm build (#4099) --- experimental/CHANGELOG.md | 8 +++- .../package.json | 16 ++++++-- .../tsconfig.esm.json | 37 +++++++++++++++++++ .../tsconfig.esnext.json | 37 +++++++++++++++++++ tsconfig.esm.json | 3 ++ tsconfig.esnext.json | 3 ++ 6 files changed, 98 insertions(+), 6 deletions(-) create mode 100644 experimental/packages/opentelemetry-exporter-metrics-otlp-proto/tsconfig.esm.json create mode 100644 experimental/packages/opentelemetry-exporter-metrics-otlp-proto/tsconfig.esnext.json diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index e03d24e8d3d..24f36df117a 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -9,9 +9,15 @@ All notable changes to experimental packages in this project will be documented ### :boom: Breaking Change * fix(exporter-logs-otlp-proto): change OTLPLogExporter to OTLPLogExporter [#4140](https://github.com/open-telemetry/opentelemetry-js/pull/4140) @Vunovati +* fix(sdk-node): remove explicit dependency on @opentelemetry/exporter-jaeger + * '@opentelemetry/exporter-jaeger' is no longer be a dependency of this package. To continue using '@opentelemetry/exporter-jaeger', please install it manually. + * NOTE: `@opentelemetry/exporter-jaeger` is deprecated, consider switching to one of the alternatives described [here](https://www.npmjs.com/package/@opentelemetry/exporter-jaeger) ### :rocket: (Enhancement) +* feat(exporter-metrics-otlp-proto): add esm build [#4099](https://github.com/open-telemetry/opentelemetry-js/pull/4099) @pichlermarc +* feat(opencensus-shim): implement OpenCensus metric producer [#4066](https://github.com/open-telemetry/opentelemetry-js/pull/4066) @aabmass + ### :bug: (Bug Fix) ### :books: (Refine Doc) @@ -44,12 +50,10 @@ All notable changes to experimental packages in this project will be documented ### :rocket: (Enhancement) * feat: update PeriodicExportingMetricReader and PrometheusExporter to accept optional metric producers [#4077](https://github.com/open-telemetry/opentelemetry-js/pull/4077) @aabmass -* feat(opencensus-shim): implement OpenCensus metric producer [#4066](https://github.com/open-telemetry/opentelemetry-js/pull/4066) @aabmass ### :bug: (Bug Fix) * fix(exporter-logs-otlp-http): add @opentelemetry/api-logs as dependency -* fix(sdk-node): remove explicit dependency on @opentelemetry/exporter-jaeger. ## 0.41.2 diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 700e4ccb202..52ce8df0a2c 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -3,18 +3,20 @@ "version": "0.43.0", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", + "module": "build/esm/index.js", + "esnext": "build/esnext/index.js", "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { "prepublishOnly": "npm run compile", - "compile": "tsc --build", - "clean": "tsc --build --clean", + "compile": "tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", + "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "eslint . --ext .ts --fix", "tdd": "npm run test -- --watch-extensions ts --watch", - "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", + "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", "version": "node ../../../scripts/version-update.js", - "watch": "tsc -w", + "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "npm run precompile", "peer-api-check": "node ../../../scripts/peer-api-check.js", @@ -35,6 +37,12 @@ "node": ">=14" }, "files": [ + "build/esm/**/*.js", + "build/esm/**/*.js.map", + "build/esm/**/*.d.ts", + "build/esnext/**/*.js", + "build/esnext/**/*.js.map", + "build/esnext/**/*.d.ts", "build/src/**/*.js", "build/src/**/*.js.map", "build/src/**/*.d.ts", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/tsconfig.esm.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/tsconfig.esm.json new file mode 100644 index 00000000000..b657f54211b --- /dev/null +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/tsconfig.esm.json @@ -0,0 +1,37 @@ +{ + "extends": "../../../tsconfig.base.esm.json", + "compilerOptions": { + "outDir": "build/esm", + "rootDir": "src", + "tsBuildInfoFile": "build/esm/tsconfig.esm.tsbuildinfo" + }, + "include": [ + "src/**/*.ts" + ], + "references": [ + { + "path": "../../../api" + }, + { + "path": "../../../packages/opentelemetry-core" + }, + { + "path": "../../../packages/opentelemetry-resources" + }, + { + "path": "../../../packages/sdk-metrics" + }, + { + "path": "../opentelemetry-exporter-metrics-otlp-http" + }, + { + "path": "../otlp-exporter-base" + }, + { + "path": "../otlp-proto-exporter-base" + }, + { + "path": "../otlp-transformer" + } + ] +} diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/tsconfig.esnext.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/tsconfig.esnext.json new file mode 100644 index 00000000000..31e46faedaf --- /dev/null +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/tsconfig.esnext.json @@ -0,0 +1,37 @@ +{ + "extends": "../../../tsconfig.base.esnext.json", + "compilerOptions": { + "outDir": "build/esnext", + "rootDir": "src", + "tsBuildInfoFile": "build/esnext/tsconfig.esnext.tsbuildinfo" + }, + "include": [ + "src/**/*.ts" + ], + "references": [ + { + "path": "../../../api" + }, + { + "path": "../../../packages/opentelemetry-core" + }, + { + "path": "../../../packages/opentelemetry-resources" + }, + { + "path": "../../../packages/sdk-metrics" + }, + { + "path": "../opentelemetry-exporter-metrics-otlp-http" + }, + { + "path": "../otlp-exporter-base" + }, + { + "path": "../otlp-proto-exporter-base" + }, + { + "path": "../otlp-transformer" + } + ] +} diff --git a/tsconfig.esm.json b/tsconfig.esm.json index 2fec210b9af..29491b46efa 100644 --- a/tsconfig.esm.json +++ b/tsconfig.esm.json @@ -29,6 +29,9 @@ { "path": "experimental/packages/opentelemetry-exporter-metrics-otlp-http/tsconfig.esm.json" }, + { + "path": "experimental/packages/opentelemetry-exporter-metrics-otlp-proto/tsconfig.esm.json" + }, { "path": "experimental/packages/opentelemetry-instrumentation/tsconfig.esm.json" }, diff --git a/tsconfig.esnext.json b/tsconfig.esnext.json index c5970c9c5c2..031a2e56091 100644 --- a/tsconfig.esnext.json +++ b/tsconfig.esnext.json @@ -29,6 +29,9 @@ { "path": "experimental/packages/opentelemetry-exporter-metrics-otlp-http/tsconfig.esnext.json" }, + { + "path": "experimental/packages/opentelemetry-exporter-metrics-otlp-proto/tsconfig.esnext.json" + }, { "path": "experimental/packages/opentelemetry-instrumentation/tsconfig.esnext.json" }, From cbc5c520850ef8ab8280fcfb742294f23bc3f3a7 Mon Sep 17 00:00:00 2001 From: Aaron Abbott Date: Tue, 19 Sep 2023 05:07:26 -0400 Subject: [PATCH 69/70] docs: update OpenCensus shim example for metrics (#4078) --- .../examples/opencensus-shim/README.md | 10 ++++ .../opencensus-shim/images/prom-metrics.png | Bin 0 -> 922020 bytes .../examples/opencensus-shim/package.json | 3 ++ .../examples/opencensus-shim/server.js | 2 + .../examples/opencensus-shim/setup.js | 49 ++++++++++++++---- .../packages/shim-opencensus/README.md | 23 +++++++- 6 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 experimental/examples/opencensus-shim/images/prom-metrics.png diff --git a/experimental/examples/opencensus-shim/README.md b/experimental/examples/opencensus-shim/README.md index 0738d67d893..6d95a91356e 100644 --- a/experimental/examples/opencensus-shim/README.md +++ b/experimental/examples/opencensus-shim/README.md @@ -9,6 +9,8 @@ The example has: - Root Spans (on client), instrumented with OpenCensus's HTTP instrumentation - Child Span from a remote parent (on server), instrumented with OpenCensus's HTTP instrumentation - Another Child Span created in the server representing some work being done, instrumented manually with OpenTelemetry. +- Server metrics coming from OpenCensus's HTTP instrumentation, available through the +OpenTelemetry's Prometheus exporter. ## Installation @@ -64,6 +66,14 @@ Go to Jaeger with your browser and click on the "Servi

    +## Check the Prometheus metrics + +Load the Prometheus metrics endpoint of the server at in your +browser. You should see the `opencensus_io_http_server_*` related metrics in +the output. + +

    + ## Useful links - For more information on OpenTelemetry, visit: diff --git a/experimental/examples/opencensus-shim/images/prom-metrics.png b/experimental/examples/opencensus-shim/images/prom-metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..953e12253da9212001e5c302426132d003392c49 GIT binary patch literal 922020 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

    ?pOhNA{h^~jn>qSu)Edl|w9_ZJI%iLm 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

    5g^= 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

    _U= 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­EoiWmxCyr{XL*WiAnQsGkXa; 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ëU%zroJTc@imEeeYa$*`+G@2jZ(F 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

    7?*2q;L0~l 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%0DWhbExo5OsptLow;a7$L&Ot+V} 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 E0KExGBme*a literal 0 HcmV?d00001 diff --git a/experimental/examples/opencensus-shim/package.json b/experimental/examples/opencensus-shim/package.json index d8615a6b744..bd97c726c1e 100644 --- a/experimental/examples/opencensus-shim/package.json +++ b/experimental/examples/opencensus-shim/package.json @@ -28,10 +28,13 @@ }, "dependencies": { "@opencensus/core": "0.1.0", + "@opencensus/instrumentation-http": "0.1.0", "@opencensus/nodejs-base": "0.1.0", "@opentelemetry/api": "1.6.0", + "@opentelemetry/exporter-prometheus": "0.43.0", "@opentelemetry/exporter-trace-otlp-grpc": "0.43.0", "@opentelemetry/resources": "1.17.0", + "@opentelemetry/sdk-metrics": "1.17.0", "@opentelemetry/sdk-trace-node": "1.17.0", "@opentelemetry/semantic-conventions": "1.17.0", "@opentelemetry/shim-opencensus": "0.43.0" diff --git a/experimental/examples/opencensus-shim/server.js b/experimental/examples/opencensus-shim/server.js index 98ddcf5b60a..00893bafe99 100644 --- a/experimental/examples/opencensus-shim/server.js +++ b/experimental/examples/opencensus-shim/server.js @@ -5,6 +5,8 @@ const setup = require('./setup'); const utils = require('./utils'); const { trace } = require('@opentelemetry/api'); +const oc = require('@opencensus/core'); + setup('opencensus-shim-example-server'); const http = require('http'); diff --git a/experimental/examples/opencensus-shim/setup.js b/experimental/examples/opencensus-shim/setup.js index 37206971e7c..99bf8bf8b44 100644 --- a/experimental/examples/opencensus-shim/setup.js +++ b/experimental/examples/opencensus-shim/setup.js @@ -15,37 +15,64 @@ */ 'use strict'; -const { DiagConsoleLogger, diag, DiagLogLevel } = require('@opentelemetry/api'); +const { diag, metrics } = require('@opentelemetry/api'); const { NodeTracerProvider, BatchSpanProcessor, } = require('@opentelemetry/sdk-trace-node'); +const { MeterProvider } = require('@opentelemetry/sdk-metrics'); const { OTLPTraceExporter, } = require('@opentelemetry/exporter-trace-otlp-grpc'); +const { PrometheusExporter } = require('@opentelemetry/exporter-prometheus'); const { Resource } = require('@opentelemetry/resources'); const { SemanticResourceAttributes, } = require('@opentelemetry/semantic-conventions'); +const { OpenCensusMetricProducer } = require('@opentelemetry/shim-opencensus'); +const instrumentationHttp = require('@opencensus/instrumentation-http'); +const { TracingBase } = require('@opencensus/nodejs-base'); +const oc = require('@opencensus/core'); module.exports = function setup(serviceName) { - const tracing = require('@opencensus/nodejs-base'); + /** + * You can alternatively just use the @opentelemetry/nodejs package directly: + * + * ```js + * const tracing = require('@opencensus/nodejs'); + * ``` + */ + const tracing = new TracingBase(['http']); + tracing.tracer = new oc.CoreTracer(); - diag.setLogger(new DiagConsoleLogger(), { logLevel: DiagLogLevel.ALL }); - const provider = new NodeTracerProvider({ - resource: new Resource({ - [SemanticResourceAttributes.SERVICE_NAME]: serviceName, - }), + const resource = new Resource({ + [SemanticResourceAttributes.SERVICE_NAME]: serviceName, }); - provider.addSpanProcessor( + const tracerProvider = new NodeTracerProvider({ resource }); + tracerProvider.addSpanProcessor( new BatchSpanProcessor(new OTLPTraceExporter(), { scheduledDelayMillis: 5000, }) ); - provider.register(); + tracerProvider.register(); + + const meterProvider = new MeterProvider({ resource }); + meterProvider.addMetricReader( + new PrometheusExporter({ + metricProducers: [ + new OpenCensusMetricProducer({ + openCensusMetricProducerManager: + oc.Metrics.getMetricProducerManager(), + }), + ], + }) + ); + metrics.setGlobalMeterProvider(meterProvider); // Start OpenCensus tracing - tracing.start({ samplingRate: 1, logger: diag }); + tracing.start({ samplingRate: 1, logger: diag, stats: oc.globalStats }); + // Register OpenCensus HTTP stats views + instrumentationHttp.registerAllViews(oc.globalStats); - return provider; + return tracerProvider; }; diff --git a/experimental/packages/shim-opencensus/README.md b/experimental/packages/shim-opencensus/README.md index e79cfc0f439..66e4d6e3d75 100644 --- a/experimental/packages/shim-opencensus/README.md +++ b/experimental/packages/shim-opencensus/README.md @@ -13,11 +13,11 @@ More details are available in the [OpenCensus Compatibility Specification](https npm install --save @opentelemetry/shim-opencensus ``` -## Usage +## Tracing usage ### Installing the shim's require-in-the-middle hook -This is the recommended way to use the shim. +This is the recommended way to use the shim for tracing. This package provides a `require-in-the-middle` hook which replaces OpenCensus's `CoreTracer` class with a shim implementation that writes to the OpenTelemetry API. This will cause all @@ -72,6 +72,25 @@ tracer.startRootSpan({name: 'main'}, rootSpan => { }); ``` +## Metrics usage + +OpenCensus metrics can be collected and sent to an OpenTelemetry exporter by providing the +`OpenCensusMetricProducer` to your `MetricReader`. For example, to export OpenCensus metrics +through the OpenTelemetry Prometheus exporter: + +```js +meterProvider.addMetricReader( + new PrometheusExporter({ + metricProducers: [ + new OpenCensusMetricProducer({ + openCensusMetricProducerManager: + oc.Metrics.getMetricProducerManager(), + }), + ], + }) +); +``` + ## Example See [examples/opencensus-shim](https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/opencensus-shim) for a short example. From 1a8652aa5466510d2df2a232a0c8aa78857619c4 Mon Sep 17 00:00:00 2001 From: Martin Kuba Date: Tue, 19 Sep 2023 07:39:10 -0700 Subject: [PATCH 70/70] Introduce benchmark tests (#4105) Co-authored-by: Marc Pichler --- CHANGELOG.md | 2 + package.json | 2 + .../opentelemetry-sdk-trace-base/package.json | 1 + .../test/performance/benchmark/index.js | 17 ++++++++ .../test/performance/benchmark/span.js | 43 +++++++++++++++++++ 5 files changed, 65 insertions(+) create mode 100644 packages/opentelemetry-sdk-trace-base/test/performance/benchmark/index.js create mode 100644 packages/opentelemetry-sdk-trace-base/test/performance/benchmark/span.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c48f21a6eb..53987c41696 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :house: (Internal) +* test: added a performance benchmark test for span creation [#4105](https://github.com/open-telemetry/opentelemetry-js/pull/4105) + ## 1.17.0 ### :bug: (Bug Fix) diff --git a/package.json b/package.json index fb734e564d5..6d5460207d7 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "test:browser": "lerna run test:browser", "test:webworker": "lerna run test:webworker", "test:backcompat": "lerna run test:backcompat", + "test:bench": "lerna run test:bench", "bootstrap": "lerna bootstrap --hoist --nohoist='zone.js'", "changelog": "lerna-changelog", "codecov": "lerna run codecov", @@ -65,6 +66,7 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "5.59.11", "@typescript-eslint/parser": "5.59.11", + "benchmark": "2.1.4", "eslint": "8.44.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-header": "3.1.1", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 77e7a64c28e..600caa4294f 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -20,6 +20,7 @@ "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", "test:browser": "karma start --single-run", "test:webworker": "karma start karma.worker.js --single-run", + "test:bench": "node test/performance/benchmark/index.js", "tdd": "npm run tdd:node", "tdd:node": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", diff --git a/packages/opentelemetry-sdk-trace-base/test/performance/benchmark/index.js b/packages/opentelemetry-sdk-trace-base/test/performance/benchmark/index.js new file mode 100644 index 00000000000..83558ea01f4 --- /dev/null +++ b/packages/opentelemetry-sdk-trace-base/test/performance/benchmark/index.js @@ -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. + */ + +require('./span'); diff --git a/packages/opentelemetry-sdk-trace-base/test/performance/benchmark/span.js b/packages/opentelemetry-sdk-trace-base/test/performance/benchmark/span.js new file mode 100644 index 00000000000..ac978a61406 --- /dev/null +++ b/packages/opentelemetry-sdk-trace-base/test/performance/benchmark/span.js @@ -0,0 +1,43 @@ +/* + * 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. + */ + +const Benchmark = require('benchmark'); +const { BasicTracerProvider } = require('../../../build/src'); + +const tracerProvider = new BasicTracerProvider(); +const tracer = tracerProvider.getTracer('test') + +const suite = new Benchmark.Suite(); + +suite.on('cycle', event => { + console.log(String(event.target)); +}); + +suite.add('create spans (10 attributes)', function() { + const span = tracer.startSpan('span'); + span.setAttribute('aaaaaaaaaaaaaaaaaaaa', 'aaaaaaaaaaaaaaaaaaaa'); + span.setAttribute('bbbbbbbbbbbbbbbbbbbb', 'aaaaaaaaaaaaaaaaaaaa'); + span.setAttribute('cccccccccccccccccccc', 'aaaaaaaaaaaaaaaaaaaa'); + span.setAttribute('dddddddddddddddddddd', 'aaaaaaaaaaaaaaaaaaaa'); + span.setAttribute('eeeeeeeeeeeeeeeeeeee', 'aaaaaaaaaaaaaaaaaaaa'); + span.setAttribute('ffffffffffffffffffff', 'aaaaaaaaaaaaaaaaaaaa'); + span.setAttribute('gggggggggggggggggggg', 'aaaaaaaaaaaaaaaaaaaa'); + span.setAttribute('hhhhhhhhhhhhhhhhhhhh', 'aaaaaaaaaaaaaaaaaaaa'); + span.setAttribute('iiiiiiiiiiiiiiiiiiii', 'aaaaaaaaaaaaaaaaaaaa'); + span.setAttribute('jjjjjjjjjjjjjjjjjjjj', 'aaaaaaaaaaaaaaaaaaaa'); +}); + +suite.run();