From edebbcc757535bc88f01340409dbbecc0bb6ccf8 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 6 Jun 2023 07:13:04 +0200 Subject: [PATCH 001/141] chore: prepare release 1.14 / 0.40 (#3854) Co-authored-by: Daniel Dyla --- CHANGELOG.md | 8 +++-- examples/esm-http-ts/package.json | 2 +- 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 | 6 ++-- 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 | 12 ++++---- .../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 | 10 +++---- .../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 +++++++------- 54 files changed, 292 insertions(+), 280 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f827e31585..bab1ea9942 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,14 +11,18 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :rocket: (Enhancement) -* feat(SpanExpoter): Add optional forceFlush to SpanExporter interface [#3753](https://github.com/open-telemetry/opentelemetry-js/pull/3753/) @sgracias1 @JacksonWeber - ### :bug: (Bug Fix) ### :books: (Refine Doc) ### :house: (Internal) +## 1.14.0 + +### :rocket: (Enhancement) + +* feat(SpanExporter): Add optional forceFlush to SpanExporter interface [#3753](https://github.com/open-telemetry/opentelemetry-js/pull/3753/) @sgracias1 @JacksonWeber + ## 1.13.0 ### :rocket: (Enhancement) diff --git a/examples/esm-http-ts/package.json b/examples/esm-http-ts/package.json index 49c0e2601f..6cba2efe26 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.38.0", + "version": "0.40.0", "description": "Example of HTTP integration with OpenTelemetry using ESM and TypeScript", "main": "build/index.js", "type": "module", diff --git a/examples/http/package.json b/examples/http/package.json index e06dd1af2f..a48f8e2c1b 100644 --- a/examples/http/package.json +++ b/examples/http/package.json @@ -1,7 +1,7 @@ { "name": "http-example", "private": true, - "version": "0.39.1", + "version": "0.40.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.13.0", - "@opentelemetry/exporter-zipkin": "1.13.0", - "@opentelemetry/instrumentation": "0.39.1", - "@opentelemetry/instrumentation-http": "0.39.1", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", - "@opentelemetry/sdk-trace-node": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.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" }, "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 62b65273f2..2a63c724c9 100644 --- a/examples/https/package.json +++ b/examples/https/package.json @@ -1,7 +1,7 @@ { "name": "https-example", "private": true, - "version": "0.39.1", + "version": "0.40.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.13.0", - "@opentelemetry/exporter-zipkin": "1.13.0", - "@opentelemetry/instrumentation": "0.39.1", - "@opentelemetry/instrumentation-http": "0.39.1", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", - "@opentelemetry/sdk-trace-node": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.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" }, "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 c4c75e460c..c9afb00edd 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.39.1", + "version": "0.40.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.13.0", - "@opentelemetry/core": "1.13.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.39.1", - "@opentelemetry/exporter-trace-otlp-http": "0.39.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.39.1", - "@opentelemetry/exporter-zipkin": "1.13.0", - "@opentelemetry/instrumentation": "0.39.1", - "@opentelemetry/instrumentation-fetch": "0.39.1", - "@opentelemetry/instrumentation-xml-http-request": "0.39.1", - "@opentelemetry/propagator-b3": "1.13.0", - "@opentelemetry/sdk-metrics": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", - "@opentelemetry/sdk-trace-web": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.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" }, "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 c19ae9ea59..bb5fa25136 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.39.1", + "version": "0.40.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.13.0", - "@opentelemetry/exporter-metrics-otlp-grpc": "0.39.1", - "@opentelemetry/exporter-metrics-otlp-http": "0.39.1", - "@opentelemetry/exporter-metrics-otlp-proto": "0.39.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.39.1", - "@opentelemetry/exporter-trace-otlp-http": "0.39.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.39.1", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-metrics": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.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" }, "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 4935d9b83b..ff64e920fd 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -6,6 +6,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.40.0 + +### :boom: Breaking Change + * fix(exporter-logs-otlp-grpc): change OTLPLogsExporter to OTLPLogExporter [#3819](https://github.com/open-telemetry/opentelemetry-js/pull/3819) @fuaiyi * chore(instrumentation-grpc): add 'grpc' deprecation notice postinstall script [#3833](https://github.com/open-telemetry/opentelemetry-js/pull/3833) @pichlermarc * Support for telemetry generation for the [`grpc`](https://www.npmjs.com/package/grpc) module will be dropped in the next release as the package has been @@ -26,10 +38,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 -### :books: (Refine Doc) - -### :house: (Internal) - ## 0.39.1 ### :bug: (Bug Fix) diff --git a/experimental/backwards-compatability/node14/package.json b/experimental/backwards-compatability/node14/package.json index fb30bd3215..f858e7782f 100644 --- a/experimental/backwards-compatability/node14/package.json +++ b/experimental/backwards-compatability/node14/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node14", - "version": "0.39.1", + "version": "0.40.0", "private": true, "description": "Backwards compatability 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.39.1", - "@opentelemetry/sdk-trace-base": "1.13.0" + "@opentelemetry/sdk-node": "0.40.0", + "@opentelemetry/sdk-trace-base": "1.14.0" }, "devDependencies": { "@types/node": "14.18.25", diff --git a/experimental/backwards-compatability/node16/package.json b/experimental/backwards-compatability/node16/package.json index bf74118063..8f5723c52d 100644 --- a/experimental/backwards-compatability/node16/package.json +++ b/experimental/backwards-compatability/node16/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node16", - "version": "0.39.1", + "version": "0.40.0", "private": true, "description": "Backwards compatability 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.39.1", - "@opentelemetry/sdk-trace-base": "1.13.0" + "@opentelemetry/sdk-node": "0.40.0", + "@opentelemetry/sdk-trace-base": "1.14.0" }, "devDependencies": { "@types/node": "16.11.52", diff --git a/experimental/examples/logs/package.json b/experimental/examples/logs/package.json index 3e10700d19..0df41c352f 100644 --- a/experimental/examples/logs/package.json +++ b/experimental/examples/logs/package.json @@ -1,14 +1,14 @@ { "name": "logs-example", - "version": "0.2.0", + "version": "0.40.0", "private": true, "scripts": { "start": "ts-node index.ts" }, "dependencies": { "@opentelemetry/api": "^1.4.1", - "@opentelemetry/api-logs": "0.39.1", - "@opentelemetry/sdk-logs": "0.39.1" + "@opentelemetry/api-logs": "0.40.0", + "@opentelemetry/sdk-logs": "0.40.0" }, "devDependencies": { "@types/node": "18.6.5", diff --git a/experimental/examples/prometheus/package.json b/experimental/examples/prometheus/package.json index d1c5cb9ce6..037e147dc9 100644 --- a/experimental/examples/prometheus/package.json +++ b/experimental/examples/prometheus/package.json @@ -1,6 +1,6 @@ { "name": "prometheus-example", - "version": "0.39.1", + "version": "0.40.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.39.1", - "@opentelemetry/sdk-metrics": "1.13.0" + "@opentelemetry/exporter-prometheus": "0.40.0", + "@opentelemetry/sdk-metrics": "1.14.0" } } diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index bc1a24a54b..696756fdee 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.39.1", + "version": "0.40.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 9143ef36d0..73bc979376 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.39.1", + "version": "0.40.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 99cb19287e..d5be8c217b 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.39.1", + "version": "0.40.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.16.0", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/api-logs": "0.39.1", - "@opentelemetry/otlp-exporter-base": "0.39.1", - "@opentelemetry/resources": "1.13.0", + "@opentelemetry/api-logs": "0.40.0", + "@opentelemetry/otlp-exporter-base": "0.40.0", + "@opentelemetry/resources": "1.14.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/sinon": "10.0.13", @@ -71,10 +71,10 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.13.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.39.1", - "@opentelemetry/otlp-transformer": "0.39.1", - "@opentelemetry/sdk-logs": "0.39.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" }, "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 b6f4808b42..153f941b51 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.39.1", + "version": "0.40.0", "publishConfig": { "access": "public" }, @@ -72,7 +72,7 @@ "sideEffects": false, "devDependencies": { "@babel/core": "7.16.0", - "@opentelemetry/api-logs": ">=0.38.0", + "@opentelemetry/api-logs": "0.40.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/sinon": "10.0.13", @@ -101,9 +101,9 @@ "@opentelemetry/api-logs": ">=0.38.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/otlp-exporter-base": "0.39.1", - "@opentelemetry/otlp-transformer": "0.39.1", - "@opentelemetry/sdk-logs": "0.39.1" + "@opentelemetry/core": "1.14.0", + "@opentelemetry/otlp-exporter-base": "0.40.0", + "@opentelemetry/otlp-transformer": "0.40.0", + "@opentelemetry/sdk-logs": "0.40.0" } } diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 016ec13486..9b32258ec5 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.39.1", + "version": "0.40.0", "description": "An OTLP exporter to send logs using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -81,14 +81,14 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/otlp-transformer": "0.39.1", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", - "@opentelemetry/api-logs": "^0.39.1", - "@opentelemetry/otlp-exporter-base": "0.39.1", - "@opentelemetry/otlp-proto-exporter-base": "0.39.1", - "@opentelemetry/sdk-logs": "^0.39.1" + "@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" }, "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 506bf706e8..6f1177cd47 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.39.1", + "version": "0.40.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.16.0", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/otlp-exporter-base": "0.39.1", + "@opentelemetry/otlp-exporter-base": "0.40.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/sinon": "10.0.13", @@ -68,11 +68,11 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.13.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.39.1", - "@opentelemetry/otlp-transformer": "0.39.1", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0" + "@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" }, "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 1c38a1fd54..33ab897993 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.39.1", + "version": "0.40.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", @@ -93,11 +93,11 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/otlp-exporter-base": "0.39.1", - "@opentelemetry/otlp-transformer": "0.39.1", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0" + "@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" }, "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 bfe610b4d2..ccbd99b1e1 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.39.1", + "version": "0.40.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", @@ -80,12 +80,12 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/otlp-exporter-base": "0.39.1", - "@opentelemetry/otlp-proto-exporter-base": "0.39.1", - "@opentelemetry/otlp-transformer": "0.39.1", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.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-trace-base": "1.14.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 fa3e4746a0..f940103b14 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.39.1", + "version": "0.40.0", "description": "OpenTelemetry Resource Detector for Browser", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -70,8 +70,8 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.0" + "@opentelemetry/resources": "1.14.0", + "@opentelemetry/semantic-conventions": "1.14.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 85b92e6fcb..245f6cddcd 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.39.1", + "version": "0.40.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", @@ -67,12 +67,12 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.13.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.39.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.39.1", - "@opentelemetry/otlp-transformer": "0.39.1", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-metrics": "1.13.0" + "@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" }, "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 7ddbd94874..25cad65a78 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.39.1", + "version": "0.40.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", @@ -93,11 +93,11 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/otlp-exporter-base": "0.39.1", - "@opentelemetry/otlp-transformer": "0.39.1", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-metrics": "1.13.0" + "@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" }, "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 d384051e56..a38a810aad 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.39.1", + "version": "0.40.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", @@ -65,13 +65,13 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.39.1", - "@opentelemetry/otlp-exporter-base": "0.39.1", - "@opentelemetry/otlp-proto-exporter-base": "0.39.1", - "@opentelemetry/otlp-transformer": "0.39.1", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-metrics": "1.13.0" + "@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" }, "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 144c4e62d8..83d386206b 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.39.1", + "version": "0.40.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.13.0", + "@opentelemetry/semantic-conventions": "1.14.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/sinon": "10.0.13", @@ -59,9 +59,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-metrics": "1.13.0" + "@opentelemetry/core": "1.14.0", + "@opentelemetry/resources": "1.14.0", + "@opentelemetry/sdk-metrics": "1.14.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 29479c7c8f..b0a32e397e 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.39.1", + "version": "0.40.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.16.0", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-zone": "1.13.0", - "@opentelemetry/propagator-b3": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", + "@opentelemetry/context-zone": "1.14.0", + "@opentelemetry/propagator-b3": "1.14.0", + "@opentelemetry/sdk-trace-base": "1.14.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/sinon": "10.0.13", @@ -86,10 +86,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/instrumentation": "0.39.1", - "@opentelemetry/sdk-trace-web": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.0" + "@opentelemetry/core": "1.14.0", + "@opentelemetry/instrumentation": "0.40.0", + "@opentelemetry/sdk-trace-web": "1.14.0", + "@opentelemetry/semantic-conventions": "1.14.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 1e63a6dd06..abe73ed1d1 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.39.1", + "version": "0.40.0", "description": "OpenTelemetry grpc automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -49,10 +49,10 @@ "@grpc/grpc-js": "^1.7.1", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.13.0", - "@opentelemetry/core": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", - "@opentelemetry/sdk-trace-node": "1.13.0", + "@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", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/semver": "7.3.9", @@ -71,8 +71,8 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/instrumentation": "0.39.1", - "@opentelemetry/semantic-conventions": "1.13.0" + "@opentelemetry/instrumentation": "0.40.0", + "@opentelemetry/semantic-conventions": "1.14.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 b46eef6a18..46c7eec6e9 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.39.1", + "version": "0.40.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.13.0", - "@opentelemetry/sdk-metrics": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", - "@opentelemetry/sdk-trace-node": "1.13.0", + "@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", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/request-promise-native": "1.0.18", @@ -72,9 +72,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/instrumentation": "0.39.1", - "@opentelemetry/semantic-conventions": "1.13.0", + "@opentelemetry/core": "1.14.0", + "@opentelemetry/instrumentation": "0.40.0", + "@opentelemetry/semantic-conventions": "1.14.0", "semver": "^7.3.5" }, "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 4bf5707caf..4177a9c354 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.39.1", + "version": "0.40.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.16.0", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-zone": "1.13.0", - "@opentelemetry/propagator-b3": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", + "@opentelemetry/context-zone": "1.14.0", + "@opentelemetry/propagator-b3": "1.14.0", + "@opentelemetry/sdk-trace-base": "1.14.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/sinon": "10.0.13", @@ -86,10 +86,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/instrumentation": "0.39.1", - "@opentelemetry/sdk-trace-web": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.0" + "@opentelemetry/core": "1.14.0", + "@opentelemetry/instrumentation": "0.40.0", + "@opentelemetry/sdk-trace-web": "1.14.0", + "@opentelemetry/semantic-conventions": "1.14.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 4164952821..cb13c32ddb 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation", - "version": "0.39.1", + "version": "0.40.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", @@ -83,7 +83,7 @@ "devDependencies": { "@babel/core": "7.16.0", "@opentelemetry/api": "1.4.1", - "@opentelemetry/sdk-metrics": "1.13.0", + "@opentelemetry/sdk-metrics": "1.14.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/semver": "7.3.9", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index b6dd740713..db67154c4f 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.39.1", + "version": "0.40.0", "description": "OpenTelemetry SDK for Node.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,25 +44,25 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/exporter-jaeger": "1.13.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.39.1", - "@opentelemetry/exporter-trace-otlp-http": "0.39.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.39.1", - "@opentelemetry/exporter-zipkin": "1.13.0", - "@opentelemetry/instrumentation": "0.39.1", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-metrics": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", - "@opentelemetry/sdk-trace-node": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.0" + "@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" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.5.0" }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.13.0", + "@opentelemetry/context-async-hooks": "1.14.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/semver": "7.3.9", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 8671fffcb9..145e379eba 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.39.1", + "version": "0.40.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.13.0" + "@opentelemetry/core": "1.14.0" }, "devDependencies": { "@opentelemetry/api": "1.4.1", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 97f8940ef6..aad7b9170e 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.39.1", + "version": "0.40.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.16.0", "@opentelemetry/api": "1.4.1", - "@opentelemetry/otlp-transformer": "0.39.1", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", + "@opentelemetry/otlp-transformer": "0.40.0", + "@opentelemetry/resources": "1.14.0", + "@opentelemetry/sdk-trace-base": "1.14.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/sinon": "10.0.13", @@ -71,8 +71,8 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.13.0", - "@opentelemetry/otlp-exporter-base": "0.39.1", + "@opentelemetry/core": "1.14.0", + "@opentelemetry/otlp-exporter-base": "0.40.0", "protobufjs": "^7.2.2" }, "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 29018d61b4..c96b96c37b 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.39.1", + "version": "0.40.0", "description": "OpenTelemetry OTLP-HTTP-protobuf Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -77,8 +77,8 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/otlp-exporter-base": "0.39.1", + "@opentelemetry/core": "1.14.0", + "@opentelemetry/otlp-exporter-base": "0.40.0", "protobufjs": "^7.1.2" }, "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 cc1e43642e..5cf982c8c4 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -4,7 +4,7 @@ "publishConfig": { "access": "public" }, - "version": "0.39.1", + "version": "0.40.0", "description": "Transform OpenTelemetry SDK data into OTLP", "module": "build/esm/index.js", "esnext": "build/esnext/index.js", @@ -76,12 +76,12 @@ "webpack": "4.46.0" }, "dependencies": { - "@opentelemetry/api-logs": "0.39.1", - "@opentelemetry/core": "1.13.0", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-logs": "0.39.1", - "@opentelemetry/sdk-metrics": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0" + "@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" }, "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 f4222cb545..19c1996904 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.39.1", + "version": "0.40.0", "publishConfig": { "access": "public" }, @@ -73,7 +73,7 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.4.0 <1.5.0", - "@opentelemetry/api-logs": "0.39.1", + "@opentelemetry/api-logs": "0.40.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/sinon": "10.0.13", @@ -91,7 +91,7 @@ "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/resources": "1.13.0" + "@opentelemetry/core": "1.14.0", + "@opentelemetry/resources": "1.14.0" } } diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index 202f8e2d67..19481bea63 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.39.1", + "version": "0.40.0", "description": "OpenCensus to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,17 +44,17 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", "@opencensus/core": "0.1.0", "@opentelemetry/api": "1.4.1", + "@opentelemetry/context-async-hooks": "1.14.0", + "@opentelemetry/sdk-trace-base": "1.14.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", + "@types/sinon": "10.0.13", "codecov": "3.8.3", "mocha": "10.0.0", "nyc": "15.1.0", "sinon": "15.0.0", - "@types/sinon": "10.0.13", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, @@ -63,7 +63,7 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", + "@opentelemetry/core": "1.14.0", "require-in-the-middle": "^7.0.0", "semver": "^7.3.5" }, diff --git a/integration-tests/propagation-validation-server/package.json b/integration-tests/propagation-validation-server/package.json index 88846f5d9f..1658c1ed26 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.13.0", + "version": "1.14.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.13.0", - "@opentelemetry/core": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", + "@opentelemetry/context-async-hooks": "1.14.0", + "@opentelemetry/core": "1.14.0", + "@opentelemetry/sdk-trace-base": "1.14.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 efda2f556d..662b4107b3 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.13.0", + "version": "1.14.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 dfcf81d491..c895e58de0 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.13.0", + "version": "1.14.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 57d82fcbbc..60a1993a8d 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.13.0", + "version": "1.14.0", "description": "OpenTelemetry Context Zone", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -73,7 +73,7 @@ "webpack-merge": "5.8.0" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "1.13.0", + "@opentelemetry/context-zone-peer-dep": "1.14.0", "zone.js": "^0.11.0" }, "sideEffects": true, diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 5900c8d204..b3b8de8a23 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/core", - "version": "1.13.0", + "version": "1.14.0", "description": "OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -90,7 +90,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/semantic-conventions": "1.13.0" + "@opentelemetry/semantic-conventions": "1.14.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 6dfc53b45c..17ba0e50df 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.13.0", + "version": "1.14.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.13.0", + "@opentelemetry/resources": "1.14.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/sinon": "10.0.13", @@ -61,9 +61,9 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.0", + "@opentelemetry/core": "1.14.0", + "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/semantic-conventions": "1.14.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 a6c0e26d47..aeee242f84 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.13.0", + "version": "1.14.0", "description": "OpenTelemetry Zipkin Exporter allows the user to send collected traces to Zipkin.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -90,10 +90,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.0" + "@opentelemetry/core": "1.14.0", + "@opentelemetry/resources": "1.14.0", + "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/semantic-conventions": "1.14.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 31fde1399c..3fb0ed7d57 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.13.0", + "version": "1.14.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.13.0" + "@opentelemetry/core": "1.14.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 30aa851011..598ccec32e 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.13.0", + "version": "1.14.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", @@ -79,7 +79,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0" + "@opentelemetry/core": "1.14.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 a6bb86ecc5..6aa2df79ce 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resources", - "version": "1.13.0", + "version": "1.14.0", "description": "OpenTelemetry SDK resources", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -89,8 +89,8 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.0" + "@opentelemetry/core": "1.14.0", + "@opentelemetry/semantic-conventions": "1.14.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 d493500dc1..d2ee09e37c 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.13.0", + "version": "1.14.0", "description": "OpenTelemetry Tracing", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -91,9 +91,9 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/resources": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.0" + "@opentelemetry/core": "1.14.0", + "@opentelemetry/resources": "1.14.0", + "@opentelemetry/semantic-conventions": "1.14.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 60ef5ccba8..075ea4aad7 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.13.0", + "version": "1.14.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.13.0", - "@opentelemetry/semantic-conventions": "1.13.0", + "@opentelemetry/resources": "1.14.0", + "@opentelemetry/semantic-conventions": "1.14.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "@types/semver": "7.3.9", @@ -63,11 +63,11 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/context-async-hooks": "1.13.0", - "@opentelemetry/core": "1.13.0", - "@opentelemetry/propagator-b3": "1.13.0", - "@opentelemetry/propagator-jaeger": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", + "@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", "semver": "^7.3.5" }, "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 21110b939c..e4be672326 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.13.0", + "version": "1.14.0", "description": "OpenTelemetry Web Tracer", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -57,9 +57,9 @@ "devDependencies": { "@babel/core": "7.16.0", "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/context-zone": "1.13.0", - "@opentelemetry/propagator-b3": "1.13.0", - "@opentelemetry/resources": "1.13.0", + "@opentelemetry/context-zone": "1.14.0", + "@opentelemetry/propagator-b3": "1.14.0", + "@opentelemetry/resources": "1.14.0", "@types/jquery": "3.5.8", "@types/mocha": "10.0.0", "@types/node": "18.6.5", @@ -90,9 +90,9 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.0" + "@opentelemetry/core": "1.14.0", + "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/semantic-conventions": "1.14.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 9f094c97cd..fd797b6a23 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.13.0", + "version": "1.14.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 f009398ef2..c39e5a2e65 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.13.0", + "version": "1.14.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.13.0", - "@opentelemetry/propagator-jaeger": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", + "@opentelemetry/propagator-b3": "1.14.0", + "@opentelemetry/propagator-jaeger": "1.14.0", + "@opentelemetry/sdk-trace-base": "1.14.0", "@types/mocha": "10.0.0", "@types/node": "18.6.5", "codecov": "3.8.3", @@ -58,8 +58,8 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/semantic-conventions": "1.13.0", + "@opentelemetry/core": "1.14.0", + "@opentelemetry/semantic-conventions": "1.14.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 db230fd6b5..80ab750d71 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-metrics", - "version": "1.13.0", + "version": "1.14.0", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -76,8 +76,8 @@ "@opentelemetry/api": ">=1.3.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.13.0", - "@opentelemetry/resources": "1.13.0", + "@opentelemetry/core": "1.14.0", + "@opentelemetry/resources": "1.14.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 47b183c625..2138d90be5 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/template", - "version": "1.13.0", + "version": "1.14.0", "private": true, "publishConfig": { "access": "restricted" diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 1bef831b3e..0203ef7a0c 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/selenium-tests", - "version": "1.13.0", + "version": "1.14.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.13.0", - "@opentelemetry/core": "1.13.0", - "@opentelemetry/exporter-trace-otlp-http": "0.39.1", - "@opentelemetry/exporter-zipkin": "1.13.0", - "@opentelemetry/instrumentation": "0.39.1", - "@opentelemetry/instrumentation-fetch": "0.39.1", - "@opentelemetry/instrumentation-xml-http-request": "0.39.1", - "@opentelemetry/sdk-metrics": "1.13.0", - "@opentelemetry/sdk-trace-base": "1.13.0", - "@opentelemetry/sdk-trace-web": "1.13.0", + "@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", "zone.js": "0.11.4" } } From 69da5d548ec4ad9e31297183b0f9764699b09760 Mon Sep 17 00:00:00 2001 From: Chengzhong Wu Date: Wed, 7 Jun 2023 15:52:13 +0800 Subject: [PATCH 002/141] chore(deps): update dependency linkinator to v5 (#3866) Co-authored-by: Marc Pichler --- .github/workflows/lint.yml | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 16b9d4b4cd..79c0f720be 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -14,7 +14,7 @@ jobs: steps: - uses: actions/setup-node@v3 with: - node-version: '14' + node-version: '16' - uses: actions/checkout@v3 diff --git a/package.json b/package.json index 0d232ef636..93302e80ef 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "eslint-plugin-prettier": "4.2.1", "gh-pages": "5.0.0", "lerna": "6.0.3", - "linkinator": "4.0.3", + "linkinator": "5.0.1", "markdownlint-cli": "0.32.2", "prettier": "2.8.0", "semver": "7.3.5", From 3d7015121cbddbf41002c3c87a2f34bf7424f217 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Wed, 7 Jun 2023 22:29:39 +0200 Subject: [PATCH 003/141] chore(renovate): improve PR grouping and add @pichlermarc to assignees (#3868) * chore(renovate): improve PR grouping and add @pichlermarc to assingees * chore: fix 'compatability' typo --- .github/workflows/docs.yaml | 2 +- .../node14/index.ts | 0 .../node14/package.json | 2 +- .../node14/tsconfig.json | 0 .../node16/index.ts | 0 .../node16/package.json | 2 +- .../node16/tsconfig.json | 0 lerna.json | 2 +- renovate.json | 27 ++++++++++++++----- scripts/update-ts-configs.js | 2 +- 10 files changed, 25 insertions(+), 12 deletions(-) rename experimental/{backwards-compatability => backwards-compatibility}/node14/index.ts (100%) rename experimental/{backwards-compatability => backwards-compatibility}/node14/package.json (90%) rename experimental/{backwards-compatability => backwards-compatibility}/node14/tsconfig.json (100%) rename experimental/{backwards-compatability => backwards-compatibility}/node16/index.ts (100%) rename experimental/{backwards-compatability => backwards-compatibility}/node16/package.json (90%) rename experimental/{backwards-compatability => backwards-compatibility}/node16/tsconfig.json (100%) diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index d11fe80ab6..cde3ca25c7 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -23,7 +23,7 @@ jobs: path: | package-lock.json packages/*/package-lock.json - backwards-compatability/*/package-lock.json + backwards-compatibility/*/package-lock.json metapackages/*/package-lock.json packages/*/package-lock.json integration-tests/*/package-lock.json diff --git a/experimental/backwards-compatability/node14/index.ts b/experimental/backwards-compatibility/node14/index.ts similarity index 100% rename from experimental/backwards-compatability/node14/index.ts rename to experimental/backwards-compatibility/node14/index.ts diff --git a/experimental/backwards-compatability/node14/package.json b/experimental/backwards-compatibility/node14/package.json similarity index 90% rename from experimental/backwards-compatability/node14/package.json rename to experimental/backwards-compatibility/node14/package.json index f858e7782f..74b211cc10 100644 --- a/experimental/backwards-compatability/node14/package.json +++ b/experimental/backwards-compatibility/node14/package.json @@ -2,7 +2,7 @@ "name": "backcompat-node14", "version": "0.40.0", "private": true, - "description": "Backwards compatability app for node 14 types and the OpenTelemetry Node.js SDK", + "description": "Backwards compatibility app for node 14 types and the OpenTelemetry Node.js SDK", "main": "index.js", "scripts": { "test:backcompat": "tsc --noEmit index.ts && tsc --noEmit --esModuleInterop index.ts", diff --git a/experimental/backwards-compatability/node14/tsconfig.json b/experimental/backwards-compatibility/node14/tsconfig.json similarity index 100% rename from experimental/backwards-compatability/node14/tsconfig.json rename to experimental/backwards-compatibility/node14/tsconfig.json diff --git a/experimental/backwards-compatability/node16/index.ts b/experimental/backwards-compatibility/node16/index.ts similarity index 100% rename from experimental/backwards-compatability/node16/index.ts rename to experimental/backwards-compatibility/node16/index.ts diff --git a/experimental/backwards-compatability/node16/package.json b/experimental/backwards-compatibility/node16/package.json similarity index 90% rename from experimental/backwards-compatability/node16/package.json rename to experimental/backwards-compatibility/node16/package.json index 8f5723c52d..5170101e1d 100644 --- a/experimental/backwards-compatability/node16/package.json +++ b/experimental/backwards-compatibility/node16/package.json @@ -2,7 +2,7 @@ "name": "backcompat-node16", "version": "0.40.0", "private": true, - "description": "Backwards compatability app for node 16 types and the OpenTelemetry Node.js SDK", + "description": "Backwards compatibility app for node 16 types and the OpenTelemetry Node.js SDK", "main": "index.js", "scripts": { "test:backcompat": "tsc --noEmit index.ts && tsc --noEmit --esModuleInterop index.ts", diff --git a/experimental/backwards-compatability/node16/tsconfig.json b/experimental/backwards-compatibility/node16/tsconfig.json similarity index 100% rename from experimental/backwards-compatability/node16/tsconfig.json rename to experimental/backwards-compatibility/node16/tsconfig.json diff --git a/lerna.json b/lerna.json index 14fb76982e..f0053f3ed7 100644 --- a/lerna.json +++ b/lerna.json @@ -6,7 +6,7 @@ "packages/*", "experimental/packages/*", "experimental/examples/*", - "experimental/backwards-compatability/*", + "experimental/backwards-compatibility/*", "integration-tests/*", "selenium-tests", "examples/otlp-exporter-node", diff --git a/renovate.json b/renovate.json index dab042a79f..5a106908e4 100644 --- a/renovate.json +++ b/renovate.json @@ -2,18 +2,31 @@ "extends": ["config:base"], "packageRules": [ { - "groupName": "all non-major dependencies", - "groupSlug": "all-minor-patch", - "matchUpdateTypes": ["patch", "minor"] + "groupName": "all patch versions", + "groupSlug": "all-patch", + "matchUpdateTypes": ["patch"], + "excludePackageNames": ["prettier"], + "schedule": ["before 3am every weekday"] }, { - "matchPaths": ["backwards-compatibility"], + "matchUpdateTypes": ["minor"], + "dependencyDashboardApproval": true + }, + { + "matchUpdateTypes": ["major"], + "schedule": ["before 3am on Monday"] + }, + { + "matchPackageNames": ["typescript", "webpack", "webpack-cli"], + "dependencyDashboardApproval": true + }, + { + "matchPaths": ["experimental/backwards-compatibility/**"], "matchPackageNames": ["@types/node"], "enabled": false } ], - "ignoreDeps": ["gcp-metadata", "got", "mocha", "husky", "karma-webpack", "@opentelemetry/api"], - "assignees": ["@blumamir", "@dyladan", "@legendecas"], - "schedule": ["before 3am on Friday"], + "ignoreDeps": ["@opentelemetry/api", "@opentelemetry/resources_1.9.0"], + "assignees": ["@blumamir", "@dyladan", "@legendecas", "@pichlermarc"], "labels": ["dependencies"] } diff --git a/scripts/update-ts-configs.js b/scripts/update-ts-configs.js index 3c4f43273f..d437172181 100644 --- a/scripts/update-ts-configs.js +++ b/scripts/update-ts-configs.js @@ -45,7 +45,7 @@ const tsConfigMergeKeys = [ const tsConfigPriorityKeys = ['extends']; const ignoredLernaProjects = [ 'experimental/examples/*', - 'experimental/backwards-compatability/*', + 'experimental/backwards-compatibility/*', 'integration-tests/*', 'selenium-tests', 'examples/otlp-exporter-node', From a2ff4b677d64ec6421351f19fc9eee8f66d6fb60 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 8 Jun 2023 04:10:17 +0200 Subject: [PATCH 004/141] chore(deps): update dependency mocha to v10.2.0 (#3873) --- 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 +- experimental/packages/exporter-trace-otlp-proto/package.json | 2 +- .../packages/opentelemetry-browser-detector/package.json | 4 ++-- .../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 +- .../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 | 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 | 2 +- experimental/packages/otlp-proto-exporter-base/package.json | 2 +- experimental/packages/otlp-transformer/package.json | 2 +- experimental/packages/sdk-logs/package.json | 2 +- experimental/packages/shim-opencensus/package.json | 2 +- 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 | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- 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 | 2 +- packages/opentelemetry-semantic-conventions/package.json | 2 +- packages/opentelemetry-shim-opentracing/package.json | 2 +- packages/sdk-metrics/package.json | 2 +- 41 files changed, 42 insertions(+), 42 deletions(-) diff --git a/api/package.json b/api/package.json index a82fd886b8..6541e36329 100644 --- a/api/package.json +++ b/api/package.json @@ -76,7 +76,7 @@ "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", "memfs": "3.4.9", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index 696756fdee..367ba24cdd 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -75,7 +75,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 73bc979376..3055a48f3e 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -75,7 +75,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index d5be8c217b..f0f56eb39c 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -59,7 +59,7 @@ "@types/sinon": "10.0.13", "codecov": "3.8.3", "cpx": "1.5.0", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 153f941b51..24f498a5ea 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -87,7 +87,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "14.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 9b32258ec5..315ada966b 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -70,7 +70,7 @@ "@types/sinon": "10.0.13", "codecov": "3.8.3", "cpx": "1.5.0", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 6f1177cd47..324002923f 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -56,7 +56,7 @@ "@types/sinon": "10.0.13", "codecov": "3.8.3", "cpx": "1.5.0", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 33ab897993..e182c4c7e4 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -79,7 +79,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index ccbd99b1e1..b3b847bc06 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -69,7 +69,7 @@ "@types/sinon": "10.0.13", "codecov": "3.8.3", "cpx": "1.5.0", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index f940103b14..41f54a092c 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -55,11 +55,11 @@ "devDependencies": { "@babel/core": "7.16.0", "@opentelemetry/api": "1.4.1", - "@types/mocha": "9.1.1", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.13", "codecov": "3.8.3", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 245f6cddcd..2754313f69 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -55,7 +55,7 @@ "@types/sinon": "10.0.13", "codecov": "3.8.3", "cpx": "1.5.0", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 25cad65a78..51d67cac38 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -79,7 +79,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index a38a810aad..0fddb13409 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -54,7 +54,7 @@ "@types/sinon": "10.0.13", "codecov": "3.8.3", "cpx": "1.5.0", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index 83d386206b..959077ec32 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -49,7 +49,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.13", "codecov": "3.8.3", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-mocha": "10.0.0", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index b0a32e397e..e649a03e4a 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -72,7 +72,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index abe73ed1d1..1c0c46064c 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -59,7 +59,7 @@ "@types/sinon": "10.0.13", "codecov": "3.8.3", "grpc": "1.24.11", - "mocha": "10.0.0", + "mocha": "10.2.0", "node-pre-gyp": "0.17.0", "nyc": "15.1.0", "semver": "7.3.5", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 46c7eec6e9..ef1d84af49 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -58,7 +58,7 @@ "@types/superagent": "4.1.13", "axios": "1.4.0", "codecov": "3.8.3", - "mocha": "10.0.0", + "mocha": "10.2.0", "nock": "13.0.11", "nyc": "15.1.0", "request": "2.88.2", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 4177a9c354..3f4a557e44 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -72,7 +72,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index cb13c32ddb..5a98b08c25 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -99,7 +99,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index db67154c4f..6bafec79c5 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -69,7 +69,7 @@ "@types/sinon": "10.0.13", "codecov": "3.8.3", "istanbul-instrumenter-loader": "3.0.1", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "semver": "7.3.5", "sinon": "15.0.0", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 145e379eba..f81be8a2f9 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -70,7 +70,7 @@ "@types/sinon": "10.0.13", "codecov": "3.8.3", "istanbul-instrumenter-loader": "3.0.1", - "mocha": "10.0.0", + "mocha": "10.2.0", "nock": "13.0.11", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index aad7b9170e..75b4e487f9 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -58,7 +58,7 @@ "@types/sinon": "10.0.13", "codecov": "3.8.3", "cpx": "1.5.0", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "protobufjs-cli": "1.0.2", "sinon": "15.0.0", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index c96b96c37b..c7b69b659e 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -65,7 +65,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.13", "codecov": "3.8.3", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "protobufjs-cli": "1.0.2", "sinon": "15.0.0", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index 5cf982c8c4..652efb6918 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -68,7 +68,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 19c1996904..d1b714b129 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -84,7 +84,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "14.0.0", "ts-mocha": "10.0.0", diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index 19481bea63..cd833cc9ea 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -52,7 +52,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.13", "codecov": "3.8.3", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 662b4107b3..5d14959ab7 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -48,7 +48,7 @@ "@types/mocha": "10.0.0", "@types/node": "18.6.5", "codecov": "3.8.3", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index c895e58de0..f197fb52bd 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -69,7 +69,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 60a1993a8d..61be536f07 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -62,7 +62,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index b3b8de8a23..d3200c6d0b 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -78,7 +78,7 @@ "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", "lerna": "6.0.3", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 17ba0e50df..9a6c95dea5 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -50,7 +50,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.13", "codecov": "3.8.3", - "mocha": "10.0.0", + "mocha": "10.2.0", "nock": "13.0.11", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index aeee242f84..8b4e87b43e 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -75,7 +75,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nock": "13.0.11", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index 3fb0ed7d57..17e25ec4f4 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", "istanbul-instrumenter-loader": "3.0.1", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index 598ccec32e..fd5bdc9dd3 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -67,7 +67,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 6aa2df79ce..28a38b7ade 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -75,7 +75,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nock": "13.0.11", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index d2ee09e37c..0515f543f1 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -79,7 +79,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index 075ea4aad7..5d115ecd82 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -53,7 +53,7 @@ "@types/semver": "7.3.9", "@types/sinon": "10.0.13", "codecov": "3.8.3", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index e4be672326..d2f950b8bb 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -76,7 +76,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index fd797b6a23..510cefa003 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -53,7 +53,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.13", "codecov": "3.8.3", - "mocha": "10.0.0", + "mocha": "10.2.0", "nock": "13.0.11", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index c39e5a2e65..8b6163658a 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -49,7 +49,7 @@ "@types/mocha": "10.0.0", "@types/node": "18.6.5", "codecov": "3.8.3", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 80ab750d71..652373b1d9 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -66,7 +66,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", "ts-mocha": "10.0.0", From 51dd6f2ddd73cb5fcfd27fb8fb4b1b90d59812e3 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 8 Jun 2023 11:45:34 +0200 Subject: [PATCH 005/141] chore(deps): update all patch versions (#3874) --- api/package.json | 8 ++++---- experimental/packages/api-events/package.json | 4 ++-- experimental/packages/api-logs/package.json | 4 ++-- .../packages/exporter-logs-otlp-grpc/package.json | 4 ++-- .../packages/exporter-logs-otlp-http/package.json | 8 ++++---- .../packages/exporter-logs-otlp-proto/package.json | 4 ++-- .../packages/exporter-trace-otlp-grpc/package.json | 4 ++-- .../packages/exporter-trace-otlp-http/package.json | 6 +++--- .../packages/exporter-trace-otlp-proto/package.json | 4 ++-- .../packages/opentelemetry-browser-detector/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 4 ++-- .../opentelemetry-exporter-metrics-otlp-http/package.json | 6 +++--- .../package.json | 4 ++-- .../opentelemetry-exporter-prometheus/package.json | 4 ++-- .../opentelemetry-instrumentation-fetch/package.json | 6 +++--- .../opentelemetry-instrumentation-grpc/package.json | 4 ++-- .../opentelemetry-instrumentation-http/package.json | 8 ++++---- .../package.json | 6 +++--- .../packages/opentelemetry-instrumentation/package.json | 6 +++--- experimental/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 | 4 ++-- experimental/packages/sdk-logs/package.json | 8 ++++---- experimental/packages/shim-opencensus/package.json | 4 ++-- packages/opentelemetry-context-async-hooks/package.json | 2 +- packages/opentelemetry-context-zone-peer-dep/package.json | 6 +++--- packages/opentelemetry-context-zone/package.json | 6 +++--- packages/opentelemetry-core/package.json | 6 +++--- packages/opentelemetry-exporter-jaeger/package.json | 4 ++-- packages/opentelemetry-exporter-zipkin/package.json | 6 +++--- packages/opentelemetry-propagator-b3/package.json | 2 +- packages/opentelemetry-propagator-jaeger/package.json | 6 +++--- packages/opentelemetry-resources/package.json | 6 +++--- packages/opentelemetry-sdk-trace-base/package.json | 6 +++--- packages/opentelemetry-sdk-trace-node/package.json | 4 ++-- packages/opentelemetry-sdk-trace-web/package.json | 8 ++++---- packages/opentelemetry-semantic-conventions/package.json | 4 ++-- packages/opentelemetry-shim-opentracing/package.json | 2 +- packages/sdk-metrics/package.json | 8 ++++---- 41 files changed, 102 insertions(+), 102 deletions(-) diff --git a/api/package.json b/api/package.json index 6541e36329..f5f3d0e2e6 100644 --- a/api/package.json +++ b/api/package.json @@ -60,10 +60,10 @@ "access": "public" }, "devDependencies": { - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", - "@types/webpack": "4.41.26", + "@types/sinon": "10.0.15", + "@types/webpack": "4.41.33", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "dpdm": "3.10.0", @@ -73,7 +73,7 @@ "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", "karma-mocha-webworker": "1.3.0", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "memfs": "3.4.9", "mocha": "10.2.0", diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index 367ba24cdd..934a5f152e 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -64,7 +64,7 @@ "@opentelemetry/api": "^1.0.0" }, "devDependencies": { - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", @@ -73,7 +73,7 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 3055a48f3e..0fe84f8740 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -64,7 +64,7 @@ "@opentelemetry/api": "^1.0.0" }, "devDependencies": { - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", @@ -73,7 +73,7 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index f0f56eb39c..699788e84d 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -54,9 +54,9 @@ "@opentelemetry/api-logs": "0.40.0", "@opentelemetry/otlp-exporter-base": "0.40.0", "@opentelemetry/resources": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", "mocha": "10.2.0", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 24f498a5ea..6986bcca30 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -73,9 +73,9 @@ "devDependencies": { "@babel/core": "7.16.0", "@opentelemetry/api-logs": "0.40.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", @@ -85,11 +85,11 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "14.0.0", + "sinon": "14.0.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 315ada966b..bf66f69e65 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -65,9 +65,9 @@ "devDependencies": { "@babel/core": "7.16.0", "@opentelemetry/api": "1.4.1", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", "mocha": "10.2.0", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 324002923f..362e0934d3 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -51,9 +51,9 @@ "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@opentelemetry/otlp-exporter-base": "0.40.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", "mocha": "10.2.0", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index e182c4c7e4..fb9eec5a93 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -65,9 +65,9 @@ "devDependencies": { "@babel/core": "7.16.0", "@opentelemetry/api": "1.4.1", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", @@ -77,7 +77,7 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index b3b847bc06..10c2b03cf5 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -64,9 +64,9 @@ "devDependencies": { "@babel/core": "7.16.0", "@opentelemetry/api": "1.4.1", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", "mocha": "10.2.0", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 41f54a092c..0c2d09c3d7 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.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 2754313f69..d2d2d9ffd4 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -50,9 +50,9 @@ "@babel/core": "7.16.0", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", "mocha": "10.2.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 51d67cac38..ad0a4100b4 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -65,9 +65,9 @@ "devDependencies": { "@babel/core": "7.16.0", "@opentelemetry/api": "1.4.1", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", @@ -77,7 +77,7 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 0fddb13409..35d5b14f96 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -49,9 +49,9 @@ "devDependencies": { "@babel/core": "7.16.0", "@opentelemetry/api": "1.4.1", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", "mocha": "10.2.0", diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index 959077ec32..0102ede2e7 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -45,9 +45,9 @@ "devDependencies": { "@opentelemetry/api": "1.4.1", "@opentelemetry/semantic-conventions": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index e649a03e4a..a8f6213a70 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -59,9 +59,9 @@ "@opentelemetry/context-zone": "1.14.0", "@opentelemetry/propagator-b3": "1.14.0", "@opentelemetry/sdk-trace-base": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", @@ -70,7 +70,7 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 1c0c46064c..20b06eb4f5 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -53,10 +53,10 @@ "@opentelemetry/core": "1.14.0", "@opentelemetry/sdk-trace-base": "1.14.0", "@opentelemetry/sdk-trace-node": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.3.9", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "grpc": "1.24.11", "mocha": "10.2.0", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index ef1d84af49..d0f9cd3914 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -50,12 +50,12 @@ "@opentelemetry/sdk-metrics": "1.14.0", "@opentelemetry/sdk-trace-base": "1.14.0", "@opentelemetry/sdk-trace-node": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/request-promise-native": "1.0.18", "@types/semver": "7.3.9", - "@types/sinon": "10.0.13", - "@types/superagent": "4.1.13", + "@types/sinon": "10.0.15", + "@types/superagent": "4.1.18", "axios": "1.4.0", "codecov": "3.8.3", "mocha": "10.2.0", @@ -64,7 +64,7 @@ "request": "2.88.2", "request-promise-native": "1.0.9", "sinon": "15.0.0", - "superagent": "8.0.0", + "superagent": "8.0.9", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 3f4a557e44..29f36e0c18 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -59,9 +59,9 @@ "@opentelemetry/context-zone": "1.14.0", "@opentelemetry/propagator-b3": "1.14.0", "@opentelemetry/sdk-trace-base": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", @@ -70,7 +70,7 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 5a98b08c25..aed1782f4f 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -84,10 +84,10 @@ "@babel/core": "7.16.0", "@opentelemetry/api": "1.4.1", "@opentelemetry/sdk-metrics": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.3.9", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", @@ -97,7 +97,7 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 6bafec79c5..0372de64f7 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -63,10 +63,10 @@ "devDependencies": { "@opentelemetry/api": "1.4.1", "@opentelemetry/context-async-hooks": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.3.9", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "istanbul-instrumenter-loader": "3.0.1", "mocha": "10.2.0", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index f81be8a2f9..96356cd4d9 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -65,9 +65,9 @@ }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "istanbul-instrumenter-loader": "3.0.1", "mocha": "10.2.0", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 75b4e487f9..b10279fa56 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -53,9 +53,9 @@ "@opentelemetry/otlp-transformer": "0.40.0", "@opentelemetry/resources": "1.14.0", "@opentelemetry/sdk-trace-base": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", "mocha": "10.2.0", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index c7b69b659e..0818a4a844 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -61,9 +61,9 @@ "devDependencies": { "@babel/core": "7.16.0", "@opentelemetry/api": "1.4.1", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index 652efb6918..86359693ae 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -58,7 +58,7 @@ "@opentelemetry/api": "1.4.1", "@opentelemetry/api-logs": "0.39.1", "@opentelemetry/sdk-logs": "0.39.1", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "istanbul-instrumenter-loader": "3.0.1", @@ -66,7 +66,7 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index d1b714b129..540d337f13 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -74,19 +74,19 @@ "devDependencies": { "@opentelemetry/api": ">=1.4.0 <1.5.0", "@opentelemetry/api-logs": "0.40.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "14.0.0", + "sinon": "14.0.2", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index cd833cc9ea..ec3c5dafed 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -48,9 +48,9 @@ "@opentelemetry/api": "1.4.1", "@opentelemetry/context-async-hooks": "1.14.0", "@opentelemetry/sdk-trace-base": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 5d14959ab7..a227e9ce27 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -45,7 +45,7 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", "mocha": "10.2.0", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index f197fb52bd..a930cb8484 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -55,9 +55,9 @@ "devDependencies": { "@babel/core": "7.16.0", "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "@types/zone.js": "0.5.12", "babel-loader": "8.2.3", @@ -67,7 +67,7 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 61be536f07..e79a867835 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -51,16 +51,16 @@ }, "devDependencies": { "@babel/core": "7.16.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index d3200c6d0b..89e1b0acab 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -65,9 +65,9 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "istanbul-instrumenter-loader": "3.0.1", @@ -75,7 +75,7 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "lerna": "6.0.3", "mocha": "10.2.0", diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 9a6c95dea5..030eba5f6e 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -46,9 +46,9 @@ "devDependencies": { "@opentelemetry/api": "^1.0.0", "@opentelemetry/resources": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "mocha": "10.2.0", "nock": "13.0.11", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 8b4e87b43e..70f71e4603 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -62,9 +62,9 @@ "devDependencies": { "@babel/core": "7.16.0", "@opentelemetry/api": "^1.0.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", @@ -73,7 +73,7 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nock": "13.0.11", diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index 17e25ec4f4..7f21ce7603 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -58,7 +58,7 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", "istanbul-instrumenter-loader": "3.0.1", diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index fd5bdc9dd3..a6d01b7a4d 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -55,9 +55,9 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "istanbul-instrumenter-loader": "3.0.1", @@ -65,7 +65,7 @@ "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 28a38b7ade..b2655b10a9 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -63,9 +63,9 @@ "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", "@opentelemetry/resources_1.9.0": "npm:@opentelemetry/resources@1.9.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "karma": "6.3.16", @@ -73,7 +73,7 @@ "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", "karma-mocha-webworker": "1.3.0", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nock": "13.0.11", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 0515f543f1..40c985ee97 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -66,9 +66,9 @@ "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", "@opentelemetry/resources_1.9.0": "npm:@opentelemetry/resources@1.9.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "istanbul-instrumenter-loader": "3.0.1", @@ -77,7 +77,7 @@ "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", "karma-mocha-webworker": "1.3.0", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index 5d115ecd82..5286d4dd42 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -48,10 +48,10 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0", "@opentelemetry/resources": "1.14.0", "@opentelemetry/semantic-conventions": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.3.9", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index d2f950b8bb..d63b1ebc75 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -60,10 +60,10 @@ "@opentelemetry/context-zone": "1.14.0", "@opentelemetry/propagator-b3": "1.14.0", "@opentelemetry/resources": "1.14.0", - "@types/jquery": "3.5.8", - "@types/mocha": "10.0.0", + "@types/jquery": "3.5.16", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", @@ -74,7 +74,7 @@ "karma-jquery": "0.2.4", "karma-mocha": "2.0.1", "karma-mocha-webworker": "1.3.0", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index 510cefa003..d918b90ab0 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -49,9 +49,9 @@ "access": "public" }, "devDependencies": { - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "mocha": "10.2.0", "nock": "13.0.11", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index 8b6163658a..5e84c89124 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -46,7 +46,7 @@ "@opentelemetry/propagator-b3": "1.14.0", "@opentelemetry/propagator-jaeger": "1.14.0", "@opentelemetry/sdk-trace-base": "1.14.0", - "@types/mocha": "10.0.0", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", "mocha": "10.2.0", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 652373b1d9..193ada1af0 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -55,16 +55,16 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.3.0 <1.5.0", - "@types/lodash.merge": "4.6.6", - "@types/mocha": "10.0.0", + "@types/lodash.merge": "4.6.7", + "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.13", + "@types/sinon": "10.0.15", "codecov": "3.8.3", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", From 228e67b941ea012781df75b2dc53c8731f97e8dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=B2=92=E7=B2=92=E6=A9=99?= Date: Fri, 9 Jun 2023 01:16:38 +0800 Subject: [PATCH 006/141] chore(otlp-grpc-exporter): update TLS certs and keys for tests (#3878) * chore(otlp-grpc-exporter): remove unused certs * chore(otlp-grpc-exporter): update TLS certs and keys for tests --- .../exporter-logs-otlp-grpc/test/certs/ca.crt | 54 +++++----- .../exporter-logs-otlp-grpc/test/certs/ca.key | 98 ++++++++--------- .../test/certs/client.crt | 50 ++++----- .../test/certs/client.csr | 46 ++++---- .../test/certs/client.key | 98 ++++++++--------- .../test/certs/regenerate.sh | 20 ++-- .../test/certs/server.crt | 50 ++++----- .../test/certs/server.csr | 46 ++++---- .../test/certs/server.key | 98 ++++++++--------- .../test/certs/ca.crt | 54 +++++----- .../test/certs/ca.key | 98 ++++++++--------- .../test/certs/client.crt | 50 ++++----- .../test/certs/client.csr | 46 ++++---- .../test/certs/client.key | 98 ++++++++--------- .../test/certs/regenerate.sh | 20 ++-- .../test/certs/server.crt | 50 ++++----- .../test/certs/server.csr | 46 ++++---- .../test/certs/server.key | 98 ++++++++--------- .../test/certs/ca.crt | 33 ------ .../test/certs/ca.key | 54 ---------- .../test/certs/client.crt | 31 ------ .../test/certs/client.csr | 28 ----- .../test/certs/client.key | 51 --------- .../test/certs/regenerate.sh | 22 ---- .../test/certs/server.crt | 31 ------ .../test/certs/server.csr | 28 ----- .../test/certs/server.key | 51 --------- .../test/certs/ca.crt | 33 ------ .../test/certs/ca.key | 54 ---------- .../test/certs/client.crt | 31 ------ .../test/certs/client.csr | 28 ----- .../test/certs/client.key | 51 --------- .../test/certs/regenerate.sh | 22 ---- .../test/certs/server.crt | 31 ------ .../test/certs/server.csr | 28 ----- .../test/certs/server.key | 51 --------- .../test/certs/ca.crt | 54 +++++----- .../test/certs/ca.key | 98 ++++++++--------- .../test/certs/client.crt | 50 ++++----- .../test/certs/client.csr | 46 ++++---- .../test/certs/client.key | 98 ++++++++--------- .../test/certs/regenerate.sh | 20 ++-- .../test/certs/server.crt | 50 ++++----- .../test/certs/server.csr | 46 ++++---- .../test/certs/server.key | 98 ++++++++--------- .../otlp-exporter-base/test/certs/ca.crt | 33 ------ .../otlp-exporter-base/test/certs/ca.key | 54 ---------- .../otlp-exporter-base/test/certs/client.crt | 31 ------ .../otlp-exporter-base/test/certs/client.csr | 28 ----- .../otlp-exporter-base/test/certs/client.key | 51 --------- .../test/certs/regenerate.sh | 22 ---- .../otlp-exporter-base/test/certs/server.crt | 31 ------ .../otlp-exporter-base/test/certs/server.csr | 28 ----- .../otlp-exporter-base/test/certs/server.key | 51 --------- .../otlp-grpc-exporter-base/test/certs/ca.crt | 54 +++++----- .../otlp-grpc-exporter-base/test/certs/ca.key | 101 +++++++++--------- .../test/certs/client.crt | 50 ++++----- .../test/certs/client.csr | 46 ++++---- .../test/certs/client.key | 98 ++++++++--------- .../test/certs/regenerate.sh | 20 ++-- .../test/certs/server.crt | 50 ++++----- .../test/certs/server.csr | 46 ++++---- .../test/certs/server.key | 98 ++++++++--------- 63 files changed, 1120 insertions(+), 2110 deletions(-) delete mode 100644 experimental/packages/exporter-trace-otlp-http/test/certs/ca.crt delete mode 100644 experimental/packages/exporter-trace-otlp-http/test/certs/ca.key delete mode 100644 experimental/packages/exporter-trace-otlp-http/test/certs/client.crt delete mode 100644 experimental/packages/exporter-trace-otlp-http/test/certs/client.csr delete mode 100644 experimental/packages/exporter-trace-otlp-http/test/certs/client.key delete mode 100755 experimental/packages/exporter-trace-otlp-http/test/certs/regenerate.sh delete mode 100644 experimental/packages/exporter-trace-otlp-http/test/certs/server.crt delete mode 100644 experimental/packages/exporter-trace-otlp-http/test/certs/server.csr delete mode 100644 experimental/packages/exporter-trace-otlp-http/test/certs/server.key delete mode 100644 experimental/packages/exporter-trace-otlp-proto/test/certs/ca.crt delete mode 100644 experimental/packages/exporter-trace-otlp-proto/test/certs/ca.key delete mode 100644 experimental/packages/exporter-trace-otlp-proto/test/certs/client.crt delete mode 100644 experimental/packages/exporter-trace-otlp-proto/test/certs/client.csr delete mode 100644 experimental/packages/exporter-trace-otlp-proto/test/certs/client.key delete mode 100755 experimental/packages/exporter-trace-otlp-proto/test/certs/regenerate.sh delete mode 100644 experimental/packages/exporter-trace-otlp-proto/test/certs/server.crt delete mode 100644 experimental/packages/exporter-trace-otlp-proto/test/certs/server.csr delete mode 100644 experimental/packages/exporter-trace-otlp-proto/test/certs/server.key delete mode 100644 experimental/packages/otlp-exporter-base/test/certs/ca.crt delete mode 100644 experimental/packages/otlp-exporter-base/test/certs/ca.key delete mode 100644 experimental/packages/otlp-exporter-base/test/certs/client.crt delete mode 100644 experimental/packages/otlp-exporter-base/test/certs/client.csr delete mode 100644 experimental/packages/otlp-exporter-base/test/certs/client.key delete mode 100755 experimental/packages/otlp-exporter-base/test/certs/regenerate.sh delete mode 100644 experimental/packages/otlp-exporter-base/test/certs/server.crt delete mode 100644 experimental/packages/otlp-exporter-base/test/certs/server.csr delete mode 100644 experimental/packages/otlp-exporter-base/test/certs/server.key diff --git a/experimental/packages/exporter-logs-otlp-grpc/test/certs/ca.crt b/experimental/packages/exporter-logs-otlp-grpc/test/certs/ca.crt index 27e1d6826b..c194f04954 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/test/certs/ca.crt +++ b/experimental/packages/exporter-logs-otlp-grpc/test/certs/ca.crt @@ -1,33 +1,33 @@ -----BEGIN CERTIFICATE----- -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 -g2LKPYSY8A== +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm3OXVbMd0t2r4x+Pg4fecPeFhRzsg6 +sp7AM4UYlhb0Xkx8ij3q0E47uQM/OSari6qi7p1Un6nzgaXmhosaNkVXaKV4dQ4g +zKqrvC2+nTYU4lwss4Rx32CQxOKXEvN5FPwLTNo903PP3wqJyVt8syN0CDW953m/ +hUdkNaOe/lXmDJ9TmTTGyuPZFSlNlufbaNsBUM5chVFgBYDQIVy0jls8MiYLfao5 +tfprj+yS+lnTDl54dDTVVyAgV22SY65cnUgvO4bu3nzhS/h2Xg4/6/yAuYaRI7GQ +xvlA4pzx+aLaRDTJKiszRrHbQFv4PY+MmkVxvg2Oka4Vc2XMgDM87H0bd+beO8NH +Tf7UHU5AmIr2j2R27LWeELOqanm1HYn2VK182lD7OwQ5u5yqZZuke8bMMPJQEPUm +EwhIgXMVIlGps2+rDUEalPYkQ/BmAcs2g7fywW3RhIWCacggKoee1x9a6oiUM5yi +oDJ6T/C4WUQzIVebdMC25zBBlxcy8fK4Yus/DFTqM/eXPl4NVzbH/yB5tlU2GU0Q +V4tpGL1jsUy4b7r1bzuYVNfnKrarUGFF5TIHuvDo3voJNGb4hWBH/JdttG/9NaWA +HomZ8CUWR+gNEzyPkwq7upkiblKxJV7HKo79Eex+dlWa+Ru1F3kwYE200Y+a/wOF +Rj4+PfMu7WvpAgMBAAGjUzBRMB0GA1UdDgQWBBSwH/Wk2wTc+MEPAEornj1eGKra +0zAfBgNVHSMEGDAWgBSwH/Wk2wTc+MEPAEornj1eGKra0zAPBgNVHRMBAf8EBTAD +AQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCNkzOjjqH3qeQ0wT/Has5PSoWwRwq+B1JT +gg29bgEMD6dVkLdzgEuRVVkMtc/tCZAkA02pc0VN8+lNLW7ckNU/QhMTQYn+FgMR +cG86vR9loTnwUrxR4dS6Nbx1sQ7hpe2GZkWpTNmjh1duHBNHv9nS2JmMkRypqRne +oAI3/th1Qlrtl/zDn02/+P5/av0YJcMOcnRkULHnI62cbXHa2iPd/nENgH2xC6CA +EuYN/bnmOEUPeKljU1IZS6asjGMLdWLmpLs7oOcHGLD3pax+om69Pmn7rps8Z071 +WsJDHFCftItCUrg4KWwpXr77Vq4WAN2tOBdDHEZsbES6a54+7sc1QKOVSWwPuGEd +ShFHhTzoaB0dpwm6kLdYsEkC8JLIjV+Ikg5X3VTDITjUlHoJf2mxCGOzBiCnUr75 +Am0eBqlVcc/2aVk1tcVS9N7reY/KcMaAJvI314O9I94pYdIIm5jw3UmA9Y6HmpN0 +vYtQUF2sS5W82XoFD8bpOq/bx1o2ib2x32dfPQkVgd4sbmpsyN62Fy1HpHwXtXno +xGVaDzGSWj/7RyYyKhNmp3nfQsU0Tt6iVkM+N30vl2heZqEUgXxCG9qHVzWv9z6x +AJzuafjM8tviROpiHkvzsmq7uDhksGooKCi+m+eoEBJrd0J4gjngAi1NYjTsB2GT +4mvPz05UkA== -----END CERTIFICATE----- diff --git a/experimental/packages/exporter-logs-otlp-grpc/test/certs/ca.key b/experimental/packages/exporter-logs-otlp-grpc/test/certs/ca.key index 3ca1e8e149..00ccb04622 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/test/certs/ca.key +++ b/experimental/packages/exporter-logs-otlp-grpc/test/certs/ca.key @@ -1,51 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/experimental/packages/exporter-logs-otlp-grpc/test/certs/client.crt b/experimental/packages/exporter-logs-otlp-grpc/test/certs/client.crt index cb5c4508d7..fd05c9c40b 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/test/certs/client.crt +++ b/experimental/packages/exporter-logs-otlp-grpc/test/certs/client.crt @@ -1,31 +1,31 @@ -----BEGIN CERTIFICATE----- MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjIwNjA4MDk1NDAxWhcN -MjMwNjA4MDk1NDAxWjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV +dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjMwNjA4MTY0NDI2WhcN +MjQwNjA3MTY0NDI2WjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZD bGllbnQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMo9AlVbqKk0NI3U4IPhXARrA/9HCtW6TK8bNj+KqBETPJ0OV6Ep -FC1AUG8h6ZpQy1lAVchMOXXzVIxejJ53Wq2aBMELl7KaheEUAzbQNqSBxL7cY61l -sk1rd0ryQ0167j/tNV5h3FH4ZawD7vt2oGte4Dxipj+gFQx/MXD1j2vOKm0SO6xr -IdSWg79HRnMb6mJMCtTc6kvX5XDN3avwrhndsPKZREhs1ei6lhY4ip3N70357MB6 -vNF7euAMQU7KZ0uZZbj0lqINT+6jwEJ6yhkZM9ILKbxC8+IAhCAOsu2bKXtkhDSN -V+3Jr3x8PRWlhlCitGt9a8/DlT0RIfcXQHRmY7hdnMqt+7vJio56oHcyv2+8ap+C -rWr5OfsRuQvSs3ebn1zhDim0AspKOfdwGepPubgM/MuilYIi35L6CbRp+VbSGmIy -GUOGoWa3uykcMOm4hIK6bbFOGUTixbwIjRfxzuPfPLqIK+aQ5kBSUdDhK9LHpNOM -n0RihXBoRfE3VfnuWVcetp/FG7B5PTgCvP0Ss9QivTV/OQmi1juPa1ONmtZodZTz -eV2mDvZLQKFIInOQE/6dxMn+yrmYlQdV2nEiJU1yiKp5601OklqeX0BO1rWQy283 -AUwbAS5ZBmQeF4KmDZtEphdOTEDmu5YTyDhIvSK58Rq+iQq+CLmaYH3BAgMBAAEw -DQYJKoZIhvcNAQELBQADggIBABV90+TvW47WUdsZpy0eZayjWgIZvKqpWVcYI4Px -1zEGMVJvg8TPjPujGIdhkhxbabklqy/+s/im4ev9MnIGG0wckoYaJgH9KvtD/Br9 -3SpexmN9mQMO8/8299TWJBjS1q5UYjktvbuKFGpizs3+y4n88UmcXRh8y2Z1oglZ -WuXn5A5BJkpXONI3U615mXTf0CLnpbU//4z5VQe2AylksOgo3y7DHXz3iPOh15TN -EnDz7Pms0i8tswSbmS+NU2Clv7ACHhstdPoEqiN/V9gpjon1n+fBXaqMhaXI9C9b -NV9l5AW1utBAc/zlzRnKYtw/yrDW00KAN2FJbGefThJWPCYUlBx5hcCl1C8ObjIz -4b2+2TLdnwkMeeb8FV6mzTaQVWQ5Yr+ffQBqDhahEwjGyUOjzqFtGSlujWKLT4g1 -T9XnVr8KKU6UWDeHDp1lz8S9wo2l5DJN/S6u/SB9RXBOgzFVO9EWnbxkpR4YqdwK -WNP+Xhw9AO+DVX+/zK0PHF4f1z85E30R/V/CmvSx07jaXxK+ixcCykfb0DRvyVyr -WyVxz72LeJnsqWBSjBlwGslPsOzucA6RfN2b7/9rTObglKoKbEV/dSKoRZ34hFcV -nuiwRbVjVXH1az8FU8o+nG+anKW/jpVn4NcabYiHWH6qL+W3ZRTcWkyOOsSHHdOS -Hdil +ADCCAgoCggIBANewSXGnuCUsPcOnXPq7SUFTLaSM62x2FnJrzb6rne8KYQ615l6D +d2Nm7MrttHWJUBQS6iDCsEGlF/AWYO5adVuZ+Xf+S+NoWMXPTUuJYq+5VEeAS8PM +IriksA8Npn0hAMNTDrd/eNXQ5W4zLQOqUWnKcuE0P1M7gI3/rfX9/JXkZfUmkQGK +OSva3qJHOcG7Bc7vqbJnkFebIw87e2iHxNnUf5IoJmrUaOMdFiQyHBBoJyTVJ3wp +Ufr6Q2+d0sIyes9PV33DbB8DyKGdOfbLg4YmKsnAvnypC0p2Xw9yAnHlQX27Ngcq +tfzcOXx3QlNPxQDF3oNHzi8GD7ysex1z7PRIsZlLVQLshAdOfA+naktPezj52R8V +BtWaxgVFI7IA5X21reS25t01k/GXNcyIJxW5KSz00b1h8+mpz0n0R3Mz3HuZybAX +g5bnZ+91jOeQmTt08eMXjwAGClxcOqfrssfDvOnUSZjDpzEGDaVuFGVPA9hR/eKN +Bfo659rv45pYhtxoHLz1LJWoZ1uegmKrGF1w16K05k5mpzwH6fzqDzzbF1xyynGX +yfbIqsvsBniuWGmhMjlfT5+l0VG2GgsD7Yijv6SV0YZrVf85iA5q6XdKTBuKYmin +ZEbneEjw9kc9myMeC5ik7wHuksA/BQcja1TPwB4ZRbPEcfi2iFxbtsSzAgMBAAEw +DQYJKoZIhvcNAQELBQADggIBAGdcqEI2l/dKxu9vPuRC2/VRgjgDBN4UJJCY111T +2A7GsGzd7lRhtxB5ZzClF77UiRJG+cvFai00c9+L3wp8qy4sZWY4MaJIWoKRh72Q +sRiH8AskeIl3uvvvaH86bbmpDo7M48Cs/zXZo9VhLzD8ZuHcS1mdjkOcnQzkbSzR +YeM9ActeuJRmsdQ+gSzCTvFqmGutL6xvM8b9a6PwyY5nPxS+eh0/7KNp+EXBvp0U +MWp6mMfq22nAwAQRLbvh5f+a/4GSwg73By6hwnsgb7tpBBJ6ppnKAIALRf7l5JwS +V0LM5Vnpp4J4JjdYyQzk2xkxi+UGIP1IRigbeWc4K3qgg6BUUkfSf4W9oJD4JCa2 +cOsqnKqFxTwXT4b9j9qsPpg7mUQ2+UtU4Lv3h/7sXpbpx0ldb2Hnaq+JqUz0l/7c +54y3+nzke7I4CWKtLJUSamQiyOC3CBVkRX0YEYUBhMXim6dKAfiOEV6K3bwiU+YZ +aDe0lEeLbzAp87DKRTAvDYhRMIFtD3g2qmYrWpQ4gj8vSEorNAfg3kVHMFRGlk9o +jaFduAz0hKk+QG5SgePXMph5ZRXGRq0FnDbF2gZ7WV+jZiIhsYGJ43+RBWHh4HO4 +P4h9eOWQG8AxpDRmOo2KmyPbV0V/eltC4N0oOAmWz+i0qqulnpG4dOzQKpinRBBr +jPt5 -----END CERTIFICATE----- diff --git a/experimental/packages/exporter-logs-otlp-grpc/test/certs/client.csr b/experimental/packages/exporter-logs-otlp-grpc/test/certs/client.csr index 30ac376794..b783896725 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/test/certs/client.csr +++ b/experimental/packages/exporter-logs-otlp-grpc/test/certs/client.csr @@ -2,27 +2,27 @@ MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGQ2xp ZW50MRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDKPQJVW6ipNDSN1OCD4VwEawP/RwrVukyvGzY/iqgREzydDlehKRQt -QFBvIemaUMtZQFXITDl181SMXoyed1qtmgTBC5eymoXhFAM20DakgcS+3GOtZbJN -a3dK8kNNeu4/7TVeYdxR+GWsA+77dqBrXuA8YqY/oBUMfzFw9Y9rziptEjusayHU -loO/R0ZzG+piTArU3OpL1+Vwzd2r8K4Z3bDymURIbNXoupYWOIqdze9N+ezAerzR -e3rgDEFOymdLmWW49JaiDU/uo8BCesoZGTPSCym8QvPiAIQgDrLtmyl7ZIQ0jVft -ya98fD0VpYZQorRrfWvPw5U9ESH3F0B0ZmO4XZzKrfu7yYqOeqB3Mr9vvGqfgq1q -+Tn7EbkL0rN3m59c4Q4ptALKSjn3cBnqT7m4DPzLopWCIt+S+gm0aflW0hpiMhlD -hqFmt7spHDDpuISCum2xThlE4sW8CI0X8c7j3zy6iCvmkOZAUlHQ4SvSx6TTjJ9E -YoVwaEXxN1X57llXHrafxRuweT04Arz9ErPUIr01fzkJotY7j2tTjZrWaHWU83ld -pg72S0ChSCJzkBP+ncTJ/sq5mJUHVdpxIiVNcoiqeetNTpJanl9ATta1kMtvNwFM -GwEuWQZkHheCpg2bRKYXTkxA5ruWE8g4SL0iufEavokKvgi5mmB9wQIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBAGsOxCfMBI11h5BOvDgKpVlAhxHlwyitXGPQHcsr -tjOQi0CRnkcrUMZcgnjX3OPCD3ngjZJW02m82BrN7WJJpSLzEKpnKP6Y91BXfHma -3qPFmMNkXCZ8WRjp6K/l98z9j+lFksN5y2BJCqf8oL1iURPYuHlgRK3LhpR4LOPt -JrJYwAML4hr1g93ejdwGc1LjNx8dyAriCM7h7IwhYGgnT1kYu/shVgT6SH0+ixAq -PNIOekCJH75k9C/QP/hPPARbAzD5of69haLeAcABik/cH/RRuDHTTVxgHFfV/W8r -BWwf7IIxX0iEPCQWxW1Q5SfzOmP9ICLFln4s38MgEGIyGqxgfkSi3nuLkwKTLB1j -NppTiO7Da4Vvso85hdLqNXvE3J6VSiu2c0oDf/ZZYkSizEzt9ESPPp3VcNj2MDbr -CxwhzV018wovlTunUSwKWvRn+syT10bnzZX/+QarZ7mfq57DPfMHNiiPM1ej26eE -Z7A3R3J67H4Ifp5Ua9jdga6x0RfOBRDuZv2N861eVs+9jSIC+hmrvQ1TbTvzHFVB -KYE1UBDRNijuGwsYgZ74vPKLGgA7cFs9X2JXzKc/0Y9opgBltZlNBF97XZSLDw1v -VaPCUVqOU6VKamPX8nVhkpHoUdDSl08T+VKwP5Da4oJHmSZMzxRQLl2TZnIru14+ -uVcP +ggIKAoICAQDXsElxp7glLD3Dp1z6u0lBUy2kjOtsdhZya82+q53vCmEOteZeg3dj +ZuzK7bR1iVAUEuogwrBBpRfwFmDuWnVbmfl3/kvjaFjFz01LiWKvuVRHgEvDzCK4 +pLAPDaZ9IQDDUw63f3jV0OVuMy0DqlFpynLhND9TO4CN/631/fyV5GX1JpEBijkr +2t6iRznBuwXO76myZ5BXmyMPO3toh8TZ1H+SKCZq1GjjHRYkMhwQaCck1Sd8KVH6 ++kNvndLCMnrPT1d9w2wfA8ihnTn2y4OGJirJwL58qQtKdl8PcgJx5UF9uzYHKrX8 +3Dl8d0JTT8UAxd6DR84vBg+8rHsdc+z0SLGZS1UC7IQHTnwPp2pLT3s4+dkfFQbV +msYFRSOyAOV9ta3ktubdNZPxlzXMiCcVuSks9NG9YfPpqc9J9EdzM9x7mcmwF4OW +52fvdYznkJk7dPHjF48ABgpcXDqn67LHw7zp1EmYw6cxBg2lbhRlTwPYUf3ijQX6 +Oufa7+OaWIbcaBy89SyVqGdbnoJiqxhdcNeitOZOZqc8B+n86g882xdccspxl8n2 +yKrL7AZ4rlhpoTI5X0+fpdFRthoLA+2Io7+kldGGa1X/OYgOaul3SkwbimJop2RG +53hI8PZHPZsjHguYpO8B7pLAPwUHI2tUz8AeGUWzxHH4tohcW7bEswIDAQABoAAw +DQYJKoZIhvcNAQELBQADggIBACboOarzimaArw3lDm6ET5yiU7NxTWtnWwFUOoSh +qS2cvumnCokUlrDyMSSKoHl2i2biUd9uiHuEqlh0yufNgnTsyAXLg0UiBHAv5Tos +Esc5A+JTV5ehy+Zrjpl3Ayh8difS8hJEBjMhH+7rCN3rhpvwkTSaXDCQTBzWPhQ1 +R0EIho/SNOh5mXQKAUWwhtleI0sEJC/PqezGfN+w+URHnzE7YMwg02bvoMxBEror +YVddG4o0nIyd6CPg++K7TBzYGGOf1CUCrI9S1bBn3jcv2mq5YgZMdLEa0HkA9XzU +J/dTSGz5pJbkoaX9IHv8a3uoc+V1jdNWZRmTUYG/cNoAFISoG+uuJLgesF5l+vxx +GUwkE6wj4bNYR/Pqy5963oDmA3ndBzR1wtCZqIsLX3t3A9fLLtIEgeN/XDSvNDBs +YdwBrx2HTatK7QCJ5e+4ACs6Wc2c1nnDviPddpxUgl0pHKcMbT+xNk7bY5fjl5Qr +wzuBNgvQcsZxNNvI8bs13k/eBmKrKOV2WUP1mHRzSoxPX3gzGRSWCe/7QR51oWlB +Qkb6OGVGLCKPnhIKFeZ6G1Qv8q7/hOOlmWGO4bN7s5fjAKEsm3JV1xrsqSKRofRG +JfdPjQD88jewIAk6xGSMKmc4usQN+y/IfU8yZ57MHSHULccA1Wl/VXfgKCAxS5fK +uXtm -----END CERTIFICATE REQUEST----- diff --git a/experimental/packages/exporter-logs-otlp-grpc/test/certs/client.key b/experimental/packages/exporter-logs-otlp-grpc/test/certs/client.key index fd649acf54..58414d8d59 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/test/certs/client.key +++ b/experimental/packages/exporter-logs-otlp-grpc/test/certs/client.key @@ -1,51 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/experimental/packages/exporter-logs-otlp-grpc/test/certs/regenerate.sh b/experimental/packages/exporter-logs-otlp-grpc/test/certs/regenerate.sh index e1f1af5b54..84637be753 100755 --- a/experimental/packages/exporter-logs-otlp-grpc/test/certs/regenerate.sh +++ b/experimental/packages/exporter-logs-otlp-grpc/test/certs/regenerate.sh @@ -8,15 +8,15 @@ rm ca.crt ca.key client.crt client.csr client.key server.crt server.csr server.key -openssl genrsa -nodes -des3 -out ca.key 4096 -openssl req -nodes -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Root/OU=Test/CN=ca" +openssl genrsa -out ca.key 4096 +openssl req -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Root/OU=Test/CN=ca" -openssl genrsa -nodes -des3 -out server.key 4096 -openssl req -nodes -new -key server.key -out server.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Server/CN=localhost" -openssl x509 -req -nodes -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -openssl rsa -nodes -in server.key -out server.key +openssl genrsa -out server.key 4096 +openssl req -new -key server.key -out server.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Server/CN=localhost" +openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt +openssl rsa -in server.key -out server.key -openssl genrsa -nodes -des3 -out client.key 4096 -openssl req -nodes -new -key client.key -out client.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Client/CN=localhost" -openssl x509 -nodes -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt -openssl rsa -nodes -in client.key -out client.key +openssl genrsa -out client.key 4096 +openssl req -new -key client.key -out client.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Client/CN=localhost" +openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt +openssl rsa -in client.key -out client.key diff --git a/experimental/packages/exporter-logs-otlp-grpc/test/certs/server.crt b/experimental/packages/exporter-logs-otlp-grpc/test/certs/server.crt index da8b6beedd..ace156a29e 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/test/certs/server.crt +++ b/experimental/packages/exporter-logs-otlp-grpc/test/certs/server.crt @@ -1,31 +1,31 @@ -----BEGIN CERTIFICATE----- MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjIwNjA4MDk1NDAwWhcN -MjMwNjA4MDk1NDAwWjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV +dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjMwNjA4MTY0NDI0WhcN +MjQwNjA3MTY0NDI0WjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZT ZXJ2ZXIxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKF4wbhjwTd048CdtquNjhuVGIvPxpdNaCPXbSJN9joRqRwp0vt4 -DnRfLWda34UzZ9fxXN4HTgYrzLYkrdOUhvourhjka2mjcs1kOjlfFeGwgJe8LTVG -6qE+LdJFw4xPd53dZtsN1dQaj7e/GlK4jNI69qtq16dnFswjbzAI62or9MHdzY4F -fEFReMr25kGSo+/nNwI21PbiMhZ+OSTuoSgomx6JmXUYG9+uZFZTrE+fn47jMK4w -Bv1W+U2D1w2Aof01lyfQQ/giMY6XUAIPHIyBEvFyF1sdU+ZJzubl3vPGzf84If8+ -31iYsYEoqR3vwYs7+fmAWXOcXnjL8N0QqZPT37fsKLF1l+WCxhWLMlc8x9Kq8Gez -mOJRrR3j5Ui+ux6TpQV3aIXj3ykUIeDIIwRPNsDrwzJLNG28YVMV1rz4+V2/MsQ4 -ML1MilP3ZB9uxUN391XulLxsQI0olv+LZqKYnqqeHbFDt61Hr4WmefqKqB4rlO1j -WH4SLCEykzToFQpK9MQpPmUJ2UZrudN3flJGZ8bpnGu2gA2rgqfejB52D5jpZTzT -RU9OZp1v6JWjjRh3vcqVSin0mPLEXQj11cpKOBzIBEjqoPtpnjH8SQd9mb7n/o5q -8gLSuTcOqn3lLH3DvLTBilsmNcIbBItpC6QGc5EVqPlAJKIvLvOGb6B5AgMBAAEw -DQYJKoZIhvcNAQELBQADggIBAEdYvhg/TGjtzlJIqUv1qfyJr6gOm9Ydoz1WDaau -HJTkmI7vCeHUDxnhXEq1lYKt89XvUHsfI0lkCV2Gt+wppsL3ZZIGsv0C70nIPTIT -egPoBeUpqk1ZtPN3VEvgD3GDjAJzuvaL1Uhw9Yt4qKxP6ozyRfhObbTSomLNplui -LGGd6PqVF1vDAx6Ubw/LaNQzVjzQsMm4AgafakIh4c9aA3zxyZvUwAvT7ZVElMHK -moEudZQzL9Cx/Y9Pgv+z3JcXpT7UbDWSB/dVi5ZgcTtzHaYKAMFaunxNYqwWoicf -zB1uk2QOLgfxteWBjeaNl9UfXShGm+iGRoVVL7VrayO6+ScGchUGN5h1qR4xzWpA -2QKSb7t1oEW/GtrV6AD3jJUjcna4LP6DdpY/0IocgU5KonR0eFUNrZA8hUsXquQ0 -/Cx9d7ktdEDudeS4tJywF1CI3IcIZQ2vExJ+NjdlAFIVFkaqFFLhv/cCcGaBpH7X -6dc5bOoqyOgX97yBJJX9Joz6ZoAp2XO1tvycxj2g84V90lDsbTurmyuoR8yTcBbE -FNseKWNRi4fmsB1etz/HX3h1qUPP1ze+fY4C2zPleIB6uSKM5ZfODpMDejHQRF29 -YshoFbAJ19zOHYY+5LYHoLGJlN34TJ4ouPpAtRIQu4ebQZwMxddU1759sCIIwkHe -V5d5 +ADCCAgoCggIBAKtVnxPqCZheCuqePfLknxc+6MeyYkf494U8WWeZo+yirYV3zY70 +1KhKZ+M+XDqhrBXc7IQHZd2KKxYBGnrv9yvbllmtZRdnk3hnn8B4eNh3w5gCRKPo +GSTeiNN7WEIRwYZNkr8AWgeoYT1jN8SAMn5+qSqKSd62Z1BPJNi0eQmTVxgLZqzx +92AWBZQl9rOme+1zV6ohKcR22Of3yUl6476L1rYYcX0DXp0QFkhK0TFKNt3cHxqq +WTRuMTnyCj7woWRtwclWTdO2buAkJe8cIde6rcbaUAX9jTdkbAgYAB9MctEKqasO +MqFyMzweS3sG9oUnmd0/GRL9as314xTZuz8fFnfj5l0BN6thVMmvEEYU3rTLQRKf +AKWzI2VrU+5wIxN8O/4ZbriQ5ae13p6TDYilSZ6kMxSzfOM/A00hlA+DKMS0o8g8 +V9Y3wcl3aSSjoZbH7XS/uDEueodudz9V3HxCk7Wc41SpunQPFprmPDWtjiW0jcMD +3kHV819r2F8aidKN94Q+3KI+N/mwn1QdDVsquiCq0wbR54i3CoAkQbi5YeUdEZD6 +/mNLs/BABgzSbANw7Fn1Pd9gY/JIsRhMskcFRqXe9tOqKk8/GxMv/r9MgJn6HHlk +iDa3OZsoOtFbjjOPFoy/Xq9YMi4ODnJkEhe7BSsVl/wkDAUdg7Zfu8XVAgMBAAEw +DQYJKoZIhvcNAQELBQADggIBAEft+R+qGyKffiiJpYWLPn0C9SmpjZiWPK331n57 +Nk3GA8u9gRgD1gyqqLr19r86nLArF8jcB/nChPB1A9ysW3xyTNvpOlAwYvEjxWR2 +tJr8wiDucAd+SnQud6e+5PI5e8LnyxYoeoZ+i6hMbhNV70NthoINHMAQx+5NeSpa +Q0GJ4d0XA3W/8Pu6oK7O0QkVovVut73Koz5DqsF91zFJp7SjVKaCnnjRKyU8wbg5 +uTO0TRheEtx3AeEXNps5Yhq0daLTnmnuFeyaJHm2F1QuBmma1TTwIF3HDclv2wLn +Jp+MWG9yoN9oEJLqS/AvDu1BltPSuvnYgLZr7cl0os+TEqpzxroa4ziE98dEiy0D +K4YQ59UTz6C8Ps0uX0hcs3jsvZOkBWptusvJBfZN59xLJAVmF2igkgIBKoiXvXmv +fXDx0hsOBg2IPe2O8lLHlFKlJZlMc+prH1iD0Xv6HefSP4L1eZHU37zjrRf/GiNX +r6GoEhJR2pKEoZQT81xpYp/w+qjzWcTl/mLD6FEePRzV92h3ubjRWBB36UhLtnEG +LJgp7yq3aGu7rg9rnuz8J6DG8DStE9rNuRjkV1O2C/PvR97XmVoIqbrMlxX9MUQJ +XxLm5dqBz7EVuhDJSyp4zCkDYsOj1y/SLL2O3cTyQQeZg6jlqripNqWnviAdTWe5 +JIPp -----END CERTIFICATE----- diff --git a/experimental/packages/exporter-logs-otlp-grpc/test/certs/server.csr b/experimental/packages/exporter-logs-otlp-grpc/test/certs/server.csr index d8ab7deb4b..b421a7a60c 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/test/certs/server.csr +++ b/experimental/packages/exporter-logs-otlp-grpc/test/certs/server.csr @@ -2,27 +2,27 @@ MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGU2Vy dmVyMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQCheMG4Y8E3dOPAnbarjY4blRiLz8aXTWgj120iTfY6EakcKdL7eA50 -Xy1nWt+FM2fX8VzeB04GK8y2JK3TlIb6Lq4Y5Gtpo3LNZDo5XxXhsICXvC01Ruqh -Pi3SRcOMT3ed3WbbDdXUGo+3vxpSuIzSOvaratenZxbMI28wCOtqK/TB3c2OBXxB -UXjK9uZBkqPv5zcCNtT24jIWfjkk7qEoKJseiZl1GBvfrmRWU6xPn5+O4zCuMAb9 -VvlNg9cNgKH9NZcn0EP4IjGOl1ACDxyMgRLxchdbHVPmSc7m5d7zxs3/OCH/Pt9Y -mLGBKKkd78GLO/n5gFlznF54y/DdEKmT09+37CixdZflgsYVizJXPMfSqvBns5ji -Ua0d4+VIvrsek6UFd2iF498pFCHgyCMETzbA68MySzRtvGFTFda8+PldvzLEODC9 -TIpT92QfbsVDd/dV7pS8bECNKJb/i2aimJ6qnh2xQ7etR6+Fpnn6iqgeK5TtY1h+ -EiwhMpM06BUKSvTEKT5lCdlGa7nTd35SRmfG6ZxrtoANq4Kn3owedg+Y6WU800VP -Tmadb+iVo40Yd73KlUop9JjyxF0I9dXKSjgcyARI6qD7aZ4x/EkHfZm+5/6OavIC -0rk3Dqp95Sx9w7y0wYpbJjXCGwSLaQukBnORFaj5QCSiLy7zhm+geQIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBADoGwPR/TLe0PwsB2orIjrHnsZLYzcHxh9JdRaCO -Q07NvbocAqN3nIiHaUI/IqZG3aiBQb7i98maE2fcFVgsMoRVLB2GsQw+bzoPF+45 -kbtff4L1mHEt8AIIL063AepTetAMUfojpoRI0JG6pChzHDxuud++kPrz50wR5eEk -OhDjX46qh8VxExH3rfU+VDY/FvXMJaMLa76HOmY93g/p+C6T+SiTrs+QEPqWsMKa -eHJTTP0PZx8ikdT64aJpDiOmXVthymPPSZvDEWzlJ7RF8y0p+SoqPM3Pv8/M7zq7 -2dRL6UABTMGtBMEtj5DDZYWTl+1O8Yn4xhjHBcDT3ug3IvnCKCpX2ufi+wJzaWEu -QFAL+N5Sc1rZxklqWKprQeGBiEIE3UXdDA6Xvom85gLoaWoH6nMFvDNab+zJl4Ty -0Iiciq9jzUq4eda/TjgPxDs6RNlJxSXs1lASUR0Jx+Nb9wH2R1n6XQJhcOrz6nJ/ -T+/INYf5VrUdvf9P0PRub7Ga962fBDUG6WQx3PPjy/iEmffN/nsBXXzvQiw7ObW4 -eNCQob2H/3lAdxOs2txKhTCgUV9CzUb2P4Uq4s26n0yA6qpVG6Jgp14s+kVrgFYQ -KjhoFMWXtN3YqETnVNe6A9PEwkSpCm/JyGTm524ok0KyrXo1nSm1WKZqEIQCpp2D -vQFY +ggIKAoICAQCrVZ8T6gmYXgrqnj3y5J8XPujHsmJH+PeFPFlnmaPsoq2Fd82O9NSo +SmfjPlw6oawV3OyEB2XdiisWARp67/cr25ZZrWUXZ5N4Z5/AeHjYd8OYAkSj6Bkk +3ojTe1hCEcGGTZK/AFoHqGE9YzfEgDJ+fqkqiknetmdQTyTYtHkJk1cYC2as8fdg +FgWUJfazpnvtc1eqISnEdtjn98lJeuO+i9a2GHF9A16dEBZIStExSjbd3B8aqlk0 +bjE58go+8KFkbcHJVk3Ttm7gJCXvHCHXuq3G2lAF/Y03ZGwIGAAfTHLRCqmrDjKh +cjM8Hkt7BvaFJ5ndPxkS/WrN9eMU2bs/HxZ34+ZdATerYVTJrxBGFN60y0ESnwCl +syNla1PucCMTfDv+GW64kOWntd6ekw2IpUmepDMUs3zjPwNNIZQPgyjEtKPIPFfW +N8HJd2kko6GWx+10v7gxLnqHbnc/Vdx8QpO1nONUqbp0Dxaa5jw1rY4ltI3DA95B +1fNfa9hfGonSjfeEPtyiPjf5sJ9UHQ1bKrogqtMG0eeItwqAJEG4uWHlHRGQ+v5j +S7PwQAYM0mwDcOxZ9T3fYGPySLEYTLJHBUal3vbTqipPPxsTL/6/TICZ+hx5ZIg2 +tzmbKDrRW44zjxaMv16vWDIuDg5yZBIXuwUrFZf8JAwFHYO2X7vF1QIDAQABoAAw +DQYJKoZIhvcNAQELBQADggIBAJCMEdjKyklN2izvOhd7+JMXm/ClW3hjowbu+csO +JNz8NqUNLrKJjFyV3yAUGWuyp3z982S+XGfcm3nU7n9AJOjT4DLJId6opOtA6CSp +KTRgVZmeViL6O6UqBLTacz5DDjwMQXxszc+QpU53cMT6Y7VMvIOhQ6AmIvz1v71u +5gaYmlbfXVlmiPHEKRsQG9/DNIPe1mHP0p+S9qYKmCx7Jlpee7IstW/hNjt7alDn +uFaxFjxmCCSdWaMRyMW/qNRks9q3VdhJPan+amFeXceoEG7SOKiFiOc8A7DribSm +iKc2YlOw14xqc+cJutiKBvoBMri2eh1JgCbPT4ufVGFpbDkfYwAJxWx44Eg0X90j +gJUw8IRuHQZkEYss6jwFMFcOqjpe+AqrssOl4GZmu5gcaiUnj8PkSVZLTOrLilPg +sSDjzmoHdv4QcBppTrjj6PyR5Xd6DeGasWkMPvIPjiPN3mOhfxJ3C87atMqOhTLx +em7vFOBegAW6g40J9JD1XMoI/zFnTU8NevZQgCyx/Tq1XNRmUeMA6y/qpfTNKi/f +F7v/7nDWoxBgpOw3J0E9R+6rxD7Cjb2RWZEf20ZGdNBlPE+UG9c9b3HC3IHiwRHb +L9Fi0251w+fkaPX8dojQKErCEknqJ1SCP5S5F5g1QCQby22Y7LQsggMMf94s/wQX +4uMh -----END CERTIFICATE REQUEST----- diff --git a/experimental/packages/exporter-logs-otlp-grpc/test/certs/server.key b/experimental/packages/exporter-logs-otlp-grpc/test/certs/server.key index 9147802e7d..80b9cea7bf 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/test/certs/server.key +++ b/experimental/packages/exporter-logs-otlp-grpc/test/certs/server.key @@ -1,51 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -MIIJKAIBAAKCAgEAoXjBuGPBN3TjwJ22q42OG5UYi8/Gl01oI9dtIk32OhGpHCnS -+3gOdF8tZ1rfhTNn1/Fc3gdOBivMtiSt05SG+i6uGORraaNyzWQ6OV8V4bCAl7wt -NUbqoT4t0kXDjE93nd1m2w3V1BqPt78aUriM0jr2q2rXp2cWzCNvMAjraiv0wd3N -jgV8QVF4yvbmQZKj7+c3AjbU9uIyFn45JO6hKCibHomZdRgb365kVlOsT5+fjuMw -rjAG/Vb5TYPXDYCh/TWXJ9BD+CIxjpdQAg8cjIES8XIXWx1T5knO5uXe88bN/zgh -/z7fWJixgSipHe/Bizv5+YBZc5xeeMvw3RCpk9Pft+wosXWX5YLGFYsyVzzH0qrw -Z7OY4lGtHePlSL67HpOlBXdohePfKRQh4MgjBE82wOvDMks0bbxhUxXWvPj5Xb8y -xDgwvUyKU/dkH27FQ3f3Ve6UvGxAjSiW/4tmopieqp4dsUO3rUevhaZ5+oqoHiuU -7WNYfhIsITKTNOgVCkr0xCk+ZQnZRmu503d+UkZnxumca7aADauCp96MHnYPmOll -PNNFT05mnW/olaONGHe9ypVKKfSY8sRdCPXVyko4HMgESOqg+2meMfxJB32Zvuf+ -jmryAtK5Nw6qfeUsfcO8tMGKWyY1whsEi2kLpAZzkRWo+UAkoi8u84ZvoHkCAwEA -AQKCAgB16ox1TgvEpszHVaUXZJk5VUkGmKXqyfFZ8zDUU2CTiWAYnAZh84uCuhqb -FoaSbDbSQIVT8rus0AF/pgt2rklfnAUxUmWKUH0+tom6adC97roJlLbi6DXhqFmn -66Bg74tnsk4xe8oCSZ9YTOs5K2JTCBIoni58JlFEpD/HMUxRTWZAyOwaYbEathdj -CKifjCnBwPSv3kDpRcfUGzs52DXB8N1OkKeLFh8M2vqU/CeiQewwWYKsQZBpI0GN -tNCwIJarJZ6LyZBJPRc5jRA1YLm1dXDS90FNHX6udonsnkORfEXksiZJkq1hsqg1 -rO7LWNHbDuJ+rJcmUTPAPRZZKZjbnXEd9dHIPu/fg+vKUa/xuIkpaY5ZuV+SGMpg -QOHknz8mIOMAvnz1emAsR/yEflCN+ht5nmpwDnmVBNGSUV8D+8UgSLFWIFiqszJT -VNaYhUjEN6fR+VZ9WqF8jt9ZbnvfQipWkHVoGnA/bU+wb1duogVFfiKzHr1xyZzg -wG23vEIoXGhgHpTmZTjdQI3oc67TlAfCq6s6onI5z52xPn1O5Lk9H/7bIeEhvDWJ -1h9t7vcENk4RJNVh6gOEsuH/ECztWEXc7Nkv/8keJORuE50EOjwmc532aKEjqUCQ -6c7v28P3/n9XYZCG6K9mKlV1uK8Nhp4j4hVKyr+/uOgAAJq7AQKCAQEAzR97NpjH -7Bdy+ij+r8LpcUzkf3y1f+s3LABB4AjA2viVZP1CZIWpOli5JBEMo7rXUFmrVGUs -fMlyCxlc4PWDMIOkPn9GPmVUuuYQPjlM7ZZ8seLyBut/qHUBGbEKiKsuYkXAmOE1 -lVIJxyc1e39UxM+wL3PCwHKfSOjhFSOmMea8kzDBko5H4/os+l0vWUUQm+MreI6v -aqNPBKwwUxUyf3KVaB4BC7+2X/WIFNVzPQbYP0FmdesRYeA86JMSxWusP8NEIG71 -bhRGbvar4YSlgzgoX/vMDiR1EIIDSsAx5RL+xkjBCt4fqx5TdrszX1QLqFSmRwgF -8RkXVC8HG/vFGQKCAQEAyYWWipxWdhQnTkZ560BA4xSwX6usIHfoejbhcWdeMs8w -kH0ZmOnZFlZZ5hn+j6DY68q2OqQphbnutU5HOpc9vLUZjni72ZFSq6+fgxa8FQHm -j5VXeQ/NNxV9xjoEBV9/+CPbwBLAkSxd/luCyoU8cpwDxwMzJ638Z06yCY5jdDup -hT7OKw9HY4HUtJECGl2R3XdB8Gd/CnG22+coIGPFJSeY+5sOx35jkUgCApQl0QC3 -YS9v9IXVyyQVVN8eELoRFvjaty42n4rfYuS+bKe5MAOaAmkpRmXw8EZp/I/64jnh -ZjkQpEckvwnv9jLNfzRvedi+6WOY9/A2K9SjtrXCYQKCAQBV+x87uHj85qtkXvC7 -Hfmaa3/QTKcL0r3SrNzwGts0LkT5CwvcdQaFlZEtpBPnQbdlT+D4RFyMhihOrLf4 -+BCgsl2TcOgx2WnV2f/vBTfQ02a7bgTDj814AGuQqFxhA1gzC0f7DVPXnobIuw+5 -D5upz+DrUxvMbX+FIVDP+px8iFp9XE+XrhpGXqSh4ZOqWL/oiCW9qBmxmnjR3Zd4 -DAeZ0p78AK+xjA/XU2VSTlK6vvbANRrMzNcBbuw5FQUmScbvB1u0OK6aENehRbaw -lliGk3ChIzvapb+IRuc4Wy3O9tJirTZ15rvhj5muyDN1fxZP3gPA/IT5FepoeDoD -qdppAoIBABgz6huloSC3VO0qu7PMWL6tGm2zEY4ouIwNEVBsaLzTc3K3A58A3ui2 -4D8pehBH8iWHiBFM7Au6g/fUeeuIhIqoeXRJ/c2ojXQ/OHom/dnMC6PM/N92TWBD -PYLULu1yRc1IiTjtR6Fn4bYNyYyHKfZd1HpPYRJv6/OAWROavUkVbUuqelpjkGBc -FG7HR6hg+obNruavl2tqstqATapuMRxAQDhfrAu7mzu0mUE0B8KtQljyuJB2jnHC -WKmDznmVzz2iD6qWa0sIA8I91Lz5+9zPYezOMn3Y+nHxEwOZSzlmWDLNwbjpLnmf -OOmpulJ/uq+4n10qcBG/ENJ8zFjCRaECggEBALwBdMtxRd3YimcfYKMUPmLgNHY8 -GqIcRZ4QhboUbuhB2ykn3WnXNpF7SH8UQBVxUmusyxdZ4NWWpQ7CqvqpPL54cW/r -qZUb5S4qPN03sv+yZwQYohqzAZci/uexeltezmQ704WxUUdcL5uQoRsTqDm32+pN -/DQHvENLDqaDuN9hp7daFKdcq4mLFoXYm5aoA76yhxQI0EBhYjMiHz6PDZ8lzi+F -NduMOC9rcW2StDRyO++BcCexBjTSo7nlYbpO5kWW9VlC5TAabh8JL5+GJ9uT90Vf -GNqYVneFCCnsGeqJIXkzKn7eeygKjf6KCX94OA3O4z4ro/H+Gllv6eKSipc= +MIIJKQIBAAKCAgEAq1WfE+oJmF4K6p498uSfFz7ox7JiR/j3hTxZZ5mj7KKthXfN +jvTUqEpn4z5cOqGsFdzshAdl3YorFgEaeu/3K9uWWa1lF2eTeGefwHh42HfDmAJE +o+gZJN6I03tYQhHBhk2SvwBaB6hhPWM3xIAyfn6pKopJ3rZnUE8k2LR5CZNXGAtm +rPH3YBYFlCX2s6Z77XNXqiEpxHbY5/fJSXrjvovWthhxfQNenRAWSErRMUo23dwf +GqpZNG4xOfIKPvChZG3ByVZN07Zu4CQl7xwh17qtxtpQBf2NN2RsCBgAH0xy0Qqp +qw4yoXIzPB5Lewb2hSeZ3T8ZEv1qzfXjFNm7Px8Wd+PmXQE3q2FUya8QRhTetMtB +Ep8ApbMjZWtT7nAjE3w7/hluuJDlp7XenpMNiKVJnqQzFLN84z8DTSGUD4MoxLSj +yDxX1jfByXdpJKOhlsftdL+4MS56h253P1XcfEKTtZzjVKm6dA8WmuY8Na2OJbSN +wwPeQdXzX2vYXxqJ0o33hD7coj43+bCfVB0NWyq6IKrTBtHniLcKgCRBuLlh5R0R +kPr+Y0uz8EAGDNJsA3DsWfU932Bj8kixGEyyRwVGpd7206oqTz8bEy/+v0yAmfoc +eWSINrc5myg60VuOM48WjL9er1gyLg4OcmQSF7sFKxWX/CQMBR2Dtl+7xdUCAwEA +AQKCAgAaeE7sV7MFzDmph6sQdIuznq998qxGbEtpVSqG2/C8ZWGjhh/G30JfgadN +L1w2XrXkZs5Pk4kEUg1YB/GcXqh0KSewUR6WIBVje7btmG8rGk2olWkfXYNM8+h1 +q8+13WJlqmRqh9Zg6n2ja0m5XQjwDAd8oALLmqiZerC5niA4/39sIo7JV1Sdjqlr ++vWDScxJohFAIoF+bdIS/HAnnwnCbX5Ngbc+1h9u6oZWwuBQ2iNh4VkY2IqRlBic +2C0HDkwQ5PgUb/X0KHI2xL7rkxATcS7Z0u6cDlEb5rLeCT8zlq8CZsBRwg7GbItH +1XJZ3niFl9momc/45Bf1G/DqTr0jwZ3I5wSUFQCBuI/F41YnyscWq1BoigCxeD6f +VvZUUfkJ/Vy3hghO/2JF5sDCVEYcdesnKDVteZNmTNVKNOZhkomLt0ouCdla0pgn +yq4Yw0oSdz98F0IyTSciWpw2JH/5Hd2vxBLY+8svgAxHnWImqq4lcW4SJgQECzF2 +Ju55uTrciubnuf5WjwoI2uT4KYhhxKp6tiX9fbecMMEMksYgRw9IuaMIP8lkmfjn +WCdyfgbIgJ9xAgeljbHOm5wEcwvs8h+6Z8PCTS1+ZBiwVVQyb4hDptnMY5yu8MfQ +934RzVezD9oJRn0OgJGe7wwwdkSWr+isYO/u0Va5lgVEzTHYHQKCAQEA2E2AGZy8 +XKRDauYyiuEldGi8qCHtDzFo5w5Ni12t9QARFQzL60mvKPSN/hjtUGpL0y+ZmAaC +cRBSyQGjd11vh83z0YUKN9+12ugGufpakgJ2jz+U1i2WXj+M4IB7sdwZk+GV0Itf +UKo1AnvneE+QmeQzx9FcFT0L7pK9ajyBpRLBoNBAy7xy0YeaI+ziA6qaET53yQqn +eNiuvCFEB1pKE7aR2sJ7A6JmghIJr5wtjwOtyD1pOjmaI+F7xCFYRvgBmCX93uov +1TBO53PHj8GYp3AaArj2LgRACiFP+JtbvNaCJQDbvL5SJZULx5r5i8nbAAyjBmHz +6Pxqf7a70yXOhwKCAQEAysdjICPGYIwOM+9ziez0wsYvGCV/KF30FQY2JnZB46bK +UCh5LxWc3qsbdjgzjDPrR3rBEz0j65OuhIekMuIwm61jDtA6L6tpGxzntZKBHWh3 +2PSV1jeb0OBzCf4gy0O58P7LYZRI0b1OuClWEHSe4vJHfxEDSTFT3Cn10AlT+OBU +NoQdk7CX3O9ISkfSZJ32MdNCUHu+9DKhb52gpXhiQNkRwBPStywj8XeXs7cZJs3v ++10BIL4kr/JwHEZS8h+CIb0zerKaJlhyot8JIPIwo4ebn8S5KJUKo4S3uON3QMZl +5w+Ry+3Io4Dnf5b1NH3Qp3fAx/pxruX2lKBU7XUjwwKCAQEAtNDskfyNFaCXXwh6 +HdCiX9KiSqa5pea2+9fgCO3R2qoonYEqAlGBZGozPMOXto51PmBfNE/UwTFVEwUU +olbwQgVvmaluZlDTk+A8p0Fabw4yEAOlpvlK5xSW7qFZRdBpbU65zzCDCEqQr7fm +QpO4nHzAsHwaTwLOM6xlPSbBdb3dMVKFqAqrrO5/cyK1uTznOB0RQ3VtlD8Gquvg +E4ltvVb0THwhG2Op73emsy+KgjAgGPEFQxAeA3qd3NHHGuR9aLPxqmP4gm20uBT4 +MPs0Ylv60mXOHZ+d7Rn14Sv2H0DuYIJ8LianQxV6WGz7yNiAA2WM7mv52r0PRh36 +m0LShwKCAQBiu66SKZkfzVHlC8Qv9gY/CAxKL4e4efasfffDxnTSiZWcbfiDanyV +Fq8qYrcGnwkCJsz3tx9URvYEZZ8Xf3a3djbzMYQDTezBXNOdXxYq4YDpTD3grfba +P08EII6LKhDRPN5+RpsmNIytssLLBF2QlvMk9X2qF7CDVJLxlnkihue6G53jGWr4 +EjIaqNnST+9d10VEttwFPtnH5PIhX3pHpOm1onFI6t8dZWOiB5bhhAhDVceEz9BB +M0RPIBam+Zx9HQiBx5Cy9wHqN7rUJdh050RpCHo3PkqNz8M87NRV38QiOzx8FO1K +XytYvoHp6xC7Wd2uAU11IVdsipyPeifNAoIBAQCw47tJyyss2FqqXGl6IDEXFk12 +mcgrRuPnohAF7Z49/jp5wruYd8heyQdMGk8Z3l+OSFsdMIKxNDWbPuItxK/pCVRM +OooNEdM2uHAighJR9x9/kXFB3j7YuqbTbEz7MvLd+AJVfUos+zwcTuj7q72XGMsb +Gt4jRsrgeDA+paiavKKWyGgw125xXUx1xOUvhGJfL+MB3XTHdOb9nyaDANMw4MN2 +Ff18SMRkj0NzqmRaoEPg5dP0ORcpWJjM5R7Qt6FLnyfx2dhWNltyBBtgSTEVAjoN +Gcr4EgpmFEpA3aaG5QmYYJ/b9m2mWUpnr1iVmeDvadKu9IAi7LgPpV26ar4D -----END RSA PRIVATE KEY----- diff --git a/experimental/packages/exporter-trace-otlp-grpc/test/certs/ca.crt b/experimental/packages/exporter-trace-otlp-grpc/test/certs/ca.crt index 27e1d6826b..c194f04954 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/test/certs/ca.crt +++ b/experimental/packages/exporter-trace-otlp-grpc/test/certs/ca.crt @@ -1,33 +1,33 @@ -----BEGIN CERTIFICATE----- -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 -g2LKPYSY8A== +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm3OXVbMd0t2r4x+Pg4fecPeFhRzsg6 +sp7AM4UYlhb0Xkx8ij3q0E47uQM/OSari6qi7p1Un6nzgaXmhosaNkVXaKV4dQ4g +zKqrvC2+nTYU4lwss4Rx32CQxOKXEvN5FPwLTNo903PP3wqJyVt8syN0CDW953m/ +hUdkNaOe/lXmDJ9TmTTGyuPZFSlNlufbaNsBUM5chVFgBYDQIVy0jls8MiYLfao5 +tfprj+yS+lnTDl54dDTVVyAgV22SY65cnUgvO4bu3nzhS/h2Xg4/6/yAuYaRI7GQ +xvlA4pzx+aLaRDTJKiszRrHbQFv4PY+MmkVxvg2Oka4Vc2XMgDM87H0bd+beO8NH +Tf7UHU5AmIr2j2R27LWeELOqanm1HYn2VK182lD7OwQ5u5yqZZuke8bMMPJQEPUm +EwhIgXMVIlGps2+rDUEalPYkQ/BmAcs2g7fywW3RhIWCacggKoee1x9a6oiUM5yi +oDJ6T/C4WUQzIVebdMC25zBBlxcy8fK4Yus/DFTqM/eXPl4NVzbH/yB5tlU2GU0Q +V4tpGL1jsUy4b7r1bzuYVNfnKrarUGFF5TIHuvDo3voJNGb4hWBH/JdttG/9NaWA +HomZ8CUWR+gNEzyPkwq7upkiblKxJV7HKo79Eex+dlWa+Ru1F3kwYE200Y+a/wOF +Rj4+PfMu7WvpAgMBAAGjUzBRMB0GA1UdDgQWBBSwH/Wk2wTc+MEPAEornj1eGKra +0zAfBgNVHSMEGDAWgBSwH/Wk2wTc+MEPAEornj1eGKra0zAPBgNVHRMBAf8EBTAD +AQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCNkzOjjqH3qeQ0wT/Has5PSoWwRwq+B1JT +gg29bgEMD6dVkLdzgEuRVVkMtc/tCZAkA02pc0VN8+lNLW7ckNU/QhMTQYn+FgMR +cG86vR9loTnwUrxR4dS6Nbx1sQ7hpe2GZkWpTNmjh1duHBNHv9nS2JmMkRypqRne +oAI3/th1Qlrtl/zDn02/+P5/av0YJcMOcnRkULHnI62cbXHa2iPd/nENgH2xC6CA +EuYN/bnmOEUPeKljU1IZS6asjGMLdWLmpLs7oOcHGLD3pax+om69Pmn7rps8Z071 +WsJDHFCftItCUrg4KWwpXr77Vq4WAN2tOBdDHEZsbES6a54+7sc1QKOVSWwPuGEd +ShFHhTzoaB0dpwm6kLdYsEkC8JLIjV+Ikg5X3VTDITjUlHoJf2mxCGOzBiCnUr75 +Am0eBqlVcc/2aVk1tcVS9N7reY/KcMaAJvI314O9I94pYdIIm5jw3UmA9Y6HmpN0 +vYtQUF2sS5W82XoFD8bpOq/bx1o2ib2x32dfPQkVgd4sbmpsyN62Fy1HpHwXtXno +xGVaDzGSWj/7RyYyKhNmp3nfQsU0Tt6iVkM+N30vl2heZqEUgXxCG9qHVzWv9z6x +AJzuafjM8tviROpiHkvzsmq7uDhksGooKCi+m+eoEBJrd0J4gjngAi1NYjTsB2GT +4mvPz05UkA== -----END CERTIFICATE----- diff --git a/experimental/packages/exporter-trace-otlp-grpc/test/certs/ca.key b/experimental/packages/exporter-trace-otlp-grpc/test/certs/ca.key index 3ca1e8e149..00ccb04622 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/test/certs/ca.key +++ b/experimental/packages/exporter-trace-otlp-grpc/test/certs/ca.key @@ -1,51 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/experimental/packages/exporter-trace-otlp-grpc/test/certs/client.crt b/experimental/packages/exporter-trace-otlp-grpc/test/certs/client.crt index cb5c4508d7..fd05c9c40b 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/test/certs/client.crt +++ b/experimental/packages/exporter-trace-otlp-grpc/test/certs/client.crt @@ -1,31 +1,31 @@ -----BEGIN CERTIFICATE----- MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjIwNjA4MDk1NDAxWhcN -MjMwNjA4MDk1NDAxWjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV +dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjMwNjA4MTY0NDI2WhcN +MjQwNjA3MTY0NDI2WjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZD bGllbnQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMo9AlVbqKk0NI3U4IPhXARrA/9HCtW6TK8bNj+KqBETPJ0OV6Ep -FC1AUG8h6ZpQy1lAVchMOXXzVIxejJ53Wq2aBMELl7KaheEUAzbQNqSBxL7cY61l -sk1rd0ryQ0167j/tNV5h3FH4ZawD7vt2oGte4Dxipj+gFQx/MXD1j2vOKm0SO6xr -IdSWg79HRnMb6mJMCtTc6kvX5XDN3avwrhndsPKZREhs1ei6lhY4ip3N70357MB6 -vNF7euAMQU7KZ0uZZbj0lqINT+6jwEJ6yhkZM9ILKbxC8+IAhCAOsu2bKXtkhDSN -V+3Jr3x8PRWlhlCitGt9a8/DlT0RIfcXQHRmY7hdnMqt+7vJio56oHcyv2+8ap+C -rWr5OfsRuQvSs3ebn1zhDim0AspKOfdwGepPubgM/MuilYIi35L6CbRp+VbSGmIy -GUOGoWa3uykcMOm4hIK6bbFOGUTixbwIjRfxzuPfPLqIK+aQ5kBSUdDhK9LHpNOM -n0RihXBoRfE3VfnuWVcetp/FG7B5PTgCvP0Ss9QivTV/OQmi1juPa1ONmtZodZTz -eV2mDvZLQKFIInOQE/6dxMn+yrmYlQdV2nEiJU1yiKp5601OklqeX0BO1rWQy283 -AUwbAS5ZBmQeF4KmDZtEphdOTEDmu5YTyDhIvSK58Rq+iQq+CLmaYH3BAgMBAAEw -DQYJKoZIhvcNAQELBQADggIBABV90+TvW47WUdsZpy0eZayjWgIZvKqpWVcYI4Px -1zEGMVJvg8TPjPujGIdhkhxbabklqy/+s/im4ev9MnIGG0wckoYaJgH9KvtD/Br9 -3SpexmN9mQMO8/8299TWJBjS1q5UYjktvbuKFGpizs3+y4n88UmcXRh8y2Z1oglZ -WuXn5A5BJkpXONI3U615mXTf0CLnpbU//4z5VQe2AylksOgo3y7DHXz3iPOh15TN -EnDz7Pms0i8tswSbmS+NU2Clv7ACHhstdPoEqiN/V9gpjon1n+fBXaqMhaXI9C9b -NV9l5AW1utBAc/zlzRnKYtw/yrDW00KAN2FJbGefThJWPCYUlBx5hcCl1C8ObjIz -4b2+2TLdnwkMeeb8FV6mzTaQVWQ5Yr+ffQBqDhahEwjGyUOjzqFtGSlujWKLT4g1 -T9XnVr8KKU6UWDeHDp1lz8S9wo2l5DJN/S6u/SB9RXBOgzFVO9EWnbxkpR4YqdwK -WNP+Xhw9AO+DVX+/zK0PHF4f1z85E30R/V/CmvSx07jaXxK+ixcCykfb0DRvyVyr -WyVxz72LeJnsqWBSjBlwGslPsOzucA6RfN2b7/9rTObglKoKbEV/dSKoRZ34hFcV -nuiwRbVjVXH1az8FU8o+nG+anKW/jpVn4NcabYiHWH6qL+W3ZRTcWkyOOsSHHdOS -Hdil +ADCCAgoCggIBANewSXGnuCUsPcOnXPq7SUFTLaSM62x2FnJrzb6rne8KYQ615l6D +d2Nm7MrttHWJUBQS6iDCsEGlF/AWYO5adVuZ+Xf+S+NoWMXPTUuJYq+5VEeAS8PM +IriksA8Npn0hAMNTDrd/eNXQ5W4zLQOqUWnKcuE0P1M7gI3/rfX9/JXkZfUmkQGK +OSva3qJHOcG7Bc7vqbJnkFebIw87e2iHxNnUf5IoJmrUaOMdFiQyHBBoJyTVJ3wp +Ufr6Q2+d0sIyes9PV33DbB8DyKGdOfbLg4YmKsnAvnypC0p2Xw9yAnHlQX27Ngcq +tfzcOXx3QlNPxQDF3oNHzi8GD7ysex1z7PRIsZlLVQLshAdOfA+naktPezj52R8V +BtWaxgVFI7IA5X21reS25t01k/GXNcyIJxW5KSz00b1h8+mpz0n0R3Mz3HuZybAX +g5bnZ+91jOeQmTt08eMXjwAGClxcOqfrssfDvOnUSZjDpzEGDaVuFGVPA9hR/eKN +Bfo659rv45pYhtxoHLz1LJWoZ1uegmKrGF1w16K05k5mpzwH6fzqDzzbF1xyynGX +yfbIqsvsBniuWGmhMjlfT5+l0VG2GgsD7Yijv6SV0YZrVf85iA5q6XdKTBuKYmin +ZEbneEjw9kc9myMeC5ik7wHuksA/BQcja1TPwB4ZRbPEcfi2iFxbtsSzAgMBAAEw +DQYJKoZIhvcNAQELBQADggIBAGdcqEI2l/dKxu9vPuRC2/VRgjgDBN4UJJCY111T +2A7GsGzd7lRhtxB5ZzClF77UiRJG+cvFai00c9+L3wp8qy4sZWY4MaJIWoKRh72Q +sRiH8AskeIl3uvvvaH86bbmpDo7M48Cs/zXZo9VhLzD8ZuHcS1mdjkOcnQzkbSzR +YeM9ActeuJRmsdQ+gSzCTvFqmGutL6xvM8b9a6PwyY5nPxS+eh0/7KNp+EXBvp0U +MWp6mMfq22nAwAQRLbvh5f+a/4GSwg73By6hwnsgb7tpBBJ6ppnKAIALRf7l5JwS +V0LM5Vnpp4J4JjdYyQzk2xkxi+UGIP1IRigbeWc4K3qgg6BUUkfSf4W9oJD4JCa2 +cOsqnKqFxTwXT4b9j9qsPpg7mUQ2+UtU4Lv3h/7sXpbpx0ldb2Hnaq+JqUz0l/7c +54y3+nzke7I4CWKtLJUSamQiyOC3CBVkRX0YEYUBhMXim6dKAfiOEV6K3bwiU+YZ +aDe0lEeLbzAp87DKRTAvDYhRMIFtD3g2qmYrWpQ4gj8vSEorNAfg3kVHMFRGlk9o +jaFduAz0hKk+QG5SgePXMph5ZRXGRq0FnDbF2gZ7WV+jZiIhsYGJ43+RBWHh4HO4 +P4h9eOWQG8AxpDRmOo2KmyPbV0V/eltC4N0oOAmWz+i0qqulnpG4dOzQKpinRBBr +jPt5 -----END CERTIFICATE----- diff --git a/experimental/packages/exporter-trace-otlp-grpc/test/certs/client.csr b/experimental/packages/exporter-trace-otlp-grpc/test/certs/client.csr index 30ac376794..b783896725 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/test/certs/client.csr +++ b/experimental/packages/exporter-trace-otlp-grpc/test/certs/client.csr @@ -2,27 +2,27 @@ MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGQ2xp ZW50MRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDKPQJVW6ipNDSN1OCD4VwEawP/RwrVukyvGzY/iqgREzydDlehKRQt -QFBvIemaUMtZQFXITDl181SMXoyed1qtmgTBC5eymoXhFAM20DakgcS+3GOtZbJN -a3dK8kNNeu4/7TVeYdxR+GWsA+77dqBrXuA8YqY/oBUMfzFw9Y9rziptEjusayHU -loO/R0ZzG+piTArU3OpL1+Vwzd2r8K4Z3bDymURIbNXoupYWOIqdze9N+ezAerzR -e3rgDEFOymdLmWW49JaiDU/uo8BCesoZGTPSCym8QvPiAIQgDrLtmyl7ZIQ0jVft -ya98fD0VpYZQorRrfWvPw5U9ESH3F0B0ZmO4XZzKrfu7yYqOeqB3Mr9vvGqfgq1q -+Tn7EbkL0rN3m59c4Q4ptALKSjn3cBnqT7m4DPzLopWCIt+S+gm0aflW0hpiMhlD -hqFmt7spHDDpuISCum2xThlE4sW8CI0X8c7j3zy6iCvmkOZAUlHQ4SvSx6TTjJ9E -YoVwaEXxN1X57llXHrafxRuweT04Arz9ErPUIr01fzkJotY7j2tTjZrWaHWU83ld -pg72S0ChSCJzkBP+ncTJ/sq5mJUHVdpxIiVNcoiqeetNTpJanl9ATta1kMtvNwFM -GwEuWQZkHheCpg2bRKYXTkxA5ruWE8g4SL0iufEavokKvgi5mmB9wQIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBAGsOxCfMBI11h5BOvDgKpVlAhxHlwyitXGPQHcsr -tjOQi0CRnkcrUMZcgnjX3OPCD3ngjZJW02m82BrN7WJJpSLzEKpnKP6Y91BXfHma -3qPFmMNkXCZ8WRjp6K/l98z9j+lFksN5y2BJCqf8oL1iURPYuHlgRK3LhpR4LOPt -JrJYwAML4hr1g93ejdwGc1LjNx8dyAriCM7h7IwhYGgnT1kYu/shVgT6SH0+ixAq -PNIOekCJH75k9C/QP/hPPARbAzD5of69haLeAcABik/cH/RRuDHTTVxgHFfV/W8r -BWwf7IIxX0iEPCQWxW1Q5SfzOmP9ICLFln4s38MgEGIyGqxgfkSi3nuLkwKTLB1j -NppTiO7Da4Vvso85hdLqNXvE3J6VSiu2c0oDf/ZZYkSizEzt9ESPPp3VcNj2MDbr -CxwhzV018wovlTunUSwKWvRn+syT10bnzZX/+QarZ7mfq57DPfMHNiiPM1ej26eE -Z7A3R3J67H4Ifp5Ua9jdga6x0RfOBRDuZv2N861eVs+9jSIC+hmrvQ1TbTvzHFVB -KYE1UBDRNijuGwsYgZ74vPKLGgA7cFs9X2JXzKc/0Y9opgBltZlNBF97XZSLDw1v -VaPCUVqOU6VKamPX8nVhkpHoUdDSl08T+VKwP5Da4oJHmSZMzxRQLl2TZnIru14+ -uVcP +ggIKAoICAQDXsElxp7glLD3Dp1z6u0lBUy2kjOtsdhZya82+q53vCmEOteZeg3dj +ZuzK7bR1iVAUEuogwrBBpRfwFmDuWnVbmfl3/kvjaFjFz01LiWKvuVRHgEvDzCK4 +pLAPDaZ9IQDDUw63f3jV0OVuMy0DqlFpynLhND9TO4CN/631/fyV5GX1JpEBijkr +2t6iRznBuwXO76myZ5BXmyMPO3toh8TZ1H+SKCZq1GjjHRYkMhwQaCck1Sd8KVH6 ++kNvndLCMnrPT1d9w2wfA8ihnTn2y4OGJirJwL58qQtKdl8PcgJx5UF9uzYHKrX8 +3Dl8d0JTT8UAxd6DR84vBg+8rHsdc+z0SLGZS1UC7IQHTnwPp2pLT3s4+dkfFQbV +msYFRSOyAOV9ta3ktubdNZPxlzXMiCcVuSks9NG9YfPpqc9J9EdzM9x7mcmwF4OW +52fvdYznkJk7dPHjF48ABgpcXDqn67LHw7zp1EmYw6cxBg2lbhRlTwPYUf3ijQX6 +Oufa7+OaWIbcaBy89SyVqGdbnoJiqxhdcNeitOZOZqc8B+n86g882xdccspxl8n2 +yKrL7AZ4rlhpoTI5X0+fpdFRthoLA+2Io7+kldGGa1X/OYgOaul3SkwbimJop2RG +53hI8PZHPZsjHguYpO8B7pLAPwUHI2tUz8AeGUWzxHH4tohcW7bEswIDAQABoAAw +DQYJKoZIhvcNAQELBQADggIBACboOarzimaArw3lDm6ET5yiU7NxTWtnWwFUOoSh +qS2cvumnCokUlrDyMSSKoHl2i2biUd9uiHuEqlh0yufNgnTsyAXLg0UiBHAv5Tos +Esc5A+JTV5ehy+Zrjpl3Ayh8difS8hJEBjMhH+7rCN3rhpvwkTSaXDCQTBzWPhQ1 +R0EIho/SNOh5mXQKAUWwhtleI0sEJC/PqezGfN+w+URHnzE7YMwg02bvoMxBEror +YVddG4o0nIyd6CPg++K7TBzYGGOf1CUCrI9S1bBn3jcv2mq5YgZMdLEa0HkA9XzU +J/dTSGz5pJbkoaX9IHv8a3uoc+V1jdNWZRmTUYG/cNoAFISoG+uuJLgesF5l+vxx +GUwkE6wj4bNYR/Pqy5963oDmA3ndBzR1wtCZqIsLX3t3A9fLLtIEgeN/XDSvNDBs +YdwBrx2HTatK7QCJ5e+4ACs6Wc2c1nnDviPddpxUgl0pHKcMbT+xNk7bY5fjl5Qr +wzuBNgvQcsZxNNvI8bs13k/eBmKrKOV2WUP1mHRzSoxPX3gzGRSWCe/7QR51oWlB +Qkb6OGVGLCKPnhIKFeZ6G1Qv8q7/hOOlmWGO4bN7s5fjAKEsm3JV1xrsqSKRofRG +JfdPjQD88jewIAk6xGSMKmc4usQN+y/IfU8yZ57MHSHULccA1Wl/VXfgKCAxS5fK +uXtm -----END CERTIFICATE REQUEST----- diff --git a/experimental/packages/exporter-trace-otlp-grpc/test/certs/client.key b/experimental/packages/exporter-trace-otlp-grpc/test/certs/client.key index fd649acf54..58414d8d59 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/test/certs/client.key +++ b/experimental/packages/exporter-trace-otlp-grpc/test/certs/client.key @@ -1,51 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/experimental/packages/exporter-trace-otlp-grpc/test/certs/regenerate.sh b/experimental/packages/exporter-trace-otlp-grpc/test/certs/regenerate.sh index e1f1af5b54..84637be753 100755 --- a/experimental/packages/exporter-trace-otlp-grpc/test/certs/regenerate.sh +++ b/experimental/packages/exporter-trace-otlp-grpc/test/certs/regenerate.sh @@ -8,15 +8,15 @@ rm ca.crt ca.key client.crt client.csr client.key server.crt server.csr server.key -openssl genrsa -nodes -des3 -out ca.key 4096 -openssl req -nodes -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Root/OU=Test/CN=ca" +openssl genrsa -out ca.key 4096 +openssl req -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Root/OU=Test/CN=ca" -openssl genrsa -nodes -des3 -out server.key 4096 -openssl req -nodes -new -key server.key -out server.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Server/CN=localhost" -openssl x509 -req -nodes -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -openssl rsa -nodes -in server.key -out server.key +openssl genrsa -out server.key 4096 +openssl req -new -key server.key -out server.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Server/CN=localhost" +openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt +openssl rsa -in server.key -out server.key -openssl genrsa -nodes -des3 -out client.key 4096 -openssl req -nodes -new -key client.key -out client.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Client/CN=localhost" -openssl x509 -nodes -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt -openssl rsa -nodes -in client.key -out client.key +openssl genrsa -out client.key 4096 +openssl req -new -key client.key -out client.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Client/CN=localhost" +openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt +openssl rsa -in client.key -out client.key diff --git a/experimental/packages/exporter-trace-otlp-grpc/test/certs/server.crt b/experimental/packages/exporter-trace-otlp-grpc/test/certs/server.crt index da8b6beedd..ace156a29e 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/test/certs/server.crt +++ b/experimental/packages/exporter-trace-otlp-grpc/test/certs/server.crt @@ -1,31 +1,31 @@ -----BEGIN CERTIFICATE----- MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjIwNjA4MDk1NDAwWhcN -MjMwNjA4MDk1NDAwWjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV +dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjMwNjA4MTY0NDI0WhcN +MjQwNjA3MTY0NDI0WjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZT ZXJ2ZXIxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKF4wbhjwTd048CdtquNjhuVGIvPxpdNaCPXbSJN9joRqRwp0vt4 -DnRfLWda34UzZ9fxXN4HTgYrzLYkrdOUhvourhjka2mjcs1kOjlfFeGwgJe8LTVG -6qE+LdJFw4xPd53dZtsN1dQaj7e/GlK4jNI69qtq16dnFswjbzAI62or9MHdzY4F -fEFReMr25kGSo+/nNwI21PbiMhZ+OSTuoSgomx6JmXUYG9+uZFZTrE+fn47jMK4w -Bv1W+U2D1w2Aof01lyfQQ/giMY6XUAIPHIyBEvFyF1sdU+ZJzubl3vPGzf84If8+ -31iYsYEoqR3vwYs7+fmAWXOcXnjL8N0QqZPT37fsKLF1l+WCxhWLMlc8x9Kq8Gez -mOJRrR3j5Ui+ux6TpQV3aIXj3ykUIeDIIwRPNsDrwzJLNG28YVMV1rz4+V2/MsQ4 -ML1MilP3ZB9uxUN391XulLxsQI0olv+LZqKYnqqeHbFDt61Hr4WmefqKqB4rlO1j -WH4SLCEykzToFQpK9MQpPmUJ2UZrudN3flJGZ8bpnGu2gA2rgqfejB52D5jpZTzT -RU9OZp1v6JWjjRh3vcqVSin0mPLEXQj11cpKOBzIBEjqoPtpnjH8SQd9mb7n/o5q -8gLSuTcOqn3lLH3DvLTBilsmNcIbBItpC6QGc5EVqPlAJKIvLvOGb6B5AgMBAAEw -DQYJKoZIhvcNAQELBQADggIBAEdYvhg/TGjtzlJIqUv1qfyJr6gOm9Ydoz1WDaau -HJTkmI7vCeHUDxnhXEq1lYKt89XvUHsfI0lkCV2Gt+wppsL3ZZIGsv0C70nIPTIT -egPoBeUpqk1ZtPN3VEvgD3GDjAJzuvaL1Uhw9Yt4qKxP6ozyRfhObbTSomLNplui -LGGd6PqVF1vDAx6Ubw/LaNQzVjzQsMm4AgafakIh4c9aA3zxyZvUwAvT7ZVElMHK -moEudZQzL9Cx/Y9Pgv+z3JcXpT7UbDWSB/dVi5ZgcTtzHaYKAMFaunxNYqwWoicf -zB1uk2QOLgfxteWBjeaNl9UfXShGm+iGRoVVL7VrayO6+ScGchUGN5h1qR4xzWpA -2QKSb7t1oEW/GtrV6AD3jJUjcna4LP6DdpY/0IocgU5KonR0eFUNrZA8hUsXquQ0 -/Cx9d7ktdEDudeS4tJywF1CI3IcIZQ2vExJ+NjdlAFIVFkaqFFLhv/cCcGaBpH7X -6dc5bOoqyOgX97yBJJX9Joz6ZoAp2XO1tvycxj2g84V90lDsbTurmyuoR8yTcBbE -FNseKWNRi4fmsB1etz/HX3h1qUPP1ze+fY4C2zPleIB6uSKM5ZfODpMDejHQRF29 -YshoFbAJ19zOHYY+5LYHoLGJlN34TJ4ouPpAtRIQu4ebQZwMxddU1759sCIIwkHe -V5d5 +ADCCAgoCggIBAKtVnxPqCZheCuqePfLknxc+6MeyYkf494U8WWeZo+yirYV3zY70 +1KhKZ+M+XDqhrBXc7IQHZd2KKxYBGnrv9yvbllmtZRdnk3hnn8B4eNh3w5gCRKPo +GSTeiNN7WEIRwYZNkr8AWgeoYT1jN8SAMn5+qSqKSd62Z1BPJNi0eQmTVxgLZqzx +92AWBZQl9rOme+1zV6ohKcR22Of3yUl6476L1rYYcX0DXp0QFkhK0TFKNt3cHxqq +WTRuMTnyCj7woWRtwclWTdO2buAkJe8cIde6rcbaUAX9jTdkbAgYAB9MctEKqasO +MqFyMzweS3sG9oUnmd0/GRL9as314xTZuz8fFnfj5l0BN6thVMmvEEYU3rTLQRKf +AKWzI2VrU+5wIxN8O/4ZbriQ5ae13p6TDYilSZ6kMxSzfOM/A00hlA+DKMS0o8g8 +V9Y3wcl3aSSjoZbH7XS/uDEueodudz9V3HxCk7Wc41SpunQPFprmPDWtjiW0jcMD +3kHV819r2F8aidKN94Q+3KI+N/mwn1QdDVsquiCq0wbR54i3CoAkQbi5YeUdEZD6 +/mNLs/BABgzSbANw7Fn1Pd9gY/JIsRhMskcFRqXe9tOqKk8/GxMv/r9MgJn6HHlk +iDa3OZsoOtFbjjOPFoy/Xq9YMi4ODnJkEhe7BSsVl/wkDAUdg7Zfu8XVAgMBAAEw +DQYJKoZIhvcNAQELBQADggIBAEft+R+qGyKffiiJpYWLPn0C9SmpjZiWPK331n57 +Nk3GA8u9gRgD1gyqqLr19r86nLArF8jcB/nChPB1A9ysW3xyTNvpOlAwYvEjxWR2 +tJr8wiDucAd+SnQud6e+5PI5e8LnyxYoeoZ+i6hMbhNV70NthoINHMAQx+5NeSpa +Q0GJ4d0XA3W/8Pu6oK7O0QkVovVut73Koz5DqsF91zFJp7SjVKaCnnjRKyU8wbg5 +uTO0TRheEtx3AeEXNps5Yhq0daLTnmnuFeyaJHm2F1QuBmma1TTwIF3HDclv2wLn +Jp+MWG9yoN9oEJLqS/AvDu1BltPSuvnYgLZr7cl0os+TEqpzxroa4ziE98dEiy0D +K4YQ59UTz6C8Ps0uX0hcs3jsvZOkBWptusvJBfZN59xLJAVmF2igkgIBKoiXvXmv +fXDx0hsOBg2IPe2O8lLHlFKlJZlMc+prH1iD0Xv6HefSP4L1eZHU37zjrRf/GiNX +r6GoEhJR2pKEoZQT81xpYp/w+qjzWcTl/mLD6FEePRzV92h3ubjRWBB36UhLtnEG +LJgp7yq3aGu7rg9rnuz8J6DG8DStE9rNuRjkV1O2C/PvR97XmVoIqbrMlxX9MUQJ +XxLm5dqBz7EVuhDJSyp4zCkDYsOj1y/SLL2O3cTyQQeZg6jlqripNqWnviAdTWe5 +JIPp -----END CERTIFICATE----- diff --git a/experimental/packages/exporter-trace-otlp-grpc/test/certs/server.csr b/experimental/packages/exporter-trace-otlp-grpc/test/certs/server.csr index d8ab7deb4b..b421a7a60c 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/test/certs/server.csr +++ b/experimental/packages/exporter-trace-otlp-grpc/test/certs/server.csr @@ -2,27 +2,27 @@ MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGU2Vy dmVyMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQCheMG4Y8E3dOPAnbarjY4blRiLz8aXTWgj120iTfY6EakcKdL7eA50 -Xy1nWt+FM2fX8VzeB04GK8y2JK3TlIb6Lq4Y5Gtpo3LNZDo5XxXhsICXvC01Ruqh -Pi3SRcOMT3ed3WbbDdXUGo+3vxpSuIzSOvaratenZxbMI28wCOtqK/TB3c2OBXxB -UXjK9uZBkqPv5zcCNtT24jIWfjkk7qEoKJseiZl1GBvfrmRWU6xPn5+O4zCuMAb9 -VvlNg9cNgKH9NZcn0EP4IjGOl1ACDxyMgRLxchdbHVPmSc7m5d7zxs3/OCH/Pt9Y -mLGBKKkd78GLO/n5gFlznF54y/DdEKmT09+37CixdZflgsYVizJXPMfSqvBns5ji -Ua0d4+VIvrsek6UFd2iF498pFCHgyCMETzbA68MySzRtvGFTFda8+PldvzLEODC9 -TIpT92QfbsVDd/dV7pS8bECNKJb/i2aimJ6qnh2xQ7etR6+Fpnn6iqgeK5TtY1h+ -EiwhMpM06BUKSvTEKT5lCdlGa7nTd35SRmfG6ZxrtoANq4Kn3owedg+Y6WU800VP -Tmadb+iVo40Yd73KlUop9JjyxF0I9dXKSjgcyARI6qD7aZ4x/EkHfZm+5/6OavIC -0rk3Dqp95Sx9w7y0wYpbJjXCGwSLaQukBnORFaj5QCSiLy7zhm+geQIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBADoGwPR/TLe0PwsB2orIjrHnsZLYzcHxh9JdRaCO -Q07NvbocAqN3nIiHaUI/IqZG3aiBQb7i98maE2fcFVgsMoRVLB2GsQw+bzoPF+45 -kbtff4L1mHEt8AIIL063AepTetAMUfojpoRI0JG6pChzHDxuud++kPrz50wR5eEk -OhDjX46qh8VxExH3rfU+VDY/FvXMJaMLa76HOmY93g/p+C6T+SiTrs+QEPqWsMKa -eHJTTP0PZx8ikdT64aJpDiOmXVthymPPSZvDEWzlJ7RF8y0p+SoqPM3Pv8/M7zq7 -2dRL6UABTMGtBMEtj5DDZYWTl+1O8Yn4xhjHBcDT3ug3IvnCKCpX2ufi+wJzaWEu -QFAL+N5Sc1rZxklqWKprQeGBiEIE3UXdDA6Xvom85gLoaWoH6nMFvDNab+zJl4Ty -0Iiciq9jzUq4eda/TjgPxDs6RNlJxSXs1lASUR0Jx+Nb9wH2R1n6XQJhcOrz6nJ/ -T+/INYf5VrUdvf9P0PRub7Ga962fBDUG6WQx3PPjy/iEmffN/nsBXXzvQiw7ObW4 -eNCQob2H/3lAdxOs2txKhTCgUV9CzUb2P4Uq4s26n0yA6qpVG6Jgp14s+kVrgFYQ -KjhoFMWXtN3YqETnVNe6A9PEwkSpCm/JyGTm524ok0KyrXo1nSm1WKZqEIQCpp2D -vQFY +ggIKAoICAQCrVZ8T6gmYXgrqnj3y5J8XPujHsmJH+PeFPFlnmaPsoq2Fd82O9NSo +SmfjPlw6oawV3OyEB2XdiisWARp67/cr25ZZrWUXZ5N4Z5/AeHjYd8OYAkSj6Bkk +3ojTe1hCEcGGTZK/AFoHqGE9YzfEgDJ+fqkqiknetmdQTyTYtHkJk1cYC2as8fdg +FgWUJfazpnvtc1eqISnEdtjn98lJeuO+i9a2GHF9A16dEBZIStExSjbd3B8aqlk0 +bjE58go+8KFkbcHJVk3Ttm7gJCXvHCHXuq3G2lAF/Y03ZGwIGAAfTHLRCqmrDjKh +cjM8Hkt7BvaFJ5ndPxkS/WrN9eMU2bs/HxZ34+ZdATerYVTJrxBGFN60y0ESnwCl +syNla1PucCMTfDv+GW64kOWntd6ekw2IpUmepDMUs3zjPwNNIZQPgyjEtKPIPFfW +N8HJd2kko6GWx+10v7gxLnqHbnc/Vdx8QpO1nONUqbp0Dxaa5jw1rY4ltI3DA95B +1fNfa9hfGonSjfeEPtyiPjf5sJ9UHQ1bKrogqtMG0eeItwqAJEG4uWHlHRGQ+v5j +S7PwQAYM0mwDcOxZ9T3fYGPySLEYTLJHBUal3vbTqipPPxsTL/6/TICZ+hx5ZIg2 +tzmbKDrRW44zjxaMv16vWDIuDg5yZBIXuwUrFZf8JAwFHYO2X7vF1QIDAQABoAAw +DQYJKoZIhvcNAQELBQADggIBAJCMEdjKyklN2izvOhd7+JMXm/ClW3hjowbu+csO +JNz8NqUNLrKJjFyV3yAUGWuyp3z982S+XGfcm3nU7n9AJOjT4DLJId6opOtA6CSp +KTRgVZmeViL6O6UqBLTacz5DDjwMQXxszc+QpU53cMT6Y7VMvIOhQ6AmIvz1v71u +5gaYmlbfXVlmiPHEKRsQG9/DNIPe1mHP0p+S9qYKmCx7Jlpee7IstW/hNjt7alDn +uFaxFjxmCCSdWaMRyMW/qNRks9q3VdhJPan+amFeXceoEG7SOKiFiOc8A7DribSm +iKc2YlOw14xqc+cJutiKBvoBMri2eh1JgCbPT4ufVGFpbDkfYwAJxWx44Eg0X90j +gJUw8IRuHQZkEYss6jwFMFcOqjpe+AqrssOl4GZmu5gcaiUnj8PkSVZLTOrLilPg +sSDjzmoHdv4QcBppTrjj6PyR5Xd6DeGasWkMPvIPjiPN3mOhfxJ3C87atMqOhTLx +em7vFOBegAW6g40J9JD1XMoI/zFnTU8NevZQgCyx/Tq1XNRmUeMA6y/qpfTNKi/f +F7v/7nDWoxBgpOw3J0E9R+6rxD7Cjb2RWZEf20ZGdNBlPE+UG9c9b3HC3IHiwRHb +L9Fi0251w+fkaPX8dojQKErCEknqJ1SCP5S5F5g1QCQby22Y7LQsggMMf94s/wQX +4uMh -----END CERTIFICATE REQUEST----- diff --git a/experimental/packages/exporter-trace-otlp-grpc/test/certs/server.key b/experimental/packages/exporter-trace-otlp-grpc/test/certs/server.key index 9147802e7d..80b9cea7bf 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/test/certs/server.key +++ b/experimental/packages/exporter-trace-otlp-grpc/test/certs/server.key @@ -1,51 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/experimental/packages/exporter-trace-otlp-http/test/certs/ca.crt b/experimental/packages/exporter-trace-otlp-http/test/certs/ca.crt deleted file mode 100644 index 529ce2f7b8..0000000000 --- a/experimental/packages/exporter-trace-otlp-http/test/certs/ca.crt +++ /dev/null @@ -1,33 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFozCCA4ugAwIBAgIUa6OxgyEYxNjpjac0jTAKn+IkGTYwDQYJKoZIhvcNAQEL -BQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQHDBFPcGVuVGVs -ZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9vdDENMAsGA1UECwwEVGVzdDELMAkGA1UE -AwwCY2EwHhcNMjEwNjA3MjAxMDExWhcNMjIwNjA3MjAxMDExWjBhMQswCQYDVQQG -EwJDTDELMAkGA1UECAwCUk0xGjAYBgNVBAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0w -CwYDVQQKDARSb290MQ0wCwYDVQQLDARUZXN0MQswCQYDVQQDDAJjYTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMbVyp3NCtDwKpGbV+MCML63o+vGVhpd -Dlt3ncpcwz0FMK6UJDXzTe4joKCaezWto3Bmhb28Lezcf8AdzmTdnoENAaqUX2SE -giGVoeaJ/M1hW1IiOffa9zIMkt6cwf8MUUMl5kTRMdAqmpikNqN0rqNpaGuqBYf9 -kvDy3hw+dj19hKEeEXI2zt/HYDOBHYgpalWiOS8qwj0zSfxAUeura+eXKMlx0JOY -h5N25OUH1oLt1flhyuHnwRThKbvyMnL36Ey+G7uCFH0hQSGO0BLhg1LPDWG1PmTn -KzsvqaIgDF/tMCXykvaWcsSxrhvsNeOFFmmkKp1ECVOFgFYsGuK8lJlEvm6Owrvz -4X69L0phCJtaCCaSUFdybqx+G2ZKLZNqTtnMw/3YECp37KyrRd75Gy1UrU031+XC -Fpt4pHw+3isjAOf1bj32F2Ed7aaqVqM2A7m8AgA0m22J/f+jBzmv6UJN/kvfFXzC -0lbX6b1fGj49vU9WEO/o+F3qaH/c50HPf45AB2d4pWbDl5alXZei58ZyEemBndlv -XcGPtVR9S/5rphlX1vAIOT7ePWgUVkAi5fB/rLVGyC1FwA0zYvdyj9CVigJNs29G -yftsvMynF8TL7/qCIGNz72qtW/Pn227OI4WamvYhX6fJwJirXwTEQhAfKXljocI/ -Liqxx15Sfs+3AgMBAAGjUzBRMB0GA1UdDgQWBBSMocah0cTqX4owoPL4+zV1pe5F -QzAfBgNVHSMEGDAWgBSMocah0cTqX4owoPL4+zV1pe5FQzAPBgNVHRMBAf8EBTAD -AQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCIpnaYSMXT+nrdOgw2zKHTk47wANGf6nfK -76VwsQfzVkJm/tzEgq+saEznGRW1ttdQfXHJM3NCfneVhjXDkihrHsxiL4S+5OMq -cusp2tKupGXlxwOt7tsAhH5j4SQLyEUiWMmm/Wvwtx2HWuNO8LZGhoAcUrT7r94f -vqr3tYyb3D06/rBRj2QcybYGJHsQAULEQvmWJvCveh5gqxkRjDJlwmqV/lIarPCt -diKbsZqHJMNaRMbgsxV8hVSvD6RKtBG+K8hpuHF2ZKfzb7Yt1IDPtUGCL811ykzh -2PjumjaQ2JCP6vtYAhTS1r/+cbOi+4v5JzF+kxHxFc9vK/gzBT88174S2MQaqwhF -jQiS3YfElLXkr37E9gxMKLDanbFsxPPiXO96s0RSjNK2mzSbz/gfmsjGqxKNq3t1 -IwAfjePmmx4FJ1O/FwOA5RWE+KRhzNucktjxz39oZrnqtPeTqHnAivNOyK3XB68v -5HRjP79TrzIbLCauyJD/qM5UtCRXW2La1rsH8lIBtcxUcZOkvDnE6Po44D5hH2kQ -swRqF9Vy7PL9MWJPTgn4+WFLNoBe+nMY82y7xstRv7c2ctXpAxSWxIXgBN+B9nXo -3Lqpgg0UkjTiCp13Mejq/7DYAw+/Ou8bxWs3BuCQvFcG2+FBMWh0dL1FxVq3BPyq -oveTgr1sfQ== ------END CERTIFICATE----- diff --git a/experimental/packages/exporter-trace-otlp-http/test/certs/ca.key b/experimental/packages/exporter-trace-otlp-http/test/certs/ca.key deleted file mode 100644 index df94d44c38..0000000000 --- a/experimental/packages/exporter-trace-otlp-http/test/certs/ca.key +++ /dev/null @@ -1,54 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,7EE0C188F59416E9 - -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 ------END RSA PRIVATE KEY----- diff --git a/experimental/packages/exporter-trace-otlp-http/test/certs/client.crt b/experimental/packages/exporter-trace-otlp-http/test/certs/client.crt deleted file mode 100644 index b1519dede6..0000000000 --- a/experimental/packages/exporter-trace-otlp-http/test/certs/client.crt +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV -BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjEwNjA3MjAxMDExWhcN -MjIwNjA3MjAxMDExWjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV -BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZD -bGllbnQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAN1or7F+548RpVIgdrzYmuWgKMfWsO5FhgqpGp+xuoVgMMTlZM3i -yiarMnAE0G6ZVMwqCeXkiUGL9QLatJ1S/HO2sWLUkWaPD7X7O4k1yGtl6UsRcr4K -+YBUbucxfrCQjaWKlBc1GMBrDyY/u/rl0CIYu3GtegniN6HG6rBXC2e98DVctQ3M -r/RXB9DWqMC2KW2X92X+FyWqTfGjv8wjRnhQdDNXPA/PCembzhfCL8VlmG65rDiz -VQxiTotTOCmaxULdF307jorMTLIHZVV2OnAA/udeDcxITnKcksLiRKKAiHUXMIPq -RGxNtLX1sdBD/FoQ28sr8o6Ko7qb3uaA4CZhp2I4RR925oZISyObzY3QxrlafN4g -hFnWkTFJY0K+43cxta8K3gAnQXxN/BANDEydS1YM9adqYbt09wctSUjMqJHGZWnn -IVOged+/DEIW9EmyLSPM1DC1s1owOrgwBXzHRRNXuUFjZPPrMC8TkBexNjsapLjr -nE/xa5cB80DIntkM8ysfLU6p39NihM2hmeyI2YS8osheElXEL3dz5vM8Wzv28qgF -PvGpdYz6cAibE9qJ+oT416dVc+9G6i1fcBl7X8w+KUGVFsRnftovwjoSToGlckqg -dv1Tsf6FBDpSMro3BbGogpDhkSxy//eWvzejjHBemz06Kh2DGkKhnT9rAgMBAAEw -DQYJKoZIhvcNAQELBQADggIBAIGWBdgWOoqGIy0fuSbqQgjgrhDrPGBV15TfvB4T -84xfk9YZxdRKkG3J65uLffTnnotZs6gqLx6MfosR6zQYhSK27fTXpJJdRaI55kgT -2e/xNCe867Bz/3nW+vwWIGTuFn6hFq9f8HNLZMpHu3DClj7AB7ga6qp1uFWIn5oq -xC4da8/JTR6FY2srIktyH5Vr64FnhtX9cLSa/U7df7asZjRUm6ndPS49X01G6BJQ -vH0RO1caCCbpDVqPwJnAf3BXD1MkKsNe4hULt25XCxSsyM7v0Ru4KcSSGxiYHowQ -+VzRdJVYe8ytpcg1eVlWutOlDXGLaeGNQ0/u5OEQ8iqZvp1/qiq/LQIRZlxa+ZlL -vsVAgOxolRpm6W01cYCCWX8utsrMq8lKjMIal0SZhj6oP/rwtH8UVRhqhrQyAn6y -K6IYGLGvXGacJYuHpcAFQ0f8LUCCs0kxN/zZOZ98atF0MvgUWKZFNgrvcX5se8iV -kS/7UHH4Ie9ZO6Hv9IvnElOfZY9dnFPNxcbWnA7U0kLa5CWh8CD55ScAGHrvcz3O -JXPW0SHb2xZmXDTfgmS4vMI5PYDyipSCoUDClA3BPr/dkAVssj8SMikJZWhVvDrK -IcKRHpkmrzLJbatxeDNlCtLRSAXeuTheLqqSA2HACReNYkQLPd5V7mY6uRw3d3o6 -3rKe ------END CERTIFICATE----- diff --git a/experimental/packages/exporter-trace-otlp-http/test/certs/client.csr b/experimental/packages/exporter-trace-otlp-http/test/certs/client.csr deleted file mode 100644 index 2d99fab566..0000000000 --- a/experimental/packages/exporter-trace-otlp-http/test/certs/client.csr +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH -DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGQ2xp -ZW50MRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDdaK+xfuePEaVSIHa82JrloCjH1rDuRYYKqRqfsbqFYDDE5WTN4som -qzJwBNBumVTMKgnl5IlBi/UC2rSdUvxztrFi1JFmjw+1+zuJNchrZelLEXK+CvmA -VG7nMX6wkI2lipQXNRjAaw8mP7v65dAiGLtxrXoJ4jehxuqwVwtnvfA1XLUNzK/0 -VwfQ1qjAtiltl/dl/hclqk3xo7/MI0Z4UHQzVzwPzwnpm84Xwi/FZZhuuaw4s1UM -Yk6LUzgpmsVC3Rd9O46KzEyyB2VVdjpwAP7nXg3MSE5ynJLC4kSigIh1FzCD6kRs -TbS19bHQQ/xaENvLK/KOiqO6m97mgOAmYadiOEUfduaGSEsjm82N0Ma5WnzeIIRZ -1pExSWNCvuN3MbWvCt4AJ0F8TfwQDQxMnUtWDPWnamG7dPcHLUlIzKiRxmVp5yFT -oHnfvwxCFvRJsi0jzNQwtbNaMDq4MAV8x0UTV7lBY2Tz6zAvE5AXsTY7GqS465xP -8WuXAfNAyJ7ZDPMrHy1Oqd/TYoTNoZnsiNmEvKLIXhJVxC93c+bzPFs79vKoBT7x -qXWM+nAImxPaifqE+NenVXPvRuotX3AZe1/MPilBlRbEZ37aL8I6Ek6BpXJKoHb9 -U7H+hQQ6UjK6NwWxqIKQ4ZEscv/3lr83o4xwXps9OiodgxpCoZ0/awIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBAE8wUkuBEsxe96X3U2vjWCfD/hB30cF69UZ2NlR6 -2UIZbjvewIy43ozr2uaCk1+US21NaaXKinNrZ0VElWKLVXWkZidfuoGEz0gY+XDF -qyjlfaYlCTexPUSh14nbpLsT0DXvHa5KI3Kq2ly/sciVB78SlH3sRzmJt/qkoaIN -f6PI2Unoqf8vJ1xvQr9z/ODc06MoX5g+ezM2vShZ+P7773bSVL6bIEVl/9yFFAyu -OHL+uwUdBYBk3NS4xKyXWXhG58AyNvGYWIO0tWTYmIVVuL2JDrNGY4QdIDQBoj+4 -hppmh0mYbvDCXolKjUVFC0wHRACaRCN1WLIKP8heE0vZsvXq/7ssuP3DtCDHRadk -pHn+6CpEwbT4bCNsW4bsci9v82npoY6YJKW8mokR+1dhcari6g1W2R80VCuWmB6E -ntJFZpILjPrCf8QCjs9Act0l87xx3+5K0LpFHQiKHygTbOrzE8++Lds+6yC/uzp/ -QtdLC20/iQMJ5GaOxSCwzBe1dUhC+ABF1/ZN1p9wgKFTFQMR+B/bR5q9l/d2AyMY -1pTorKIX7yg14OHehzL0s1tVq3QEtNl14c84hLh0m4Rf7nmRRcKDP8l6EwDujJVD -nR8cHM8ajiyC9tjjdyiQ32NLgzo+6OGiugctUxfw/ZLp7Qr0mT07IvPLcqBiRAC6 -E+9O ------END CERTIFICATE REQUEST----- diff --git a/experimental/packages/exporter-trace-otlp-http/test/certs/client.key b/experimental/packages/exporter-trace-otlp-http/test/certs/client.key deleted file mode 100644 index 00f82cfeeb..0000000000 --- a/experimental/packages/exporter-trace-otlp-http/test/certs/client.key +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/experimental/packages/exporter-trace-otlp-http/test/certs/regenerate.sh b/experimental/packages/exporter-trace-otlp-http/test/certs/regenerate.sh deleted file mode 100755 index 9e2e972c99..0000000000 --- a/experimental/packages/exporter-trace-otlp-http/test/certs/regenerate.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env sh -# -# Usage: regenerate.sh -# -# regenerate.sh regenerates certificates that are used to test gRPC with TLS -# Make sure you run it in test/certs directory. -# It also serves as a documentation on how existing certificates were generated. - -rm ca.crt ca.key client.crt client.csr client.key server.crt server.csr server.key - -openssl genrsa -des3 -out ca.key 4096 -openssl req -new -x509 -days 365 -sha256 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Root/OU=Test/CN=ca" - -openssl genrsa -des3 -out server.key 4096 -openssl req -new -sha256 -key server.key -out server.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Server/CN=localhost" -openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -openssl rsa -in server.key -out server.key - -openssl genrsa -des3 -out client.key 4096 -openssl req -new -sha256 -key client.key -out client.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Client/CN=localhost" -openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt -openssl rsa -in client.key -out client.key diff --git a/experimental/packages/exporter-trace-otlp-http/test/certs/server.crt b/experimental/packages/exporter-trace-otlp-http/test/certs/server.crt deleted file mode 100644 index 55f0c3dbb9..0000000000 --- a/experimental/packages/exporter-trace-otlp-http/test/certs/server.crt +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV -BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjEwNjA3MjAxMDExWhcN -MjIwNjA3MjAxMDExWjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV -BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZT -ZXJ2ZXIxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBALaskMk0FpoAZ8eHpOiNYIW2yOeizGsvJ7PsNZujbUFQ/f7/AYTZ -CBQ9Hc8lKz+3YHklZnTsAJW6QLCBKSgsrjPAXA25zBFQazUuKb+QrjoIqeaq8D8w -6iHL7zdHsplbWZjYrnPjLWPqoc1ga6H0p8NsH7eC6hFXJRp2ZilyZXUR4jvyMc3D -2q/MXoI0VvQ3tI/QaLrU2iaN0DZBsyJhr4B/jNzOYzGAuVieEyV52wFnOsUlJDNp -jsT/v1/Q8JrjOXSb+ko/74VlSLTCauoPSsiUb1ra0Tbu3Z0E6b7vlFKeZaOxwUyW -eLi6YT6Z9ZTOEJuiJan/7STprK1NrqL+OPneK1A0Plr10hY76SptAu2fTqgGOFGo -QkxTosnsppiSkCVaDiLKCVr4DQzBm/0CLoSgXk4fJNhiNrIT+b35gX8Xmm3hUq+U -GanZyXhJYfojBUuhPJFAUKpUUjSsiRU8Dj8R7nIZT+cUWvslYmrOG4ZjCnpIXnoo -pAjFlaZkv62/tEGwJmyBkGk2lYzn9Ka1G/aO92IjfzypUlSKXCntTxLD6BzWNF7/ -qjt19XTOWPjChQHQcYXmlTSNUvUQ09HMaRIUe5MCexlWYleX6lVG6XtMwOb06w5O -ynVuMHjiAGfkjLrUkGQqSxHrS2v/af1J7F+CIClNgI+q2pz5dYWYMaCFAgMBAAEw -DQYJKoZIhvcNAQELBQADggIBAAaVSzyc6jFBLORHUcxkP8DheyTl8m2sWIb+x732 -DkM2qp8oEAKwhJ/AWLFGCqsjyW5ep8fgpTHQgT7braEEUKKnGUbIqUPy1IBz+lSf -LoT7qD92eiMGXOrzcHWnV02PRM3mF5cmLMNu5aMUoIArG5dO1LTSxl5/ybx2l4Zy -qXcT7wJtrA6F0EmuXRzwFBIVZdxlLbI+S4SsvfKXernGatB3Mjotivvqi2SeOd8p -1tuqEyQaaIJ1s6u7vyTcAHDd0OIxSqpTu3SwaHAXhkzMi7+TRGgfQUuljkNKkKfj -N02siSNjIuKzE/DSW6yV0OFL/FCNPyvzs8CKTMwfyrrvA0UAspkFCWZFXFlA+uLs -0at4SmPecOsc+O8ATon9nUyXh06anBwtp03aXX6Mr/7UIRRPHF70BY7MDV4OvvQt -PD0osFo0uEHubflCnPBUdMrQN9KbELVJeV7G0Xj2fHTAVoEnCmSpow+LB1ehWGbR -M3U8q9wlpXi4Awhr19kRcSdE/JzI7eu9MqjsazfUdAtCcgg4dHixOre8oXgauhZ5 -jMOv9lUI6Glf61xt8mamicohSf9CFyH5PgZqRM0aSacdJ7jH6EitABOx21ZqwiBp -o4W37lV55oy+N0r7yxaNy/mSUUcjsQo6kGw/4cMpYTSEzRMtfwYPOS1DeTl9zArE -7TBI ------END CERTIFICATE----- diff --git a/experimental/packages/exporter-trace-otlp-http/test/certs/server.csr b/experimental/packages/exporter-trace-otlp-http/test/certs/server.csr deleted file mode 100644 index 0c5e9291bf..0000000000 --- a/experimental/packages/exporter-trace-otlp-http/test/certs/server.csr +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH -DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGU2Vy -dmVyMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQC2rJDJNBaaAGfHh6TojWCFtsjnosxrLyez7DWbo21BUP3+/wGE2QgU -PR3PJSs/t2B5JWZ07ACVukCwgSkoLK4zwFwNucwRUGs1Lim/kK46CKnmqvA/MOoh -y+83R7KZW1mY2K5z4y1j6qHNYGuh9KfDbB+3guoRVyUadmYpcmV1EeI78jHNw9qv -zF6CNFb0N7SP0Gi61NomjdA2QbMiYa+Af4zczmMxgLlYnhMledsBZzrFJSQzaY7E -/79f0PCa4zl0m/pKP++FZUi0wmrqD0rIlG9a2tE27t2dBOm+75RSnmWjscFMlni4 -umE+mfWUzhCboiWp/+0k6aytTa6i/jj53itQND5a9dIWO+kqbQLtn06oBjhRqEJM -U6LJ7KaYkpAlWg4iygla+A0MwZv9Ai6EoF5OHyTYYjayE/m9+YF/F5pt4VKvlBmp -2cl4SWH6IwVLoTyRQFCqVFI0rIkVPA4/Ee5yGU/nFFr7JWJqzhuGYwp6SF56KKQI -xZWmZL+tv7RBsCZsgZBpNpWM5/SmtRv2jvdiI388qVJUilwp7U8Sw+gc1jRe/6o7 -dfV0zlj4woUB0HGF5pU0jVL1ENPRzGkSFHuTAnsZVmJXl+pVRul7TMDm9OsOTsp1 -bjB44gBn5Iy61JBkKksR60tr/2n9SexfgiApTYCPqtqc+XWFmDGghQIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBAIJ7KMLIZbomgrup1rrizG3aU4bREy6HfHZ9Ylcr -Lo1vdL5/UZH3AHVhoccb0ua3qXDtsc8pDQAXIMzBu8BjfpbwCvrgz7YXsNsBU9zV -el8p394QB20WoPHebYDBUXPiq3JhLfjzOXBS9Ke3MBl1jDamOFmZW8dg8EpowIXv -ODFP8sErFb7Bmq7x2d0EJyX7+HydBiRWRa376oXcZ/VLl/CnNzpJeACFWPI4d0lg -P5nsadtdLyAwXF6cRQx3pOdN0sS5b3llXX3jVwGzm+kNjVTDWJiJmqWfwIF15pPr -bypoUmPpeQ4I9F+oFm9+Ff776PemqBD7NSJdG0iHRndm3oa6o2bTpn9ZypCO1Skv -UWr3ATduFylA3/YeoN6dQwP4Ol+3WJ2UbXzTbmEfoSEzmwMI5MTidOuA62A0afyN -VM0SjHaLvfD1mK4w+3BKdUivYh4TWbcLU7s1SeDwYiEP6DFZHLBPHDcNLz77d6nQ -zgvOgXqeNfk9uI5NdYBMbtdHW/mwGgEfPlDkKbY2KveOJjLlTM1EduGFsYHAXyhI -SiYozrbFeS5ts4f1EZ5tVT73KBv97MiQkKhBoVXtF1CHPUP1LTkGxtH2uoDiVfDi -r1OkRzoO05pHAh2o+4gujThsc0d3T5mmoeSySs56lgqDmC4blXNOS0kBZ4+I2u7A -C2YH ------END CERTIFICATE REQUEST----- diff --git a/experimental/packages/exporter-trace-otlp-http/test/certs/server.key b/experimental/packages/exporter-trace-otlp-http/test/certs/server.key deleted file mode 100644 index 9fa740554a..0000000000 --- a/experimental/packages/exporter-trace-otlp-http/test/certs/server.key +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/experimental/packages/exporter-trace-otlp-proto/test/certs/ca.crt b/experimental/packages/exporter-trace-otlp-proto/test/certs/ca.crt deleted file mode 100644 index d54d3fc5d3..0000000000 --- a/experimental/packages/exporter-trace-otlp-proto/test/certs/ca.crt +++ /dev/null @@ -1,33 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFozCCA4ugAwIBAgIUJy5SEslTLFkUTocZvXO1+3qd+c8wDQYJKoZIhvcNAQEL -BQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQHDBFPcGVuVGVs -ZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9vdDENMAsGA1UECwwEVGVzdDELMAkGA1UE -AwwCY2EwHhcNMjEwNjA3MjAyNzUxWhcNMjIwNjA3MjAyNzUxWjBhMQswCQYDVQQG -EwJDTDELMAkGA1UECAwCUk0xGjAYBgNVBAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0w -CwYDVQQKDARSb290MQ0wCwYDVQQLDARUZXN0MQswCQYDVQQDDAJjYTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBALHeRFPaPJhHNCwMkcGZMGNaoskj8Qw6 -Ar2PQVC5YzByrNWaxv4HcPArHxbfsMTHJsV8vZfN2K3AQCNsPNVy/YfBFwYbkr5J -K7KeiFSAw8mDz+Hr2NETvQA5xbxTROaBYlNxQirIUtGc0sl0OXinKEsuO5/CqB0V -aPTCmdY0iMNIKtGywSc10XzWSBIzwpqVXMDIjXGPDrl2AvytAm+vwhDB51TSCKmz -ZKAiK3s4VsMmmAWDPvOqItO8QHvyKTswwb5REKXZ455GBzLWM+6+UDr4VVCKlHXe -PydKjXgKwaap/goxo3/lyGdbsbY/BrNDEvKfOhvSwZWaroXvu8R/R9d53Gjh76v8 -v1pXJEo7OzWhVvMxb18/ZonCoX7F40V8uw8fmcoQlUY9/c9JFo5+UiuhmW6acD1F -JBGMbSwVy0MbqledEAkSpIulgapnJSAf4gFxBq1UXjXC9iJNTDlCafY+DQjrhMSx -pjb9FjZAjqkdFyxWwdfNmE6kaXVPbxuOaYVbUXF+w1DoC+TsAni3E6WmVI6WR89G -rvZOHuAj3EJhiVwZuM/f2HpaVfaFmOHS+pWqYgaF1nFC7bOOl+JPcfgdOpFITuPM -QulBt1P1f6eGS4G8js2uW74UQNed0qXk8bmQ6Gie4NUS5sG38yCf+inK/4ykmLtW -jQYHlLKI+WVtAgMBAAGjUzBRMB0GA1UdDgQWBBTUC1DWnOpOOqICf/lXsL/tZjmf -4zAfBgNVHSMEGDAWgBTUC1DWnOpOOqICf/lXsL/tZjmf4zAPBgNVHRMBAf8EBTAD -AQH/MA0GCSqGSIb3DQEBCwUAA4ICAQBNP5wgbkuM5iUPIhg043xEBnD4kR7iGaZX -bVIyWoLXRbtpjPyCAeBzcDjVgq3i2vs3jGXJ+p2RkEftIDbCrsgdK/SuPQjsXe7t -uxEUf6sNLzwCF3vtxFwoDbeE0EGWJMDgpkzWgGKLOT4mF1VG3tUNQrzEmOVfZXA9 -/WLopGMk4zAuUn45Bbsf49MYzYyWBTZ7I0IBaTFeQ+vFsGD8FphlKIJYX+gv0Lxi -KLPKbNnSAZVXveU12uHrg5p/710tU/BHK7vZiB46R0yuIbT3FJHzr+jGFUsyz3N4 -Ro8x6HlRL8CApNDgTxW5i7hxBRuB3j9iuv1hfB7N5HLAGymwHGzLwJWAb/FbUbEC -sbIvVW6GkUtkDvOREM9VyTfPp2Ix+unnRjGbm984zk1YGF/nq5ztTlwRo3pHrOxh -6BF4XPtSiG6tpA20hokrnMY5cmYbeUNUWQcnQXdwUgpfdvss5r6PRhHUz2UgZmRm -/Jpq4/TE54HCt6j+OWeZyFOHWXwgJDPdco3CgXol3la0wNT7bbNBO8M7ZY3J80Fe -7PkceQyyjcHIym2fSiJECUA0IdrovykMg3LXENDUcX/TuMzLqM7DMHzAnG4i4lot -hzh4MdC8MzLbiyNl/GKiJTsnhn8nzjAqFV0qSdwp6iSo6GdYbMoVewa3x/BPFLQD -gYCn3pHgIg== ------END CERTIFICATE----- diff --git a/experimental/packages/exporter-trace-otlp-proto/test/certs/ca.key b/experimental/packages/exporter-trace-otlp-proto/test/certs/ca.key deleted file mode 100644 index 1a770f08f8..0000000000 --- a/experimental/packages/exporter-trace-otlp-proto/test/certs/ca.key +++ /dev/null @@ -1,54 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,356304F34E38896B - -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 ------END RSA PRIVATE KEY----- diff --git a/experimental/packages/exporter-trace-otlp-proto/test/certs/client.crt b/experimental/packages/exporter-trace-otlp-proto/test/certs/client.crt deleted file mode 100644 index f02b0ec199..0000000000 --- a/experimental/packages/exporter-trace-otlp-proto/test/certs/client.crt +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV -BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjEwNjA3MjAyNzUzWhcN -MjIwNjA3MjAyNzUzWjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV -BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZD -bGllbnQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKbADNm8Jv7nlNpSa3A+wAXr5fMPF2Uxum+7Hujt5XabfUiFOSEQ -Qj5Rd3aXxtjrXB102E5oeWJrnUIzRfn0ICRKGudpOgKRL22iwNlIuy7wYz2qa7Vy -jdwsP+xjn4sfWqiDe8ssGrVzQy8/XunoWy+NXROiCE5F51GPMKDrdtVkvvtKGQFe -ThjBP+RrT6dSOn7JCUclwQS/SPlhKopeGygBRtK3fQY5hb0xcIEvzp/qpRqOjyIk -VknJSvaB3Q52Bm8qVvHePkDa3Jg8Lg11G1E2R9zOG8eIQ2A78Cc8RJh5ltDiHHBv -HE4ToC5r0I4pPdwgZYzqI876fNK/4DXmhznUofSwGLx3ST1d0k4Vj+u8u5NvUGrg -9AE47RS0BAqUFQzqqMOjSDXw3rlYEaC0JMy2T36qil8Ti484cIOPY9+rqityAc1y -pbhbATrtf96UEeDQLdA4ygafUXWsutLMG2zSrrZxt2xW8f3H0ifsnICxNHbxi+fe -vAqCek23+iWH+i2tgflHbe7hPwAIByVaNylk/FLV4D4YQbG1hVZ+svex0APXWxLn -T1Z75vYmGhpBQLctyqtq0Ytj0gczEfwaaEXZBcuh7PMepQmBxEj2J71vfp2edowc -LWTWZ0+aBOUh6xTcVeWdyrmEsqrSetTgZxKYt6PNyXP8S93nVuJMCNupAgMBAAEw -DQYJKoZIhvcNAQELBQADggIBADZwq3V+Wm0PNFy02rJmo/fNpcjSmtVYA3BabQCo -KvayqBvm1QfwVzLpji0caZBnztVWf35nAQ0q51jZ/WjNrFg3/g6j8yzwPp7rX5Nv -88VKD2eekjj1wft93K40in2onxzaCchsLo2Jk6wSAt9AkGWM6yTnyvMSSjM3llu1 -m/5OGrUrEGFvjyBUSewBVJalSlMhXMb2PvnT3dzArYDWku+e1rkVSHff6sWrG3AC -D0xDN8JyeLTCfKoPeTsFgVqIz8GyGwenVERj2XrDMncM3o/o1fjT9clHovUVIBVP -SLM7nRB0oqVsau7Syq4xQJ0BZcCXCMD91w+DAHUi85X75C4fpRkaJcPB0oVqEog2 -ZtcyTE/aAsHJGwC7PEpgsQYOpApb2pnfZnhABb8pTBeK/dldrqIW3OJeRCzthh6w -N0p/pxfPXS2Xg5lDlSUoZNWmNObBOpBVevUlMJ+WhK6oFwfkfTbH7z0+o3k70XMZ -mb0R2nXIjZrbU/baGKOUVw9iqQNoRr5DBoInSFuuriTwyHU+O2MVL/UZCZ7TeY4o -5FyGh5+51eWqjt+uyHbJPBeYMoECj4S1PXbMvZSSqI+MR8RdUrEX0F25r60QjLe/ -ETKhZTeqM6GO8DG9WdlaWPDtZ08ZYrKgx4iIN1mu0ytYi0z8QRRvyJ9jBeLa7Lii -/0ud ------END CERTIFICATE----- diff --git a/experimental/packages/exporter-trace-otlp-proto/test/certs/client.csr b/experimental/packages/exporter-trace-otlp-proto/test/certs/client.csr deleted file mode 100644 index 234045e9ea..0000000000 --- a/experimental/packages/exporter-trace-otlp-proto/test/certs/client.csr +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH -DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGQ2xp -ZW50MRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQCmwAzZvCb+55TaUmtwPsAF6+XzDxdlMbpvux7o7eV2m31IhTkhEEI+ -UXd2l8bY61wddNhOaHlia51CM0X59CAkShrnaToCkS9tosDZSLsu8GM9qmu1co3c -LD/sY5+LH1qog3vLLBq1c0MvP17p6FsvjV0ToghORedRjzCg63bVZL77ShkBXk4Y -wT/ka0+nUjp+yQlHJcEEv0j5YSqKXhsoAUbSt30GOYW9MXCBL86f6qUajo8iJFZJ -yUr2gd0OdgZvKlbx3j5A2tyYPC4NdRtRNkfczhvHiENgO/AnPESYeZbQ4hxwbxxO -E6Aua9COKT3cIGWM6iPO+nzSv+A15oc51KH0sBi8d0k9XdJOFY/rvLuTb1Bq4PQB -OO0UtAQKlBUM6qjDo0g18N65WBGgtCTMtk9+qopfE4uPOHCDj2Pfq6orcgHNcqW4 -WwE67X/elBHg0C3QOMoGn1F1rLrSzBts0q62cbdsVvH9x9In7JyAsTR28Yvn3rwK -gnpNt/olh/otrYH5R23u4T8ACAclWjcpZPxS1eA+GEGxtYVWfrL3sdAD11sS509W -e+b2JhoaQUC3LcqratGLY9IHMxH8GmhF2QXLoezzHqUJgcRI9ie9b36dnnaMHC1k -1mdPmgTlIesU3FXlncq5hLKq0nrU4GcSmLejzclz/Evd51biTAjbqQIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBAKZZVROndJS2TZj/oyaEXjg3+vsVxve7JnlGFiQR -4de+ISUnRTJrTmdN3ocaRRjTp/I7VyIfvQf9chDyyjNz90HSvWI9PntzWkFY/Hk6 -eblj5dPftZHSWhpkNVdjI9tZEl6IOi0uyIzskPDQqm3VX36RApbpO1KglGIANpYx -/DKzt3k4go82u51pKA+KnCaUzI6CqNAsHW1nMBc2zunzBf6hfnlBJ+FEKkz/4Hje -5hR0+QLQr1I8jkvUxN3Qjd7mZJfCLuZiinYejStUs3r8KRA3ZIyPV+4tHqcSTC7J -aE20KCQT8iMYBfMZ3BvMZQYbfheTVeMlQSiOqP5iO9IOoAmgAfX+LNsf0tZ6pBgS -03b+tXZ6GL1qDuAZSRMbb8DmUbBoQI2b1LnP0v2fxe8Cuqm2UJLXBZXY6tOytE8j -ReTSX7Y37AVh17zwNPOOCoJtzUWzEmx6nvizlsB7DBTlbQ/tAKcBubCjTSn2A6yL -ibb0Q9Szjuz3q+zugaYDGEFkK8vjiTzpzpj0wH8VH18q16DcJykBGC1OTTgM66FK -8/toW3ocgAjHPJvd8TxWFaT+hM4VxlFST1Y7/oBnQmSVLtv/6pUGRZsV1ByfPBnD -Bvn7Dqcs8mtZOnw6XX7gQ/qmfMzzE5VQnHh4iPvZ7ULvEgVcz6DbXjjGgEhQQcMq -s7bV ------END CERTIFICATE REQUEST----- diff --git a/experimental/packages/exporter-trace-otlp-proto/test/certs/client.key b/experimental/packages/exporter-trace-otlp-proto/test/certs/client.key deleted file mode 100644 index f5ebbdc625..0000000000 --- a/experimental/packages/exporter-trace-otlp-proto/test/certs/client.key +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIJJwIBAAKCAgEApsAM2bwm/ueU2lJrcD7ABevl8w8XZTG6b7se6O3ldpt9SIU5 -IRBCPlF3dpfG2OtcHXTYTmh5YmudQjNF+fQgJEoa52k6ApEvbaLA2Ui7LvBjPapr -tXKN3Cw/7GOfix9aqIN7yywatXNDLz9e6ehbL41dE6IITkXnUY8woOt21WS++0oZ -AV5OGME/5GtPp1I6fskJRyXBBL9I+WEqil4bKAFG0rd9BjmFvTFwgS/On+qlGo6P -IiRWSclK9oHdDnYGbypW8d4+QNrcmDwuDXUbUTZH3M4bx4hDYDvwJzxEmHmW0OIc -cG8cThOgLmvQjik93CBljOojzvp80r/gNeaHOdSh9LAYvHdJPV3SThWP67y7k29Q -auD0ATjtFLQECpQVDOqow6NINfDeuVgRoLQkzLZPfqqKXxOLjzhwg49j36uqK3IB -zXKluFsBOu1/3pQR4NAt0DjKBp9Rday60swbbNKutnG3bFbx/cfSJ+ycgLE0dvGL -5968CoJ6Tbf6JYf6La2B+Udt7uE/AAgHJVo3KWT8UtXgPhhBsbWFVn6y97HQA9db -EudPVnvm9iYaGkFAty3Kq2rRi2PSBzMR/BpoRdkFy6Hs8x6lCYHESPYnvW9+nZ52 -jBwtZNZnT5oE5SHrFNxV5Z3KuYSyqtJ61OBnEpi3o83Jc/xL3edW4kwI26kCAwEA -AQKCAgAF+/56EfaUT1tYOn0Amj/p9n1aK8B7MT2vpNeHJIKHryzf3Wgfd6Xo9qOC -7g+E2W2E4RyiM72nepU6OvzX65r7sm0kwPIEBZHeLWkeYy3UkWv+Wo9jA6lzrWLd -6PVg2M84HP/kWsDaojhXCb8uRdh/7GLawYXqyTd0Bd+I5ups3iC8g/xBwFCtMsJI -QFGrf5f51N0wYHp84SCNUp9kN9xhoyoXhd5Gyumx0IRpHn4b3x/txA/++a7fFwpJ -rn9wdWvlsW9NXtx9F12zWPWOJhXE5F3P3tXAY3OHkJ8dyVvs3PA8ruC2aEZrxuiI -wfXKJFDEBaWfWQfP9c1lAt3ZEVzo945PwXGq7F3B15nqu92t/MjSul7T3O2/RcOf -NQyMaio0vhmHllXCyTHoDHklX43OuP1fJKgf8s8eFtAKfJwE9C7L0QrG1xcZeiOC -RXEb5T/2N4w/wYZvQubu4xkIi7pBuRrUebmOE7Pe2g2kZrXIjZkbkSt7H9G83AFr -q29gFZ7QGAelDaQcMhQzlVbNLk5i+0TG7p0H+IGW1u429SHdp+TugD66EBcXlYaz -kyUYlkV82TyJEp/VGrIjcPw07hPKsEANT2cZ/+zK5t8TnUlL2kSOzpQH4ds5XmmP -Z/iSIATvIlKCB/rNEYsb1Zg76o68aClR4MfZzsxWjWQMMaTrAQKCAQEA2lxua3mg -yPrZWsSixaDLjR+1AP4aGd3CNBTROcjWvcJuqvvmuxf4P4u3n0AiC6PZTGegme9J -JzgXhOIghd9gnUO6C8oz2CuKS241gDuVobMd/PzL/qV1gxutI35PdVACQHnJd75a -s9DRRNlHPCeT7EYFQNW9s35tVI7rhzS03YLp9ENTPqKAMdtoDnB8Lc8NixzbRFCA -pln1EwBVsmNKng1YTBGdL69Uh51u9yd/xpkYtWWBwgZmITCeHZOLecpJfL5AM5uw -H+ZC6DmgfbceyZ7gWy1WDVdHSlfIwYC5yJDzaePs2uRX0gxWXciYzGbZAyZR8xSj -F2WWNCLFEuOPTQKCAQEAw34ys+whHo8FY0wb4U3V53dZuscwJrGnIGTIoQGS44i5 -NWoRKqdpV/9HjuRzQyaUog8JYapCAxExZWRzE0ImN8m1VdN6DaPqAfhrM23vcDV1 -YbnMvdKhgki+vJ6C0iLEw1gE3JT0VIzeXshItJKcStiMb4JSvCBeuyr7yNIeRZQ/ -fu7bcgdQZ/HHssxfeYPVI+mtL5s2vztmX8rkkeGoiCi46aEneowEEFZ4LgD//XoA -Igpag0C54g9T2JRvgg/4cAIme8TrJ81FVImES39MaOB+OkUGZZK3fc9ULPs71Drg -OMwOQl+8p0+KXZ0sGc60etJnZPeU9aVDKHi7FHQHzQKCAQB1J8Zuj3E+o6feVUXn -tp+/ddWNVMf4PMynWMvwrtrYMOtjfYeLtg6ROYspPCWIDT7XCXpXXNTo3+VufExq -xzB08BNvo+sw/htS4Sx/QnjDqvBZ/eANHgTwdPbt5iUHkgfDRBRd1JmhhFXjFJht -o+ZvjBnhcUw4c4qBJbUkc5jeiBCx5zVQk6soFMm9hYh6o25mxvK1smNz3SvqJ/HS -pgcwyYQoPAMTxIQbxtH0dRLPIPDq0i1ORlShVg5fW/wnOes3rHORvORAGTCom9KJ -4Kf6EO3avXY/7iXnszWY7FHBVFPk6k74Gi8sGUZ1Rt0EPeINGJA7VUUzlmOCUW1e -9wy5AoIBAA9Pug7nhqyLDSP62RArdX58lZWQdlABiBJ8ck5R/jw+ACuT1CZgGFsh -Dmy9rd1rjyamQNjaafMtjI3hcTXn73BdJwvC1YNt/C0NVPAhQyiptzjhQYz4i1fV -9MJ3M83blUerhC32qLBanCwWScOC3CTskwtEzNAZRPIp6rCO7HoMo3CAqsVil0Sc -5kQ1x6CP18jJS5w37vDJaTpFfOOEJhwL/Hen/JyXjNXuv9jykRo8TPhdkTtIfYac -JrgG4DjyoUW8lWEKSlTCuhRl9Ouo28Y3FwvfTiH0fNSowXIId2Ym+lrYeKFwOClu -jGrKnaKj0vTvt9NrpMocmIb59cUjVV0CggEAT1Dvu2Rq7eYjGmKeiyxxjoL/Jmzy -+nQpG7QyXoUPPatyFWzmaCKZ0pyY/lmW1bC9hXs/Qp3taIGEKMS2UBNoUhZPobK+ -+p4fUvbODCzbyTvXGcjR976PK8R/N0EpsXbPjMxhCp4D/SFAlFicyrXA7GGjw1iU -0NRbqHJC1JoTkZNAZItG/3De9iSzq7chZGFIrG2BU4Kw+hJrQS7LrarFNrvWiMsJ -fHEIzc3uMmRfWbyU3M6nbfFDh0J+rvMiPXWN4aWb6HdJl0dpJ1pEr4OWp3sXolbj -QuB1ZGoUxPQZUNmOPqezlM4cd/9WIpOuGx9gdmpf8Ammw1VRsEizRU1efg== ------END RSA PRIVATE KEY----- diff --git a/experimental/packages/exporter-trace-otlp-proto/test/certs/regenerate.sh b/experimental/packages/exporter-trace-otlp-proto/test/certs/regenerate.sh deleted file mode 100755 index 728c0cbfb3..0000000000 --- a/experimental/packages/exporter-trace-otlp-proto/test/certs/regenerate.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env sh -# -# Usage: regenerate.sh -# -# regenerate.sh regenerates certificates that are used to test gRPC with TLS -# Make sure you run it in test/certs directory. -# It also serves as a documentation on how existing certificates were generated. - -rm ca.crt ca.key client.crt client.csr client.key server.crt server.csr server.key - -openssl genrsa -des3 -out ca.key 4096 -openssl req -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Root/OU=Test/CN=ca" - -openssl genrsa -des3 -out server.key 4096 -openssl req -new -key server.key -out server.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Server/CN=localhost" -openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -openssl rsa -in server.key -out server.key - -openssl genrsa -des3 -out client.key 4096 -openssl req -new -key client.key -out client.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Client/CN=localhost" -openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt -openssl rsa -in client.key -out client.key diff --git a/experimental/packages/exporter-trace-otlp-proto/test/certs/server.crt b/experimental/packages/exporter-trace-otlp-proto/test/certs/server.crt deleted file mode 100644 index 8e76b7b4a6..0000000000 --- a/experimental/packages/exporter-trace-otlp-proto/test/certs/server.crt +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV -BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjEwNjA3MjAyNzUyWhcN -MjIwNjA3MjAyNzUyWjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV -BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZT -ZXJ2ZXIxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAJqjWwLE9Q+qc8xBMQnif6D8GoxRNGzHQlW0lxGmx0OK+irwBqNC -gdmpjn9gKh4SkJL179W7r2pyc7zZw0wzl0Up/4rHb+Z7H55shgmMaxI0pxLdUUwf -0OsqOQWE4sUE3ku5QIGX0zw1M9RuS6wDphZXXuvhMH8+1sZXsDQE40eAaTGUln9k -l7ZBKpaHgMOp+sTHSpkncKXW4ZhH8F9jSCgHNrNCY8R2PiEI2nB1iIAO4B4AUHYh -9X8O1Ke4eAxG7AEQL/QskErX0Y99oBsd6YzOliVBHnIrLerCGnjpapHI9QqeCUI9 -ToV1AiexBCS0O7yHYAhHifZ3GTBM2wNpK0A7sIWW3fKBGEKlf3K09kTbxMNjRaeZ -r5cryJubFrOPu5cqqGqzA8UGUyCEEE//p+PP2Csfb9bviHXzS74jC3tD0cdJw+rn -xvXd71FuhDMjJBnkJwyCBXzlrtbcHVF5H0DHfuUmVffE9BvfeIGzkX8B2ZxFtxU7 -40WEml1YU06jfEmIlojBDOq0Py5BoPAvqEvFOHCzECszkJrjQbEdGWepeBBliXPa -YcEWR6K13PhmDqm/c99x2hpVl8dyAWK5dX86DVtTsrIBz6rgitAN4kPrl5eWVmZp -gf1VFwFZfEjS4SOV/qxbkJDls/r+tD6JhlC1dNT+XVooVq/DgON+Zkk1AgMBAAEw -DQYJKoZIhvcNAQELBQADggIBAFmiQCJLSCLoH/sUbjdcZo5R96jGaaqodv4Prktv -aJ0ruWxLi3NJumfKlHoQZ2oZHU3Ujw0U3G8jHtU3V9v5ThIOMsUl/MY6qQJCaO0V -4QvEWvFJ3GwyZvnd/xDFMVGcRCmwehQZqyFpqCTJ2KTTRKIoxkj7O0oboWlwNpVQ -7/pyIWRvdB7AE/ldY1KuHn5Oj+nXMacB23zPcJ++IHAcL8AlHjrKmskYlqpswWON -xuwG5ilWpLYeoZ3WP1fxG/2Xoe+036eKEXhRHECb3fofGDXZ0ElPAqpMSH/hS2/l -1Eif+p6vy8np9zqSsFmEq74uRPZo7TrBKa8FYufCkB5VxOV31SaP8yj1G+nHCVa1 -O1h7uI7IQpSLsrEldf1FFkJSy6F6qx17uremRUpEPkfyi1/t3vjWPB7wZHetAho4 -uVDBbo85CsM9eKPr7ynWJzEEbefLKRxdpKp/cUvxMxDxZeEStGrIENc4qNYQN6aR -fc3WrczAoOsLMicSye21n7j0OApz+TnbSgt5+ane+oSschiBmx1LaJLFkDTiKA5w -h+3sws4I8dL0YTdtdacPZgtuLWSjN0xTdhD7idfqatrQA5bTJjoTnEBmdIUVp8X4 -wOo03t3lf+LQDjIHps41Mo/BVSqZbWuXA53rfxQ49JsGfoUfm3L1domYB4tlTWRq -s2Wb ------END CERTIFICATE----- diff --git a/experimental/packages/exporter-trace-otlp-proto/test/certs/server.csr b/experimental/packages/exporter-trace-otlp-proto/test/certs/server.csr deleted file mode 100644 index 45c77ba43f..0000000000 --- a/experimental/packages/exporter-trace-otlp-proto/test/certs/server.csr +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH -DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGU2Vy -dmVyMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQCao1sCxPUPqnPMQTEJ4n+g/BqMUTRsx0JVtJcRpsdDivoq8AajQoHZ -qY5/YCoeEpCS9e/Vu69qcnO82cNMM5dFKf+Kx2/mex+ebIYJjGsSNKcS3VFMH9Dr -KjkFhOLFBN5LuUCBl9M8NTPUbkusA6YWV17r4TB/PtbGV7A0BONHgGkxlJZ/ZJe2 -QSqWh4DDqfrEx0qZJ3Cl1uGYR/BfY0goBzazQmPEdj4hCNpwdYiADuAeAFB2IfV/ -DtSnuHgMRuwBEC/0LJBK19GPfaAbHemMzpYlQR5yKy3qwhp46WqRyPUKnglCPU6F -dQInsQQktDu8h2AIR4n2dxkwTNsDaStAO7CFlt3ygRhCpX9ytPZE28TDY0Wnma+X -K8ibmxazj7uXKqhqswPFBlMghBBP/6fjz9grH2/W74h180u+Iwt7Q9HHScPq58b1 -3e9RboQzIyQZ5CcMggV85a7W3B1ReR9Ax37lJlX3xPQb33iBs5F/AdmcRbcVO+NF -hJpdWFNOo3xJiJaIwQzqtD8uQaDwL6hLxThwsxArM5Ca40GxHRlnqXgQZYlz2mHB -Fkeitdz4Zg6pv3PfcdoaVZfHcgFiuXV/Og1bU7KyAc+q4IrQDeJD65eXllZmaYH9 -VRcBWXxI0uEjlf6sW5CQ5bP6/rQ+iYZQtXTU/l1aKFavw4DjfmZJNQIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBAI6upPY4cjckMgAGj5NvhP9vWykUUzQZyWHDK052 -ruSo9PAtqCJiYQwXu//8uOjfrDFcOYiET1cpZVPdyjRpfoGMtNje+ap4969UQsj6 -UXvFYgNTSnjBr7nKySH6SamfBABeu5+TjID/jyqFMpepk++GuWRcYPnM1GHObfGm -hRd+3gYbF3m+KA0qrBIoFbHstLkFaLs84Lf8gzDt48ZoN+9QjQKZZtKZvpZXlsag -6FsYcp9o+h/bFIluUINLs8oTfElml3y1G8IMCyNskEdF4Zi65Ml+QaXIk7SLN29Z -NlSZEwtDNJQJB+hOBtIC31cs53l0s7UtdaX6UjyfwswxWsUkvpPJDRs5beC2IUgM -W+PWwszK0BNFvmzGQ4KKWGDLe4YEf5Ss4grIqM4Kf6tpgicuZVyc6wHkB8secJR9 -JftUHBaHazaJFzd+oaQ677cd+Oj74Ht1qGKFmKykPS5GmQfC1CMMj1AkBmh4BnQg -oEdT8xpvhzEBaygJr7v01LViRAAFtM46vW4VkpCMxNSzIymlX8/sszlVChjWpWdE -lMOtlUQxtigbVqYldDx5AmFgGZyKTSi5GaoB9qVLr0tU8c/FodvgUuuzgAZfr3BD -P12EezgueK1oF2z7RCwfgKeEpjGq8wfNzG6AF/AdJGUiHk/yrlcTTLGORH9beBZh -CH0X ------END CERTIFICATE REQUEST----- diff --git a/experimental/packages/exporter-trace-otlp-proto/test/certs/server.key b/experimental/packages/exporter-trace-otlp-proto/test/certs/server.key deleted file mode 100644 index b00ffb89bf..0000000000 --- a/experimental/packages/exporter-trace-otlp-proto/test/certs/server.key +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/ca.crt b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/ca.crt index 79e43541a2..c194f04954 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/ca.crt +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/ca.crt @@ -1,33 +1,33 @@ -----BEGIN CERTIFICATE----- -MIIFozCCA4ugAwIBAgIUU/1w3O3wzjXdsiAVROAPaSxeAB8wDQYJKoZIhvcNAQEL +MIIFozCCA4ugAwIBAgIUFA6cfBQ2t0ZOpLTRUIE6VN+kGBkwDQYJKoZIhvcNAQEL BQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQHDBFPcGVuVGVs ZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9vdDENMAsGA1UECwwEVGVzdDELMAkGA1UE -AwwCY2EwHhcNMjIwNjA4MDkwNDU2WhcNMjMwNjA4MDkwNDU2WjBhMQswCQYDVQQG +AwwCY2EwHhcNMjMwNjA4MTY0NDIzWhcNMjQwNjA3MTY0NDIzWjBhMQswCQYDVQQG EwJDTDELMAkGA1UECAwCUk0xGjAYBgNVBAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0w CwYDVQQKDARSb290MQ0wCwYDVQQLDARUZXN0MQswCQYDVQQDDAJjYTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAL/YJuxNGNIzwoq1alb4Z/lP4+JRS1iI -LyEJ98Hcw2gfW+nYuIGA0XX7vwVRo7hStCEQRWP4KtdzfJkfNeicWUAnoCTKTf9L -DaxvBr8/4x7DF/7TkYIpK3uuAXadl3kz3R6CA1MueOndbEx9XGtdac174Ad5iIAn -P1fm45svFimFwC0uYPwNliWJ/1yVFyS9rDK0DAIbwxRgFl9FErooyPpVAyAetCvF -AL458EspEN98iM3cFx1LrLJmmalm4YLeYPmcRcn0eKmnP1wGnlk4y4DFEsHe+HNM -7L8/mWLDfinugbXsl/Nspkj8AP3+mebCU5QhO59Uj5XemF4gQeA6nv/bPSQ+72EE -CKuxNt2UA6h2ZKI8ahbNSjjZeVLrFxLRJJHqkUjZCvmhAu4MEtHUcrsDwFkNr2ax -LmQeo/meM8AdPlUTzEi/sl6kUgqU8go41sKroaC4ABe0R/gbMhMz6bRwxdfl3Plt -RYkDyQhOOQfQKQunzI8TLdtciV5KXtxI2bPbdrKdtnYMe3m7YtGvCCVaY/TIZoYW -YbWGFDwmBRx529wp1CgsvuG331wrNBFRe3Gkpafrx3ZTh5PAwI3y7YlvIc5NboQX -aNJ50aItL6tUV2EEAF59di0rTd+JusCmlaLEnJfKW2paDASxqhJ0Y+eYjRis3WdT -axEnv88LeiqBAgMBAAGjUzBRMB0GA1UdDgQWBBQ+c5NiMcl412zrMHGGOBLRiGS0 -ajAfBgNVHSMEGDAWgBQ+c5NiMcl412zrMHGGOBLRiGS0ajAPBgNVHRMBAf8EBTAD -AQH/MA0GCSqGSIb3DQEBCwUAA4ICAQB+T9OpaPs5u9dhFbwBaRi596UpjzSNDscP -Oa3fhfEDM7OQ2FcnXBsFkSdpxLCaXRGxuvYe0eoHCWa7Wna/kdkr3xlnXzRNS/6H -D5oDEPZstPSP4G9L8egNhV1yW10zxr5ZErScwkt9SX71jp+rSa4neRkm3GY0UnX8 -qLWHSIetCSN81T4SkH7xf9fltBcTUyphMegQDmIOw3YHi9tFe7MPqjZhzZXg0UWK -Az6E509HTqpxHMPy9LtjvqVJ1ipiaP7pq3uoIX6M6x/TKsszAR/N9OuFk5KHrNis -X5GXVTm8INgiLQxXBuquuD9AoZn0lEdMAnwfTqwTP87LrVKKAMJzS/PiQORwmEoB -1mz34Fy599wGyCB7Td02g73auSEFG/WDJ+2JTVtFCCzvVmVPzJO9nHvPJQ69iNdJ -2y7IkygdwgIQDPWFcTjuzZo333jJT8C+MnKeBhxdzz3QtYZKaktyW4Zo+Z1DWPVu -ao/mMr3AoXDO4quQRrgUCUGwj4TGTFkFvwwAJAR47o1wQOwsQ5pxq3qnDBUbPrqh -xtKUd0mQWtyW8YnGRGyU1EDKZmZ3qR8zUNzyWOp2enlh1Eig1Uz5Iy6YjKd2lkYf -dOnAKZT3LC/bN3IzUD6SJYyDiGYzk8FLTNJIEIy9gn7ugV4SK/eoXV4k2PDfZhD3 -QXqKvEKERA== +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm3OXVbMd0t2r4x+Pg4fecPeFhRzsg6 +sp7AM4UYlhb0Xkx8ij3q0E47uQM/OSari6qi7p1Un6nzgaXmhosaNkVXaKV4dQ4g +zKqrvC2+nTYU4lwss4Rx32CQxOKXEvN5FPwLTNo903PP3wqJyVt8syN0CDW953m/ +hUdkNaOe/lXmDJ9TmTTGyuPZFSlNlufbaNsBUM5chVFgBYDQIVy0jls8MiYLfao5 +tfprj+yS+lnTDl54dDTVVyAgV22SY65cnUgvO4bu3nzhS/h2Xg4/6/yAuYaRI7GQ +xvlA4pzx+aLaRDTJKiszRrHbQFv4PY+MmkVxvg2Oka4Vc2XMgDM87H0bd+beO8NH +Tf7UHU5AmIr2j2R27LWeELOqanm1HYn2VK182lD7OwQ5u5yqZZuke8bMMPJQEPUm +EwhIgXMVIlGps2+rDUEalPYkQ/BmAcs2g7fywW3RhIWCacggKoee1x9a6oiUM5yi +oDJ6T/C4WUQzIVebdMC25zBBlxcy8fK4Yus/DFTqM/eXPl4NVzbH/yB5tlU2GU0Q +V4tpGL1jsUy4b7r1bzuYVNfnKrarUGFF5TIHuvDo3voJNGb4hWBH/JdttG/9NaWA +HomZ8CUWR+gNEzyPkwq7upkiblKxJV7HKo79Eex+dlWa+Ru1F3kwYE200Y+a/wOF +Rj4+PfMu7WvpAgMBAAGjUzBRMB0GA1UdDgQWBBSwH/Wk2wTc+MEPAEornj1eGKra +0zAfBgNVHSMEGDAWgBSwH/Wk2wTc+MEPAEornj1eGKra0zAPBgNVHRMBAf8EBTAD +AQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCNkzOjjqH3qeQ0wT/Has5PSoWwRwq+B1JT +gg29bgEMD6dVkLdzgEuRVVkMtc/tCZAkA02pc0VN8+lNLW7ckNU/QhMTQYn+FgMR +cG86vR9loTnwUrxR4dS6Nbx1sQ7hpe2GZkWpTNmjh1duHBNHv9nS2JmMkRypqRne +oAI3/th1Qlrtl/zDn02/+P5/av0YJcMOcnRkULHnI62cbXHa2iPd/nENgH2xC6CA +EuYN/bnmOEUPeKljU1IZS6asjGMLdWLmpLs7oOcHGLD3pax+om69Pmn7rps8Z071 +WsJDHFCftItCUrg4KWwpXr77Vq4WAN2tOBdDHEZsbES6a54+7sc1QKOVSWwPuGEd +ShFHhTzoaB0dpwm6kLdYsEkC8JLIjV+Ikg5X3VTDITjUlHoJf2mxCGOzBiCnUr75 +Am0eBqlVcc/2aVk1tcVS9N7reY/KcMaAJvI314O9I94pYdIIm5jw3UmA9Y6HmpN0 +vYtQUF2sS5W82XoFD8bpOq/bx1o2ib2x32dfPQkVgd4sbmpsyN62Fy1HpHwXtXno +xGVaDzGSWj/7RyYyKhNmp3nfQsU0Tt6iVkM+N30vl2heZqEUgXxCG9qHVzWv9z6x +AJzuafjM8tviROpiHkvzsmq7uDhksGooKCi+m+eoEBJrd0J4gjngAi1NYjTsB2GT +4mvPz05UkA== -----END CERTIFICATE----- diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/ca.key b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/ca.key index b991da8086..00ccb04622 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/ca.key +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/ca.key @@ -1,51 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/client.crt b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/client.crt index a411611e29..fd05c9c40b 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/client.crt +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/client.crt @@ -1,31 +1,31 @@ -----BEGIN CERTIFICATE----- MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjIwNjA4MDkwNDU3WhcN -MjMwNjA4MDkwNDU3WjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV +dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjMwNjA4MTY0NDI2WhcN +MjQwNjA3MTY0NDI2WjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZD bGllbnQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKmJw3BpO3T+4AIiOwE6FYCge7+R4F300DAHKKsZfSpZWcoCYEs3 -cwhEuoE0cbupK/wPHc4imhL4cI97w0hMeupIGYEH5nhBRlFz++P9lj99Vya4DUhc -VGYo/5VqS6SJGLXIQX1QVN5u4HxX7zCsYLOxhpS/NkG0MtdHQHnhEiCi+zxINFsX -o2ESme5U7w8YDr/iS6+934Ym60euLRqLTvg3mc2KWEhC/x3L8M6hKBqwPaVI8nR1 -nr6uUnk9DvPX6C+yieYfReqhZm9QHrNFM5ZlZF7gqLjCDgW730Gb2vkmRje2a13Z -aqgFI1NwTZHr3b3eyotLjvCRfgEWSEHJ//MC7lFU1DTDiYvD96DoCDcRif1ZfMTC -EkKs3Y5xxUOZyM0KYud2zg3t3aTP0jD6XCxt52BOSUxE7QwdlaO3/BYMDYH1EiT0 -ksHkIqXONJrrDmZdwt/JzODkT5DWUYoCAJxNjsUhimf5P1ew4Fz0aKj389v8dvKr -6jCl5Q/LCqkMlrSANWCVGVBfjfKLc58HtPKB8HLO6YX9nPJ8e1AWo3uDWWBATMDz -TTOaM6YmSzvWfK1lahVKf3bACgr/HN9F7O1hu98FS0nxNQfHFHSpD0oi/aGOJ7mm -iX1wbJjtqfihEA/u/wDNfJuarwqAKrXMn80ROX2a88BTl50rQlAuNEolAgMBAAEw -DQYJKoZIhvcNAQELBQADggIBAHl20Cqv+gbgc79sQgoX28sJpvkoS3jVWRDCgUZm -pd37c6CoG6qntTV0ljtwWup6ji3L8L2ezNGKCoW9iijnL1vxNMU2ZUTZxu7lOtsr -bNvII8MlzT2cHAGq+ReU7K1SNNM5di5NuoURywcya/YIZpX1ZuyXZUn6/pX0xoG+ -KsLxSypUjWc+FQ56Dywg3q9rtfec7ub4VdUe95mYUv1nj/3/F1K8J2ynLLmIEYZk -JmI3+3WHDqED8M0APPwP1Ar94tq7R9GRYzlppa7qwSkzz5tLrkFccXszr5qKwchv -VR2HqKtxmzewp3Vy5RUvv/4xk0AV0+aSk9DV063dlxEpPQGjueddexNJoP+OZzM3 -1vRlXJedNEHqucReW7KhbQdtOppNPg8kHfFa3gqLyfRGCPNLotTcXJT7wyiTbBKa -uW6oKHLEZWJoQuIFnUYoP2r/+gbYj6HqG4LAhSXc70gI+G6zPdYqREQY8agaAAtm -cbPV46cbGnpV02CchTib+cVpRrwgGAFAomr87eX/ccjiXjZEsy0ln/0Du9dIzJOV -pWBha4puk5mwUr2WyGczdXQsyyHKEwPOs3SeOpv1sK5oG5U2iSn/oonuEZ3rUflm -9KprXBjFSp+2L51dCVufawru8oieK0jU10BtpoVakSNS5OcbJTP8NY3S3IKfNfY1 -gxCH +ADCCAgoCggIBANewSXGnuCUsPcOnXPq7SUFTLaSM62x2FnJrzb6rne8KYQ615l6D +d2Nm7MrttHWJUBQS6iDCsEGlF/AWYO5adVuZ+Xf+S+NoWMXPTUuJYq+5VEeAS8PM +IriksA8Npn0hAMNTDrd/eNXQ5W4zLQOqUWnKcuE0P1M7gI3/rfX9/JXkZfUmkQGK +OSva3qJHOcG7Bc7vqbJnkFebIw87e2iHxNnUf5IoJmrUaOMdFiQyHBBoJyTVJ3wp +Ufr6Q2+d0sIyes9PV33DbB8DyKGdOfbLg4YmKsnAvnypC0p2Xw9yAnHlQX27Ngcq +tfzcOXx3QlNPxQDF3oNHzi8GD7ysex1z7PRIsZlLVQLshAdOfA+naktPezj52R8V +BtWaxgVFI7IA5X21reS25t01k/GXNcyIJxW5KSz00b1h8+mpz0n0R3Mz3HuZybAX +g5bnZ+91jOeQmTt08eMXjwAGClxcOqfrssfDvOnUSZjDpzEGDaVuFGVPA9hR/eKN +Bfo659rv45pYhtxoHLz1LJWoZ1uegmKrGF1w16K05k5mpzwH6fzqDzzbF1xyynGX +yfbIqsvsBniuWGmhMjlfT5+l0VG2GgsD7Yijv6SV0YZrVf85iA5q6XdKTBuKYmin +ZEbneEjw9kc9myMeC5ik7wHuksA/BQcja1TPwB4ZRbPEcfi2iFxbtsSzAgMBAAEw +DQYJKoZIhvcNAQELBQADggIBAGdcqEI2l/dKxu9vPuRC2/VRgjgDBN4UJJCY111T +2A7GsGzd7lRhtxB5ZzClF77UiRJG+cvFai00c9+L3wp8qy4sZWY4MaJIWoKRh72Q +sRiH8AskeIl3uvvvaH86bbmpDo7M48Cs/zXZo9VhLzD8ZuHcS1mdjkOcnQzkbSzR +YeM9ActeuJRmsdQ+gSzCTvFqmGutL6xvM8b9a6PwyY5nPxS+eh0/7KNp+EXBvp0U +MWp6mMfq22nAwAQRLbvh5f+a/4GSwg73By6hwnsgb7tpBBJ6ppnKAIALRf7l5JwS +V0LM5Vnpp4J4JjdYyQzk2xkxi+UGIP1IRigbeWc4K3qgg6BUUkfSf4W9oJD4JCa2 +cOsqnKqFxTwXT4b9j9qsPpg7mUQ2+UtU4Lv3h/7sXpbpx0ldb2Hnaq+JqUz0l/7c +54y3+nzke7I4CWKtLJUSamQiyOC3CBVkRX0YEYUBhMXim6dKAfiOEV6K3bwiU+YZ +aDe0lEeLbzAp87DKRTAvDYhRMIFtD3g2qmYrWpQ4gj8vSEorNAfg3kVHMFRGlk9o +jaFduAz0hKk+QG5SgePXMph5ZRXGRq0FnDbF2gZ7WV+jZiIhsYGJ43+RBWHh4HO4 +P4h9eOWQG8AxpDRmOo2KmyPbV0V/eltC4N0oOAmWz+i0qqulnpG4dOzQKpinRBBr +jPt5 -----END CERTIFICATE----- diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/client.csr b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/client.csr index ecca8ff676..b783896725 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/client.csr +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/client.csr @@ -2,27 +2,27 @@ MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGQ2xp ZW50MRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQCpicNwaTt0/uACIjsBOhWAoHu/keBd9NAwByirGX0qWVnKAmBLN3MI -RLqBNHG7qSv8Dx3OIpoS+HCPe8NITHrqSBmBB+Z4QUZRc/vj/ZY/fVcmuA1IXFRm -KP+VakukiRi1yEF9UFTebuB8V+8wrGCzsYaUvzZBtDLXR0B54RIgovs8SDRbF6Nh -EpnuVO8PGA6/4kuvvd+GJutHri0ai074N5nNilhIQv8dy/DOoSgasD2lSPJ0dZ6+ -rlJ5PQ7z1+gvsonmH0XqoWZvUB6zRTOWZWRe4Ki4wg4Fu99Bm9r5JkY3tmtd2Wqo -BSNTcE2R69293sqLS47wkX4BFkhByf/zAu5RVNQ0w4mLw/eg6Ag3EYn9WXzEwhJC -rN2OccVDmcjNCmLnds4N7d2kz9Iw+lwsbedgTklMRO0MHZWjt/wWDA2B9RIk9JLB -5CKlzjSa6w5mXcLfyczg5E+Q1lGKAgCcTY7FIYpn+T9XsOBc9Gio9/Pb/Hbyq+ow -peUPywqpDJa0gDVglRlQX43yi3OfB7TygfByzumF/ZzyfHtQFqN7g1lgQEzA800z -mjOmJks71nytZWoVSn92wAoK/xzfReztYbvfBUtJ8TUHxxR0qQ9KIv2hjie5pol9 -cGyY7an4oRAP7v8AzXybmq8KgCq1zJ/NETl9mvPAU5edK0JQLjRKJQIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBAIFKW8OGRgWjrW1NWNwTCYeXfdl+GPywWjR1EKco -e7h5KJrlMsRLLpzQyBWQ+8LeqSWHv3KZRxkU9haK8DmZ5M8d8S17DeReX1XeFCsY -C6+4XsS+6Ozz+i+zF/3lSiiVLRg/vhWGSNWdwto3ek0a7Oqcf173gATnnEyKmnSy -/t51+34ZdS8QrOKT0+6RGe6Z0ECW3jPzgDeGSUFRd5HZTSSCDPdvvvTsu20yybNm -r7e65BMDUzCXAdCpaiM9hX2Scj1MRxbISqjKPy5wonqhzy72T50ObkaRBZ7Jou9X -gnqRmp5A4NKfX8DjhWJX+ggn4cP2oV8iuvidOM3A71ZeaZJ70iJQnrWswjJzK6LG -VcbI1nuCGcrWukx9jDFULsWLG1vSprFTSP4WoFWhRYWofHvlZ/wu5Ljkhs1q7hKa -QesXKVHdmDD+YPo6JfJwq8GPDYh/hDZTYKBEAeaFjmToILSXkxOTrfGigDx2PDIQ -bRUx8XDSvUgNdh3ZlW38iORsAixvSBki+zTCpNp5zaSdY0BtDB7DK3k7ivU9u93x -a/oHEHQbEDSUQ6Oiuo/wzsRHKsjHCkOI7BlSyxH3+KjooTSJNgKyTb7dm6aPUdvn -aV8wAA7irnnUbV8iogRaC0Ziry15EfkDbg02dVtxWDWdMIVuP7to3tcMv9gUP+Dd -uEEp +ggIKAoICAQDXsElxp7glLD3Dp1z6u0lBUy2kjOtsdhZya82+q53vCmEOteZeg3dj +ZuzK7bR1iVAUEuogwrBBpRfwFmDuWnVbmfl3/kvjaFjFz01LiWKvuVRHgEvDzCK4 +pLAPDaZ9IQDDUw63f3jV0OVuMy0DqlFpynLhND9TO4CN/631/fyV5GX1JpEBijkr +2t6iRznBuwXO76myZ5BXmyMPO3toh8TZ1H+SKCZq1GjjHRYkMhwQaCck1Sd8KVH6 ++kNvndLCMnrPT1d9w2wfA8ihnTn2y4OGJirJwL58qQtKdl8PcgJx5UF9uzYHKrX8 +3Dl8d0JTT8UAxd6DR84vBg+8rHsdc+z0SLGZS1UC7IQHTnwPp2pLT3s4+dkfFQbV +msYFRSOyAOV9ta3ktubdNZPxlzXMiCcVuSks9NG9YfPpqc9J9EdzM9x7mcmwF4OW +52fvdYznkJk7dPHjF48ABgpcXDqn67LHw7zp1EmYw6cxBg2lbhRlTwPYUf3ijQX6 +Oufa7+OaWIbcaBy89SyVqGdbnoJiqxhdcNeitOZOZqc8B+n86g882xdccspxl8n2 +yKrL7AZ4rlhpoTI5X0+fpdFRthoLA+2Io7+kldGGa1X/OYgOaul3SkwbimJop2RG +53hI8PZHPZsjHguYpO8B7pLAPwUHI2tUz8AeGUWzxHH4tohcW7bEswIDAQABoAAw +DQYJKoZIhvcNAQELBQADggIBACboOarzimaArw3lDm6ET5yiU7NxTWtnWwFUOoSh +qS2cvumnCokUlrDyMSSKoHl2i2biUd9uiHuEqlh0yufNgnTsyAXLg0UiBHAv5Tos +Esc5A+JTV5ehy+Zrjpl3Ayh8difS8hJEBjMhH+7rCN3rhpvwkTSaXDCQTBzWPhQ1 +R0EIho/SNOh5mXQKAUWwhtleI0sEJC/PqezGfN+w+URHnzE7YMwg02bvoMxBEror +YVddG4o0nIyd6CPg++K7TBzYGGOf1CUCrI9S1bBn3jcv2mq5YgZMdLEa0HkA9XzU +J/dTSGz5pJbkoaX9IHv8a3uoc+V1jdNWZRmTUYG/cNoAFISoG+uuJLgesF5l+vxx +GUwkE6wj4bNYR/Pqy5963oDmA3ndBzR1wtCZqIsLX3t3A9fLLtIEgeN/XDSvNDBs +YdwBrx2HTatK7QCJ5e+4ACs6Wc2c1nnDviPddpxUgl0pHKcMbT+xNk7bY5fjl5Qr +wzuBNgvQcsZxNNvI8bs13k/eBmKrKOV2WUP1mHRzSoxPX3gzGRSWCe/7QR51oWlB +Qkb6OGVGLCKPnhIKFeZ6G1Qv8q7/hOOlmWGO4bN7s5fjAKEsm3JV1xrsqSKRofRG +JfdPjQD88jewIAk6xGSMKmc4usQN+y/IfU8yZ57MHSHULccA1Wl/VXfgKCAxS5fK +uXtm -----END CERTIFICATE REQUEST----- diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/client.key b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/client.key index 298d5296dd..58414d8d59 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/client.key +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/client.key @@ -1,51 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/regenerate.sh b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/regenerate.sh index e1f1af5b54..84637be753 100755 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/regenerate.sh +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/regenerate.sh @@ -8,15 +8,15 @@ rm ca.crt ca.key client.crt client.csr client.key server.crt server.csr server.key -openssl genrsa -nodes -des3 -out ca.key 4096 -openssl req -nodes -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Root/OU=Test/CN=ca" +openssl genrsa -out ca.key 4096 +openssl req -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Root/OU=Test/CN=ca" -openssl genrsa -nodes -des3 -out server.key 4096 -openssl req -nodes -new -key server.key -out server.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Server/CN=localhost" -openssl x509 -req -nodes -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -openssl rsa -nodes -in server.key -out server.key +openssl genrsa -out server.key 4096 +openssl req -new -key server.key -out server.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Server/CN=localhost" +openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt +openssl rsa -in server.key -out server.key -openssl genrsa -nodes -des3 -out client.key 4096 -openssl req -nodes -new -key client.key -out client.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Client/CN=localhost" -openssl x509 -nodes -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt -openssl rsa -nodes -in client.key -out client.key +openssl genrsa -out client.key 4096 +openssl req -new -key client.key -out client.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Client/CN=localhost" +openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt +openssl rsa -in client.key -out client.key diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/server.crt b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/server.crt index 7ef4b0f546..ace156a29e 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/server.crt +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/server.crt @@ -1,31 +1,31 @@ -----BEGIN CERTIFICATE----- MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjIwNjA4MDkwNDU2WhcN -MjMwNjA4MDkwNDU2WjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV +dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjMwNjA4MTY0NDI0WhcN +MjQwNjA3MTY0NDI0WjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZT ZXJ2ZXIxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBANatB0qfIsBhphob6vkEB6sLc9QRs+EGX5ZCk3gWrp6j4Hw54I0v -wIP5HQuJtE8fiDR5xC4dWMWjfzmERfXJ8CYeWbD9zHsEsI15uz+lmlX+hTJKTyzW -PNtFN+IbYme+tzNQZBVxrHq6KxRqEDgKlFvI6L0oq0XjYmVt0AqRnoVRW1jqBoTd -KYfK1tNlWLuf6lEzphKzXZM0XTc9vIUxw+FWlogzJUB8boNbkVPrbwONQk6Cz+me -FD2D71dYMGr4MTypZtK8C0pjU32RwD82FNU2C7DHgSUncptfWKWjT3Xgu4r3vYDk -PDoHtAZaTs6S5YNDjoDUEC+hn42blv00LKgIiSfD22np3Bt/gzyd9XslIilk1dzP -u3uTPi9r/4m0pMeXurMOTlhjM5UTG87AugpQI4DXYen/UF7few26sENZMoOLNfqS -k+2rkvpkzDjRQSCHqNgRhefL79rO9S2Dlv3yadBn/h0Gra13WR4HfrxXZyuI9Fcf -jtXNo59qeeSzo8bQUYZRv2ANguWg1DU1EHR2cFyS0lyYdaCdgaNvuesKsAsxoAGH -lbm32fOSe8kcgVCte/ceMdvTFh9RK9Cq+iaQdub4xo2JYJveRKt/9I8yDpo95md9 -pt1vmuL/ArEG8pD7ykx7GOU7tefhnjOKpQt8FWih1S2KhXbul6xwc+rFAgMBAAEw -DQYJKoZIhvcNAQELBQADggIBAAAWLWmJViBn92u3A5oKA4960vHnTpN8FcJG3Has -gFteNsuU54ByuEjrXAgbqFmjJC36LD0s6S5vIsu4WQdB0n2t0c7TME26Ki9eMSaw -ikykg6a2Q906RvXkATHE+TuibYNeMOUkxVuPdiVRK2P6wvde2TrXgBYK7GVptJtb -Ih7CYdyJAUdqbDZO8NcTUybKgy4qj0dxseptU2Kcr6wc+Q6xRtmxeHS1Rvu9xEbY -VsTGNfdqns+15pNowfYchukIk+ibR5tdK8tpHkUcb+Uugb4pYYl3QwyRySrAtKhV -1ZXCfe3Al72GpcSc759XHzhmT4Ev1vjVn7BBE7seYRFzP0PwaWCw4ytKKr+lT2RM -5tbxiy9hiQgHXPIG1Hm+wJvk+T1eSxlWKPdxXB7Prz8WWiPg6A07bOiLFUGqaUSx -M8jCgZurNW3e0zdrY/ZBesw5GwgXsJqiosDtn15GIk+aGMGQXyM1Tk/Hel/cowLi -RSIZGTNnziFwmZ4wJizzqfZ+NCfAPQ/Jgr/RJnjCL4X2aVK5noS/ZR/4Ibxkw1IE -YyNagnqSXjjQG3CoB1gCkAJWZ37SXj9RE+P7CpI3x55vi/zEkdjQpL9NYzT9O7ON -6lMX+2B3ISCcCRp9NqFIndaXYQctA0qIsdKOMsh62F3jM4tZkeYwefLSTdzhQiaa -YocN +ADCCAgoCggIBAKtVnxPqCZheCuqePfLknxc+6MeyYkf494U8WWeZo+yirYV3zY70 +1KhKZ+M+XDqhrBXc7IQHZd2KKxYBGnrv9yvbllmtZRdnk3hnn8B4eNh3w5gCRKPo +GSTeiNN7WEIRwYZNkr8AWgeoYT1jN8SAMn5+qSqKSd62Z1BPJNi0eQmTVxgLZqzx +92AWBZQl9rOme+1zV6ohKcR22Of3yUl6476L1rYYcX0DXp0QFkhK0TFKNt3cHxqq +WTRuMTnyCj7woWRtwclWTdO2buAkJe8cIde6rcbaUAX9jTdkbAgYAB9MctEKqasO +MqFyMzweS3sG9oUnmd0/GRL9as314xTZuz8fFnfj5l0BN6thVMmvEEYU3rTLQRKf +AKWzI2VrU+5wIxN8O/4ZbriQ5ae13p6TDYilSZ6kMxSzfOM/A00hlA+DKMS0o8g8 +V9Y3wcl3aSSjoZbH7XS/uDEueodudz9V3HxCk7Wc41SpunQPFprmPDWtjiW0jcMD +3kHV819r2F8aidKN94Q+3KI+N/mwn1QdDVsquiCq0wbR54i3CoAkQbi5YeUdEZD6 +/mNLs/BABgzSbANw7Fn1Pd9gY/JIsRhMskcFRqXe9tOqKk8/GxMv/r9MgJn6HHlk +iDa3OZsoOtFbjjOPFoy/Xq9YMi4ODnJkEhe7BSsVl/wkDAUdg7Zfu8XVAgMBAAEw +DQYJKoZIhvcNAQELBQADggIBAEft+R+qGyKffiiJpYWLPn0C9SmpjZiWPK331n57 +Nk3GA8u9gRgD1gyqqLr19r86nLArF8jcB/nChPB1A9ysW3xyTNvpOlAwYvEjxWR2 +tJr8wiDucAd+SnQud6e+5PI5e8LnyxYoeoZ+i6hMbhNV70NthoINHMAQx+5NeSpa +Q0GJ4d0XA3W/8Pu6oK7O0QkVovVut73Koz5DqsF91zFJp7SjVKaCnnjRKyU8wbg5 +uTO0TRheEtx3AeEXNps5Yhq0daLTnmnuFeyaJHm2F1QuBmma1TTwIF3HDclv2wLn +Jp+MWG9yoN9oEJLqS/AvDu1BltPSuvnYgLZr7cl0os+TEqpzxroa4ziE98dEiy0D +K4YQ59UTz6C8Ps0uX0hcs3jsvZOkBWptusvJBfZN59xLJAVmF2igkgIBKoiXvXmv +fXDx0hsOBg2IPe2O8lLHlFKlJZlMc+prH1iD0Xv6HefSP4L1eZHU37zjrRf/GiNX +r6GoEhJR2pKEoZQT81xpYp/w+qjzWcTl/mLD6FEePRzV92h3ubjRWBB36UhLtnEG +LJgp7yq3aGu7rg9rnuz8J6DG8DStE9rNuRjkV1O2C/PvR97XmVoIqbrMlxX9MUQJ +XxLm5dqBz7EVuhDJSyp4zCkDYsOj1y/SLL2O3cTyQQeZg6jlqripNqWnviAdTWe5 +JIPp -----END CERTIFICATE----- diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/server.csr b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/server.csr index 8485c97579..b421a7a60c 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/server.csr +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/server.csr @@ -2,27 +2,27 @@ MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGU2Vy dmVyMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDWrQdKnyLAYaYaG+r5BAerC3PUEbPhBl+WQpN4Fq6eo+B8OeCNL8CD -+R0LibRPH4g0ecQuHVjFo385hEX1yfAmHlmw/cx7BLCNebs/pZpV/oUySk8s1jzb -RTfiG2JnvrczUGQVcax6uisUahA4CpRbyOi9KKtF42JlbdAKkZ6FUVtY6gaE3SmH -ytbTZVi7n+pRM6YSs12TNF03PbyFMcPhVpaIMyVAfG6DW5FT628DjUJOgs/pnhQ9 -g+9XWDBq+DE8qWbSvAtKY1N9kcA/NhTVNguwx4ElJ3KbX1ilo0914LuK972A5Dw6 -B7QGWk7OkuWDQ46A1BAvoZ+Nm5b9NCyoCIknw9tp6dwbf4M8nfV7JSIpZNXcz7t7 -kz4va/+JtKTHl7qzDk5YYzOVExvOwLoKUCOA12Hp/1Be33sNurBDWTKDizX6kpPt -q5L6ZMw40UEgh6jYEYXny+/azvUtg5b98mnQZ/4dBq2td1keB368V2criPRXH47V -zaOfannks6PG0FGGUb9gDYLloNQ1NRB0dnBcktJcmHWgnYGjb7nrCrALMaABh5W5 -t9nzknvJHIFQrXv3HjHb0xYfUSvQqvomkHbm+MaNiWCb3kSrf/SPMg6aPeZnfabd -b5ri/wKxBvKQ+8pMexjlO7Xn4Z4ziqULfBVoodUtioV27pescHPqxQIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBAC8troDBxaOg6dnv4xXJqiQxYJxU5YDc6lTb2xp5 -+OsvW3FYs7B3NKXfro4AkkaU5vyQQlSR3VIu5DroUvlm34uhWnkejbl6p7wv+uIu -hRuu1eYT3TdA+iv2JIB8OtBhAPfxYSBcga0hLugcqVydX5WvQTkZuIbi1MsHeq4L -hKMxG5ZlnMNsBo4rNo+UOfbdzkCqtxeuE0s+WcYeDQdeAJC37JlDbefO9hC+tnwT -3hi7UEhCo+pk/ttTy4uUOaph2nU7ZyYyhd8ZTSWBoHmMKb8YewMv21vRiB2gmh1F -1n1PdS+ehbbtleTfucHay41Po/pLrfYJ1p5rDgKYu6kNq7YNoL020G/1ei9DBA5v -RJs2qtL1KEhh5ZzPbtrGN6tkdoZ6miSfE5gcvGqm7hMd86Pzxid4mftQMjrEjj94 -OzVbu+EIPE7//8irP8YcvMvPeVZrl3Uu8eS1h43DkNyjVv5kqDqOsHKnKuJbVgkF -O6GPjcKqrKVqTEttC+0eXasnt0EwnEBEsSLtsKp3Lr5aq2Ez6TtyQbBOunoTOTd/ -h1c6DXcL7zmLMOnPzuVjHYoH3sNmGRD9Xils61e0xfr3dHYZFBt9bu/3wFwAkKrW -NH7kde+GKwMc3UyllVMTXUXq3VTxd93kYtuYZpcC5HmUEvZcakmL91z8eyFWJ3u8 -+WGc +ggIKAoICAQCrVZ8T6gmYXgrqnj3y5J8XPujHsmJH+PeFPFlnmaPsoq2Fd82O9NSo +SmfjPlw6oawV3OyEB2XdiisWARp67/cr25ZZrWUXZ5N4Z5/AeHjYd8OYAkSj6Bkk +3ojTe1hCEcGGTZK/AFoHqGE9YzfEgDJ+fqkqiknetmdQTyTYtHkJk1cYC2as8fdg +FgWUJfazpnvtc1eqISnEdtjn98lJeuO+i9a2GHF9A16dEBZIStExSjbd3B8aqlk0 +bjE58go+8KFkbcHJVk3Ttm7gJCXvHCHXuq3G2lAF/Y03ZGwIGAAfTHLRCqmrDjKh +cjM8Hkt7BvaFJ5ndPxkS/WrN9eMU2bs/HxZ34+ZdATerYVTJrxBGFN60y0ESnwCl +syNla1PucCMTfDv+GW64kOWntd6ekw2IpUmepDMUs3zjPwNNIZQPgyjEtKPIPFfW +N8HJd2kko6GWx+10v7gxLnqHbnc/Vdx8QpO1nONUqbp0Dxaa5jw1rY4ltI3DA95B +1fNfa9hfGonSjfeEPtyiPjf5sJ9UHQ1bKrogqtMG0eeItwqAJEG4uWHlHRGQ+v5j +S7PwQAYM0mwDcOxZ9T3fYGPySLEYTLJHBUal3vbTqipPPxsTL/6/TICZ+hx5ZIg2 +tzmbKDrRW44zjxaMv16vWDIuDg5yZBIXuwUrFZf8JAwFHYO2X7vF1QIDAQABoAAw +DQYJKoZIhvcNAQELBQADggIBAJCMEdjKyklN2izvOhd7+JMXm/ClW3hjowbu+csO +JNz8NqUNLrKJjFyV3yAUGWuyp3z982S+XGfcm3nU7n9AJOjT4DLJId6opOtA6CSp +KTRgVZmeViL6O6UqBLTacz5DDjwMQXxszc+QpU53cMT6Y7VMvIOhQ6AmIvz1v71u +5gaYmlbfXVlmiPHEKRsQG9/DNIPe1mHP0p+S9qYKmCx7Jlpee7IstW/hNjt7alDn +uFaxFjxmCCSdWaMRyMW/qNRks9q3VdhJPan+amFeXceoEG7SOKiFiOc8A7DribSm +iKc2YlOw14xqc+cJutiKBvoBMri2eh1JgCbPT4ufVGFpbDkfYwAJxWx44Eg0X90j +gJUw8IRuHQZkEYss6jwFMFcOqjpe+AqrssOl4GZmu5gcaiUnj8PkSVZLTOrLilPg +sSDjzmoHdv4QcBppTrjj6PyR5Xd6DeGasWkMPvIPjiPN3mOhfxJ3C87atMqOhTLx +em7vFOBegAW6g40J9JD1XMoI/zFnTU8NevZQgCyx/Tq1XNRmUeMA6y/qpfTNKi/f +F7v/7nDWoxBgpOw3J0E9R+6rxD7Cjb2RWZEf20ZGdNBlPE+UG9c9b3HC3IHiwRHb +L9Fi0251w+fkaPX8dojQKErCEknqJ1SCP5S5F5g1QCQby22Y7LQsggMMf94s/wQX +4uMh -----END CERTIFICATE REQUEST----- diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/server.key b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/server.key index 2dcd9159c5..80b9cea7bf 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/server.key +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/certs/server.key @@ -1,51 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -MIIJKAIBAAKCAgEA1q0HSp8iwGGmGhvq+QQHqwtz1BGz4QZflkKTeBaunqPgfDng -jS/Ag/kdC4m0Tx+INHnELh1YxaN/OYRF9cnwJh5ZsP3MewSwjXm7P6WaVf6FMkpP -LNY820U34htiZ763M1BkFXGserorFGoQOAqUW8jovSirReNiZW3QCpGehVFbWOoG -hN0ph8rW02VYu5/qUTOmErNdkzRdNz28hTHD4VaWiDMlQHxug1uRU+tvA41CToLP -6Z4UPYPvV1gwavgxPKlm0rwLSmNTfZHAPzYU1TYLsMeBJSdym19YpaNPdeC7ive9 -gOQ8Oge0BlpOzpLlg0OOgNQQL6GfjZuW/TQsqAiJJ8PbaencG3+DPJ31eyUiKWTV -3M+7e5M+L2v/ibSkx5e6sw5OWGMzlRMbzsC6ClAjgNdh6f9QXt97DbqwQ1kyg4s1 -+pKT7auS+mTMONFBIIeo2BGF58vv2s71LYOW/fJp0Gf+HQatrXdZHgd+vFdnK4j0 -Vx+O1c2jn2p55LOjxtBRhlG/YA2C5aDUNTUQdHZwXJLSXJh1oJ2Bo2+56wqwCzGg -AYeVubfZ85J7yRyBUK179x4x29MWH1Er0Kr6JpB25vjGjYlgm95Eq3/0jzIOmj3m -Z32m3W+a4v8CsQbykPvKTHsY5Tu15+GeM4qlC3wVaKHVLYqFdu6XrHBz6sUCAwEA -AQKCAgABGBSnbrQwos7D50yFRF39oytN82ElTnECRQiXXhY5vMASIgFg9tNWWNir -DGKc3J5HFi/HxGKFb1XgpynsHMFakGEIo+J85gM4VVx88I0ezxNCtFo+8kCRJYMp -ZdZUjQZF/qzj5xZn8bbyfa/jeTpUVWvKOwDUdFo2Bh8/ToquR0Hd7CNoXfAuPvxl -S2juW9xH2amJAt0BOQ0YkPn6+8vxxA00WH5iG8A8byUIdnS0Ye3qlIQWvrV/ssJv -gYWNpgIqOvrJLCgqkuMECtAeAlqM05+voPSpic/ttsiu32wyP5j1Floi5AbijNOA -DMnGB72fs6JwSaRjecFkaVyVocRwfGZqTmPi6KDJzPLDPisOhmIIh3HevqKd9qvq -Jn/sYQ010c7O/GJtpYpwVels/0U1/C9B6ZSfxZjLvoVBRy8aJxsh1Uf6aWHmh8av -PBwMGPYYsnKqYK0iP2bRQ1eOhUwLkRZ/RJdJJU9U7ffyeSPYPXzv2FlGP16RKRp+ -+eiPCvI1711Gh3kzaf4yPRZPuWTZNkU3Xv7p27qzaRle/bZQzP6AKNcTnbNKcfxf -3mYixYD/Pd4o3PuGCNhoHQ7ZpkNGiFk5fMVicq56LLeDyAIaB+Ylt7nOBZlkSGDd -ijYBr92Xn+YfmMCrreU4tZT4ZmmmqS2ZSLxCji4XbX48eRN5gQKCAQEA9FA7184n -82msVOITUxWq1muFa5F9KOKYb0yChiPLogP7P2MNjy/TtSKH1Vt2rKyAL8O0veBJ -uHm7o6PYDj0PMR/8uMlN0juFJWsL93CFixyI2ZcU3sRxeulJ3bBS+V7kzrw30zyk -qaj9mEsCqIehZvBE/0HH3s1MQGe9pdPuYiyMteiV3tRIodUbdx0U5t7VAocqfbKT -mqQi8NdmVPlxxFDhfpgXmds+e8Z86GS9wAsPBUrbTWQWCjLKYC/CfajQKD2lIv7G -OXTi7MWw45JPaok3WQhy9+cNKwlVftKJC0J9jVC2OG2tItEA7cWEHZredM6LfYmU -xjjD6GeYuh4zkQKCAQEA4PHdgiG5IyJko0y0E3WCjqs2AKA0V5+1spmrDCANCb7K -CCX79ZqpfnrrP3eZdgBQVpuB4GBl2xkPECcTnNRJdURkx9auxjzh36r9JdxO3DjI -UQyH6xUQu4PB38dCIANQ/U5ICNWZoaJlSziww+UvYP/XwY7YVyAsS5S7IoOCMdio -zNXb8lvZMDFxzVFUpqpCnoE7HhqIHZTVNH8/VxFTewbmwWmsBAcEOGHBL3On/yFf -px4nNCXnOfyoIUzCNc5tsHUq2C2NApCfgEwCpCNecAHZBvUkgBEmSdH/pVN97Okv -ahG76Y3DKRDkzcTFXCNptdUSidGBb34NySDGD0kB9QKCAQEA7IxaxMJIkDd6sd0K -1OEfvefxEIuXYWS0Lt8naXVzDnVIaMEhOcgW9URvvDaImvuSSaz1bPqipkjHUtOq -t26LLQdJjCjsfmc+rVIODhAWXPDN18+eV2pgbZ8+87RrQiOM6lX2v0HyNIr4ruHB -uydHMQHl7Dfmq2SfNaS8TLj8EHYN73s40L09beOGajfwKvEJ0R7KF1Y17/6IDiSg -Yhn6+xdMnWPpRgCvaOxvuBsCVdTfQEKQP0huxoUSyTq01zICCVRWdaG0j6EKrjFi -6ZSZ7A7bVgsGNdyyNT8eVmLGae6A3biOFeirQBCZE56wInH2faYWDQCO2bXQiU70 -4w+m4QKCAQBO1XUD/j2cCpmqgV860pwG1AoA/iRZ8ScEiMZhYXowSCUV5fn/gUyV -fw6jF484w7NkJuvFbwNDXezhhFBjTiLQbj/DqYFnCD9A2/QMKMGafGv3u6SGxsMu -dGalvnd2MLNZku276uAEvZ0yV5Pbk56fKAq9UwqOvj/H3UAYQG6IeZ3u66RBs97R -/QIdKru4DUN7uV62liXN+DMgStgv82qGW0zTy+z1HGBmQhwqPSZLS67yKqcip4X5 -1Io34WbO5KGcjfON/6jDlVvQ4tKqI5sdNgiRX6iDGX+Jr4cgsboYJUDws3Zfy8bx -xXHqi2N/fwm1KA9vLXVnVY4PRuUixjthAoIBAAYsunWlwYzcFesGXxWJnNn4M3W8 -M3rl9sYHJWTP8ECoiFjSJ/YcIH6if0cop0zpLKfBMW0Ig/eG2PZhsMYbSD89w4aQ -S+h4e3BteVJkRs0fiIncQd4dOb2+WYyo7rLd83gLetzRtXXRnWTyU7tE1pkUobfO -kjq4I5utEjUXj8dnzWfLD329BEjNUJSnrVCvtR+4UNWCZHSBnH5emoA0opXwIwzd -HRIw1lfybeji3pEolNfKTEAv52tdtDyhLtIbTF6/YF4z3oQo4lxFb9wxGGZW5Pu2 -grzTK89so9ihOxFxBCFD/GwhetqZd478BI1Q7/wi6PrNYUXd/6tnnkmLHco= +MIIJKQIBAAKCAgEAq1WfE+oJmF4K6p498uSfFz7ox7JiR/j3hTxZZ5mj7KKthXfN +jvTUqEpn4z5cOqGsFdzshAdl3YorFgEaeu/3K9uWWa1lF2eTeGefwHh42HfDmAJE +o+gZJN6I03tYQhHBhk2SvwBaB6hhPWM3xIAyfn6pKopJ3rZnUE8k2LR5CZNXGAtm +rPH3YBYFlCX2s6Z77XNXqiEpxHbY5/fJSXrjvovWthhxfQNenRAWSErRMUo23dwf +GqpZNG4xOfIKPvChZG3ByVZN07Zu4CQl7xwh17qtxtpQBf2NN2RsCBgAH0xy0Qqp +qw4yoXIzPB5Lewb2hSeZ3T8ZEv1qzfXjFNm7Px8Wd+PmXQE3q2FUya8QRhTetMtB +Ep8ApbMjZWtT7nAjE3w7/hluuJDlp7XenpMNiKVJnqQzFLN84z8DTSGUD4MoxLSj +yDxX1jfByXdpJKOhlsftdL+4MS56h253P1XcfEKTtZzjVKm6dA8WmuY8Na2OJbSN +wwPeQdXzX2vYXxqJ0o33hD7coj43+bCfVB0NWyq6IKrTBtHniLcKgCRBuLlh5R0R +kPr+Y0uz8EAGDNJsA3DsWfU932Bj8kixGEyyRwVGpd7206oqTz8bEy/+v0yAmfoc +eWSINrc5myg60VuOM48WjL9er1gyLg4OcmQSF7sFKxWX/CQMBR2Dtl+7xdUCAwEA +AQKCAgAaeE7sV7MFzDmph6sQdIuznq998qxGbEtpVSqG2/C8ZWGjhh/G30JfgadN +L1w2XrXkZs5Pk4kEUg1YB/GcXqh0KSewUR6WIBVje7btmG8rGk2olWkfXYNM8+h1 +q8+13WJlqmRqh9Zg6n2ja0m5XQjwDAd8oALLmqiZerC5niA4/39sIo7JV1Sdjqlr ++vWDScxJohFAIoF+bdIS/HAnnwnCbX5Ngbc+1h9u6oZWwuBQ2iNh4VkY2IqRlBic +2C0HDkwQ5PgUb/X0KHI2xL7rkxATcS7Z0u6cDlEb5rLeCT8zlq8CZsBRwg7GbItH +1XJZ3niFl9momc/45Bf1G/DqTr0jwZ3I5wSUFQCBuI/F41YnyscWq1BoigCxeD6f +VvZUUfkJ/Vy3hghO/2JF5sDCVEYcdesnKDVteZNmTNVKNOZhkomLt0ouCdla0pgn +yq4Yw0oSdz98F0IyTSciWpw2JH/5Hd2vxBLY+8svgAxHnWImqq4lcW4SJgQECzF2 +Ju55uTrciubnuf5WjwoI2uT4KYhhxKp6tiX9fbecMMEMksYgRw9IuaMIP8lkmfjn +WCdyfgbIgJ9xAgeljbHOm5wEcwvs8h+6Z8PCTS1+ZBiwVVQyb4hDptnMY5yu8MfQ +934RzVezD9oJRn0OgJGe7wwwdkSWr+isYO/u0Va5lgVEzTHYHQKCAQEA2E2AGZy8 +XKRDauYyiuEldGi8qCHtDzFo5w5Ni12t9QARFQzL60mvKPSN/hjtUGpL0y+ZmAaC +cRBSyQGjd11vh83z0YUKN9+12ugGufpakgJ2jz+U1i2WXj+M4IB7sdwZk+GV0Itf +UKo1AnvneE+QmeQzx9FcFT0L7pK9ajyBpRLBoNBAy7xy0YeaI+ziA6qaET53yQqn +eNiuvCFEB1pKE7aR2sJ7A6JmghIJr5wtjwOtyD1pOjmaI+F7xCFYRvgBmCX93uov +1TBO53PHj8GYp3AaArj2LgRACiFP+JtbvNaCJQDbvL5SJZULx5r5i8nbAAyjBmHz +6Pxqf7a70yXOhwKCAQEAysdjICPGYIwOM+9ziez0wsYvGCV/KF30FQY2JnZB46bK +UCh5LxWc3qsbdjgzjDPrR3rBEz0j65OuhIekMuIwm61jDtA6L6tpGxzntZKBHWh3 +2PSV1jeb0OBzCf4gy0O58P7LYZRI0b1OuClWEHSe4vJHfxEDSTFT3Cn10AlT+OBU +NoQdk7CX3O9ISkfSZJ32MdNCUHu+9DKhb52gpXhiQNkRwBPStywj8XeXs7cZJs3v ++10BIL4kr/JwHEZS8h+CIb0zerKaJlhyot8JIPIwo4ebn8S5KJUKo4S3uON3QMZl +5w+Ry+3Io4Dnf5b1NH3Qp3fAx/pxruX2lKBU7XUjwwKCAQEAtNDskfyNFaCXXwh6 +HdCiX9KiSqa5pea2+9fgCO3R2qoonYEqAlGBZGozPMOXto51PmBfNE/UwTFVEwUU +olbwQgVvmaluZlDTk+A8p0Fabw4yEAOlpvlK5xSW7qFZRdBpbU65zzCDCEqQr7fm +QpO4nHzAsHwaTwLOM6xlPSbBdb3dMVKFqAqrrO5/cyK1uTznOB0RQ3VtlD8Gquvg +E4ltvVb0THwhG2Op73emsy+KgjAgGPEFQxAeA3qd3NHHGuR9aLPxqmP4gm20uBT4 +MPs0Ylv60mXOHZ+d7Rn14Sv2H0DuYIJ8LianQxV6WGz7yNiAA2WM7mv52r0PRh36 +m0LShwKCAQBiu66SKZkfzVHlC8Qv9gY/CAxKL4e4efasfffDxnTSiZWcbfiDanyV +Fq8qYrcGnwkCJsz3tx9URvYEZZ8Xf3a3djbzMYQDTezBXNOdXxYq4YDpTD3grfba +P08EII6LKhDRPN5+RpsmNIytssLLBF2QlvMk9X2qF7CDVJLxlnkihue6G53jGWr4 +EjIaqNnST+9d10VEttwFPtnH5PIhX3pHpOm1onFI6t8dZWOiB5bhhAhDVceEz9BB +M0RPIBam+Zx9HQiBx5Cy9wHqN7rUJdh050RpCHo3PkqNz8M87NRV38QiOzx8FO1K +XytYvoHp6xC7Wd2uAU11IVdsipyPeifNAoIBAQCw47tJyyss2FqqXGl6IDEXFk12 +mcgrRuPnohAF7Z49/jp5wruYd8heyQdMGk8Z3l+OSFsdMIKxNDWbPuItxK/pCVRM +OooNEdM2uHAighJR9x9/kXFB3j7YuqbTbEz7MvLd+AJVfUos+zwcTuj7q72XGMsb +Gt4jRsrgeDA+paiavKKWyGgw125xXUx1xOUvhGJfL+MB3XTHdOb9nyaDANMw4MN2 +Ff18SMRkj0NzqmRaoEPg5dP0ORcpWJjM5R7Qt6FLnyfx2dhWNltyBBtgSTEVAjoN +Gcr4EgpmFEpA3aaG5QmYYJ/b9m2mWUpnr1iVmeDvadKu9IAi7LgPpV26ar4D -----END RSA PRIVATE KEY----- diff --git a/experimental/packages/otlp-exporter-base/test/certs/ca.crt b/experimental/packages/otlp-exporter-base/test/certs/ca.crt deleted file mode 100644 index 529ce2f7b8..0000000000 --- a/experimental/packages/otlp-exporter-base/test/certs/ca.crt +++ /dev/null @@ -1,33 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFozCCA4ugAwIBAgIUa6OxgyEYxNjpjac0jTAKn+IkGTYwDQYJKoZIhvcNAQEL -BQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQHDBFPcGVuVGVs -ZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9vdDENMAsGA1UECwwEVGVzdDELMAkGA1UE -AwwCY2EwHhcNMjEwNjA3MjAxMDExWhcNMjIwNjA3MjAxMDExWjBhMQswCQYDVQQG -EwJDTDELMAkGA1UECAwCUk0xGjAYBgNVBAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0w -CwYDVQQKDARSb290MQ0wCwYDVQQLDARUZXN0MQswCQYDVQQDDAJjYTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMbVyp3NCtDwKpGbV+MCML63o+vGVhpd -Dlt3ncpcwz0FMK6UJDXzTe4joKCaezWto3Bmhb28Lezcf8AdzmTdnoENAaqUX2SE -giGVoeaJ/M1hW1IiOffa9zIMkt6cwf8MUUMl5kTRMdAqmpikNqN0rqNpaGuqBYf9 -kvDy3hw+dj19hKEeEXI2zt/HYDOBHYgpalWiOS8qwj0zSfxAUeura+eXKMlx0JOY -h5N25OUH1oLt1flhyuHnwRThKbvyMnL36Ey+G7uCFH0hQSGO0BLhg1LPDWG1PmTn -KzsvqaIgDF/tMCXykvaWcsSxrhvsNeOFFmmkKp1ECVOFgFYsGuK8lJlEvm6Owrvz -4X69L0phCJtaCCaSUFdybqx+G2ZKLZNqTtnMw/3YECp37KyrRd75Gy1UrU031+XC -Fpt4pHw+3isjAOf1bj32F2Ed7aaqVqM2A7m8AgA0m22J/f+jBzmv6UJN/kvfFXzC -0lbX6b1fGj49vU9WEO/o+F3qaH/c50HPf45AB2d4pWbDl5alXZei58ZyEemBndlv -XcGPtVR9S/5rphlX1vAIOT7ePWgUVkAi5fB/rLVGyC1FwA0zYvdyj9CVigJNs29G -yftsvMynF8TL7/qCIGNz72qtW/Pn227OI4WamvYhX6fJwJirXwTEQhAfKXljocI/ -Liqxx15Sfs+3AgMBAAGjUzBRMB0GA1UdDgQWBBSMocah0cTqX4owoPL4+zV1pe5F -QzAfBgNVHSMEGDAWgBSMocah0cTqX4owoPL4+zV1pe5FQzAPBgNVHRMBAf8EBTAD -AQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCIpnaYSMXT+nrdOgw2zKHTk47wANGf6nfK -76VwsQfzVkJm/tzEgq+saEznGRW1ttdQfXHJM3NCfneVhjXDkihrHsxiL4S+5OMq -cusp2tKupGXlxwOt7tsAhH5j4SQLyEUiWMmm/Wvwtx2HWuNO8LZGhoAcUrT7r94f -vqr3tYyb3D06/rBRj2QcybYGJHsQAULEQvmWJvCveh5gqxkRjDJlwmqV/lIarPCt -diKbsZqHJMNaRMbgsxV8hVSvD6RKtBG+K8hpuHF2ZKfzb7Yt1IDPtUGCL811ykzh -2PjumjaQ2JCP6vtYAhTS1r/+cbOi+4v5JzF+kxHxFc9vK/gzBT88174S2MQaqwhF -jQiS3YfElLXkr37E9gxMKLDanbFsxPPiXO96s0RSjNK2mzSbz/gfmsjGqxKNq3t1 -IwAfjePmmx4FJ1O/FwOA5RWE+KRhzNucktjxz39oZrnqtPeTqHnAivNOyK3XB68v -5HRjP79TrzIbLCauyJD/qM5UtCRXW2La1rsH8lIBtcxUcZOkvDnE6Po44D5hH2kQ -swRqF9Vy7PL9MWJPTgn4+WFLNoBe+nMY82y7xstRv7c2ctXpAxSWxIXgBN+B9nXo -3Lqpgg0UkjTiCp13Mejq/7DYAw+/Ou8bxWs3BuCQvFcG2+FBMWh0dL1FxVq3BPyq -oveTgr1sfQ== ------END CERTIFICATE----- diff --git a/experimental/packages/otlp-exporter-base/test/certs/ca.key b/experimental/packages/otlp-exporter-base/test/certs/ca.key deleted file mode 100644 index df94d44c38..0000000000 --- a/experimental/packages/otlp-exporter-base/test/certs/ca.key +++ /dev/null @@ -1,54 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,7EE0C188F59416E9 - -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 ------END RSA PRIVATE KEY----- diff --git a/experimental/packages/otlp-exporter-base/test/certs/client.crt b/experimental/packages/otlp-exporter-base/test/certs/client.crt deleted file mode 100644 index b1519dede6..0000000000 --- a/experimental/packages/otlp-exporter-base/test/certs/client.crt +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV -BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjEwNjA3MjAxMDExWhcN -MjIwNjA3MjAxMDExWjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV -BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZD -bGllbnQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAN1or7F+548RpVIgdrzYmuWgKMfWsO5FhgqpGp+xuoVgMMTlZM3i -yiarMnAE0G6ZVMwqCeXkiUGL9QLatJ1S/HO2sWLUkWaPD7X7O4k1yGtl6UsRcr4K -+YBUbucxfrCQjaWKlBc1GMBrDyY/u/rl0CIYu3GtegniN6HG6rBXC2e98DVctQ3M -r/RXB9DWqMC2KW2X92X+FyWqTfGjv8wjRnhQdDNXPA/PCembzhfCL8VlmG65rDiz -VQxiTotTOCmaxULdF307jorMTLIHZVV2OnAA/udeDcxITnKcksLiRKKAiHUXMIPq -RGxNtLX1sdBD/FoQ28sr8o6Ko7qb3uaA4CZhp2I4RR925oZISyObzY3QxrlafN4g -hFnWkTFJY0K+43cxta8K3gAnQXxN/BANDEydS1YM9adqYbt09wctSUjMqJHGZWnn -IVOged+/DEIW9EmyLSPM1DC1s1owOrgwBXzHRRNXuUFjZPPrMC8TkBexNjsapLjr -nE/xa5cB80DIntkM8ysfLU6p39NihM2hmeyI2YS8osheElXEL3dz5vM8Wzv28qgF -PvGpdYz6cAibE9qJ+oT416dVc+9G6i1fcBl7X8w+KUGVFsRnftovwjoSToGlckqg -dv1Tsf6FBDpSMro3BbGogpDhkSxy//eWvzejjHBemz06Kh2DGkKhnT9rAgMBAAEw -DQYJKoZIhvcNAQELBQADggIBAIGWBdgWOoqGIy0fuSbqQgjgrhDrPGBV15TfvB4T -84xfk9YZxdRKkG3J65uLffTnnotZs6gqLx6MfosR6zQYhSK27fTXpJJdRaI55kgT -2e/xNCe867Bz/3nW+vwWIGTuFn6hFq9f8HNLZMpHu3DClj7AB7ga6qp1uFWIn5oq -xC4da8/JTR6FY2srIktyH5Vr64FnhtX9cLSa/U7df7asZjRUm6ndPS49X01G6BJQ -vH0RO1caCCbpDVqPwJnAf3BXD1MkKsNe4hULt25XCxSsyM7v0Ru4KcSSGxiYHowQ -+VzRdJVYe8ytpcg1eVlWutOlDXGLaeGNQ0/u5OEQ8iqZvp1/qiq/LQIRZlxa+ZlL -vsVAgOxolRpm6W01cYCCWX8utsrMq8lKjMIal0SZhj6oP/rwtH8UVRhqhrQyAn6y -K6IYGLGvXGacJYuHpcAFQ0f8LUCCs0kxN/zZOZ98atF0MvgUWKZFNgrvcX5se8iV -kS/7UHH4Ie9ZO6Hv9IvnElOfZY9dnFPNxcbWnA7U0kLa5CWh8CD55ScAGHrvcz3O -JXPW0SHb2xZmXDTfgmS4vMI5PYDyipSCoUDClA3BPr/dkAVssj8SMikJZWhVvDrK -IcKRHpkmrzLJbatxeDNlCtLRSAXeuTheLqqSA2HACReNYkQLPd5V7mY6uRw3d3o6 -3rKe ------END CERTIFICATE----- diff --git a/experimental/packages/otlp-exporter-base/test/certs/client.csr b/experimental/packages/otlp-exporter-base/test/certs/client.csr deleted file mode 100644 index 2d99fab566..0000000000 --- a/experimental/packages/otlp-exporter-base/test/certs/client.csr +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH -DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGQ2xp -ZW50MRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDdaK+xfuePEaVSIHa82JrloCjH1rDuRYYKqRqfsbqFYDDE5WTN4som -qzJwBNBumVTMKgnl5IlBi/UC2rSdUvxztrFi1JFmjw+1+zuJNchrZelLEXK+CvmA -VG7nMX6wkI2lipQXNRjAaw8mP7v65dAiGLtxrXoJ4jehxuqwVwtnvfA1XLUNzK/0 -VwfQ1qjAtiltl/dl/hclqk3xo7/MI0Z4UHQzVzwPzwnpm84Xwi/FZZhuuaw4s1UM -Yk6LUzgpmsVC3Rd9O46KzEyyB2VVdjpwAP7nXg3MSE5ynJLC4kSigIh1FzCD6kRs -TbS19bHQQ/xaENvLK/KOiqO6m97mgOAmYadiOEUfduaGSEsjm82N0Ma5WnzeIIRZ -1pExSWNCvuN3MbWvCt4AJ0F8TfwQDQxMnUtWDPWnamG7dPcHLUlIzKiRxmVp5yFT -oHnfvwxCFvRJsi0jzNQwtbNaMDq4MAV8x0UTV7lBY2Tz6zAvE5AXsTY7GqS465xP -8WuXAfNAyJ7ZDPMrHy1Oqd/TYoTNoZnsiNmEvKLIXhJVxC93c+bzPFs79vKoBT7x -qXWM+nAImxPaifqE+NenVXPvRuotX3AZe1/MPilBlRbEZ37aL8I6Ek6BpXJKoHb9 -U7H+hQQ6UjK6NwWxqIKQ4ZEscv/3lr83o4xwXps9OiodgxpCoZ0/awIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBAE8wUkuBEsxe96X3U2vjWCfD/hB30cF69UZ2NlR6 -2UIZbjvewIy43ozr2uaCk1+US21NaaXKinNrZ0VElWKLVXWkZidfuoGEz0gY+XDF -qyjlfaYlCTexPUSh14nbpLsT0DXvHa5KI3Kq2ly/sciVB78SlH3sRzmJt/qkoaIN -f6PI2Unoqf8vJ1xvQr9z/ODc06MoX5g+ezM2vShZ+P7773bSVL6bIEVl/9yFFAyu -OHL+uwUdBYBk3NS4xKyXWXhG58AyNvGYWIO0tWTYmIVVuL2JDrNGY4QdIDQBoj+4 -hppmh0mYbvDCXolKjUVFC0wHRACaRCN1WLIKP8heE0vZsvXq/7ssuP3DtCDHRadk -pHn+6CpEwbT4bCNsW4bsci9v82npoY6YJKW8mokR+1dhcari6g1W2R80VCuWmB6E -ntJFZpILjPrCf8QCjs9Act0l87xx3+5K0LpFHQiKHygTbOrzE8++Lds+6yC/uzp/ -QtdLC20/iQMJ5GaOxSCwzBe1dUhC+ABF1/ZN1p9wgKFTFQMR+B/bR5q9l/d2AyMY -1pTorKIX7yg14OHehzL0s1tVq3QEtNl14c84hLh0m4Rf7nmRRcKDP8l6EwDujJVD -nR8cHM8ajiyC9tjjdyiQ32NLgzo+6OGiugctUxfw/ZLp7Qr0mT07IvPLcqBiRAC6 -E+9O ------END CERTIFICATE REQUEST----- diff --git a/experimental/packages/otlp-exporter-base/test/certs/client.key b/experimental/packages/otlp-exporter-base/test/certs/client.key deleted file mode 100644 index 00f82cfeeb..0000000000 --- a/experimental/packages/otlp-exporter-base/test/certs/client.key +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/experimental/packages/otlp-exporter-base/test/certs/regenerate.sh b/experimental/packages/otlp-exporter-base/test/certs/regenerate.sh deleted file mode 100755 index 9e2e972c99..0000000000 --- a/experimental/packages/otlp-exporter-base/test/certs/regenerate.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env sh -# -# Usage: regenerate.sh -# -# regenerate.sh regenerates certificates that are used to test gRPC with TLS -# Make sure you run it in test/certs directory. -# It also serves as a documentation on how existing certificates were generated. - -rm ca.crt ca.key client.crt client.csr client.key server.crt server.csr server.key - -openssl genrsa -des3 -out ca.key 4096 -openssl req -new -x509 -days 365 -sha256 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Root/OU=Test/CN=ca" - -openssl genrsa -des3 -out server.key 4096 -openssl req -new -sha256 -key server.key -out server.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Server/CN=localhost" -openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -openssl rsa -in server.key -out server.key - -openssl genrsa -des3 -out client.key 4096 -openssl req -new -sha256 -key client.key -out client.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Client/CN=localhost" -openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt -openssl rsa -in client.key -out client.key diff --git a/experimental/packages/otlp-exporter-base/test/certs/server.crt b/experimental/packages/otlp-exporter-base/test/certs/server.crt deleted file mode 100644 index 55f0c3dbb9..0000000000 --- a/experimental/packages/otlp-exporter-base/test/certs/server.crt +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV -BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjEwNjA3MjAxMDExWhcN -MjIwNjA3MjAxMDExWjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV -BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZT -ZXJ2ZXIxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBALaskMk0FpoAZ8eHpOiNYIW2yOeizGsvJ7PsNZujbUFQ/f7/AYTZ -CBQ9Hc8lKz+3YHklZnTsAJW6QLCBKSgsrjPAXA25zBFQazUuKb+QrjoIqeaq8D8w -6iHL7zdHsplbWZjYrnPjLWPqoc1ga6H0p8NsH7eC6hFXJRp2ZilyZXUR4jvyMc3D -2q/MXoI0VvQ3tI/QaLrU2iaN0DZBsyJhr4B/jNzOYzGAuVieEyV52wFnOsUlJDNp -jsT/v1/Q8JrjOXSb+ko/74VlSLTCauoPSsiUb1ra0Tbu3Z0E6b7vlFKeZaOxwUyW -eLi6YT6Z9ZTOEJuiJan/7STprK1NrqL+OPneK1A0Plr10hY76SptAu2fTqgGOFGo -QkxTosnsppiSkCVaDiLKCVr4DQzBm/0CLoSgXk4fJNhiNrIT+b35gX8Xmm3hUq+U -GanZyXhJYfojBUuhPJFAUKpUUjSsiRU8Dj8R7nIZT+cUWvslYmrOG4ZjCnpIXnoo -pAjFlaZkv62/tEGwJmyBkGk2lYzn9Ka1G/aO92IjfzypUlSKXCntTxLD6BzWNF7/ -qjt19XTOWPjChQHQcYXmlTSNUvUQ09HMaRIUe5MCexlWYleX6lVG6XtMwOb06w5O -ynVuMHjiAGfkjLrUkGQqSxHrS2v/af1J7F+CIClNgI+q2pz5dYWYMaCFAgMBAAEw -DQYJKoZIhvcNAQELBQADggIBAAaVSzyc6jFBLORHUcxkP8DheyTl8m2sWIb+x732 -DkM2qp8oEAKwhJ/AWLFGCqsjyW5ep8fgpTHQgT7braEEUKKnGUbIqUPy1IBz+lSf -LoT7qD92eiMGXOrzcHWnV02PRM3mF5cmLMNu5aMUoIArG5dO1LTSxl5/ybx2l4Zy -qXcT7wJtrA6F0EmuXRzwFBIVZdxlLbI+S4SsvfKXernGatB3Mjotivvqi2SeOd8p -1tuqEyQaaIJ1s6u7vyTcAHDd0OIxSqpTu3SwaHAXhkzMi7+TRGgfQUuljkNKkKfj -N02siSNjIuKzE/DSW6yV0OFL/FCNPyvzs8CKTMwfyrrvA0UAspkFCWZFXFlA+uLs -0at4SmPecOsc+O8ATon9nUyXh06anBwtp03aXX6Mr/7UIRRPHF70BY7MDV4OvvQt -PD0osFo0uEHubflCnPBUdMrQN9KbELVJeV7G0Xj2fHTAVoEnCmSpow+LB1ehWGbR -M3U8q9wlpXi4Awhr19kRcSdE/JzI7eu9MqjsazfUdAtCcgg4dHixOre8oXgauhZ5 -jMOv9lUI6Glf61xt8mamicohSf9CFyH5PgZqRM0aSacdJ7jH6EitABOx21ZqwiBp -o4W37lV55oy+N0r7yxaNy/mSUUcjsQo6kGw/4cMpYTSEzRMtfwYPOS1DeTl9zArE -7TBI ------END CERTIFICATE----- diff --git a/experimental/packages/otlp-exporter-base/test/certs/server.csr b/experimental/packages/otlp-exporter-base/test/certs/server.csr deleted file mode 100644 index 0c5e9291bf..0000000000 --- a/experimental/packages/otlp-exporter-base/test/certs/server.csr +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH -DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGU2Vy -dmVyMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQC2rJDJNBaaAGfHh6TojWCFtsjnosxrLyez7DWbo21BUP3+/wGE2QgU -PR3PJSs/t2B5JWZ07ACVukCwgSkoLK4zwFwNucwRUGs1Lim/kK46CKnmqvA/MOoh -y+83R7KZW1mY2K5z4y1j6qHNYGuh9KfDbB+3guoRVyUadmYpcmV1EeI78jHNw9qv -zF6CNFb0N7SP0Gi61NomjdA2QbMiYa+Af4zczmMxgLlYnhMledsBZzrFJSQzaY7E -/79f0PCa4zl0m/pKP++FZUi0wmrqD0rIlG9a2tE27t2dBOm+75RSnmWjscFMlni4 -umE+mfWUzhCboiWp/+0k6aytTa6i/jj53itQND5a9dIWO+kqbQLtn06oBjhRqEJM -U6LJ7KaYkpAlWg4iygla+A0MwZv9Ai6EoF5OHyTYYjayE/m9+YF/F5pt4VKvlBmp -2cl4SWH6IwVLoTyRQFCqVFI0rIkVPA4/Ee5yGU/nFFr7JWJqzhuGYwp6SF56KKQI -xZWmZL+tv7RBsCZsgZBpNpWM5/SmtRv2jvdiI388qVJUilwp7U8Sw+gc1jRe/6o7 -dfV0zlj4woUB0HGF5pU0jVL1ENPRzGkSFHuTAnsZVmJXl+pVRul7TMDm9OsOTsp1 -bjB44gBn5Iy61JBkKksR60tr/2n9SexfgiApTYCPqtqc+XWFmDGghQIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBAIJ7KMLIZbomgrup1rrizG3aU4bREy6HfHZ9Ylcr -Lo1vdL5/UZH3AHVhoccb0ua3qXDtsc8pDQAXIMzBu8BjfpbwCvrgz7YXsNsBU9zV -el8p394QB20WoPHebYDBUXPiq3JhLfjzOXBS9Ke3MBl1jDamOFmZW8dg8EpowIXv -ODFP8sErFb7Bmq7x2d0EJyX7+HydBiRWRa376oXcZ/VLl/CnNzpJeACFWPI4d0lg -P5nsadtdLyAwXF6cRQx3pOdN0sS5b3llXX3jVwGzm+kNjVTDWJiJmqWfwIF15pPr -bypoUmPpeQ4I9F+oFm9+Ff776PemqBD7NSJdG0iHRndm3oa6o2bTpn9ZypCO1Skv -UWr3ATduFylA3/YeoN6dQwP4Ol+3WJ2UbXzTbmEfoSEzmwMI5MTidOuA62A0afyN -VM0SjHaLvfD1mK4w+3BKdUivYh4TWbcLU7s1SeDwYiEP6DFZHLBPHDcNLz77d6nQ -zgvOgXqeNfk9uI5NdYBMbtdHW/mwGgEfPlDkKbY2KveOJjLlTM1EduGFsYHAXyhI -SiYozrbFeS5ts4f1EZ5tVT73KBv97MiQkKhBoVXtF1CHPUP1LTkGxtH2uoDiVfDi -r1OkRzoO05pHAh2o+4gujThsc0d3T5mmoeSySs56lgqDmC4blXNOS0kBZ4+I2u7A -C2YH ------END CERTIFICATE REQUEST----- diff --git a/experimental/packages/otlp-exporter-base/test/certs/server.key b/experimental/packages/otlp-exporter-base/test/certs/server.key deleted file mode 100644 index 9fa740554a..0000000000 --- a/experimental/packages/otlp-exporter-base/test/certs/server.key +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/experimental/packages/otlp-grpc-exporter-base/test/certs/ca.crt b/experimental/packages/otlp-grpc-exporter-base/test/certs/ca.crt index b6db7d0dd2..c194f04954 100644 --- a/experimental/packages/otlp-grpc-exporter-base/test/certs/ca.crt +++ b/experimental/packages/otlp-grpc-exporter-base/test/certs/ca.crt @@ -1,33 +1,33 @@ -----BEGIN CERTIFICATE----- -MIIFozCCA4ugAwIBAgIUCdllngMpqYtsqRCpqdXxPZiSbGEwDQYJKoZIhvcNAQEL +MIIFozCCA4ugAwIBAgIUFA6cfBQ2t0ZOpLTRUIE6VN+kGBkwDQYJKoZIhvcNAQEL BQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQHDBFPcGVuVGVs ZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9vdDENMAsGA1UECwwEVGVzdDELMAkGA1UE -AwwCY2EwHhcNMjEwNjA3MjAyNzMyWhcNMjIwNjA3MjAyNzMyWjBhMQswCQYDVQQG +AwwCY2EwHhcNMjMwNjA4MTY0NDIzWhcNMjQwNjA3MTY0NDIzWjBhMQswCQYDVQQG EwJDTDELMAkGA1UECAwCUk0xGjAYBgNVBAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0w CwYDVQQKDARSb290MQ0wCwYDVQQLDARUZXN0MQswCQYDVQQDDAJjYTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAKS4d8790qpxSOMAMNSxlvFxZvxZKih5 -BjKDefa3sPL8iSOZ12mSZyWqPifjU+fnb3PDLWJPEFYQiwpyMctlXoXo5qiDm1D5 -mLZPTc7/qbiyu33YZHW+iE23GiOQBfvgKHTqh2+ejWs9h/txlWlQuKm0NEDPnA2P -kHiIjudSkWCT1w0WOnlJXd/9CWq6gW0nCTeOmwGYaY7T/i1W500qQyv5j1xHrJCu -m9amRzZEc1I4L2XF8Lnz2vDuEEs2W1vjcO++sXODlSC78dIyGnDWxGuK+V7dhccB -jj/Q5V96CMUoY7RGl18hwn/MSkzmWghsQFkfYWw1Xvez8/IWh7AlEtB/hDn2Dqw7 -lr6lvn1cOUmhHAgYV+v/0gWFN482qi3OaR0z2cCdmfSxRlxhtrq0jH7B3dW5YXcf -ke9e4gh7P980HWeHPwanBlV7BAsPxJY7N+je1LsjHVkwv2OnpkAzGQqJycOzPAzn -tib/lxmhBYVV4eWhCKvLrDqkgp5J3Cp99wIovW6TEfg2PJG4jZI9PKztPQb/OHZp -995oEAG8lmgcCA6kpvwVvle/m3wXj4eKQ1U0mQLGfJja2ripSBk7aAlr7qxWbvjv -4kxe5dJPMRmVB3PRZvnNilfM78Pbn+du0X8TiSwXeG5Og8uSvGwBzQNeW0EZ//b0 -fHNgQlyp4OL9AgMBAAGjUzBRMB0GA1UdDgQWBBSsdECnQyhXkgqyNWFlhkSGlUJd -MzAfBgNVHSMEGDAWgBSsdECnQyhXkgqyNWFlhkSGlUJdMzAPBgNVHRMBAf8EBTAD -AQH/MA0GCSqGSIb3DQEBCwUAA4ICAQAAfgD6lqyOyEOfGMAhtb5OVLpn5hG6WLfd -wyjIYzMNW5DScV9hrgB1ycfA9OIqBECWY3zP76X41KVI0siu7qg3bkaPM2qh7sbO -LXYCkDHNYF69Tlf0JR+Wpr740DIqoITcZRLy+/FMFWij9tNAsY1EcLrSYuiEd8/L -OanlD9AaA3fL1pOsfiNM7Ec6nUFl537+yNFGxU+Q9T7EMb/ypz/FwN3/zBbO0xdk -ZqPh/jDETKorBH87QnFRidmK5DiXRwh323+l+cWEEe79ssGzLBcLr+rzOvDH0qbo -fLBWkRbBtAcRGJAgM0F9dLG4/hQisELobNSCZ4aITHmr1J6MFiVxaaEvIXQ94zgj -xVtAv2Fp4lvpJWMjk/iKc8IR56VkvK6bui7BYEFc+DmtJLw0ryFZDD1wEzbQ5Gzl -W7JBC3vR8zQPo7kVl99BKAsNLhC+tCGdbLLOJROyFWHai/bkcRPHOLOMY1/lM/Wf -rlIcc46pSIOzlsxnlrDzoQihjtg3SrNBkPaRaJE12WFHYELHBX+65HRGlkaXnxaY -HOqPN6NiHVB0i5C4+l0M7JdOx2kEYVQiprm4kBiM3BNMdRpThn4Vt12TnEyq/Cyz -khz4FAMw/ytbEWMxFvEQJdOK1vjmPHAMDSFXiixeklVUD5Th/9so4kRTu97j8fq/ -T0JDHso8+A== +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm3OXVbMd0t2r4x+Pg4fecPeFhRzsg6 +sp7AM4UYlhb0Xkx8ij3q0E47uQM/OSari6qi7p1Un6nzgaXmhosaNkVXaKV4dQ4g +zKqrvC2+nTYU4lwss4Rx32CQxOKXEvN5FPwLTNo903PP3wqJyVt8syN0CDW953m/ +hUdkNaOe/lXmDJ9TmTTGyuPZFSlNlufbaNsBUM5chVFgBYDQIVy0jls8MiYLfao5 +tfprj+yS+lnTDl54dDTVVyAgV22SY65cnUgvO4bu3nzhS/h2Xg4/6/yAuYaRI7GQ +xvlA4pzx+aLaRDTJKiszRrHbQFv4PY+MmkVxvg2Oka4Vc2XMgDM87H0bd+beO8NH +Tf7UHU5AmIr2j2R27LWeELOqanm1HYn2VK182lD7OwQ5u5yqZZuke8bMMPJQEPUm +EwhIgXMVIlGps2+rDUEalPYkQ/BmAcs2g7fywW3RhIWCacggKoee1x9a6oiUM5yi +oDJ6T/C4WUQzIVebdMC25zBBlxcy8fK4Yus/DFTqM/eXPl4NVzbH/yB5tlU2GU0Q +V4tpGL1jsUy4b7r1bzuYVNfnKrarUGFF5TIHuvDo3voJNGb4hWBH/JdttG/9NaWA +HomZ8CUWR+gNEzyPkwq7upkiblKxJV7HKo79Eex+dlWa+Ru1F3kwYE200Y+a/wOF +Rj4+PfMu7WvpAgMBAAGjUzBRMB0GA1UdDgQWBBSwH/Wk2wTc+MEPAEornj1eGKra +0zAfBgNVHSMEGDAWgBSwH/Wk2wTc+MEPAEornj1eGKra0zAPBgNVHRMBAf8EBTAD +AQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCNkzOjjqH3qeQ0wT/Has5PSoWwRwq+B1JT +gg29bgEMD6dVkLdzgEuRVVkMtc/tCZAkA02pc0VN8+lNLW7ckNU/QhMTQYn+FgMR +cG86vR9loTnwUrxR4dS6Nbx1sQ7hpe2GZkWpTNmjh1duHBNHv9nS2JmMkRypqRne +oAI3/th1Qlrtl/zDn02/+P5/av0YJcMOcnRkULHnI62cbXHa2iPd/nENgH2xC6CA +EuYN/bnmOEUPeKljU1IZS6asjGMLdWLmpLs7oOcHGLD3pax+om69Pmn7rps8Z071 +WsJDHFCftItCUrg4KWwpXr77Vq4WAN2tOBdDHEZsbES6a54+7sc1QKOVSWwPuGEd +ShFHhTzoaB0dpwm6kLdYsEkC8JLIjV+Ikg5X3VTDITjUlHoJf2mxCGOzBiCnUr75 +Am0eBqlVcc/2aVk1tcVS9N7reY/KcMaAJvI314O9I94pYdIIm5jw3UmA9Y6HmpN0 +vYtQUF2sS5W82XoFD8bpOq/bx1o2ib2x32dfPQkVgd4sbmpsyN62Fy1HpHwXtXno +xGVaDzGSWj/7RyYyKhNmp3nfQsU0Tt6iVkM+N30vl2heZqEUgXxCG9qHVzWv9z6x +AJzuafjM8tviROpiHkvzsmq7uDhksGooKCi+m+eoEBJrd0J4gjngAi1NYjTsB2GT +4mvPz05UkA== -----END CERTIFICATE----- diff --git a/experimental/packages/otlp-grpc-exporter-base/test/certs/ca.key b/experimental/packages/otlp-grpc-exporter-base/test/certs/ca.key index 3a12f603d4..00ccb04622 100644 --- a/experimental/packages/otlp-grpc-exporter-base/test/certs/ca.key +++ b/experimental/packages/otlp-grpc-exporter-base/test/certs/ca.key @@ -1,54 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,723F7ADBF5E86DF0 - -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 -----END RSA PRIVATE KEY----- diff --git a/experimental/packages/otlp-grpc-exporter-base/test/certs/client.crt b/experimental/packages/otlp-grpc-exporter-base/test/certs/client.crt index cbd324625f..fd05c9c40b 100644 --- a/experimental/packages/otlp-grpc-exporter-base/test/certs/client.crt +++ b/experimental/packages/otlp-grpc-exporter-base/test/certs/client.crt @@ -1,31 +1,31 @@ -----BEGIN CERTIFICATE----- MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjEwNjA3MjAyNzMzWhcN -MjIwNjA3MjAyNzMzWjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV +dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjMwNjA4MTY0NDI2WhcN +MjQwNjA3MTY0NDI2WjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZD bGllbnQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMBc1F9O8OcCu8xspnN1MNwccUZCx+lsh1F50T5D0INmxz3rXxin -TkM+QjFsJ09iF8MmgouI+yxmTayMlW733dUc/XQ9cV9GRwWVlF1RnoYp7mXVwMnz -o80s7CGWc+geliqeLUgzGIoq4bGTp1eEeB2KGJ/w8E2bTLs5a6B0pHhQuVXZ+Pq0 -E0Uzl2wPc+WwjeZyGRU4PbWzX6bN+R05Pfxq8PXhJ6Jnt0j8pNoF/XU6mOIYQyQb -THEKR8qB2SXo5+D1JOlRiofWtK4wsRH/wNm7j7tq75UezhOeqp6YU6MwGnea1loa -65K+DDG/rFyvxSlDS/53gjyKGSqYod8pevvytKjtUmw6xX5i5nFnf+wrKmMH6EDe -Hm63LReBv/CqCErYt4kV3NkdIuHmv7ZIdRfhDPdK8Q/kzAlRTX25wK/xWn5CqpSK -KCUwukEzccV266KU4sG63/4byv6zE62z8472P6u+OGSZlDxznL0BBg9iiHFYiopw -shBfFcszPCSOs1SO8XZH+6J5ypKBzBP7aAsyJflPHWGTUBACY9ZCU/7iwIF7YFPb -a/temVMLkg75oYGVow0Dlp55jQvrzMr7IaSBCxFUJEKf5u6GSNotJWmQdHYta5SH -Kj/rryFQV5qp9mBfia5DWnjHijFZTo+c/KLrgkmzfgbT4qVpnuxKahXNAgMBAAEw -DQYJKoZIhvcNAQELBQADggIBAA2nZTbaa9z/LTNJijf0clu4ULPG4RrqHgQ1q/Wh -NbrNemrxTJ+ZAwCR1gTv4oZe9NBd+V1pDXDQBid8mBTbttVrQCHdjgHFpQKNeyiK -nd2OI4awYiTvGbgDCMHAW/yf+XKCocuSkyNRnmfe8PihFD9wx6+kl6XCJuIkF3Vw -MGKEIrW2WLAARtBZeKV2yhtuVhkNm2TNFPfNrNtk2gdGO8TkX0orOllAENopR+GV -uffuLiIi9KWj9XP9T+6bdZbG2eMJX8wUNIIma54/3XN3RMi2iV9ZxW+F0j6d9ryo -j8pJJfpiW4qh6Eqi6HyvrzgdndKhkVYiIwbX5S60mqL+KcaPghX2goWexMW94QlQ -Re3/IvOAzGpu5fLn//y2tAaO9hDUsyoIJtXcFJKLbfM+mK/Bac2niEyBpr9Rzqur -N43Ga2pOsM4P/4YcAO6tvs5htvh2ala6UDXeEZV9Z1Bc5bOHAWNp13BfWE01iLNC -5rIu0XuVo1aa0FeVdJL6IpVeEwnkzDDt/9LKgp2K8w71VAtUSOg23AEYJu+GFr4D -y+0bahUiNETrFaiCsXQYa9HHFrqhA/PGOGpyq6GrBkJxWpzuL3rQQicpHzVIQEmb -3aCcIBdA2RQwQk7Z3YI2EuFMkHAElCXXZBulvxY6kl1n+2UwWRlocDMYZdkzI3+X -Tw8x +ADCCAgoCggIBANewSXGnuCUsPcOnXPq7SUFTLaSM62x2FnJrzb6rne8KYQ615l6D +d2Nm7MrttHWJUBQS6iDCsEGlF/AWYO5adVuZ+Xf+S+NoWMXPTUuJYq+5VEeAS8PM +IriksA8Npn0hAMNTDrd/eNXQ5W4zLQOqUWnKcuE0P1M7gI3/rfX9/JXkZfUmkQGK +OSva3qJHOcG7Bc7vqbJnkFebIw87e2iHxNnUf5IoJmrUaOMdFiQyHBBoJyTVJ3wp +Ufr6Q2+d0sIyes9PV33DbB8DyKGdOfbLg4YmKsnAvnypC0p2Xw9yAnHlQX27Ngcq +tfzcOXx3QlNPxQDF3oNHzi8GD7ysex1z7PRIsZlLVQLshAdOfA+naktPezj52R8V +BtWaxgVFI7IA5X21reS25t01k/GXNcyIJxW5KSz00b1h8+mpz0n0R3Mz3HuZybAX +g5bnZ+91jOeQmTt08eMXjwAGClxcOqfrssfDvOnUSZjDpzEGDaVuFGVPA9hR/eKN +Bfo659rv45pYhtxoHLz1LJWoZ1uegmKrGF1w16K05k5mpzwH6fzqDzzbF1xyynGX +yfbIqsvsBniuWGmhMjlfT5+l0VG2GgsD7Yijv6SV0YZrVf85iA5q6XdKTBuKYmin +ZEbneEjw9kc9myMeC5ik7wHuksA/BQcja1TPwB4ZRbPEcfi2iFxbtsSzAgMBAAEw +DQYJKoZIhvcNAQELBQADggIBAGdcqEI2l/dKxu9vPuRC2/VRgjgDBN4UJJCY111T +2A7GsGzd7lRhtxB5ZzClF77UiRJG+cvFai00c9+L3wp8qy4sZWY4MaJIWoKRh72Q +sRiH8AskeIl3uvvvaH86bbmpDo7M48Cs/zXZo9VhLzD8ZuHcS1mdjkOcnQzkbSzR +YeM9ActeuJRmsdQ+gSzCTvFqmGutL6xvM8b9a6PwyY5nPxS+eh0/7KNp+EXBvp0U +MWp6mMfq22nAwAQRLbvh5f+a/4GSwg73By6hwnsgb7tpBBJ6ppnKAIALRf7l5JwS +V0LM5Vnpp4J4JjdYyQzk2xkxi+UGIP1IRigbeWc4K3qgg6BUUkfSf4W9oJD4JCa2 +cOsqnKqFxTwXT4b9j9qsPpg7mUQ2+UtU4Lv3h/7sXpbpx0ldb2Hnaq+JqUz0l/7c +54y3+nzke7I4CWKtLJUSamQiyOC3CBVkRX0YEYUBhMXim6dKAfiOEV6K3bwiU+YZ +aDe0lEeLbzAp87DKRTAvDYhRMIFtD3g2qmYrWpQ4gj8vSEorNAfg3kVHMFRGlk9o +jaFduAz0hKk+QG5SgePXMph5ZRXGRq0FnDbF2gZ7WV+jZiIhsYGJ43+RBWHh4HO4 +P4h9eOWQG8AxpDRmOo2KmyPbV0V/eltC4N0oOAmWz+i0qqulnpG4dOzQKpinRBBr +jPt5 -----END CERTIFICATE----- diff --git a/experimental/packages/otlp-grpc-exporter-base/test/certs/client.csr b/experimental/packages/otlp-grpc-exporter-base/test/certs/client.csr index e5de7b1912..b783896725 100644 --- a/experimental/packages/otlp-grpc-exporter-base/test/certs/client.csr +++ b/experimental/packages/otlp-grpc-exporter-base/test/certs/client.csr @@ -2,27 +2,27 @@ MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGQ2xp ZW50MRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDAXNRfTvDnArvMbKZzdTDcHHFGQsfpbIdRedE+Q9CDZsc9618Yp05D -PkIxbCdPYhfDJoKLiPssZk2sjJVu993VHP10PXFfRkcFlZRdUZ6GKe5l1cDJ86PN -LOwhlnPoHpYqni1IMxiKKuGxk6dXhHgdihif8PBNm0y7OWugdKR4ULlV2fj6tBNF -M5dsD3PlsI3mchkVOD21s1+mzfkdOT38avD14SeiZ7dI/KTaBf11OpjiGEMkG0xx -CkfKgdkl6Ofg9STpUYqH1rSuMLER/8DZu4+7au+VHs4TnqqemFOjMBp3mtZaGuuS -vgwxv6xcr8UpQ0v+d4I8ihkqmKHfKXr78rSo7VJsOsV+YuZxZ3/sKypjB+hA3h5u -ty0Xgb/wqghK2LeJFdzZHSLh5r+2SHUX4Qz3SvEP5MwJUU19ucCv8Vp+QqqUiigl -MLpBM3HFduuilOLBut/+G8r+sxOts/OO9j+rvjhkmZQ8c5y9AQYPYohxWIqKcLIQ -XxXLMzwkjrNUjvF2R/uiecqSgcwT+2gLMiX5Tx1hk1AQAmPWQlP+4sCBe2BT22v7 -XplTC5IO+aGBlaMNA5aeeY0L68zK+yGkgQsRVCRCn+buhkjaLSVpkHR2LWuUhyo/ -668hUFeaqfZgX4muQ1p4x4oxWU6PnPyi64JJs34G0+KlaZ7sSmoVzQIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBAAtbvw2rrtnO5EeOF1Z+mJc9o3036liNbmCQTaC7 -Pf2yqo3Zk44L80R99sX5rDoq79MKEr//ED5C410EiCvzX42w330p7dasuoYRAwLw -YB0UwWnrKhm4SU20SC8zpnCUBL6K9lmXF2PJtkoMgFAnB8tIEc+DAr4hBIqh45vD -VgZ06GHH94/G6tIW3qNvi1mmvUYV0i6D3xBhcNAu6R/zopEYM3png24ZE2IlzZCX -x8hbYuMAqeQXSHQM9sKhXeb60GT8ns7d3P17S/TfpkTI7zRMkPhzsHC/Vp97xN/n -ojEEBY3MZJBPZj/q/buDfbp5x6H7/YxYdOKQKaGVWECGabISBcsg8NxaY++GKc+u -10C8O9KILRCJKGh8ze7chXx5n5+BPEoVVwhLn58eV7sOODvb4kZySUJHvFBb0ZM/ -7626K3443e5ZRkGXydvDIwPZgoiJ3L1L9+olL1cJ5rsRE6L5k6vPuJOeZITm4au2 -pE0THMHx/RjCMA1Lb/0BiDqbBHSh8hh+mHU7YXTq1Fxi2dSas0wAxcTBRs8TULsV -o57TmJqF+byiqwQvugyN7tndvWg9c+LDJHqitA5QC1GDXEi/bdjd7YeHRiL+ciVM -ZXXU9GT1O78O+84wbIDebahn8cifdGa7Kft7GftS3pCIyAjU9+eMXyT1JG3nssLr -4/ht +ggIKAoICAQDXsElxp7glLD3Dp1z6u0lBUy2kjOtsdhZya82+q53vCmEOteZeg3dj +ZuzK7bR1iVAUEuogwrBBpRfwFmDuWnVbmfl3/kvjaFjFz01LiWKvuVRHgEvDzCK4 +pLAPDaZ9IQDDUw63f3jV0OVuMy0DqlFpynLhND9TO4CN/631/fyV5GX1JpEBijkr +2t6iRznBuwXO76myZ5BXmyMPO3toh8TZ1H+SKCZq1GjjHRYkMhwQaCck1Sd8KVH6 ++kNvndLCMnrPT1d9w2wfA8ihnTn2y4OGJirJwL58qQtKdl8PcgJx5UF9uzYHKrX8 +3Dl8d0JTT8UAxd6DR84vBg+8rHsdc+z0SLGZS1UC7IQHTnwPp2pLT3s4+dkfFQbV +msYFRSOyAOV9ta3ktubdNZPxlzXMiCcVuSks9NG9YfPpqc9J9EdzM9x7mcmwF4OW +52fvdYznkJk7dPHjF48ABgpcXDqn67LHw7zp1EmYw6cxBg2lbhRlTwPYUf3ijQX6 +Oufa7+OaWIbcaBy89SyVqGdbnoJiqxhdcNeitOZOZqc8B+n86g882xdccspxl8n2 +yKrL7AZ4rlhpoTI5X0+fpdFRthoLA+2Io7+kldGGa1X/OYgOaul3SkwbimJop2RG +53hI8PZHPZsjHguYpO8B7pLAPwUHI2tUz8AeGUWzxHH4tohcW7bEswIDAQABoAAw +DQYJKoZIhvcNAQELBQADggIBACboOarzimaArw3lDm6ET5yiU7NxTWtnWwFUOoSh +qS2cvumnCokUlrDyMSSKoHl2i2biUd9uiHuEqlh0yufNgnTsyAXLg0UiBHAv5Tos +Esc5A+JTV5ehy+Zrjpl3Ayh8difS8hJEBjMhH+7rCN3rhpvwkTSaXDCQTBzWPhQ1 +R0EIho/SNOh5mXQKAUWwhtleI0sEJC/PqezGfN+w+URHnzE7YMwg02bvoMxBEror +YVddG4o0nIyd6CPg++K7TBzYGGOf1CUCrI9S1bBn3jcv2mq5YgZMdLEa0HkA9XzU +J/dTSGz5pJbkoaX9IHv8a3uoc+V1jdNWZRmTUYG/cNoAFISoG+uuJLgesF5l+vxx +GUwkE6wj4bNYR/Pqy5963oDmA3ndBzR1wtCZqIsLX3t3A9fLLtIEgeN/XDSvNDBs +YdwBrx2HTatK7QCJ5e+4ACs6Wc2c1nnDviPddpxUgl0pHKcMbT+xNk7bY5fjl5Qr +wzuBNgvQcsZxNNvI8bs13k/eBmKrKOV2WUP1mHRzSoxPX3gzGRSWCe/7QR51oWlB +Qkb6OGVGLCKPnhIKFeZ6G1Qv8q7/hOOlmWGO4bN7s5fjAKEsm3JV1xrsqSKRofRG +JfdPjQD88jewIAk6xGSMKmc4usQN+y/IfU8yZ57MHSHULccA1Wl/VXfgKCAxS5fK +uXtm -----END CERTIFICATE REQUEST----- diff --git a/experimental/packages/otlp-grpc-exporter-base/test/certs/client.key b/experimental/packages/otlp-grpc-exporter-base/test/certs/client.key index 9219944ca4..58414d8d59 100644 --- a/experimental/packages/otlp-grpc-exporter-base/test/certs/client.key +++ b/experimental/packages/otlp-grpc-exporter-base/test/certs/client.key @@ -1,51 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/experimental/packages/otlp-grpc-exporter-base/test/certs/regenerate.sh b/experimental/packages/otlp-grpc-exporter-base/test/certs/regenerate.sh index e1f1af5b54..84637be753 100755 --- a/experimental/packages/otlp-grpc-exporter-base/test/certs/regenerate.sh +++ b/experimental/packages/otlp-grpc-exporter-base/test/certs/regenerate.sh @@ -8,15 +8,15 @@ rm ca.crt ca.key client.crt client.csr client.key server.crt server.csr server.key -openssl genrsa -nodes -des3 -out ca.key 4096 -openssl req -nodes -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Root/OU=Test/CN=ca" +openssl genrsa -out ca.key 4096 +openssl req -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Root/OU=Test/CN=ca" -openssl genrsa -nodes -des3 -out server.key 4096 -openssl req -nodes -new -key server.key -out server.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Server/CN=localhost" -openssl x509 -req -nodes -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -openssl rsa -nodes -in server.key -out server.key +openssl genrsa -out server.key 4096 +openssl req -new -key server.key -out server.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Server/CN=localhost" +openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt +openssl rsa -in server.key -out server.key -openssl genrsa -nodes -des3 -out client.key 4096 -openssl req -nodes -new -key client.key -out client.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Client/CN=localhost" -openssl x509 -nodes -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt -openssl rsa -nodes -in client.key -out client.key +openssl genrsa -out client.key 4096 +openssl req -new -key client.key -out client.csr -subj "/C=CL/ST=RM/L=OpenTelemetryTest/O=Test/OU=Client/CN=localhost" +openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt +openssl rsa -in client.key -out client.key diff --git a/experimental/packages/otlp-grpc-exporter-base/test/certs/server.crt b/experimental/packages/otlp-grpc-exporter-base/test/certs/server.crt index 09094e4526..ace156a29e 100644 --- a/experimental/packages/otlp-grpc-exporter-base/test/certs/server.crt +++ b/experimental/packages/otlp-grpc-exporter-base/test/certs/server.crt @@ -1,31 +1,31 @@ -----BEGIN CERTIFICATE----- MIIFPzCCAycCAQEwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCQ0wxCzAJBgNV BAgMAlJNMRowGAYDVQQHDBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEUm9v -dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjEwNjA3MjAyNzMyWhcN -MjIwNjA3MjAyNzMyWjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV +dDENMAsGA1UECwwEVGVzdDELMAkGA1UEAwwCY2EwHhcNMjMwNjA4MTY0NDI0WhcN +MjQwNjA3MTY0NDI0WjBqMQswCQYDVQQGEwJDTDELMAkGA1UECAwCUk0xGjAYBgNV BAcMEU9wZW5UZWxlbWV0cnlUZXN0MQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZT ZXJ2ZXIxEjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBANaRv7jpdEedG0CQ/LoJEXuE32eZXzar45u05wq5CzqnUlYdHyx8 -cgCJJ44KThFXiOzgELFiiwjxmPo1CDLqGp8vEDHntvhxLhw/mFy/aa7YrCv1/1eX -0+cEvNUyoikjHKXECI7sV1ZVMrimGKXQNqRfub1JbJ+IzL+kp6MRtdA6GzxsU0Dg -Wwf7IQxtCQ4Tw3onJ3P3NZAkgz6zCVhOVkR7DuqGulzTQDa//mWwKQJie5wscURj -vLsJ0prS16Tc/5yXijwRjwx8ZEoDrJ5KszoMQwKIoLN7wHBo2r8/8RQsOGTVMJ1I -9kOkH3s9clswxCrnpzdNNmyIwTWaQ6CqpQpp0unGimF3VokanHhOhcpkWfzDArmU -jL4PIFBQBJvHIEKbuhZ4pUYL/6RtgEg2f3xVPe8s0hn/DzwJTgXqEX+TY7WvIKmH -0sMGZ9TZzWe9W64LM2/427+6pfgQOAJDHNLSYpmaa14R+630IMocdY6sj2hoZ9TK -8Ridqn+q+5kIpG/pP7bbzbzsotdzjNb6h7GBlsuyycoOfiP+C6Zs/yUZAAZEsSm0 -e4dXFCccurkXRL7cZJHC/agQhkkvcEP1TpmaygjbucME+h6H0G0St8yzBQwEJdkn -wNmfEhIdjmiX6u/fvPO6VJ5HBxgA5gONJlk+4EbiZTfl2rYauBFhloHzAgMBAAEw -DQYJKoZIhvcNAQELBQADggIBACIJLqVoH8oh8W0/0IF3sxH8LFsGByi0CUPo1JEB -1t3+FqyC7eFC9rDW12LfOKgiZl273OBpCHT8bx3OkoGZ4KwZsbsznyJv/X5OVYFH -5y5Lo8QNGWWMzXoK2JLlYJXZHMaJr5tTFOGqoIvC9C8ibLSAbL0MhtB9L5SvSxAm -mUOKZ/en7ZBepRex/s/rfCWYYTw2Ah02HZc8+H/J/aF3tvChI7Gx0anaSQxS48Ru -3eCaiaBEfoSGQvN9Jc+k1QJgJ4vZ8yi7ndl8pwW97YXo8Sg305ritqpnon+vemsV -rYoqHN+WV2/D0nqNu1AX8PldDvUYTfBtLfS7T5goN7abEIJCaTNmzU2ji0SqI9vJ -j4t9E9KcCKMshbciDrD7RPEPk3vogEDD3uygFwcPwUQfpCUFbRJOnTSH1oB/aUC4 -x9DnYSHBdDvaBmu0pBpoddJ+0pbw02P7YL9kPz5OnOAN06JP4McIYz5ytKoSt/m8 -Z7cUnvn7TRVNLuiapwpB0gtRmb9JY1q3pd63+X0SCaBEtUH+PWcRcS7eDsgMwEym -0CyANhCQYJjcKugIWLYtN/0/p2bIKcRmcH3iJiN2zZtP1AF6G7a4mp+21OynvFOc -3+ojTDGJxxD3uPtKEhJXRgYMOmfAEn3rgtoln1kkNYcd7f2EIulckwB2yeM1IMud -0le7 +ADCCAgoCggIBAKtVnxPqCZheCuqePfLknxc+6MeyYkf494U8WWeZo+yirYV3zY70 +1KhKZ+M+XDqhrBXc7IQHZd2KKxYBGnrv9yvbllmtZRdnk3hnn8B4eNh3w5gCRKPo +GSTeiNN7WEIRwYZNkr8AWgeoYT1jN8SAMn5+qSqKSd62Z1BPJNi0eQmTVxgLZqzx +92AWBZQl9rOme+1zV6ohKcR22Of3yUl6476L1rYYcX0DXp0QFkhK0TFKNt3cHxqq +WTRuMTnyCj7woWRtwclWTdO2buAkJe8cIde6rcbaUAX9jTdkbAgYAB9MctEKqasO +MqFyMzweS3sG9oUnmd0/GRL9as314xTZuz8fFnfj5l0BN6thVMmvEEYU3rTLQRKf +AKWzI2VrU+5wIxN8O/4ZbriQ5ae13p6TDYilSZ6kMxSzfOM/A00hlA+DKMS0o8g8 +V9Y3wcl3aSSjoZbH7XS/uDEueodudz9V3HxCk7Wc41SpunQPFprmPDWtjiW0jcMD +3kHV819r2F8aidKN94Q+3KI+N/mwn1QdDVsquiCq0wbR54i3CoAkQbi5YeUdEZD6 +/mNLs/BABgzSbANw7Fn1Pd9gY/JIsRhMskcFRqXe9tOqKk8/GxMv/r9MgJn6HHlk +iDa3OZsoOtFbjjOPFoy/Xq9YMi4ODnJkEhe7BSsVl/wkDAUdg7Zfu8XVAgMBAAEw +DQYJKoZIhvcNAQELBQADggIBAEft+R+qGyKffiiJpYWLPn0C9SmpjZiWPK331n57 +Nk3GA8u9gRgD1gyqqLr19r86nLArF8jcB/nChPB1A9ysW3xyTNvpOlAwYvEjxWR2 +tJr8wiDucAd+SnQud6e+5PI5e8LnyxYoeoZ+i6hMbhNV70NthoINHMAQx+5NeSpa +Q0GJ4d0XA3W/8Pu6oK7O0QkVovVut73Koz5DqsF91zFJp7SjVKaCnnjRKyU8wbg5 +uTO0TRheEtx3AeEXNps5Yhq0daLTnmnuFeyaJHm2F1QuBmma1TTwIF3HDclv2wLn +Jp+MWG9yoN9oEJLqS/AvDu1BltPSuvnYgLZr7cl0os+TEqpzxroa4ziE98dEiy0D +K4YQ59UTz6C8Ps0uX0hcs3jsvZOkBWptusvJBfZN59xLJAVmF2igkgIBKoiXvXmv +fXDx0hsOBg2IPe2O8lLHlFKlJZlMc+prH1iD0Xv6HefSP4L1eZHU37zjrRf/GiNX +r6GoEhJR2pKEoZQT81xpYp/w+qjzWcTl/mLD6FEePRzV92h3ubjRWBB36UhLtnEG +LJgp7yq3aGu7rg9rnuz8J6DG8DStE9rNuRjkV1O2C/PvR97XmVoIqbrMlxX9MUQJ +XxLm5dqBz7EVuhDJSyp4zCkDYsOj1y/SLL2O3cTyQQeZg6jlqripNqWnviAdTWe5 +JIPp -----END CERTIFICATE----- diff --git a/experimental/packages/otlp-grpc-exporter-base/test/certs/server.csr b/experimental/packages/otlp-grpc-exporter-base/test/certs/server.csr index bb61322340..b421a7a60c 100644 --- a/experimental/packages/otlp-grpc-exporter-base/test/certs/server.csr +++ b/experimental/packages/otlp-grpc-exporter-base/test/certs/server.csr @@ -2,27 +2,27 @@ MIIErzCCApcCAQAwajELMAkGA1UEBhMCQ0wxCzAJBgNVBAgMAlJNMRowGAYDVQQH DBFPcGVuVGVsZW1ldHJ5VGVzdDENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGU2Vy dmVyMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDWkb+46XRHnRtAkPy6CRF7hN9nmV82q+ObtOcKuQs6p1JWHR8sfHIA -iSeOCk4RV4js4BCxYosI8Zj6NQgy6hqfLxAx57b4cS4cP5hcv2mu2Kwr9f9Xl9Pn -BLzVMqIpIxylxAiO7FdWVTK4phil0DakX7m9SWyfiMy/pKejEbXQOhs8bFNA4FsH -+yEMbQkOE8N6Jydz9zWQJIM+swlYTlZEew7qhrpc00A2v/5lsCkCYnucLHFEY7y7 -CdKa0tek3P+cl4o8EY8MfGRKA6yeSrM6DEMCiKCze8BwaNq/P/EULDhk1TCdSPZD -pB97PXJbMMQq56c3TTZsiME1mkOgqqUKadLpxophd1aJGpx4ToXKZFn8wwK5lIy+ -DyBQUASbxyBCm7oWeKVGC/+kbYBINn98VT3vLNIZ/w88CU4F6hF/k2O1ryCph9LD -BmfU2c1nvVuuCzNv+Nu/uqX4EDgCQxzS0mKZmmteEfut9CDKHHWOrI9oaGfUyvEY -nap/qvuZCKRv6T+228287KLXc4zW+oexgZbLssnKDn4j/gumbP8lGQAGRLEptHuH -VxQnHLq5F0S+3GSRwv2oEIZJL3BD9U6ZmsoI27nDBPoeh9BtErfMswUMBCXZJ8DZ -nxISHY5ol+rv37zzulSeRwcYAOYDjSZZPuBG4mU35dq2GrgRYZaB8wIDAQABoAAw -DQYJKoZIhvcNAQELBQADggIBALQRbWtd7VIT7PI0g2TJY2nyFDZ+iNLlsqtlTQ+3 -9tDUNf911AyXGFBH2OaIg49UEl3Dn3ErAH6nZluZhRNjZRUYfE2dSEVYoeAA3SmE -FElARM1CX4dQUDnV++RLLRIKKGfcnwU+vSEWN4QfXs9qjI2UK80CBr6kPEt+bMfR -wUIax5HT1XLECoLph1rNza0h3WNk5ndEJMAt51U0JNAi6PwDF04ZfnX5E2RtiEjV -+3DPW1HYlX2hepkXVJPB568bbpmWLrmJsHjVZy4vmDoQi2bzS/QPsepgQ3aXxNel -vTxh0Or5SdIRRfNnP/Ov/aYjBxzkcKY83ADh7h1aqMOlUyFenHoMfTWnMYkeNY+1 -dOoLUS/ZNA6IH54UO7uY0uOcwCfRPYZzDxZI0IkjogX0aizixSs5duQx0ux3sUOo -a4zxMNPd89ppbCMZDS7biC7cOAsdDYXKcE5ijpc5CQXVo4/dA2xyfisRT7WUq9ay -vmQoYfMCAkGv47BVYhzASyPIXuFP2/HDbtnBvZ2aeSuMAwhHzj3vX9js2HGy7t2V -kj36LymQv+YBp9mV9/crSqy0DNFAYOWOuig0mQX/SPedGa4jf9v4OhANi+kzgxtQ -hBTcA0OtJyrVxesVGGK0YwaQIIZ8jwhsK3ljlZpOfVUflHl2/etME1DXtU37U9xA -fuw0 +ggIKAoICAQCrVZ8T6gmYXgrqnj3y5J8XPujHsmJH+PeFPFlnmaPsoq2Fd82O9NSo +SmfjPlw6oawV3OyEB2XdiisWARp67/cr25ZZrWUXZ5N4Z5/AeHjYd8OYAkSj6Bkk +3ojTe1hCEcGGTZK/AFoHqGE9YzfEgDJ+fqkqiknetmdQTyTYtHkJk1cYC2as8fdg +FgWUJfazpnvtc1eqISnEdtjn98lJeuO+i9a2GHF9A16dEBZIStExSjbd3B8aqlk0 +bjE58go+8KFkbcHJVk3Ttm7gJCXvHCHXuq3G2lAF/Y03ZGwIGAAfTHLRCqmrDjKh +cjM8Hkt7BvaFJ5ndPxkS/WrN9eMU2bs/HxZ34+ZdATerYVTJrxBGFN60y0ESnwCl +syNla1PucCMTfDv+GW64kOWntd6ekw2IpUmepDMUs3zjPwNNIZQPgyjEtKPIPFfW +N8HJd2kko6GWx+10v7gxLnqHbnc/Vdx8QpO1nONUqbp0Dxaa5jw1rY4ltI3DA95B +1fNfa9hfGonSjfeEPtyiPjf5sJ9UHQ1bKrogqtMG0eeItwqAJEG4uWHlHRGQ+v5j +S7PwQAYM0mwDcOxZ9T3fYGPySLEYTLJHBUal3vbTqipPPxsTL/6/TICZ+hx5ZIg2 +tzmbKDrRW44zjxaMv16vWDIuDg5yZBIXuwUrFZf8JAwFHYO2X7vF1QIDAQABoAAw +DQYJKoZIhvcNAQELBQADggIBAJCMEdjKyklN2izvOhd7+JMXm/ClW3hjowbu+csO +JNz8NqUNLrKJjFyV3yAUGWuyp3z982S+XGfcm3nU7n9AJOjT4DLJId6opOtA6CSp +KTRgVZmeViL6O6UqBLTacz5DDjwMQXxszc+QpU53cMT6Y7VMvIOhQ6AmIvz1v71u +5gaYmlbfXVlmiPHEKRsQG9/DNIPe1mHP0p+S9qYKmCx7Jlpee7IstW/hNjt7alDn +uFaxFjxmCCSdWaMRyMW/qNRks9q3VdhJPan+amFeXceoEG7SOKiFiOc8A7DribSm +iKc2YlOw14xqc+cJutiKBvoBMri2eh1JgCbPT4ufVGFpbDkfYwAJxWx44Eg0X90j +gJUw8IRuHQZkEYss6jwFMFcOqjpe+AqrssOl4GZmu5gcaiUnj8PkSVZLTOrLilPg +sSDjzmoHdv4QcBppTrjj6PyR5Xd6DeGasWkMPvIPjiPN3mOhfxJ3C87atMqOhTLx +em7vFOBegAW6g40J9JD1XMoI/zFnTU8NevZQgCyx/Tq1XNRmUeMA6y/qpfTNKi/f +F7v/7nDWoxBgpOw3J0E9R+6rxD7Cjb2RWZEf20ZGdNBlPE+UG9c9b3HC3IHiwRHb +L9Fi0251w+fkaPX8dojQKErCEknqJ1SCP5S5F5g1QCQby22Y7LQsggMMf94s/wQX +4uMh -----END CERTIFICATE REQUEST----- diff --git a/experimental/packages/otlp-grpc-exporter-base/test/certs/server.key b/experimental/packages/otlp-grpc-exporter-base/test/certs/server.key index ddac188c23..80b9cea7bf 100644 --- a/experimental/packages/otlp-grpc-exporter-base/test/certs/server.key +++ b/experimental/packages/otlp-grpc-exporter-base/test/certs/server.key @@ -1,51 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- From 4a7091f2b4a4347eeab32ab455d5b73f68059a07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=B2=92=E7=B2=92=E6=A9=99?= Date: Sun, 11 Jun 2023 01:22:09 +0800 Subject: [PATCH 007/141] fix(npm-scripts): support windows platform using `cross-var` (#3857) --- api/package.json | 3 ++- experimental/packages/api-events/package.json | 3 ++- experimental/packages/api-logs/package.json | 3 ++- experimental/packages/exporter-logs-otlp-grpc/package.json | 3 ++- experimental/packages/exporter-logs-otlp-http/package.json | 3 ++- experimental/packages/exporter-logs-otlp-proto/package.json | 3 ++- experimental/packages/exporter-trace-otlp-grpc/package.json | 3 ++- experimental/packages/exporter-trace-otlp-http/package.json | 3 ++- experimental/packages/exporter-trace-otlp-proto/package.json | 3 ++- .../packages/opentelemetry-browser-detector/package.json | 3 ++- .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 3 ++- .../opentelemetry-exporter-metrics-otlp-http/package.json | 3 ++- .../opentelemetry-exporter-metrics-otlp-proto/package.json | 3 ++- .../packages/opentelemetry-exporter-prometheus/package.json | 3 ++- .../packages/opentelemetry-instrumentation-fetch/package.json | 3 ++- .../packages/opentelemetry-instrumentation-grpc/package.json | 3 ++- .../packages/opentelemetry-instrumentation-http/package.json | 3 ++- .../package.json | 3 ++- .../packages/opentelemetry-instrumentation/package.json | 3 ++- experimental/packages/opentelemetry-sdk-node/package.json | 3 ++- experimental/packages/otlp-exporter-base/package.json | 3 ++- experimental/packages/otlp-grpc-exporter-base/package.json | 3 ++- experimental/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 ++- packages/opentelemetry-context-async-hooks/package.json | 3 ++- packages/opentelemetry-context-zone-peer-dep/package.json | 3 ++- packages/opentelemetry-context-zone/package.json | 3 ++- 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 ++- packages/opentelemetry-semantic-conventions/package.json | 3 ++- packages/opentelemetry-shim-opentracing/package.json | 3 ++- packages/sdk-metrics/package.json | 3 ++- packages/template/package.json | 3 ++- 42 files changed, 85 insertions(+), 41 deletions(-) diff --git a/api/package.json b/api/package.json index f5f3d0e2e6..5100e4f82e 100644 --- a/api/package.json +++ b/api/package.json @@ -16,7 +16,7 @@ "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../", "codecov:webworker": "nyc report --reporter=json && codecov -f coverage/*.json -p ../", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "compile": "tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "docs": "typedoc", "docs:deploy": "gh-pages --dist docs/out", @@ -66,6 +66,7 @@ "@types/webpack": "4.41.33", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "dpdm": "3.10.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index 934a5f152e..2c93e18c36 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -26,7 +26,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "node ../../../scripts/version-update.js" }, "keywords": [ @@ -68,6 +68,7 @@ "@types/node": "18.6.5", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 0fe84f8740..eabcfc00fb 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -26,7 +26,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "node ../../../scripts/version-update.js" }, "keywords": [ @@ -68,6 +68,7 @@ "@types/node": "18.6.5", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index 699788e84d..cdb76c11f4 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -15,7 +15,7 @@ "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", "version": "node ../../../scripts/version-update.js", "watch": "tsc --watch --build", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../" @@ -59,6 +59,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", + "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 6986bcca30..ef21270a4e 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -41,7 +41,7 @@ "test:browser": "nyc karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../" @@ -80,6 +80,7 @@ "babel-loader": "8.2.3", "codecov": "3.8.3", "cpx": "1.5.0", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index bf66f69e65..079e27e7ef 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -24,7 +24,7 @@ "test:browser": "nyc karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../" @@ -70,6 +70,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", + "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 362e0934d3..543b18b5d5 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -15,7 +15,7 @@ "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", "version": "node ../../../scripts/version-update.js", "watch": "tsc --watch --build", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../" @@ -56,6 +56,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", + "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index fb9eec5a93..808972e1bf 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -26,7 +26,7 @@ "test:browser": "nyc karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../" @@ -72,6 +72,7 @@ "babel-loader": "8.2.3", "codecov": "3.8.3", "cpx": "1.5.0", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index 10c2b03cf5..72d7b5cf46 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -24,7 +24,7 @@ "test:browser": "nyc karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../" @@ -69,6 +69,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", + "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 0c2d09c3d7..723281cf4e 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -20,7 +20,7 @@ "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -59,6 +59,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "codecov": "3.8.3", + "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index d2d2d9ffd4..170e9b79cb 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -15,7 +15,7 @@ "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", "version": "node ../../../scripts/version-update.js", "watch": "tsc -w", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../" @@ -55,6 +55,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", + "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.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 ad0a4100b4..e7f7496c01 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -26,7 +26,7 @@ "test:browser": "nyc karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../" @@ -72,6 +72,7 @@ "babel-loader": "8.2.3", "codecov": "3.8.3", "cpx": "1.5.0", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 35d5b14f96..6e5003df88 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -15,7 +15,7 @@ "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", "version": "node ../../../scripts/version-update.js", "watch": "tsc -w", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../" @@ -54,6 +54,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", + "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index 0102ede2e7..232bf2e80a 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -16,7 +16,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -49,6 +49,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "codecov": "3.8.3", + "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index a8f6213a70..5d97cef370 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -18,7 +18,7 @@ "tdd": "karma start", "test:browser": "nyc karma start --single-run", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -65,6 +65,7 @@ "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 20b06eb4f5..7bbfdb8b1d 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -16,7 +16,7 @@ "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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", "postinstall": "node -e \"console.log(\\\"\\x1b[95m%s\\x1b[0m\\\", \\\"@opentelemetry/instrumentation-grpc - warning: The package 'grpc' (https://www.npmjs.com/package/grpc) is deprecated. It will no longer be instrumented in the next release of '@opentelemetry/instrumentation-grpc'. Please migrate to '@grpc/grpc-js' (https://www.npmjs.com/package/@grpc/grpc-js) to continue receiving telemetry.\\\");\"" @@ -58,6 +58,7 @@ "@types/semver": "7.3.9", "@types/sinon": "10.0.15", "codecov": "3.8.3", + "cross-var": "1.1.0", "grpc": "1.24.11", "mocha": "10.2.0", "node-pre-gyp": "0.17.0", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index d0f9cd3914..591911e5ae 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -16,7 +16,7 @@ "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -58,6 +58,7 @@ "@types/superagent": "4.1.18", "axios": "1.4.0", "codecov": "3.8.3", + "cross-var": "1.1.0", "mocha": "10.2.0", "nock": "13.0.11", "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 29f36e0c18..c63a7f76c6 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -18,7 +18,7 @@ "tdd": "karma start", "test:browser": "nyc karma start --single-run", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -65,6 +65,7 @@ "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index aed1782f4f..a95ef56eac 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -54,7 +54,7 @@ "test:browser": "nyc karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -92,6 +92,7 @@ "babel-loader": "8.2.3", "codecov": "3.8.3", "cpx": "1.5.0", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 0372de64f7..b0842de637 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -15,7 +15,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -68,6 +68,7 @@ "@types/semver": "7.3.9", "@types/sinon": "10.0.15", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.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 96356cd4d9..6eb78d97da 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -27,7 +27,7 @@ "test:browser": "nyc karma start --single-run", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "npm run precompile" }, "keywords": [ @@ -69,6 +69,7 @@ "@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", "mocha": "10.2.0", "nock": "13.0.11", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index b10279fa56..9b67a57094 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -19,7 +19,7 @@ "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", "version": "node ../../../scripts/version-update.js", "watch": "npm run protos && tsc -w", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "npm run precompile" }, "keywords": [ @@ -58,6 +58,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cpx": "1.5.0", + "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", "protobufjs-cli": "1.0.2", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index 0818a4a844..5560b8b436 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -24,7 +24,7 @@ "submodule": "git submodule sync --recursive && git submodule update --init --recursive", "version": "node ../../../scripts/version-update.js", "watch": "npm run protos && tsc -w tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "npm run precompile" }, "keywords": [ @@ -65,6 +65,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "codecov": "3.8.3", + "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", "protobufjs-cli": "1.0.2", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index 86359693ae..9e1af19e88 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -13,6 +13,7 @@ "repository": "open-telemetry/opentelemetry-js", "scripts": { "prepublishOnly": "npm run compile", + "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "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", @@ -20,6 +21,7 @@ "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", + "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", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../" @@ -61,6 +63,7 @@ "@types/mocha": "10.0.1", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 540d337f13..c93f570590 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -41,7 +41,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -78,6 +78,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "codecov": "3.8.3", + "cross-var": "1.1.0", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index ec3c5dafed..d88d4a6927 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -16,7 +16,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../../scripts/version-update.js", "watch": "tsc --build --watch", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -52,6 +52,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "codecov": "3.8.3", + "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index a227e9ce27..699ccc0bd7 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -15,7 +15,7 @@ "lint": "eslint . --ext .ts", "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../scripts/version-update.js", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -48,6 +48,7 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", + "cross-var": "1.1.0", "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 a930cb8484..d44609131a 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -18,7 +18,7 @@ "tdd": "karma start", "test:browser": "nyc karma start --single-run", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -62,6 +62,7 @@ "@types/zone.js": "0.5.12", "babel-loader": "8.2.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index e79a867835..1625d76e65 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -15,7 +15,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -57,6 +57,7 @@ "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", "karma-mocha": "2.0.1", diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 89e1b0acab..349a5cc19b 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -28,7 +28,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -70,6 +70,7 @@ "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 030eba5f6e..b3d1375878 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -16,7 +16,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../scripts/version-update.js", "watch": "tsc --build --watch", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -50,6 +50,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "codecov": "3.8.3", + "cross-var": "1.1.0", "mocha": "10.2.0", "nock": "13.0.11", "nyc": "15.1.0", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 70f71e4603..5671faa25f 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -26,7 +26,7 @@ "test:browser": "nyc karma start --single-run", "version": "node ../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -68,6 +68,7 @@ "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index 7f21ce7603..b2e782672c 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -17,7 +17,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -61,6 +61,7 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.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 a6d01b7a4d..77a8e9c356 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -20,7 +20,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -60,6 +60,7 @@ "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index b2655b10a9..e24c87d07b 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -27,7 +27,7 @@ "tdd": "npm run test -- --watch-extensions ts --watch", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "version": "node ../../scripts/version-update.js", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -68,6 +68,7 @@ "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 40c985ee97..93f9df8662 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -29,7 +29,7 @@ "codecov:webworker": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "version": "node ../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -71,6 +71,7 @@ "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index 5286d4dd42..2495523d02 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -16,7 +16,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../scripts/version-update.js", "watch": "tsc --build --watch", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -53,6 +53,7 @@ "@types/semver": "7.3.9", "@types/sinon": "10.0.15", "codecov": "3.8.3", + "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index d63b1ebc75..c3e0e5906f 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -20,7 +20,7 @@ "test:browser": "nyc karma start --single-run", "test:webworker": "nyc karma start karma.worker.js --single-run", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -67,6 +67,7 @@ "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", "codecov": "3.8.3", + "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index d918b90ab0..a22d16b5df 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -15,7 +15,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -53,6 +53,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "codecov": "3.8.3", + "cross-var": "1.1.0", "mocha": "10.2.0", "nock": "13.0.11", "nyc": "15.1.0", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index 5e84c89124..0a4c56882a 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -15,7 +15,7 @@ "lint": "eslint . --ext .ts", "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../scripts/version-update.js", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -49,6 +49,7 @@ "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", + "cross-var": "1.1.0", "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 193ada1af0..988f4ebca7 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -20,7 +20,7 @@ "lint:fix": "eslint . --ext .ts --fix", "version": "node ../../scripts/version-update.js", "watch": "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -60,6 +60,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "codecov": "3.8.3", + "cross-var": "1.1.0", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", diff --git a/packages/template/package.json b/packages/template/package.json index 2138d90be5..979c49fc32 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -30,7 +30,7 @@ "compile": "tsc --build", "version": "node ../../scripts/version-update.js", "clean": "tsc --build --clean", - "precompile": "lerna run version --scope $(npm pkg get name) --include-dependencies", + "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" }, @@ -79,6 +79,7 @@ ], "devDependencies": { "@types/node": "18.6.5", + "cross-var": "1.1.0", "typescript": "4.4.4" }, "Add these to devDependencies for testing": { From e8540c5016c64b60756128bd3b3103d64f8faf73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=B2=92=E7=B2=92=E6=A9=99?= Date: Mon, 12 Jun 2023 19:10:12 +0800 Subject: [PATCH 008/141] chore(instrumentation-grpc): drop support for `grpc` (#3807) Co-authored-by: Daniel Dyla --- examples/grpc/README.md | 71 --- examples/grpc/client.js | 46 -- examples/grpc/helloworld_grpc_pb.js | 64 --- examples/grpc/helloworld_pb.js | 332 --------------- examples/grpc/images/jaeger.png | Bin 534713 -> 0 bytes examples/grpc/images/zipkin.png | Bin 110330 -> 0 bytes examples/grpc/package.json | 48 --- examples/grpc/server.js | 38 -- examples/grpc/tracer.js | 41 -- experimental/CHANGELOG.md | 2 + .../README.md | 12 +- .../package.json | 4 +- .../src/grpc-js/clientUtils.ts | 4 +- .../src/grpc-js/index.ts | 2 +- .../src/grpc/clientUtils.ts | 202 --------- .../src/grpc/index.ts | 403 ------------------ .../src/grpc/serverUtils.ts | 136 ------ .../src/grpc/types.ts | 53 --- .../src/instrumentation.ts | 12 - .../src/internal-types.ts | 9 +- .../src/utils.ts | 9 +- .../test/grpc.test.ts | 28 -- .../test/helper.ts | 39 +- .../test/utils/assertionUtils.ts | 5 +- 24 files changed, 36 insertions(+), 1524 deletions(-) delete mode 100644 examples/grpc/README.md delete mode 100644 examples/grpc/client.js delete mode 100644 examples/grpc/helloworld_grpc_pb.js delete mode 100644 examples/grpc/helloworld_pb.js delete mode 100644 examples/grpc/images/jaeger.png delete mode 100644 examples/grpc/images/zipkin.png delete mode 100644 examples/grpc/package.json delete mode 100644 examples/grpc/server.js delete mode 100644 examples/grpc/tracer.js delete mode 100644 experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/clientUtils.ts delete mode 100644 experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/index.ts delete mode 100644 experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/serverUtils.ts delete mode 100644 experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/types.ts delete mode 100644 experimental/packages/opentelemetry-instrumentation-grpc/test/grpc.test.ts diff --git a/examples/grpc/README.md b/examples/grpc/README.md deleted file mode 100644 index 1ec7a42a0e..0000000000 --- a/examples/grpc/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# Overview - -OpenTelemetry gRPC Instrumentation allows the user to automatically collect trace data and export them to the backend of choice (we can use Zipkin or Jaeger for this example), to give observability to distributed systems. - -## Installation - -```sh -# from this directory -npm install -``` - -Setup [Zipkin Tracing](https://zipkin.io/pages/quickstart.html) -or -Setup [Jaeger Tracing](https://www.jaegertracing.io/docs/latest/getting-started/#all-in-one) - -## Run the Application - -### Zipkin - -- Run the server - - ```sh - # from this directory - npm run zipkin:server - ``` - -- Run the client - - ```sh - # from this directory - npm run zipkin:client - ``` - -#### Zipkin UI - -`zipkin:server` script should output the `traceid` in the terminal (e.g `traceid: 4815c3d576d930189725f1f1d1bdfcc6`). -Go to Zipkin with your browser (e.g - -

- -### Jaeger - -- Run the server - - ```sh - # from this directory - npm run jaeger:server - ``` - -- Run the client - - ```sh - # from this directory - npm run jaeger:client - ``` - -#### Jaeger UI - -`jaeger:server` script should output the `traceid` in the terminal (e.g `traceid: 4815c3d576d930189725f1f1d1bdfcc6`). -Go to Jaeger with your browser (e.g - -

- -## Useful links - -- For more information on OpenTelemetry, visit: -- For more information on OpenTelemetry for Node.js, visit: - -## LICENSE - -Apache License 2.0 diff --git a/examples/grpc/client.js b/examples/grpc/client.js deleted file mode 100644 index 18c7cf7354..0000000000 --- a/examples/grpc/client.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -const api = require('@opentelemetry/api'); -const tracer = require('./tracer')('example-grpc-client'); -const grpc = require('grpc'); -const messages = require('./helloworld_pb'); -const services = require('./helloworld_grpc_pb'); - -const PORT = 50051; - -/** A function which makes requests and handles response. */ -function main() { - // span corresponds to outgoing requests. Here, we have manually created - // the span, which is created to track work that happens outside of the - // request lifecycle entirely. - const span = tracer.startSpan('client.js:main()'); - api.context.with(api.trace.setSpan(api.context.active(), span), () => { - console.log('Client traceId ', span.spanContext().traceId); - const client = new services.GreeterClient( - `localhost:${PORT}`, - grpc.credentials.createInsecure(), - ); - const request = new messages.HelloRequest(); - let user; - if (process.argv.length >= 3) { - // eslint-disable-next-line prefer-destructuring - user = process.argv[2]; - } else { - user = 'world'; - } - request.setName(user); - client.sayHello(request, (err, response) => { - span.end(); - if (err) throw err; - console.log('Greeting:', response.getMessage()); - }); - }); - - // The process must live for at least the interval past any traces that - // must be exported, or some risk being lost if they are recorded after the - // last export. - console.log('Sleeping 5 seconds before shutdown to ensure all records are flushed.'); - setTimeout(() => { console.log('Completed.'); }, 5000); -} - -main(); diff --git a/examples/grpc/helloworld_grpc_pb.js b/examples/grpc/helloworld_grpc_pb.js deleted file mode 100644 index 1e39a0f46a..0000000000 --- a/examples/grpc/helloworld_grpc_pb.js +++ /dev/null @@ -1,64 +0,0 @@ -// GENERATED CODE -- DO NOT EDIT! - -// Original file comments: -// Copyright 2015 gRPC authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -'use strict'; - -const grpc = require('grpc'); -const helloworld_pb = require('./helloworld_pb.js'); - -function serialize_HelloReply(arg) { - if (!(arg instanceof helloworld_pb.HelloReply)) { - throw new Error('Expected argument of type HelloReply'); - } - return Buffer.from(arg.serializeBinary()); -} - -function deserialize_HelloReply(buffer_arg) { - return helloworld_pb.HelloReply.deserializeBinary(new Uint8Array(buffer_arg)); -} - -function serialize_HelloRequest(arg) { - if (!(arg instanceof helloworld_pb.HelloRequest)) { - throw new Error('Expected argument of type HelloRequest'); - } - return Buffer.from(arg.serializeBinary()); -} - -function deserialize_HelloRequest(buffer_arg) { - return helloworld_pb.HelloRequest.deserializeBinary( - new Uint8Array(buffer_arg), - ); -} - -// The greeting service definition. -const GreeterService = (exports.GreeterService = { - // Sends a greeting - sayHello: { - path: '/helloworld.Greeter/SayHello', - requestStream: false, - responseStream: false, - requestType: helloworld_pb.HelloRequest, - responseType: helloworld_pb.HelloReply, - requestSerialize: serialize_HelloRequest, - requestDeserialize: deserialize_HelloRequest, - responseSerialize: serialize_HelloReply, - responseDeserialize: deserialize_HelloReply, - }, -}); - -exports.GreeterClient = grpc.makeGenericClientConstructor(GreeterService); diff --git a/examples/grpc/helloworld_pb.js b/examples/grpc/helloworld_pb.js deleted file mode 100644 index 066acd68e8..0000000000 --- a/examples/grpc/helloworld_pb.js +++ /dev/null @@ -1,332 +0,0 @@ -/** - * @fileoverview - * @enhanceable - * @public - */ -// GENERATED CODE -- DO NOT EDIT! - -const jspb = require('google-protobuf'); - -const goog = jspb; -const global = Function('return this')(); - -goog.exportSymbol('proto.helloworld.HelloReply', null, global); -goog.exportSymbol('proto.helloworld.HelloRequest', null, global); - -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.helloworld.HelloRequest = function (opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.helloworld.HelloRequest, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.helloworld.HelloRequest.displayName = 'proto.helloworld.HelloRequest'; -} - -if (jspb.Message.GENERATE_TO_OBJECT) { - /** - * Creates an object representation of this proto suitable for use in Soy templates. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration - * @return {!Object} - */ - proto.helloworld.HelloRequest.prototype.toObject = function ( - opt_includeInstance, - ) { - return proto.helloworld.HelloRequest.toObject(opt_includeInstance, this); - }; - - /** - * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: - * http://goto/soy-param-migration - * @param {!proto.helloworld.HelloRequest} msg The msg instance to transform. - * @return {!Object} - */ - proto.helloworld.HelloRequest.toObject = function (includeInstance, msg) { - let f; - - const obj = { - name: msg.getName(), - }; - - if (includeInstance) { - obj.$jspbMessageInstance = msg; - } - return obj; - }; -} - -/** - * Deserializes binary data (in protobuf wire format). - * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.helloworld.HelloRequest} - */ -proto.helloworld.HelloRequest.deserializeBinary = function (bytes) { - const reader = new jspb.BinaryReader(bytes); - const msg = new proto.helloworld.HelloRequest(); - return proto.helloworld.HelloRequest.deserializeBinaryFromReader(msg, reader); -}; - -/** - * Deserializes binary data (in protobuf wire format) from the - * given reader into the given message object. - * @param {!proto.helloworld.HelloRequest} msg The message object to deserialize into. - * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.helloworld.HelloRequest} - */ -proto.helloworld.HelloRequest.deserializeBinaryFromReader = function ( - msg, - reader, -) { - while (reader.nextField()) { - if (reader.isEndGroup()) { - break; - } - const field = reader.getFieldNumber(); - switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setName(value); - break; - default: - reader.skipField(); - break; - } - } - return msg; -}; - -/** - * Class method variant: serializes the given message to binary data - * (in protobuf wire format), writing to the given BinaryWriter. - * @param {!proto.helloworld.HelloRequest} message - * @param {!jspb.BinaryWriter} writer - */ -proto.helloworld.HelloRequest.serializeBinaryToWriter = function ( - message, - writer, -) { - message.serializeBinaryToWriter(writer); -}; - -/** - * Serializes the message to binary data (in protobuf wire format). - * @return {!Uint8Array} - */ -proto.helloworld.HelloRequest.prototype.serializeBinary = function () { - const writer = new jspb.BinaryWriter(); - this.serializeBinaryToWriter(writer); - return writer.getResultBuffer(); -}; - -/** - * Serializes the message to binary data (in protobuf wire format), - * writing to the given BinaryWriter. - * @param {!jspb.BinaryWriter} writer - */ -proto.helloworld.HelloRequest.prototype.serializeBinaryToWriter = function ( - writer, -) { - let f; - f = this.getName(); - if (f.length > 0) { - writer.writeString(1, f); - } -}; - -/** - * Creates a deep clone of this proto. No data is shared with the original. - * @return {!proto.helloworld.HelloRequest} The clone. - */ -proto.helloworld.HelloRequest.prototype.cloneMessage = function () { - return /** @type {!proto.helloworld.HelloRequest} */ (jspb.Message.cloneMessage( - this, - )); -}; - -/** - * optional string name = 1; - * @return {string} - */ -proto.helloworld.HelloRequest.prototype.getName = function () { - return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, '')); -}; - -/** @param {string} value */ -proto.helloworld.HelloRequest.prototype.setName = function (value) { - jspb.Message.setField(this, 1, value); -}; - -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.helloworld.HelloReply = function (opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.helloworld.HelloReply, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.helloworld.HelloReply.displayName = 'proto.helloworld.HelloReply'; -} - -if (jspb.Message.GENERATE_TO_OBJECT) { - /** - * Creates an object representation of this proto suitable for use in Soy templates. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration - * @return {!Object} - */ - proto.helloworld.HelloReply.prototype.toObject = function ( - opt_includeInstance, - ) { - return proto.helloworld.HelloReply.toObject(opt_includeInstance, this); - }; - - /** - * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: - * http://goto/soy-param-migration - * @param {!proto.helloworld.HelloReply} msg The msg instance to transform. - * @return {!Object} - */ - proto.helloworld.HelloReply.toObject = function (includeInstance, msg) { - let f; - - const obj = { - message: msg.getMessage(), - }; - - if (includeInstance) { - obj.$jspbMessageInstance = msg; - } - return obj; - }; -} - -/** - * Deserializes binary data (in protobuf wire format). - * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.helloworld.HelloReply} - */ -proto.helloworld.HelloReply.deserializeBinary = function (bytes) { - const reader = new jspb.BinaryReader(bytes); - const msg = new proto.helloworld.HelloReply(); - return proto.helloworld.HelloReply.deserializeBinaryFromReader(msg, reader); -}; - -/** - * Deserializes binary data (in protobuf wire format) from the - * given reader into the given message object. - * @param {!proto.helloworld.HelloReply} msg The message object to deserialize into. - * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.helloworld.HelloReply} - */ -proto.helloworld.HelloReply.deserializeBinaryFromReader = function ( - msg, - reader, -) { - while (reader.nextField()) { - if (reader.isEndGroup()) { - break; - } - const field = reader.getFieldNumber(); - switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setMessage(value); - break; - default: - reader.skipField(); - break; - } - } - return msg; -}; - -/** - * Class method variant: serializes the given message to binary data - * (in protobuf wire format), writing to the given BinaryWriter. - * @param {!proto.helloworld.HelloReply} message - * @param {!jspb.BinaryWriter} writer - */ -proto.helloworld.HelloReply.serializeBinaryToWriter = function ( - message, - writer, -) { - message.serializeBinaryToWriter(writer); -}; - -/** - * Serializes the message to binary data (in protobuf wire format). - * @return {!Uint8Array} - */ -proto.helloworld.HelloReply.prototype.serializeBinary = function () { - const writer = new jspb.BinaryWriter(); - this.serializeBinaryToWriter(writer); - return writer.getResultBuffer(); -}; - -/** - * Serializes the message to binary data (in protobuf wire format), - * writing to the given BinaryWriter. - * @param {!jspb.BinaryWriter} writer - */ -proto.helloworld.HelloReply.prototype.serializeBinaryToWriter = function ( - writer, -) { - let f; - f = this.getMessage(); - if (f.length > 0) { - writer.writeString(1, f); - } -}; - -/** - * Creates a deep clone of this proto. No data is shared with the original. - * @return {!proto.helloworld.HelloReply} The clone. - */ -proto.helloworld.HelloReply.prototype.cloneMessage = function () { - return /** @type {!proto.helloworld.HelloReply} */ (jspb.Message.cloneMessage( - this, - )); -}; - -/** - * optional string message = 1; - * @return {string} - */ -proto.helloworld.HelloReply.prototype.getMessage = function () { - return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, '')); -}; - -/** @param {string} value */ -proto.helloworld.HelloReply.prototype.setMessage = function (value) { - jspb.Message.setField(this, 1, value); -}; - -goog.object.extend(exports, proto.helloworld); diff --git a/examples/grpc/images/jaeger.png b/examples/grpc/images/jaeger.png deleted file mode 100644 index 20eead3ba3377dadbe0b6d7b0204e5a917c4782c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 534713 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

Q-@$O99S>b`kSSyWR&nly>;wgQ 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%0A{pd-eX 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

i9$U#@N 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

#rsc>mPv8`spdTkcb*l2p1mC+g6;E8`Y2FHo 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 z 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 z zE)BWJ=EE?=B1zKx6V_nPVer(UeB;)z*>K_bd-sEXMjXH9z8k;#Z+}yOCzT*KH6|(z z59s^n3ayRzy%dnL^C8I^m!AZT-(R1IBHUBWNS)tF03ul0zCIWHu{Rxo3vc;!$@IsZ z_?KAm=YakC%4<8q2HAG1pyob|;>w8(mW@wGX&`s2pz08@asU5iz<#}EYz^`RGnXU+o%y75C zjZM!FZruOR8TMaa{XO;mIp%*)y^U$~>st8Nzx_S+{<)0)-t~UF|NXt|{jqfZpFeQH z3}*<8k`kCN*6#S%<^HFKQ39VA_(rpSy-9~+A%=uADa-tD4vdjf#Cf!gYP09as4)m*I)>3im{rn^|aJ;ie!2qx<7qWGSHCW)t6Edc>P(ec?&=f7V|W z;6~+#xybzS%Y1NMm2Iy84*p9|#~H3WJpTOOljO&P`+JgX%;_I{#Q&K|a^oawi7Ko5 WzS-Hb`wJ-e@4UQxQYs)R-Q6wSozh)zZ|D?l;CB!!dBf-oILFt~ux0!ODu#&z_PzMLz#kH!qC);mfr5jL_`hC0(X>>^-QDwV2wtN|i2Uyt zD)uX68Y-m!{i2l?L5+&8%Y7d8p9bR%ruu~XpPq>#6#?8w>nx{6^}mkeag@X&r{MoM zF=1rDeNunE{1Exy#{v8=r}q}|f0#Z*90)&fU)UU*n$Le63IiU}zaN9oG0Oc}u^0Wr z)sWZIjLVF4TsLZtinjQmv2B*zJ@*qY6BK`nRyL5vKensV}6=hfF5|y>3>DH7^!mH=*`7Z3rqoZTix2k~P&Z#A0rcJI`omU?9vjb- z6zufp2QH&-`@be*co*Hd4oalFQtUd3{YH#_e9wF8>VCbQPpY6F9Q=4nNe~ARWU{{= z{M*fwiGf1laXPYA*7rhA=p<>#|H;Tf^=gDc7~jfg+ScEi^0$M62l7zt`qNQ4^v;lr z#*2m?GW-5$_v6?M`Hd8t#!6lIrNKnckmq^1Evs7UeIRE!AUVs8MGgxyupEiwU%y8$tYDN=^>VG+@TV%1|vKrpgaIuimFLbll@|v@U zF4mtI4@>ygmd_MeJp~X~K-3_yX=?QCALk~FF0VZ!O1b;feBpqAX_?je15f9&32lo2 zBMwhnRxXKZiq4>>yM3D;JSAAPE->po1;vddV1}YF2XoVwCq!V>DB;^>tar7(F$6%A z@NoupBOGI5>_1Nb|9FWgfec(U?FU{mYKyOJ3O~3W19QrLb)3*Nm)uY~{zi^IR)I%L zQ^)@$cR#}MusGI}RW#J_{mR*&j<+8QioTFJj;k!Y{N&iqi4F7!qwJ@Fp9lBIvJ~Ni zY5TjE1pI&O+ldE>u(wF7j6wdTvE z04$&PL9BrN%z~O9rvFn=%?L*cw3V%5h;q`E{NC{@4yy}*YX#(QPaw4$c zEdHI^!2Il=meAKv#K^rMK1a{~ZIxsg!Yn3KJ*Z>T@O!_H83-Oe9Eu`bBAu7WnJd6s z{g0D$n%*pi!8UGEL4{U0Upi$N8qi;V+{;3(`#a;|b`v{&r?iX0qK_`C0;Cf#6^8AF zP%a`5a_k7hXtjEEf4O?@XmJC?1KK@Pw$25C5}&lk_eBq+K%tESGN%YitqhPvtVh*m z{^uAyjNrq&;6f`(eGfzuv|`t|#caAl`<8z1@A>Hh{sxAq;&^Z3XMqzl+rDl;*8S#Q z_-tGi?sKSrf1I%FKIOh8PAMyNJrWrhFv6w+CV}7?pw_|Q@38%+sWf!$Bsa4Bb9O3A zN(99kIWE_N2W)!;rJ919OR%@pU-7c8A7}^#bt3p0Ujo6?yw%|qiT9+Q8yoA6gpnxi zVGEWgG|BjjR*ag)yO;2m{O4kuEzg(BHe<00x7yzp(lkBX9kjKo84s>&$JMDCsW2!+ z7%vwJ{;8&QUGhQmWke)r&C~F_Y@<}%NVOmI-;T9h?)TNb`{H%Ct4|%Vj^%mix2Dl_ zt>(gW=)IJ#>B%-E$66|(iBM>kzO6Z$1x@5DAqQfeKE5AGgAiaL+xUZlXNT$1x(MnYxeB)%iPof};GU9j?^W?Gw5v?QTSUYgTP z1s!Ko!6?Ifh7Hfmw6*kS<%bJb%n##ma}Ga`d4<9?MdVhv$*98u@#(b>`~G%`Fs}mF zj`62cp8?v~-BFE9Pg4A>XE}pk^=12Q3;I;%GR>B+vMA#I*}UVlA|A6CL${x53Y~cb zh-YB;Oe{tyO;DHk@t|l@qdpAwdT7N}1`uL^7!5>cEUUfjNFfq1)dX+0zBjZ}%v7X_ zSI&}kNYg!t+^Jij@b?!}is5D~LX%L*DS8^{7m!1CI;q_4k1sFlObU|?+crlI(>%_n zAJfZZ9_%c^6$pYllu82IIhkg227b?C6nLg{;>wayjpEhR&2!b9f)FVuES?|6Yv}Q} z>sMTcrH#&*Wrsg!rX)r%^3PN)xjpV)qUe6v@MRddC$N<#cKdu4qyVfbHO^ePKr>M2Wk?&>Vcs%yfZJUDLLZ|7&E zy94mT>TVF}z1u;9^RE4TnvQi1{nhnk(}HYZK=+I4CEp3tCULD5zO?&`A2*P)pEVoF z!HSW6gNW_acZ1H2TqC8DjeMJ__A#nTuYNf)4JGS4?6>17fz#?I5T6|we6Btj6eN|4 z57@vI+$$OX-lp5Gq>yJXJ6{Im&#F95=iY9|$#)54E=xXXm@IcUm9y5f=lxnp!uLm! zvE$x9wh-)#k2S#(ZD9fa6t{0XMCNrHEJv597J#9Uk&?zpWn73_v z*7nuwevb1XRe0!JrBUB?J-!D3F1Yxf=M9UTnspENH#+*uHI+Ai>KK8n=(>De^C4xp z)~s`|4NDkys@l&1*7LeME5h|$!OKW|UDLaC@T1`82lBR?gZzgo&tb*qh&$|*gg(y9 zyB>-PBKkbC2&+h)>UcZTKpp1J*y3G9OZxh!O$MO_1nVNRKYdwT zTm2YE!CXE-CM;Vg3y458zGM<$%7na6jr@byC4c>!?*kh!bo)TtUkLR}< zt~VZTICLCa^fvUCQ*PWzJ}5CPzcP9^6u_ zrPr%^+b;8!h|8{4O+A+diNhyvw}#KdLy=M0s#fficDPq)*~fvGlk(6HE<;C(MAsec zp3wke;6VR!?DnT7e{4DYE&?ec(0|)Ch|<#q>Kzqn{bEZZ`|S2)h;g+mQVEl9$s2|K zNys#(@8%tV3z8mTRZ?eU#VON42a!J6ADl79B1A>O%IyQ|hO>!b;%2_(26w@Co0CoV zj%D*sv-E=d6{=fg4gz{jRe06gc_}e<2aR=ieH`b(#DewgDOQzQDZWrF^8eO)5kj;=!ixGd#}G&lZ1c=%*#K;XB(8y>gzlN!5@}q<$?ugAsVhu%2X^ zE+ceNGep05yTQv9PH8@weJ5}_ERJ_9E<{f=jDna#V4xQR@t~s_wm=#;hq*znIix;` zy88NJwqT11QsewBnV6KkiNSo{&=f}?3Sy!fo9NGiy^onO{}9Iom%+L73*(Z?+A<5l zT)Y-scY98~k$+aBr74m?0mL}aRF@ViU!zd|UBg?b5pE|ndzhA8Yu!;NY2A#8@ZITH zOEkeN;*08(Ktg??{m|x2Y_qa-(m2j%;zFoSs37$nKP(|WE>?WxA6FYG?A!=0oy+@_ zEK4fDKk@=h6mD!_&=BmTKl9M=+EDv*MBa&nk*^`o`Ol$ROw<&hR;XnQ%n|;AiI%$U zy<~ovvUtnDbgx{Wn2Eh$({$&1v=$|fSz26IdAD%UNCaD5y|E&qYsV-jF`MgQ_bNr) zKcBV1q6lR&Lyx6rR$R*T!+e_dwUk70DU3~>@TB}~+*e7}Zzl+int_lsdmZM?MSk}K{?5AbYC~On&zACw-ly%#gB^E+ zbJ9*#Si$J~Wb-_9KlJ)v`@LP$SFd>v6lFsjZct%w4wCGwfVIQq~hOH>5$+CASb_WWYUN9)k z7|C&`rnJ9Eb{cII;p3m0O$KQ)yLO3nI1h;0{*WTwbt7rklTrPp?EcA+aFbfkEFzPo zIetjstFn_R+!a*GPmEbD&50t}ehDcT?KvaVanH)dLY~5NHD~GMUS|aQNv%r@U#pni z-j+gWK>2YAs84&@DyL|;Ki=!+DgF61sRy4&B2lCq^j<9)*LN6^Y^fGUHW6cbJ|S=j z58tcGtL*1n_UtUX-YEzw8`jMJ92THV(M9RyZeZNR@yiLo-p@k4v{>bDtRR*Cv6?_U zv@j)*v?I>Smb}bh5cje3_yY&(9HFD1DZ}tKmZn(zeb&v~wv#Ra35I&ojJrM4Hv72q zpGTg`jE6#_{4ZPhZhjYgzN`Ui6O7;NsX>P2=p7>f@-(0Bo;N)055=%xH2U0*w+)0) zBQXeDp1fO@&}Ku}?h`OV7rC=;pKUnYr#8$nwfAY-_N;YX(LVP=IE|z8tPC;bVcCpH zidCzFyBBC#4`lUgSPbLIYQjUfN8;g6Y|g&=>dSPfJ2cCa?K$L#tnJBhxuN_a!1dGf19d#U?|x9nD%O*P=G>+7}*E5&CGiP#QIBQ+9k{qb-ZBn%!5n$sftkf3Ff1hrGQRf>z^X1g)z87`= zAo7Z#2`M~=XSB#%Z1SL4MG5dJZ((+CMy^u#6oH2B2xieQNgMp3Ici}(#21xQhRf^| zFMro&DiZoo(<}cPZod969?F=4c99~Q+^ZZVVT4akJ1$TS71_2}Sc-OCBh?6}`)XC%rD$(i#0#JlI@d4$oe^*bri0K5Fc z;pjYyL#_(V8+smZo7L4y9h$uF>e79=u4Q1;ks~mBL*e1JAvPlEO>Uo|h zv4Jc5C2}GRD`|Z53HA{!-maw`6bH3Lw}j+C5NG!7Ry%)TQgmSB6tz0SgLuX!55Vg5 zceLIsUBW|tnXFXpfdik7*lO!v8iK+*Ea_*S)N27}Vg9~lJYEtY9}K!diHdMm(nw}O zRBR)aHNu(FyR}XiIvaVh8%R*(sj<-nD%XtNr`$B-+xM7yg$liekVR>(w!i_;7EOsb zUv3Y=T9i&&NXTn6j~UDIfr&5aLvj;B@F}Afm)MPAGRpiRpwKzM{`O|5!M^f51bYki zE9>?1XXN6N;a_`((wpl@52j(O((YIB>e|e#m3!ifI5eTdG7Z>;yZ%*2A#7n#paij+ zd=Z)NR7hrA`(7JF!D-j_jF+x3dpST^)1RV`%ky&8Tv>^4*}r6~-eX7}66dRcfrtNWFjwRI$TMc68 zICvU3??Om|@i8)4S)+U*fQax_S2ejDjH>yyRp9RBRQ-_MC5zb7OAf0P3kuh@Xsg{P za0g>6Mw8Pk0U>s;{yhHGFs>K?os~I4#`=^1I51(l&#mO`X6$8-+_X{5C&0`(`}tGf zy=BQO0eZ5ZF$T@$rb$*!2WTD$CKJiZn;Ym6PbY#hg%$4@|COwznmZ}gBMAj9Dk93t zNJD9I%Z>KuXg0ws9E2tbmE6`3!RaFUY=n(QtnCM`9tPJ$e3n^F$zJzYI#!OU=|VuA z>yY97TTR{B@gc3dxbr`ArD`q#g3w+Yx%!{WbK( zj8nKZ*5zk5%HqD}if&D4XJ+#WQnAOyJa3iHY1gcf>MzZl1-D7uuT1Bim8%8T9B-gH zZT_7ZrrBeevk@0MuqvYias1*KcO;jj%gx=aAd07`-)_sLHYZ)8tHXI_zBw!(mK}XO zXt=nJq%9xnui?{G)xN6&$d6yIRQ*Sfxq3qoWH7u4NYz7fVx7RH`y6GTrmd>xp9iF8 zD;QKJ6a5xU4?G8Ua9{vJ7AE?u&?PNd`EyuS!*-)KU>;nM3o4Oix|3G; z7HYWqUi&TxF`lnn&$@P-;h}WZlk7gkqP#>OPpn~8km_WBS0D7C@zM&+wJ|M90{Q0g zPWRFFgJ_X_sZ^>~yX602R=u}%1v z!LWHkOoL5XFbg!!NQ?)KiUjx$>s5q$cT6V;WkRPZ7pOD0ECnODhSdIG3$-wTRKW5VN zD4KoV&IIe|z8^ndruTOeJC>f2GBKj+#ATUdWNg|s|DbGQk+*BdhJFy6%C9KVu;c&E zsEN_x@A%1J#guf~#(b9V_V;lgJ0&b;EQ0NX{Ni$_px9b40CMYScz}l#nj~H?&cO7L zl3Z$Nu0H=J$jBesQXt6lW7bBkis@YvePaG??tZ&wcih7d->lZ+8gWt$y7%N(h`T2x z8(1L=nzoSU%N}hFR|^VT3RWu>8KL5a^BMS&DQvR_m9;-~K|jbeW2%SsxmCKzx!_sU z09gpZRmB}74*R$Uz}B0(zCXL?6fIA-*kfCElRI?1W|VSOi>}oUB|A?lS0{S%ymZn zCH57%e z)@o(m3Q-1lCw#@oys_{7Guu2m7)tzg_y`p@qM&TJG}lH)Otu4_yH`~^3)Hm5Z0M+G z3XoDz0X?%c!jos^0g3O7msx%`-Ct*pzq77c@1^H?FP$BA%9Wxy{4!nUZO-ePy>g}K zw!r&D&7(xM2Y87=3peVT4u*T>;Ckrg%}~Uziwys0m``swmUwBIzpX-*y)SOvo8F3 z>6ZPgs|pX2ISnwUIamFy-CB?l^nOIW#LOvO8SB!NLyjY((@#sVa5p~QG>m(k<5p-= z*FL~a%p;w^Cc$mcK9uVj{6?VYuFb9eTCtRxzNjAZ>9UQ_Cz`n+HD~=mI(a$l^v)yb z*>2gDy7>vrNY`lNmwo}$KAA~*qCD@sLy~Ky(Jf&LtuvJzb_sq z3MvB%p zlLR%%VtiLS<7q#`47pTE{jM6XlysupyYOkZh^-?(%_9AbNzy2nvsdSjP5R2jsJUU^ z-Nq+9ANkrfyBYI*tAIbH7ItKtb6yX3=W1PS%Sc_3l#3>}%`UBBk=(RTLkz)oeynke zq{2*S<@AY&onf*jN0&*@nEt4AbJ1pz`YwZmNNj-HlRAkupT=E5YzyN24)%wKZ2Lj}P5*Y-V%6S~BQere>K?d!Iic$vOOIw0UDt=gV7{Xy~-ahtdQfMaJnblp&ZLC6E28U?@ zc&nfKO)}G4y~P{(B97r(E1LdiFtdY|#`yIFsMm7}QhHgTOk3;n$;fL^>q4KG> zOo}dTNG)5fVf2;ta_2C6%6i05Evh&UmRqu>*;f?~MSGH!CF^Ot;#lj(gc1K=maCP? zbR!ACtvQ!<6D<0Un3+4-x3A=R9J|J%e7&y-Immhf67T{II6s6Ga7 zHDD9X%E83jA9z4F;27dCx1M9Vi>|N$kNTGfz>;Z8N**b9Onnv$)}oxXY4X^;h9H4( zxVMJhvb51VgSz}$R{il5%>?lzYnb~?(;O$(Vl!^vgXaBcp4lws`JbWeEZ7{se>$Ic zygnux?F`6v3;<~t_8>5AobYZ&sEZQ%;&5)N5C=*TuJm7C0Q_c%s3sS++&9wOYellj zHEj|*fIb$S5PPz+(><(_ie3mBWP#oxkhHI3ud-V`edeRpHZE>aP@a#<_~ zheD`s%M*EMX^SkO8#VN)abEgMNQ=MKb=Vv?D9*4f+?yx;Z$IkS@C5SX^`@C1EYBZOj3E_9XK8S=;JRi*I}sX#zu{+TH6hKE4$gSX1vH2CJd19^;Wi3 zP-bQ)2oEDv-Ho|*nsRa11LkXmZ8J%63eyp)YcSpzCu+Lv&`xMEs|1vbx3Wg-@fw&% ztv0pWdA35m2gsOwR5e>)L!UP3$G@2Cigg0$qD-b*K)_YCZ@F>#t)>wmj49$1w1PEc z8RsWS6sjOcMxUe+mrFjjEjZE8^MyUfV)4hPGo+j6+lSsN zURF+BE)TUK_(gY-y3}*DQ}zitHlWW56cHJAU9;_fB^GgsT#^Fl)xZ7_KWXp#?k_sl z#3skMNLK&>xv^yYh9CEz#OZ^Cg4&9J%aR=OTtIV+GlE<{vmb6ZQrKeW?n$1D=eN!7 zzKqec;C3*t!hx+%Bx#|xTnosS8b4aw*}uwM&!3_eCwqD6r7ps|%ZDDm9gLwfm{c?S zE6W-o7(}0{5cKx9&I89>{dma_Yl9Ham{1DwJ_1n7v3HPpz;wx&cQGl^Plew!{i)sk zNicZ(p!&_|0*D)}LrCR85wFgtzQjZi3-zP)yea8eF6I-K^U=!1wwveLax{+Tbh;r6 zGcuuD(&oc+NDgSVV-i>SrnA`0@-C&HYY@Ye0d0t+Gn~dZt34t7tV)1bMA-pPy&$%| z*MRcP_pzFW+q7wZ1_+n($|kWW2)P3cPRF3zov-9Bu(Y#n`4+`kiijfqr2JKx|K=C_ zLdEV{N_XKgd9GhE%wTc=N0}Dy9 zvCeB?L5hod5w=Hj+Ci)G*6HAdRcAshm(WX&Qy;#dmfE zWd`7=r2%qe3gLYSF`a^}?!_9jQ%e0GrrZETKR07vpG-3*+Vm$kau~et%_pW~gp2z( zh*>{nB;l+PbQNw6%Oq;OkuWC<`pNAlnt$qcSBIq%u#$f9OI43U5t{8QY{P2y{6KOv zESwxND-e9(d`YZu4>KvmZXLK^*}XKf%D6A)rJKG`u;dUUvSTuwh~|xXKQF#utW)fN zOTetJ&A%d4>V-BIG3orzR&HR#CKYBygNS0jI#s^;whzM1EXubU+&OS~&RK407tz0? z#QE)(MqDvh;>Y~&ycrO_znf9Xj zng?K|-nH&wp(riUM#4Cmt_9O(`xXm?{9IkRB^M@iY{>D&BZco>65&#bM1%?9ZK7J* zE)@rW!KDX~7Pa^mZh$?nBe+I%;yXKgWskTXTBo7mWRc(aDoz-`QfQd!QKJU0a zva=9tB&|*?mUt6iNbtxU?s@FXPurV6%LfH=Ft5=awgi%Sa^dpe| z10a2?o#8C00f0tWZv;U@J%WnJymg?WAe9~^%w$jP!A1K@_m|yH^O0`gFbx%Jb9)_Q zN-PqyB%|x_DoAXJg`&OOxtltOZnwC}vrpAOphV>po}0UJ&JLF*_XE>4;X8+s!z#c$ z5;z8m7H49d_|r_a@??E70Z`Z1fKr=1XG)5Hw(mwEKOU-|hH^l)Be)<(_+s-_mFCrW zcp;a#HY?|x%wcM$rX@uS>-AtACCf{zd1ATZo{k~5f$DcVYVXV^BdZF@aY##6jZpXP zEfKzdHTz?dyODI#czZ&vnw#uFET4L124WQVmgg;Ytwe`gSh^h44md zI#$EelQ#7;v(Qz)hn3j04-&v1JM_v$FCLkkB7Z_%pMT?z-!lZI^s71m1nH<$mzCfm zLj#w3z(m3l)MG}^-7e_wvtk46AFR*^3gkI(?QGdpbyV-d}$IFP3 zs_5g8fN8O%uvCv#7@=;6ZBmS)t}=J70O#s2?kasmbBu~P+5jx8woKNVTnhcDK<0{~ z?s*=VYHg7e6?#gPMyy=QEZ|7~UUB|#tKb*xjAH7b^w%AM`Zc9eNbvXXYN|l4UbDdhmT`OONNbX{uE7BW9 zC-kx+(LiA+sD{s?xNYw9#JHBzAT0c~9&V4?Tghc{6K3f{L)rYpMBkkYqBgz|;d!Q_ z5cHh&*Z7;FCO~_tQ~YSP+39L6i_@bG78(L-afMmOvn(=16Ru0=q$t(=49`zB5>l6D zgxSU(=`PQqAuTGnt$L-ybqS2=F0Eeu^O2LspNRw`+w_Y{TAv0yds#yi;Td+Is(OZr zO0Itpb}SZCib!{U8xeJJYlLT&G33CA{8`xP?YYVlJK$!do+Gz%+#6o$>#^jBV}W!g zvCTd+pGj2ViS+knDU4hstnP>bG_Cfz| z;h72XDeJ_NBcS~}fxo)B8!7ieEnme9V4Tvi zFcBMhNpyQh8Sl{>A(kNw)-Oc!)u8t>56lCWQNZ8sedX>qP;d65pP`7af~as(5+vTb zb5zq^xKb&Bx+ZSuN#Q8oV7%=-|jo^)C9Lwvi`>}_f+ERYrCt9gIp$eUT8hG>cdSC^M`pWoD zsX&D`fcHRMT@jEFW>B#w_zrz(dN3#=)h5|Bf#39agB}tqcu>!!W%cX#Oe6aVb;Q}A z;gUZzcAVDx*aEQenHOF7e)Ut<*r0uE~h+OlDMzPb*wsdXh_=zM8%E zq|bgSSAHH1O-wt@dBK$$J)PP_!LoWe&?gqltK-!-Rjf-`=S^v8qC3u zOm!r{3)S=fBqPXHQ=wRG z1S?`3>!^@W%%kHjp`t#iO=QN#@AO?2n5uNFk1Afv^-=BcDHTHq`ZZM(b)=MxhrC~h zMG$IF-+2$mxu%JP9ly5Nmpu+gMjpWc?OI?KU;(H_Ga;(1^b7GP@(9}6Zot$+LRMMW zZ)>Bg)SPN zLbFC202l6uj!si}2f(Lv#q3>uL2V`#K{d{jHgR)722pJF2O9h^B7lDxxI9{&RkRu{ zNKz!UkiVRU<)?r8z}B$|m_bK=-B!}WP=$dVAk-q#At2O!cd@ANaz2!~VkqUy>uum4 zY6`+15KPm;_iRs-+**o=Ir8J|NYfYSjjQ_hH5RIAf-w;8mQbs3mN@Nbkv(pH5(qq2KlSdYZDRUzQ-?C)bThPzoj zxy+gJVkk2&D8^s7)o)b8pgAn_(zIkS({<{}6Yt;KaRJVCpO26O&^u${Q7#_wKe$9z zPF5U(d;*S{9@Aa6lmXy=R=7NAC2?1Jbr$#VeD44VpT9bn@#v>k+0C3E&3;wy&ak{L z#V_T}l(@W?>U}tTg}~)TP*BokNq+w)$%IyyE{r?b`$Y6eJA>SK^<*;>G!N=9jwA4! z8QJ^l7XsMVEu|cO_xN1v4bdSUWJA!9rKOsc5EeoTFRg`OZLxG_XG?^vVtXLFR81(B z+Cy()KwTX$vH8os;;&Cu4-fMBr3e%E(~|%qz3QUdN0@3sJzq)r)RRg+oL2-NR#e)y za!7KNSzL+{FAvIv!)BM`R27+%dIf_hy>5@JF3=BbR&;oo0e7R3&d0(OkyRbZ!@&~C zFZ;J=llqHJzlvlKo_N*&Yyo^T#4wo;4D(fEMv`ANLJ|h>$z_X~+Qd!AQL-g0_n3?j z^2)6iR!gY&<^dcoYqB$_08XC&L&|aR)zw<;Y}w15GeuY%l1(X1 zYbGu&Eh_f??JK5_o+Czv$RNL}udUwkww8}B&&$v>gpfS0!Y&TCw%!PMaW^aKj=zf) zIc0>srdE_qs#AUD784DVLZIZ~`}Lum4;ef>m)!`462Bg22N7rM38DkHM8RP#V=DLM zU>KzkB?JZPX+Tyw{bIriZcByF*NHVsAIDy9K3oO$thh&ra43!Tvw+k0Zo{Uj}#t*(3xUx@tzFidW5@Jf7NTjMZz&OqP><&XAtSh3~%<%G@ zHCHo@si5cdrd+u$E-V8VbK!xd#<_%Ue*?nzmy!~9-Y4SLmhXdi>uDzQ8>a#9VOuT8 z306L{@@dMGG`^_F&0xKSb^x}wS69K7ZtdA(T)$mM4KcH{A|CCE9Yl3Z`)O*?3O!u2 z!8hS>cwYWMZmsS#vBgZX@gjX+s=81m>W8eybxj-HJwLlnz7GHDiJ>XAprX#ddLp(^ z5y^hpqMqH!VFaaBPEZc=ow`9k90n~kr@CJbkj;YnLK~6LNWt{}#Wbyf17Vw*?ENoV zIPkKD`dP6s*rgU;5B(Isw8jJD^v9X>T^sKHth43>I9d9&w4`;2UN@~2wn-+ob^$tk zB8>m1!C}cQr=Fn#Z|6hF*{3fIKMS}YA#o-%(xbrqL7^LmJwe~o^^k#`M8HpU>#r+w z8AE@|ZJiWrFZ4@GLX*x71b-!9h6A!(qfZA0QPdWae;ikl{$*_UXx3T&G1F+dge;2} z2G?_KjZ-F!HQ6!6p-x|aECmgtXOCR8_W*C*xymdmx@}XvVVgkEGrg~-GVq+{@=la> z)}a`zS<|LxjI|a-Vb4;*_c~zKpT5R=;i8=c&5nd}G4!W@&i9?QQLuJi^tiy5 zo*d2jW3(f@J9D{xaPC%bywMAI0EuCFd%V2?EyR9DROk!l{Xff_i1b{t)X%GhOQS=e zCZ%Ol`Y5>qT`n94{15N&Zr0d&L{@?)w;MTAf^45Ky6bj>`#eK;WD(!F^ZGOVzi1+cy!&qbSt%4 z_@*1mlXmk~{g$SVNwzHAr)+!2<^L}HwN8Iw^At9Q2YVQPVbyZlhdsW*Urv~QK}6U5 zCahE*#hWFomiw=N8VQh?yq)b=B}`W$RWbmT^3*XSgWzL0V3_B5*g65G+NAq0?tg-$ zH7+FarAT2E(|D=vO?4PV6!2$L(#=|yE0p+mg`ma}_{YNu+kzR>rwGrVKH(iZ2K^qk z2qy5>bDi9+Z=cNep(pF>B(<5VtVAu;GH?g_U3vgXHC;2?Vsq?pB_N!JH$6l~yc#e~ zPG^PN9K9F$-Ut|3t42FhTxPARo>739B!ca?pD8gBcW(k_S|Y-Y2m%{4atGzU@~`n` zgP5wiM@~gFE*~FlI6ppq*x`@6YevSBzbo2HU~*Wsg&L22j?5pEtYw7=JuO@Gya|}9 z-e?FpM!R>=16o&3N}9=40eOcjIq_RRS@p$&+pK5jl3drX&n3;)co(GXIlzk*b<ubwu7H6Bci8-0dWcG@SsiP-Le{S6>8Cd@@V?UD3mk;(r}< z`zcGI7LaXYLtoUIebvH(3<0&UikC~5$Ba~5fTMACIFBrOMbwL4O%ooVu_5md34M;J zprxJ-lW@|2_zi9oJ7M3{ua9A><&=p+;L3yLQj^X4=BW}#V&{odA z9O>x{|NKm+F4PQqC{GHCMZ3J;GZnTl4mw`u(3FI%mGQ(dm%Ca+){K}2pK3|n*Ha@0 zh`?0)k9|u!H{(r(BgCz`Fk2_$NWTzWmyVOOx|3jZ8iY~$kALo%Nw~Zbz1lPNj$*u~ z-bmA?i#+YwOImgbODUx;el75ifdV-4pCrBSBL-GJ7t3t1-k16F2wR+&hg)q8<(~1& z;58(Kf43wvSmxRmkFH{cTeg;Ny|C3}8q@1C*Cufv>i<$$nSyQD_&}JS{pb^-8CF69 zOkr8arl?&&AvlI3%GUe!c?|81*?y7ikk!5oV`mq!4V)% zqNOf#c3t%SA31HvdmaAL>Gjttd85qj;vm`=6ucW*cnOppw6dpPeUD2bx+>qHVdd&U zL<|F251gQVxmibXxR4n^NLFuWMsUcp^IGX9QN&&gAZ=&f1L1% z@%*?92G?CM&G6VWTDDT9Ui(%sR$uwlG^f=EQU*;;`AD?R)9JK;M_N5nIoz2^^%DNv zYudDPkgeR95QHp&Q73u-t*ScXcI2MJcJ1cUqjR{g;=vPi06B~JEq&_uqTzJ(kd^cG zpK}tf_TEN-E6}+JyACF%fM$_1ctJ2+O}C6(HW9C%vJ{qx370soC!5G0J93w+a)7hE zmplzbavxR*s9_JO7K*|!Q@-0_iZQA7yY8Rw8zsKZY2d%)nf+Wgyg@*)K$(t?N9oz# zIQC!SCu*=rGzaIM#th$#YbOFkXlk_SOaMdwMGAQaPkDPpb`!p!*0iR-5Y=h{>yZ)8 z`7T6+wOE%W5>0@R%&u@KBc9jeZ?D`P71S0Ln+lus4)8_DG@cdNC{$>^Y#J*$OkiZ< z25@d76gz(ej=jzDr`|s0dH`SW%L3qiBZxyd0u$aeQ0m}UvVs&Z3m#4W>&up|@XQZ- zsOM>mhId`rkfBr7VpT79yqmhcGPy$vsqNRdeVWQthY9o!G@5a4fGpV~AhF0R;T=J2 z(ONPX!c0UeTg%=9HS&8h4D@>)mYAgtp~!X<>ARO&p(a1fpKo__y7^4Ym!egXb3L7% zq9y5IEvN5|ODg$1&X#A%_2Q_O?A(L5s-N!tM(c<)CHV|v@wd%dFzc-d?I4EiDL~)T z`YVQdk)91fa6omR4T)%d(fwLkvjzOPR~S@-9CWrQ4OpuI+@#}yvBLt^x-~`*@k|e8 zWv?zgNxr7Y6}Y2s75uc!e=2M8pc8xJ??KZ}obGupWUzJ^7*Vm?5{jMbh`M6FeSRZo z(lo5k*@1G^;}*E(1xHzdaCzHe?t@yxYDBrbqu5hJS(_FT@i^y~GhFLt;PX#yOt&rm zp}VM%9MK&<9=_if5c_sL-QuLs`HD}v!-F=Jrr(DiGuwRA#HuL6$GYHKEPURsdZ=mO zbx$v)5e2}1Zfyblr;jHtxqbbail`hv+cMLjANpmt;!E>BTuE)i>NU~Br65@<*!2w@zSs*OV;8b9p@J}f z#OvElVanFQj&zvTCivuH+zaRuup#hiL9_sqyX}=09SH0XV`4u?XSc`OVIjQP4Kf(d zifE7WL#*t!g!X#3m~5swTMsyGNiW=ZDB#yTcD8};+R6?58u|3W$%)Ht_}6+Qgo#BW z_n_P!gHilzyZg(2gDeyyp+XK5JMo9m;eF#N$_Zf=gc=^ zVFUT5&$Z}&Q5opCC;597v>RYQ90a2vVuF=bw0*8}5L>ay<$eyhl+z`MWJh(u`Cp#6 z19Yg|5#WSZ+K(J*$||;~jpK7Z^?)wmDGDmsA{qCS51}dvI!!ehv3egNi*B~NL<;u~ z_G6mJVRufEV)IR0_z};>;ncC`=yTWG&U+>t9GDE4m2&1tnv^d7gB?6^6W_P`qaU=V zY?&$w=#mzztZc3xMWPXB5L;@~wjrb@&bJ?b0hkI6#4NYVw(>Y(67zbO?O|-OfMFuP z(eKnY?KX@VYe`eH;4<^A9xjeOj*0f&r19*Wa!CM$u`$VM3Hk`fiB*1MlVxjlGuWfT zgzb(w98=+rEz>kF4eh+HoO25+U^<6ZbM}Q{D^{q*ID?c;@fZ*S_^qz+RpoJJ@KA%t zr|&$K4wq>4*CK^YR5QOx_Q+}e6xFTr)_T+L-o6@H=h%5)d0A;9s5b1;)pFKt@ux?N)qsr<4qzyCO>E^isduW&P4_EK@d+Y zm13+AO1WV%zzJg`O$D2^1Yc+daE9c!wOpE5#M#ThzemvB0 zQiy~zWgPQWqbNI#Q7i7^V_E-Tyl#jbYdHB8*P<2 zfW}pdYfId}5ZUJ*yPMN9iZu1@W9t{x&#QcZCxyumaw%9OPCVq2$P|rpiKGaDVw()S zmrVTJCj1d*#V|+>;T`qlg%xI*>{1)TS`d7HqN0%x=Dr*FNVX!BWJH0frPVe4>$q~^ zh`{KzdPZa!B)0zaH06=!JN0WGhKO7vN>AedBMkrLwxkdu#e+fbai~t2;lhc(TP!I} z9^NyHvxWmqP_GkSy_g`eyf&JJ^gm4PCJN}J5Bx-IgtL4cCEyky=lF3g1htcXSl`u> zcrNA#;m}xwi-^HjrwL`1=Ha*eDPs;X8+)i2g4>^phq=kv#RtHU0Zrs2K>TE_jk~-j9-xK!(`Q)Z7m?(KqmimTEstxKNW3!rR=d)h0yzjJ{x_ z_P5?(ldxb$N@n;*wSoexrl{JJqtx>Nd%W>Gsl~qOhQC_UYGQhXCbYAR_dB{T@-GG@mIMCdfMf}+T0bik32-1j5jetA)4c( z?p0{lqD{h>YAf~;FrYnC@KIjCi-{(N_}jl%@6fd$h%XV6#eu7%?7~I~M{Q~Wp3oPL z#E3g1AtnkRP6T=={W$!Rs90e`$&~&+@6}OvpOh^;-TeSGuPRWp5^l#(1mgIg(Gls| zwp6m>cqUcw1-=waBp1`NBo|DH7Bl-<7MNCvQG?Y_mt@m;}Wot@_AlK9ZVdcm~Q>TiKBe zz-JSb+E$YNEunBKJzfXj+}!;wY$|_(5K;_dV+-GQ`rEq$FG_q`_sFlGJLdo8ifB{t zo_@x3yUh#5Tkd5k1_wsLSqM;(Qr1J3Y0?pAzr!GM&}1qI3}}zaEy+VOAKfSdbb}T% z0}Hd^CK`tv^v-aACKQC=UPcgO9=4ZoOuvr}(82{YRl|a!UnfwP5}p^G1pY7IC0Ye9 zBd(%hqW6C_s5FTcbJZ$IJ66#HQ?n*UEC)=dt*Lo*G6b`*0Z@VgU7i!(>Tk(q8LRO| z`*Ga=bs2bIp5Zx5-L*bYPe1{ zc;p{f>y~_TD=Hg+2h#u!p&j@*L24MKaO2X*I%b>Q3Q&D0f|AB_;?|W+UVj> z0)xt0!=9OVL`{IX`ms$s6a5g(k6tyc+KLJG7;cmroGwAaple2eX;1Oh3!%s)dI(K7 zvK8B=6g8k+ajM@qY`HU&XUrV5u>49&w}N<<+yKh-VZ=V_~pNzL&{Cpj3ecf)hgmh*I1NpOzJ0ef27*0+$QMZx|avWFcJ#ub%YKC?(vXHeiN~ zk&C`!{cCpk#c+x<-hS!mjduO7KQP}mxgmd~V)1zW&1&D=?snzyO?Zm)h4jbQCxf-g zXUNOHP#S;Joj=XZ!KuUdmf76?zjWIFYcT+;!h{7l#>=XQI{!Y#O;P9n{{w7KD|A7KCprm_#}@(a_PS(=zq`De|sS-L-6y~sMbYu{eS%AOMve%N>!%%{Qne@ z{#P;j-@k#e14t20KNI7B{-iFxIzXmanr&F{mt32yK1fcUGoa-D#$b=67Jml6IX&5S zd;=3J_m}O50)3OoSZ|V06@484wxIuQO04`zIK^oek@2V-P=!MJ9}YoBD^Y62(Yn8y zR5n027ixnB>+9FDy{(thO6Sc0Qs!{(#q_^V_HUE+@zalSJuQaAs~P*sdsf$(KkIHz zOl2(g+xw`j0?V8K$$gDeR#DUZ_4PSuZM*N5V4vqptN&AT{?|l+RBr=SK+B(Klt23W zD!>Av?-LyF6}Bqg39sh*1Z9xaZ=y0Uy!lStVA)^ZPW-Mi;HG%2H;}z#*N6W&QYHKr z0C4~mx9p0wXMm{OL!DMm`>w7v4sI3KL(6ny9VH1(-~|8RY>mIaLR`IDGy6n9!4W<8 ztM22rDR;xaui4+0o@Mk8prbt<;0**26hUuDG(e_Q+6&lQrAE&LHSyx8^ZIsnObx`@ z6{m9;zU#QdGj~wkSx!!$%?@NsXl`pvzW3wqCN+JI8_&{W*H`mTYv{)m%YOgsYr&fh z99%Q-kLZyl(D44{#d`J6a%%o;pfoBRoyD*gK(-`+R`4%zI-|7k@0kQ+DI;*(GRf2Fhh zYe?hlfIHIoAYt;)#{2KXo9zP*K@fs|`Y-+A-#yTOe_eWm9m%-m-uzDsDW!f7jrT*g;ZleI!A*w<4KU2MIGXUzC2E_~S|M}3s zyMCO&I$UrL6#VaI^bh|xEDX$A2FI7<|M~I)?_OvEv(~n7+vA{0Wo(yBYocBme7lVDZiU z`+wwW{jV!F>NUsdZrEZC>HsGB=I=8^V)#?58i?4-t?CPV+D zy)4{}2yLAEpOJII8fG=c6lI_0Z~7ZnV?^hFO1anca;OzUy|>B}-%`08_Ht@j1DFe-D>ht~>UL%OwfEr-eIo!6iX`5I9t5bHN^a&2*{Am=h#C-E ziGJ~kq4E7SfN$ZrNe3F8X8^ZgrDBJ2`IyBa11F}^BkuOz8`#t;0MKgiqp$sIU*iRI zJG@QKx$XuEvq1M`V#B=m*BA37zKhrd2zjc&IX?e`s8v8ZN^l}|a_s}$aNpeEaZZ+Q z6Y|ElY@49Ie5xCwb-fMn3zcm-xACuVd;d@X__phW8&-+^Qf^z`yudjs;1Aur944zi z+ig^ZV%`%b`{^yt;w5I`Pn)|SdMTLc(rmldW1i&)UwfSc zFthKR8#%w0)$~1eB)Q62xZ3kv5<7eXq`*SN0PyH~b(p`UI# zFhEarN$!8*)44El|MjB$w`k}|lO($O3o;QN1{b+-0ei251Ms`|#nsTvq zwh~vFJOosRvwe>Xn97rtDmB}HZY_!#p2YI{nTIz4GEhQ!L`(@({@&Z7YBZNk527En zoh=jez3eq3Eggk(XCB=kw0Z$Sh{0)H{R)Zn*uyKUn-up*vSCeh0-`<2$>HloKjXMc|6GXj$ zm6Zq-0t8s@UCaS=i~#voeb@(mz;6llxl>e}00H%awEoPEe7yGtGt+kfXk;J!#oCJV zU1jS9NNwkD0Itn|21V#K04^k@j{^lP4#1i~IqmzQeC)s~#BfUd31^E{=3h-pzJZh! zZ5;r;U)-yM66n%u;myG|F*dktk|&%i{6khUT3^Pcq+6SjlOx}?{|GSV&*$!d zzLw3eNfkH_Byzy2+_$cpPt;APZ*q0A;y3zf?hGr5@6REZBVwZ?N(Ul$1lJOm%)5q5vE?91I1K6FM%`zq=LD&hM0kXaK{AuT`%dKHpyFjnK>I6`fdeeS& z%2V`X-|p8OQ~fEH0=at(L2wSxrZpi=yqj{deADNpHxXUa@F-Fkw}1nr|85i{>~*#j zMkt;!Ow%Fo0gIzg16a#kV{qDNdL9}LvRo#ZPwxV-{!-19<;V=(sSWhbn}O~6>{gp* zZ5S+$Dd$E&K~PK7VwTnlh&_TVoB@2Ma;ZX;a{D|%G|r`0UfU{332Rp65FpGMPp3Hk zPP=`co?Y1G7fPZ;6&)@n36V25QhY~bZ=}t>2ap@($Tr9P0Zk|QHGhre&xm_e9y@#A zQBW`dC^{8zS8EsC_6@j=+YN}>dCcp}XkffIc@}M9%kEy?*a@keQ>HGaD=iAxiyNK) zVJiv{GYB;;4Aex2qHhJq<~*Qg8tX=~wv1K02eNM==+Qs*Hw4VMm|Zv4)3#A zT!?Uhd3Y8i5bRk|img5U*V4f<)phxZa&U)=gDQ$VFBIM8C71?e8+Fzud*^Tw~HSyb%!NT<*A_h$% z2@sU<7YDinY7KqPUBlA+W(^n6M-0d2G<#P-hpiYXLblRCSM&lShK~q%<&mW{3WgGV z4c3u-LXe3Ibsh?fw!610#qi z8|SmjVO)zUITkv?T7RH*_HO^Qb!NF^aoP~M#$$h^;oAh#QVk5I}k zcy>aHsYDXG*@D65q{P^HbuUuIeGY#*T-c?oGY{*o2Qg?jqU9l|^s63+G~T7`4uWkw znKQWwmU2}8slr#mw*yFIwfGo5+L&NNv3XO@f(bMEF z?r}vX=t~K2nu{rrdrLvWTEFuM9;4f^-1XP0g>F#2X6x$)XnLvag*-5qB7uQfSe+lT zNMCXYTf5!e++Q|XmLw+{1~P^t0%ZL;pF04`T9Y}!Sg|n^Y@ZmrxRD|~G%8)cCCnW2>W$at>~gebLF738Mgc#?$cR97gb zKWA`9l@bOx*4@mBkDtf!rpV-b2~C$r*2gS<`h-`!o^A$5L8Rlm5eWkbJ z2tt)m)ZoOKM2m+=bjn%;r3#(s&1b~5dUNt>IdG$a>h|14WYwF2?(;NE(8fhEEg@dzg2-1x;u+AkXAiY|t!}F~BKRnkL^N-k5;cnYCp$rGfXfEYAD=M{S2%5E<^bR*ms<0smZeyCNP~j@ z0LVZGLK_?8nIqtdsFbd~6;B0hZ=k%6_Dzn!J~@wg^}Nuu!ys(`GPh)(rNztt>bpj% zxct~iLyy=J!#KYPzmgC^b~(I!{csxPqPqa(YVQ*pE)2M9>$L;&pMEAzU#2I4CS3?r88< zT1PX1smq-32e$%0+pY99Qx^n3IhBq9sP>_8MNenCp1Ob{i1hgT&Q0 zb8ed%@wy^I`=M^cHeC9&n)J2QqwF)u8T+J|aVd~8$ktsU&)$*Sci(@_a8ut;i}v85 z@RE23>CQG=pK@lGPZT+VvK(w#N7L=W$C`yFiMwVM!_g8978r-}*C zfwXEZZ1i0iopr`x^tvz9WG`SES^73JTR){{;egRP#t+hv7P`G)1(W7YdG%3i8a#a< z*8TimNw)#PgHOHWYP@7yv>5fq1weP(_Jr`0kL+t99;n|K3I_!ac*Pg@V2Ht#-*yok zvM+7+MrqSoUV89WkV3LEiH=!DVDO60hB@id`7_Yhed2hgt*4zWZsdC;A1Oo7>p;C@ z$gv$lv-#Dsg-cNSfioAIMky!3iPbJPQKNInxg5mWg||y(1ZT+9Anrl=YX&BCgqCk- z4s~<@lyf_lU+7K;1a|Z^?QtSxC+whV@BG?i)!Sc+X^#(j$#JY^fvx;XY5uAO8CM5N zG#6gYwiry)JTdl-;hj&>st0A3IVi$@UB8+|`d%B@l#huGqo+%;H=ot`6Lw-k^B0KN zwZI2YJHJ0=64HPa-`p(tmuIZ{!V@MhUSz3dBk$#hX!ID^%Fiv`V>YGf_#PQJNbfTo z;0QE65IB%tn28aJ>Y(FIvzw!iRy-@q=6h1JkNJIXVxk?~V799iKW5?X&wmg?+Y1vkfXET3M5wZRsu^t5oEsrubvlRYd!11S;Nhyk_d;q z&WI=0^P?^E>Y$5^eGv2{Gmts^i3A4+Z}b0Ut$Mn>J{mhKer2Mt%6u4#MaAj+UE?3RlAZ&VASbs$g03{O=~^( zbudmh-L43-Bu>oCzqA0Vl-;SRh~F;*NccbWOs?L)iB=!=zH5ia&`n-ANdDGpG2GX$ zmW#Xk*qIqRb%5V_Yq)TKz-!6Kuv4hB&V+(8#ICay))nMA;&}++yx~@dA)&FJyf-~y znaI15;z?`}R-x~=%r7Ju_?couiJw$!T1G68L7(6%g1?Fs^bF+%Gr$ekMJc%;W5W^o zLW4ezosw|bFgdvtij;x1|_(qExVlV_y(f(sq}yhIV*C zx6qOa{7m=RqIG9(7oE%*G;|f{EBTqiNe}%3Cedg`dhD{!vhD^K>7As<%+j=wH}R>r z7uWVnJ>?(gzm*3}j^o7jBBRiU6Zt8kEwwE{8NFVnE@{*vU|fv29Z6VA=ddHPN~3^B z0ZyXOdpXw)Kvg6K{-FB%*N6SS8Ld;ut93sl)a*C9Q*wwkisz7R>hzJ-ooX<{-A3X0z6I-d3o$ha8K0#9irN;rBL zdC#52+C*00!d0b!nq1IwRkgZ(uRu>etYK<5J~nUJcM?q5uT|x5E&`H=-kcDarqs!} zw)4o|VY*F>1YSvL<9zRhTY$Z z<%~A$D{C3H@D&&J0^)V?jw;f)M=LgwT;%%=BH1pq=wTvUcSM|mD$EiLn;L%!3vwNW z32<~~<{T)#QnD^xTN~*~OUr=%Q^S(?H-L0dUm!xYye4P6# zj%w-}(vGO@NXxRBLOat|##6JD4Z|UM#0oYR@+Q_WlD2|q5H19&VTLf0v(qhRG78m6 z7W||&FG_JCR7STF>YpkDi{oorm{(Sqvjp1rf|aQOn1$r)g)={Y9%J;lRC~pI&ub=+ zw%8(Ybae|>HxmNo4#c_JK%7f-o(iP(g|*B!h?tpWKR@lVQnjq-D$>5iLge2<5)JNe=@8kn@CcjV!|A8< zx7?lry)6u;0YofMmxlzfpA*sh^DiBRvNECg_Z}dU@3CGAyg*w%xDB;xk+i$ZDlyL0 zco;&=TkXH1NsQc&6*yaq!%}s4w@iD85YDzv`YvKywJjKbB%~u27Wh2NrebAm*B=Urm*veB!oYiOr4@%@*@1 z-p#0An=596KQS;99K^nRCy_~ge@Ea^`_Xi|9+P<$uI&|PiIYT&ux5dME>{<=kgj!ujNVw^hGkazuJJq)c9Dr^Y9UKNR9j4FIxS}}(khPZ-NP+J)P6)h zVMKDR_({U12IB%ZjC+DyrS$h_1P-QxG3%k=a}WG3d7TwJRElVHUY%xCwn zp`JK+9MG?2m+yVc@ZlgbLWC_Cwg{T(f$WmBmGHrs^SJHRbJiZEfNkV^>xT86(8+rO9UkzVb>fhd#PU*q5S1Ge5;?{Xi(P>puQ@WRjj zrIGVmAJuuX>$j8*Q%1&ouTJPdHtd1woo*uD1N3vuO?*HGQpLu{HkZKXx~qO^Hq~bD zs%GG|juDl>a!}vaO;?Eclp7&A| zJHZ(E0>Ci>43;v3(|_h;{PtQ0yK}q3XVbW#K(5NuN%$mc74Shw4k%@ zu5b!e`bAdou%AYgzEcu-qiQ1&!&`&A_t5>Q>$x!>Q6y+*Nu`@9(tW;Ccr8sP&JSus zglme`jfPZqBZ&HBMo(0`#iUxoEm!d1xnNlBgpc|`o7V~zyoZ6MW^%5QnPu!rM+>k9$*9 zGAy!*i(g(RmNeID?s&hb&z=b@&N1BjeFnw&7W`Bki8`#PSPZo5#Hf5<4aIz@;diu7 zl&R?T!(D8_Pt^k4EOl@1d~d}6RbkLxt&tI+P(BGExB>kX9^8I z8=hudL$-WhKPw2Ab?KE&2z=sbJ5ffOquHXhz@g82VF}?VmEq6wUg379MV_~jA%s-1 zAZN%7kL>H@mlSXj(W%r-{G)Sk~-V zuhsq%!v*tW3Kcw-PrJI`9_&x8Z^~HaobFC^*NbUAWaV?Jh22&*e@T{@9|mwRVdCzo z+((aa;usXJH@+TS>dI*U(ay=ROlPn$rrZZ5s3&M;e_V=vr*Vwl96Oh2wl(RJl+U!k za=fsu_H0_iTJvzYtXh~FEs2F!U!$jNy9}^;B&`Cuhv@i!d|;$whahcVe%8D4(P%|w z?@uAcVyiDw!TSsra6#jocHRy#ZJtB#id#BMS2KUmw1wYs7V2ZbB@ej5v>D$FHGt<(kGy7p=6;qZ30$)N_TN*0an|N zkj8|xeK>KBj>t|F+2(;-QRZ|tf%&X3c~+ob+-#cKP;At_p}6R60o-9}U1T1%Sqc-H zk9rH+N0j>y0cRE|y#oIya)BRlW5aysKgry;p+IW-*LQ7?t!EVSgLyQ8Y#+%w1Jn6U ztu;6jn=PlBPyFY+VSRb!Kz6zo=i}(D+d)%8#k07i6?Va5_c?KUi-`(@mn4(jH20|s z$(BX$e+9BhU!OckA|_$*qP(qs&&r5L^>vhS?>Ac_oh`P)mrp@;a8>H0!4TU#%RbqN zkE1>gdAybv4$w(~Y~E-(2sp1!ktJ|+md6Pce*zp%=!pDb0lrd#CTGMxuUne7m{4#q zuJkG68l#6o0zOXwNt&Ykilz;bTyI=H47Z+Wuc_fc==Ey4vgF6lr;uJBzWY!WT$f80 zH`a~t(GD|N%itekQhiIw3m~zyIaws($~`3!u&4$^`iO}6G**CAHbOIfFg{$Mi%u5w z&I=nKofun8V6|_`dg?ck5?d-NyFYJEFRXR{a1TX?Av)e^6M*bvlMh+u86=6nTk{nf zb)k>cL=}Z0GYR^XaVhoT!(PR;4v{3d9;?4_$vjNQjByPQm>;)&tZX=oLH6K&KB#WJ zpl|1C^RvAGG6bU>!<(>RLPdt%zyRu|mqhFbxUB3%0dBtqqSN-v*6wZWip>z=mb5U9 z8$wU_AL0<|g0uWR+3AnuF&6_N_9Ev_W3YmuI+zuwG5l4u>py8^$W*n*s;%Fz5c!;Fd4z|@!c!wcqe+FK4=B3r6VPOwRg z-T9&s$g4EYONNV1{i?OgewYxwfHnuc!JI+^D|0#`4=YP`M_-q0`TvsE{I%`A4YnU^ zLW7wur+JB@)vp;xM9u3-`aEXdXW6&72DjlZ7-KrWchxS3lDZxfHsZQJM)4v6T$}x2 zG_(8cPP}s5AH$pFWHyh8Y(mefw`Wsm z^XB>GelFKd?;kts6#L}0v4MrJXbuM)M4W~9;Wa25sA~ZJ+8ZI6U4y*`elL;^21Kec z%8l07jmUXgoY2bGgdIfYtNqc6g@aypYc<<74{ESfEnp)4zdOWo$J9@2kUkH5Gel)J zdr)7p-@|BaLL4X_N81eG;DJ%kds>-W%4nd3*5`*U@7fKL=B=|2A0NE>q@**SBI1}= zzV@um(Ie&x+VEf}Nz{M;m5Y{FsvSK2n-x0QMRNDc+Kc*YJtJLVO&TL8GX#uDMC zpJf?a;A~377U>1*B|_1|5uL&5Ffldlki=MSZ=GA_&-1z*$VJJ05eFg+ld-kJJMWVp zF+9A_f}@y!&n&Vybd=UAp2vK1r~X@{Z0Tigr@L3)W24hOLDsYVYlk3>Iu$ zY#P+%9Z6rKU5aZgge>O1ifnxk@n~7JveFyp##7~%ShF5j5|<+|zl$GGv0I?L;#C`% z=ojZn6e+CNoM(30M_RFBXtBzj-(7orU~xq5B#A10D50?`p$jynX4&|n(=>Kl* zej7%bB(ZQlg>9OjS>?0*|8MFGQo3FO*Y`Gyz4?@)f}N2dhmOLwp-=f87+Ty(~B3m31RmWI)O(50Df zttrojBhMtah`!r!W#SW9IkGUm1#tl(o6l|IX7~E>hVgSQWT~;ml4Ku@>7(Icco(*N zE^Y40`yHVZDMaC~Z{sqc&MOI0u8Pk*Cu#MR0mZMR@xE@+Ux#znuXe>D1?qRYR)gwu+CFvZ zGp(G3A3ZjoS~Nrl-TryBoL-Rq)b@|gtIo+iD$_l#0Z1DurF`39Nr3!!dvy4**kqD( zmO^_VvdSrwL2x)Mz{@eys)WwHwPjkjApxXJ;L6xF)?v%Yu=zIwrP_3uTxw{H*FC zX~9c0&2VvnYUWA%gnU*kg6G5v*eR@>$IxCR^`!ptM@>){G>B%rV-U-qdS*DI5(y>2 zbLOh4=h2k8mexOo!{Ips?}nW+_=~HhsqH9?(lPM-VUFJv&QGgRl8#=~Web61gIh}g zWANjfSJs_U&kSP^uscAVkPQDX1eSe(n1Bz=BtWsiICXHa^L)#RZ*DJa;!#0>^G{Fk z#Icombg$&Vjsz<0F3mjm#b;{=3nEY)wo8`KRiah{VA1Fsizc#;u5P_%pO__;5Yb9q z^P2K65peKDeHq7iJes90x7mR>0_L2-$zO*{TFHx}mM~;t;tP`2e%>vwpk>KOn62^9 zwk4odFmt8FRYn;RYzuH5^rhFW(6Up!#o~)KqO0^CD>BAo_%6_d#U7VCU^3yUxYC!Tfzv zeEKA3sI9#taQ>_Aqx*<6a0wYeQ|%_Ajh1!6ppJqLI-{9Rr4ZbA?=SGl+L@n7$Fg7c z0MUSPNcAw(CU&zs*lqC4+)j7lkTJtNSePrdRi^&i%2E*7-8HO8x9ibETlj3s=@%8d z{J60<{#(U8wTaf3%qCldjeDyAc3_v+Q9?c+?ISOv7LozN zDDQyMGlEPGJ0ehJu3KRn+-x-_COSu36&9;!XXm*sIb%R{hbyiY*6lT^DY?*KpQR?l zqOt5DP&ud}xqx6@M?)T|v=ziyaKuXCh1^#{X?HJLP8QAySu!AArH~B*&kB%+Ju+|M7M)&Ly()g)My)aAv!bPqT1XM+OO%LS+nrCrFT4bM$@bv7QFFX z@E24@B9F+Me~J5po1Yp6wwvAvQl2@D4l8IEcf3Rf4U*ksSEFT}~f7OsYkWg7`~& zzuN3Jwm8m2Gg2~Mj^v3(ESO;0dLJ>ite?XNsAXoWdbi!!9zn4Y;TNoGE|in)E|SK= z0k23xaf3}-M!l5$vh{?sCE!c6LklN_D%8Fmhwxff*^5&T|9F9S(4_hsexel`mPkB1{{YgTAs6ay9>K4KH@KLS9X37}~ zA^+oiCZmRE0j)#LY-^#pvQNXh$@PC!bKu92XZ#^wJIhWQ68X8yujzgBh;~PxvU=miL`lI zZTkh7%<>r_rVjq9kZGB5-D4KU{R5x(`q2MkJjO@YR{mB3N2xMZ0&5W0eu)~MqI~jw z9Gs^t$E+{B|KO|^5RN|OzMcO;wRAN9L!K%P5R$6evV^SuX$gLx?z1=D`rXsh*~59> z3+m&EP7;4VFJ#kKsWEc*%S>*u;Z$S=(yNWgY-F)SNo)b`$+3LST-4Y;vOx6su!DMn z+zQ*bqRS%$+iqDaEFwPl6OBfZ@BK&bTakM6lzhn;g%1f~0_KaEoH!46;LT8N!$PnF zO?!2UEc4S&Z&G{BvJi5*S1*=~?8wQr%8r;$!m9)fGS{#(z;w7_>bE0``kC>qlzAu+ zX;`3u!a~xH$VUwpVRuyVLiWec!5w8{KL^nzs9z!ezvcyoY+PX<*w+F_v6twrdO6EO zveXi5+~(fq^!RiH6(<~}s}~X|e%n6WD|#yRX1H&$jQ1dRxx6cbe_UtpJ5(@b%@8G0 zR*#SP_~YRN0OU0(ipYujjZGF^j=6(JZ90t5BTHMr(f&%jmIzLt(bc`3pD7O@r9f zlhkp&nPF8#iP-$(yJKIH+s_!$MTm-&fUl?bDDNmcsRzNk;{1;bDu(%6@bJ+(AL^E~ ze*`t?TD+D{QTJ2SiTLQE>oVVaq1AMo-5I6Bj@*41Nya;=XR#-@kzeR*b{(W!_30Vk z?T*5-2XSwqw!anTuk$y!g;rT|-hNcz%FsI(qbB*|JMb*v1DqLGkb4bY;#ht$kSqbI z&3&r+o_C%uE!j(_@NnE)`nChq@9r+J=jKE#dk~Rssq{|qWhcsX)s^oErQS)}MKqA< zi+Wj`87Q`=!rs!q6kc5x#n3LWnrZp!LB|hTpe4IKi03fYL{_08HFz=j@co4){mh0G z^*!PJk1Bm}ZdzOl0yP?rxJS5@W*}X%&n$e{mS4fg{Pu}?-KzE}E{}ILbUz5soCIa+*wOlqT z<|bKcdON|_d>KX(n_w+mPpb&x@1>Wr+KM(Xvrkx0QgV9kZ1f#&ZHwUGHkpCU>Co^~ zi+lxh-2`&Uo1!_dN*cPmi8}}n*sIf)ysf;J(m#B=1tqg`k@ESjIqlD(fBtPzkFty- z6hF_D^!M6?7k;1i2g*BiM5;dTr%S-eIItZxeJQIoYdQpx{n4s5qBWQ3kvH2o-F2kz z(er+xfjGW4nU{sOZ)r$S*It6+zZ&CyVoUMJHkP?i$#%@3c%wNf(aQI86PC07X3 z<;eOU04{;*`(%R`Y(WRd8h5#F%(3X(#>2Rpv+TaqIhT{^PK)T3>J(pIL|#1?_+x!p zTnTr*&!T-ez}-*d4^{}N>uIamIa8{CA_%ivZ7!E+Fv^MjP*QriIM+=l_zSxee{DYd zbJn=w;n1wXmUnfG7Mw;V>ZFO!&qDyA|7ZOg5F<_o>wV{h*`B|**!e^_lwQJIHDtMh zM6^t!o>prh&Z%b0g_U^j3PdqN>m>Ff{-p(2?eNPZ)r=IMxp%m7J(|U8^3@?5w|;G# znkB8G@KzH5vDDK~crZ_stXn;3;oC1J7=XL^JHJZY5m`IsoFu^I)PJYJ%QVJcE0X)r zoH!HB=b#`PxeN`>*XzS9Dj{sz5-FMaS1QHYcpe&l9rV+sJwoKmr|#<>FSHiDk{h0_ z-ke(&YY7<@D1F+EfZ9^NyP8qc$2uWy7xB>ZQ`!W3GTh7iL(D%6S4P z_tx^9nj_7TO@*=V%hHCEA#*xM^wGudRF8*q1v%vLvhNApvTlbcl{ey(QKb6jYExPl zD+xRcBjsy?ug_u*83+7V#Jt;c zRZDmICIhhTGJ@!~vwwdH>mb#iwu&Gi$F6#X^@*dVCy<9C{;j^P)j8UVt}mwW){-x7 z^!b}~iP!Y+PCc?)t`?^#$-j!ZbW5@Y1c0hK^B_```hF&a!4X&i_|)m(<$K*%EK@e4 z8RYJD?UW>SO+7sVF0(L(cCiEXwaoiDttTYqrL~HI&zqfjiI0#kdUd54P&R+axF)bU zxT6XBqUjIO+2qsKjRq;t)Jv2>(}6u;1kA^2fdEQ>)T7Vw3XS+grw@K zI{IH^OMhO7F3>im)Em*2qG2u6=F3tLueybp6kYaCt}txTENCZd6bf9Avr+WvXS#ws z<|>LEp3MCq`Xubu734b0Q0pTyp3wTp+o0v)l?W~^_dx~qf@A%fY4T3V!s9l0%<=T* zMfo+my6#ZaflBK(*|+9st8)r{ydFY?Y>mfcT9%$koNvLC6oP@Ty^VRD1y&6Y#d^fpw5)KS_Bfu?%Q*A=ESVZga_mR+wx==}*FVZ0EB#%R z;`8hrYo(iH=#{9~5AC+LA@lwj@L|8+H;?ua503WOg$K-m>tq{Tckn4#CTzKkuqp9y z6nUZrv8b@kaH0p56{9Re)|zCq>?ym1o~$(YfI;zVcS&&ytz4$xFG+i`6P8%`$6Q-$ z8$6dja5(IBY@IB9a}VI`^HfnQM_|eHm9j&)J>Eb_NYUab_RkbO+K+nz75j3u_DJl5 zDZi#Us%w6E@an};pg@$gAnhxlfnSR0seA36KdFMOn^sNqZa-!e8Ry3Ra>+uu{2RRfzM7#h zn&@(rIdg%iIqI%?{bV9U3%@IcQ=WcYsJ9p4_zP`x5vD(GI8U#BD>wW0z3pW9Z~f?i0c6gs`oeY}Qz zaWVfBRH6&rZI-f8qZR1>iBX4YNqcb3me~c^EDE z=??!D&HISDKL9WxdfQ}Gecz#fHt07UAg*^R4Q3&ax{u^0k?Qt{#`Ni$=1k|vU#2i* z*6SdTJW{J27{5fW*kYQ(R3n}!xuRqzv>&DjpqE*4vgC?Us4qhATu9?V^z`N@=5Ocx~&CQ>@7y+N-@W~zvlU1 zf6gx>1xIXz8aSvhPH9P@T}7s=SDfxCUK9g|)gVU&7e;aK;|;g(2STEcx8q!F0fUnx zIKtG4+_hX;mKu#)bH#$OtDI^-UmekO1fBytmqs}o>-HG$39tuq^)GNuU6$0yRLDkH zIe?1U*YME&lJN@xZ11O(X0McH)164BnSk5K7=B&RZJemiah-Q1ZaW6a{D!L8z5vOn zPAtJ@SQR^sqd~nf9cN@okV`f#3$CT^b#fv^;5B+q)O{F89X#*5*zfY$VKZyl=KdR+ zhL@PZE0zJxXwvR3PK}36>wqR;Y|xug(`}$!*=_$kXyp|)-^YAoi}K0!>1qz8q7Y_5 z&wGkw$$WhSt9O=OJa%9;Gl4gwUducmJOp3q>~ za5<&-o9@GhMUmK5Zm(WT)BadT(SQw%LqiwIQdoX;l&7KNJCvlk3ZlUKbzguODByp-9pmI=pNP<gp&0Gm+mp(^PXH6lxeC+b&`XHJc-r!qg{5fb8A>iOB!m8etvtmG(4 zl_r)Y>weVj;_mKZt}J!T+bb|Y2mEgML@;-4{=JpD0AGdSAZs(mem$E5aTV?NzySUFzH&^yYq zFfrT7BD^Bq(iS~Tn!K|`f4eqmqg|Y7i5@PnHx!zCoMY!OZ<~`{F+HF)pYH3RG#`xs z&93LYor+y9__X+a+R?87tvqn_I~N%(G!#Dn6~6(Zi5~|*oyVP0Rj#bQ&J%!*>@Wse zG2R`%pEuSbd!#VR_`kK&_@NI3+AJA+A*oM&K859)(=lprk8rFW$*$kW|MEGE9X1`^ zaP-`6FCng1ysfkmaiqK;@Ub7xUT56G1NqREcEA~AKeM13;j?(9GHK)RQ!;HvBPqOz zncAa=zbpB$!c%e{asEAEBQFfb|Ha5}_QbL5$**CJAmMO|zm+0TYP&Gf+t77UgG4(>5jF(A&1!j+^nDOZ&_0Oyt25~;z z8MMtke2UlmLxM(_pG!eZ!^SvEc@=rO<}<>Or~Oa^ zg(j~-nH81HfHACah9@MasJibYsqW2)$DaZgrBB#}6TvH_I3WU_%TvIf|uPQf5C= zwVsPr=!SnudM1@aM4WcKCNGLxX(!Mm9LUvA(VzJWzxzkBiq;{_EPv<+6N@;MSW%I2 zQuB6r&87VuEQE(!_VB$nB~_^Y`Ssg{gBr7a=nS4bEq^?6&U`qTgN2)f!=t5^U7Fxe zPobccCr51(nK>6VR~>I}YR6BACay0+f@szSD-`!Y1DQyJ`i zgM<8%3iBy?aW`HGb91Y{xX-~4R@l;d3#VY;l67Hz?J!pDT2Lv=rRSJ8lvI)vLzWwR z=wGa@(c%NS!|$@3ZRv9$E_k4sIO=w?{J#4av{y>rfHJq|01G9M_+mzRM)M+W**$V4 z*sZ+HpY^iSRg^p5t5U~pAAT0$QDlHyaVM$qtfv(?YMM`Vc0Mn>5gS} zXR=aMfX~duW@3gpPrKvjexBe;0Hg$CBjdO8Gl6ZpRb2rt#Ml`g?;Ss5z5a>oMOul@ zLL?&S8*$>&9hzrkX_U;DFn+RN$_qRq3f;Dyf;r`*;*WPt;k|>6&tO4yo|{))jUNv< zk8Trb9g4(X)Bq@9_hizZ`$ti${~vpA85ULBwhfaqLkQAHOLqu@bclpVDhx`8f=EgX zNHc&mND9&-B1nmd(nATTlmgNNQqtYh|oX2^@ ze(bw$%T+G7Ywj5!RR2_4YNh!ZkZ*csOn}WjzaRa@WS;06ps^ZSc}=h6g6bo+VO#Ys zU$z|kk!b#No}nuKEY=PtENE%YA z&CCsMGAe3}zqpEJEgaexqArGW;ev`+CxPnYhpr}-8wI)#S&~SdH)J~Nr^n4Gh4Z!) zY>n>tu^7J-YZUBy%JNuQEu*H}RonR{oz5LUVeDUk@w#aI8gV2cJEwRDZtjvbzqC&A z@9+*eC6Nn$i5&h02r1zn#|OEY!nAz1_CIVMYg*H`%!CKduVI>NLM+TJQ3|(VB~~5&x{RYK3PjwCn3QgCK1Z0$b;o;N=5RAQ)MHT9 zAz1Udg(H3tW_drdj5q|__u^oOfc~cua4PHKz%;7|YwPo6?D96A-X5WochMr}go3#qblDGd5G+XwF6Bma(r7v;w;*v&B4a2;OJmO{r>H&L@w0xsIj#j zzWT7OCop==Z)^ePFL#AG{>U0s$l#)iV6G7nCsWlpO;?T|W+KC$1d<&h30~0rE{vCx z?kjUn{VzD-+jg*IncJhmwBz0c0BADMe?mVLBvqOC5~%YZ20nUollhd(`Z#q7yiyq zl|L)>d30~atO~4WV&b!uF1?=SQ6^`}W#A8;(P+=tZu_$DjgnEtTd#fpX#>})04Pt$ zXAEpVy=lqaGrpcSENFP4#zA=~&dzyI4E4d-%O9Pzpq^=tDaeP6y?l(ZuuCGX>^ zOl)oejRQ+)j8}%D+9^<>eAQlFH!~4+{6&Gxb?yoCZ2XVqsrL$(42kR7jOm3Ej(q;G zud0BQBljM;oo=OPY^OL|qsx2$aUZAdWx!B-1*J8y zG6iZsVEWeep5wX*nRQ%ycG6H7LXrJeNd?grw`^8+ygTEC8;qVyfL}N7mhD{+KiQG_ zm!0SXXMxVZ54bpUG8W5`cafQ8kLMRzcxDnhgJwt=EsTOV29;p)0$TIsD4Vh9saMy_ zEu|x`<;H#C61MX{>G(bU^=kK0+K@%OZdZ1eitP*YnH;?hpM9;drrXzc5j;%&gA?AUe3;KGGe@5aPTj);$Z(#H1%JT=L~Y$o#Kk<)%ngC|Z|D|fCW_4F_EFU^v5k|m9zv^MuOYW-mo zWPOPo8|VN$zV8+5#%#VGzqZrrqOTFCkab>0Ct4=_N6|QUx~ICl}D+XQ7qGFNF;J6Su<7o z7B8SBZ60y7=^}NLe+qQANUK&0&epa1WgT<7|1!L$`WuNFriJZ1i0kb~uGGb^5a1JAWk2d=fgRp9Dahh}eRCx9X1CLg6{U=7KtOMGEcmp$+VDVC zCN?7C`-5-L#-Mk27}4D~0g}#XybHHqO0FloxG}x|!R8|3N)N0LV=kUq?4E9d;I!%3 zNC=l1(DKz4)-f%1EqmScC_pPgQKt^x1uq`#jkAhZn(M@hP_#GODB3+(_B#T!1{4B? zWj(5NA!zJCQgrX=TkZx@e(|+6weUdVb#<>D1pDs+#)Z^JSqPU&^2h=*|KGtQLKFme zQ!=L~YKZ%mcUzdLrD5!EJb%!gbaK+z%mndllVCI92(RFCSpPCFT{`mk)%IjE17nH| zqYYTsM0!55XxcB+TxFVT#(AA|!Fj*VD*ns1mtZCC%h-zO-H&&d4gHSo7M|9*C$CXx zTIyLkcj2Y%B=2O+wXu^#=HDCk|3hesTe)9JP%H6+LjROp;mwVjR_U(y=EaTDT~7_W zq`NogYAGK?JT!Y*oFG5WA@dN=R)6vOlTy^ryy)EM9GSwpg6N{xEZ4!L)@P-Q>!`lZ zroWY$+x9}L$o=X*xFbJdwo&+OL65%|g}A@Bzu>^%&AIIl>rAk5=g852-z6+Cr|N6{ zSY<^0SUI&frJQt|J6fLhNzaANqepc9V#5!$yShuqpSHU)cEizfy{5vB59(VGc%HhBAIn!FvtISKGb6lLAPivY+F;TD|W58jrn49S`)cq!yU? zi|`IKpx>A7du8IWvtYy36mZDn0{;3j`zM|hC!Rr(Vrs+x_}hQ`m;w%NSO8&M;3j_^ z#ozw_Z=Zp#dU8tv|Jhx||8ap=-IDSZkJ}9$3xt?R(e_|uqWN)h4lY_zxjV%x90@U7_aU)E1mnf6yJSY@ApB zM_-Ot;Sb&{=KPyh%41WpET2a4=bZPX3OMfMI@o$#!la;EdESZ~!{1=poj$aNbNv0; z{=0pE6?&5Z-n>+xSM_-pQ@~l)1}kzX&vuLZ?-urNYpjp~7WfDJYxDUxwe`p0RTw^{ zGg3O=-2SkG1=ccW5->F%bhy9*yW?y+pMTTgEU+Rw{x_3# z&VTz-V1Wz&ugU$dMauraCim|<{QpanQ<#8hz7WlK;_^;D+q;!01+(E9^#sn4Sh<5Y z95W*NXLfGO7}$}(^-=K2lVoT+1j=2?b~ssUCOvd3;rgisb~Q;c6QHefo(ks*1?u$=xoYJzbGWBE`Dreb=y26vfuY}Tzv~tX5a93uq9s2JD3mR4=RyK_R`=^c6=B!A znBdGMDQv<4Z^+eh5;LIf-3*9aDE1)1y5?$^X$_%k-dkqPK&*i|*5pxPe)9$T$Fzcg zxU7c;AGv@(`j=1gbn6Vr!J$x7n7@y>s-UHg05I`Ys z^umo)ug(cL4Wc}tV#WHnZhIGDVv-5s46k=S%94z|NS55eZtpW0qE!V0V$e$4# zw)qjc3& z2w0=#GBADh=U6vBP8#y~mC23$+VYH5zaESXg?3*Xd29jR4G}~lxHlstL*`M%r#%OFTPYY>KeH={&Y2DI!0RVrOyV>Sj=|Vne}YR2Ld85v8c=L zstY0O#QP_^o);fxdObkSBpIT?zcRhf@;h*DXY>rkG)oYHbv0k`a^wdnZJ+n|Sru%g zCj)SCOHNXZHzL=zOZ{bo_75l8Q9!d)bm{XVDf*4>$1qmqP?#oUQDTadz|e?*&gMhp zR&PTXSfj$XEK3o5CB#57#(C&Lx&s<8;$7M|$E+2ZnJ@zLDs$fIm5)vk8R@ah{ew&Z zVLLrpV;)^ddtpK5D>$}{+ZD*`CS4UU?#W`lnMV@IKXHn`qHhhL$^@GWvYbwYy~hGmGx=xg`6Hw zJV68IGs?PM!G@yw$?MJ=H)B7jqm2#UBET*tz9_Sn-G~QNXUE@qt1IOb zUl!wD`Z!T<(!Tx_m<|yj_IOxniQM`1ux6)s7IcM5(LlX?;)8&%;xE@R_d&3>XJ;)q z?}eAVfOVlEJ!`=k0wWfN5xas6OGryj+pdIL)$#L!r^)hl2QQIdp)}!p_kjTbxJVR} ztQ7y}`70)!q^`_TZni^!;%zGA1Z)sDlQqC#7`YJvm>D@ir%+lKc?1Y2V{WP;V_%`d zSf&M$pOt|(`&V0^W@3NQ&cC_1<<+8^ zKxwRNz9XYcZ)gr7bLH)xHfdahtrBwfMJ)c4>PYH-Kz|nfCbfF8M7mjn?;Wk@Dd6`D zFS*4}>;)h-9(L=_>a93wJwk|kYvC#vf}asEA%%gwG~DD@7O>)8#-zZnK=7I&i4}Gk zUgO?`KNm*#AT?(Z(Exe2c_$qEl1~qSx>_v0H8=0Ty+y0V_Z6;DbXPg~YuC^g$wm(r zs_0`$@ti%!+zrj6;}QjHmNuM$Om!IWnt4UR+K0CKF27D!JSEiAp;icR;!-eS_1rPj z2QO^AUw#;}jJ&A=OAw*t2qy5iWK)qG%8QYbD%q_BVvZ{I@0sXOWRIJ>-c;W{TYDH; zXq?Cfpj;baYqq}r)%z)r?D3ZV`r_;Ki`wa*;_R2q zvmybNXvj?RVHy+L*q1%X(SsAnoK_oAMDMugAi4SVy~b5_2dU6~dWTBgK@skn1quT| zds*V(3XF^?8DSaj48+GgK1l#7yHiva zz>-<~c%v&~@FW&p4P_|`@|P6g(m<%XwJ6E!(eGBZi03}^6YH7H(x|;8vxB~rh?--8 zv*1#IrEESoG8Bk`)QUZnN!0aY8SPABMi~I=Mqe~Im?$n@|81^pp49gQ@*{x*6y{^E ztzu=XMnY^qwnusKlgZ++bph4WQhWJKhR5j-Ge243MF2Zt>7=JNvW^$FY>BY|Y-6iZ z144iKe}BBSo*F>im+K?hk=#{MzcV~R_~fgIYW2Y%voMS12hsKc=GGc8ei_AUKn$az zf7Bqbk!#k3>SAiLg#76d(fUr;l;vv&Zh;89-(TvQXVaaS1Quu!KFjuIkzq?!BcxM1 zkdjUBTgzaQYtKfqkW(Fd`=B1z5{KCQF71@EeKjd<=;g%eiB@?KP3epi6f9)i2v`dM z-qs30t?f&h35J#b@^PB7IH;;&|5M!Dsp$aRi}MC##7}4oEHAw@UaeuABt45WQhD(_ zCVXSdzKWWWKvg^>CWNLLR0Jqyv;0p=D#}Q3zXG{*!J9d>qSnrdistIIpi0!{JZ3_0 z_}2zL2*GO04r6dtV_BkdoqhzL?zb=5zkLVd$^B&kXf|WJ*e9`rt~_lfkx%9^>}vMS zBGbX%fJZV-Ja@GMe2XjPrTjZCQrrT`nSR~Ut1|10hV>QJ!<6#nZ7k9ByIFgmz(#2$ zGelrSux*yf_=_)*LELv18SVq&?fcr0wG>=xREiFvU#Nr^RJ1eIgn?M$Q@>;L2IT8# zh4BD8?`UuB zq9gwYk<0I@=KFJ$AezmM_q!$&OwNs$I0fgWI)2fW% zjSEzDO`Y$`kf+ zLXKCE+~@R|6a`MT`n9coZB^~Kdz%}QkfrOVHv)BnOC}o-mv0zQ&Ep^(ey&%o_p39p z&Sr!+W7XqqKX7veNQ^T*Jra%)0v8bq1E=wPpGvRGJAdE?a3kVuQjR4P`L5^6u#N#{ z=H5PJ(p>{M2z?)Xj7<74XfyITx~8$=^voHD+jnf%-|})w-SHy$HbVEbdy?k zPSXW_wFD}PEAgv9aE4M?&3k{we`m;Wz*IZ)$Yo?=+FSy%#5jd-czu@(qgpq&nh2O% zvL;S;Jg52ykc$?y{(vO%#{LF~E#jG(5YNFz3nj1?$WuKPFJa4I))|kn*D1weFXaeX zg*e{NA{#zR+-R9G&xzypIS{iYIyufC0;fz5xR3n--!Fpop88c04o%__uSGpR5 z#BK~F04UuFI~3XCjV`8uh|2k7f36+B_R%LfLh}J7jqncoa#7%EcPcxy&sJ|97n`~h z;$y|3C)H@?qxzqcD|E?SLDU_Swyr=P;XIRG%J6 z@#-DTnAXS}awqR_pjZwPJtZ)XIaAs4*?Y};SGX7h!l2i0-0!=zIvI52)SCc$)`yZH zh-*GQ>ZW5Ah|{`gwuh!cKa|^i5%4n;%DWT_$j+j95b66$F1$*3WZ>uQv^)C52?1!J zKRYH!ZXp=8)5Hqx)6LGRK-qFQ+(JOmVz_KF$c#9Q(F36}L-5H`)~Dr?>Q*(@VrVv& z5lEdhcAo?}AW0uPp6w{%K#r87A(kgU-bkZk0sXPC^_RF388aYHv<8man>lnAx@sUg zw*x89h~-eCF*Z6iZTY1cXIC~!H^q1WP{4|>xw$ubegEaMOAiE)PEhOwF!6+0eDJCz%Ps|GVw6gqRqJxn;`iLYZM=b zkY2qC6Wz0E44LZ;-ZQmw5N)-t1+(3ZdPaD$ILN7HITi!f)XIG6Hlq1AHoCk^sKI#D ze=?9j1-A=46lF>M!5{`olY!8$0|KyfdK*WPJ%e;M5e^@IHUmC!`aB);o*U1S&5ov? zmyI~e!(cO-f4RbYH~`6|Jp=*}G(e?Y9ytL-n8JW?y|hKA5>>DCsqTl~tsQQZ)jE^f z)CDS*8RO4YOvuSVAOuB_nY4>f6S+tkeOX#-j)j2? z$`dr(f#F%_8j#^d(^Jh5I$H zwuTP?Mr-Pw@u$|3Gl}}mKz_Uc=M}lmN2oOWMq#pvK;Cp|r-Lht_$VoV;dOe61^zP! zB%RSmb?|rFmsmt|OfD_)BA4-5_4TgYYXSbahs}+O)fQ0Hy>SL1Xq$WtvkcOiI4^`o z-AHNH8LVC?h! z8s~*{f?k|dcz^?vOIDzZ7aXpl*ts_*Tbrs=<3fl8Ds{G!OWd?Unt6}*>TJ2K!dAYJ z0JRNqtCdjgTCVfIV)4*>tXou}YCJnKOem}N7!r`HnSETl-|BPpR}}k=L&1%BV4G!> zl_=YaA+7X9TFERzCZ7BB2b5*TzT=m9-^p9FH8dVUQY;=+^9XhXs`A)y&2&7u-A^k- zSNkq*KKv{8*x@p#AOEkKYKA&ili`cCqQ0@OAfR(sElmY`?XyjL8mpaeyrc9H>t7Kx zhXO4cV#h!E`GmE7YRvA#_voBM_alyTi?;!I2hkvA@l#$7`OA-8##TD{1`Nt1Qo=xb z!1phEH^qD0JhJG8xD4&KZL(BATsU~pFb)Pkb|rnmpM)4tR(h7Kk#4wmMw)%qu9OYv(`j_iI$jv0diu$R8bp^s`k=< zy7bvs`OYb9+mj7#h7j%UlLcV`l)M<;fd3+2XKZI zDtE_Tc$83ZPPJX(K82d-8asv4BKjIal8S`{XUpxpuN#0j91B(5pK>Ov{o`vpTiXjz zTZ1gS;D6KT@q-#Y6IaV`ocE%z;bLl_02+)X`rWUbA&{Q3?Fxs7v=9!H|^y zU?bV4I7C8g`_4y-Y>Tq*Fw?5BOpJT?9Y4)XnKjd;1)jakExtgP(wNA>`?gIX2iu>I zeMMvy4$`X!Ay@bxw!?q@HhTtIGlp`Sf7mtu`d9;a0}D=5rclQ8&le0#hMF?2EvEmx z4WWMyJmCaO+YtU#_I&fW2UV)OES#&v{Phn7Ix*K?15v_~(BN zRBm|x&lWDU>WI)Zdl~NIUxW#ihmz(%Ee>ITm~Wf_y0SE;PwTcbZDR{s&OLplJa0(vo982cf?=+K34j3NQ=4LjZ=TUY0T2F{1Sf5HY@IAe?Y6~DmO~(h zLT;K)iM9tWCEoRdrb6bSRY&fQ0 znQJg5Q1!pPem91|{jhHgnfsV)jD{;WiE1}*=i&GtXFZ5Xky%*kIy~(&)dl4ZXFM%q z`&MC}^^gmrzFx|Iz45?$GNe`CFAEMBjv zixDu~uQa5i=l!<1ss)#**K62dYv5*L_4l!FTk8&2-uMQM*8cNet7OEs{`I9Y-eFf9 zqZ9C$k?v{1YwTrgbnvI+4;x{d`9@(Vd^vH+uj13$!kay@CSKziVjQ(n78=O)x(-a? z`q~}23_?uRV&6W z!eU+e`G$OkfE2lZJrrehQndAD5o-jLS#=Q3$xZ92VWy{V!mj+T|M(F0{_C|SXT){M zhX1zI|8883ceoUW_^gLof4nhfFgh$-xZrLqSzLeEKnbt<8|~zH-Er$x+D>^J$(KvKe`oobyiAvU%{BfUYc3NOLgBkni`@``a|= zwSB4f(%dH+!`nk|{pqAFG$dvSRNv34<`t$AP%T6&UKLM!H+Rl@2H;)35>PB<=oe?C z`+6*eh;p-W9gEJV;8ok`mEko(GrxwXIX$jP0?6^>H{<^C1YWY@CwV2oSxiz+`Wq{q zJ%5#6|KSJ>l!Dh@wbOtx`{t(F<{LB69r;`xFlsDx+Y8vlqT6laBBgsxoDub3YdIKj%Q54^hxHFiEu8b@l!^)><1Oy7!h#dnN-{3tKeF%iHUm{{%Z~ zIG`~=Kj5qIE9sw}Mo0PTg{gy+v)5C^3Q-T(&N15l%YnJYpSimnQK}-Pxy1GHwfB8j zpbJS=N>>{8hi|y6fjlnIc(91 zs9^Nte)sm%p2aaLnz7x1ouX8N!O44^=dFC>5B6;1+LtF_&79NC=mtzg0;}x5-uE>O za(3)J%tJ=I);gZ0LjUvf4Lc9oY42|AQbsRC6q1=sNnU0bFo%8B! zt&xw0V&Ekc`kv#LG5gy`HTvk~(xi#;ln0FD)O$ZBg$KbJeLXc{IUZBjM;B4N#xwXJ z6k4kxQP=h|7#(z#<}ROI>0gE6f7;K5stTX>xRwYiaZn?_En>YLG`J0eeQB@=iEKV*EHVY%r-unCJ>&aVi}#ar%+MFqFi#Y4cC&xtXhjhWWkZ zNNs&^jng)*RB}^4d6WyYCVZMJWUWb+dG&>b8tnZ=5{nhO3nAU#DA7JwKM$x{&K8{G zrriVs?Q{j@Zu2TgeT=y0dY=6S;5}j$u1*e?xp|(6fS2J$4x-D9txAAR{HKj^W}@Pk zK+TVWlk{I}_#f9zEjs}Q@{LyoHbziI@83_@|7EIg!a=Z_ChQe={!KG(fJEZIN-+O? zu{ed>5ReVk5q$0wkk7M&cw1`0&dA`LZwB_$qbnfG;nZY0cVomUaDf%+Q`hdQIOkXa zPpm@$7FgV3gXR32f@%|CoR;^!d3AEAFMo`2K-f0>-}NMRYI4u@QCrD+B#Ty&h; znWI`N@A=PPBryf^waF$60O}wm;xAJG&2x^+Uka=A2>|}xMZ+PiYUK?;GjNRpXbJ{& zvYp0Mz8amo)dQYawO7pWh0FYP>cQ zkK4|^oNyWJXxqs@T4L*iO~bV^$FDW<&=w9XRBH6Id27C#d#u^$J>K0|XWT$mX1YuC zKu9zRhG-}tM+%LI;xPN|S&ykne#JJ?8XH(g5qgL}Mt1|;k>^;FNUgKg#4Yo&?tREo;ndU~ls zte+5jajSCURnY|3_GB}ue6gQS*ec^NX6EDGzggQsbR!B*fo48g3p)d^Gys`+3t*w7 z6MJnEXpa#GnhT@@^~DoRD4It+*m$hzk1Ny>py7!&eY$+t`yJHbGzOpn4A4L$f=Gdy zYd62s18~d>Vb|YZgu!S*a_00+xTXNkYW<<(9uS0OVgkq`s5u)30Y&&LzFe^Y%}ind zOSJxJ>GB;&q*6|VO~=aD|0!QdZ2ZCE46G&;AWNiWKs!1}xO{Yx57 z4gfrc$gO5!(DbPQfEvmZ<*CNTY};gd&BFPL%ak5V%WuBuc9X8k@Rw9_nk%sS^|uox zupx{ftg9Yq-u?uui zuVHV|?DR6gVKxLgkD){OD>wRv?h! z73G!hbWA!ZYo)$_!-mfNAp}-*s@pcWlc-|`Y_%P*(CdhkdTL}hz>a{7atzZ`*v3VmaEmme8~|_6L2@?L z3dcRk!}m)Zt87HeiJ_VAhjtGMwQNRMkE4D=!_J4&5JcZ}{&AV&-h#IO@XROg4vv%-5Bd-|A$fnLB9@b66jBG464EFI znz>eH4ZvlgfSRtrKuS0TS14$8i(XbR_E~SW0L}0P7{WWit;MP$?r&SI@du~E9wqre zqxyc+Dm1C+cnZe&Y2^1M9(+v=P{8K%F2n;g4O_TphKc{wU!8AtZrAftd{qaklT`DDH#6lVYFyUh= zDW>H4Mlgxl@gKuxsCpVQ>^0Ux^a#+C6B97H>3nqg3J{{yvilFf9&?Pj8661*){`rI zsR6sBt^af*rQt@av5_fEhRl)dT7D`*A6o@>sGG>H!kROUps@yazwAMnBUV<%#eOO0 zz9zXXKK6hL!np~*W_ZAjL`IJ6M0a8W^oc94`;m`BNM&MJC@|V>=Rbu79wS+P*-K!u zvOjmXACgW6AIeq8F;S)cmd3^j7fWv}09w-!|AT~g0OjU`QN_Aj+s`M2>h~-khlP>Q z4=g*kF&4aZ)%fUeRJOblXx;dD(kt(%4j|TW+Qe-Z_{{b-#0I>8PH|okKVz`o3)Gx$ zCTMB@aRwlrP|#x*=N;bgEoKYS?Y>Fxkm$7XaTV0kNj}j0J=&K_Y6Jl9+yG+MdqxLn zntHM`6bVr7tV@rJR>{4@YbDz*m&ke)px55x&XCDTz~HPvIc%Yx5>`7e z^+kw0l@Jf+6!?&wRSY!bR||D;gm?mn;VgS99f5NMua#=Jq~t0 zi&7ouJGYPl08!py0VJFw#})R=k=OlKo@8}NeAxCJ#Ijp#x5E7Wez6l zn&vFk@7GW5LUQmf0{GO1To)z6w{IHUclc0! zO>MQ1⁢)=*==ZkeoK%p$wR$Y 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" - }, - "author": "OpenTelemetry Authors", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/open-telemetry/opentelemetry-js/issues" - }, - "dependencies": { - "@opentelemetry/api": "^1.0.2", - "@opentelemetry/exporter-jaeger": "^1.0.1", - "@opentelemetry/exporter-zipkin": "^1.0.1", - "@opentelemetry/instrumentation": "^0.27.0", - "@opentelemetry/instrumentation-grpc": "^0.27.0", - "@opentelemetry/resources": "^1.0.1", - "@opentelemetry/semantic-conventions": "^1.0.1", - "@opentelemetry/sdk-trace-base": "^1.0.1", - "@opentelemetry/sdk-trace-node": "^1.0.1", - "google-protobuf": "^3.9.2", - "grpc": "^1.23.3", - "node-pre-gyp": "0.14.0" - }, - "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/grpc", - "devDependencies": { - "cross-env": "^6.0.0" - } -} diff --git a/examples/grpc/server.js b/examples/grpc/server.js deleted file mode 100644 index 6cb34dee5e..0000000000 --- a/examples/grpc/server.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -const api = require('@opentelemetry/api'); -const tracer = require('./tracer')(('example-grpc-server')); -const grpc = require('grpc'); - -const messages = require('./helloworld_pb'); -const services = require('./helloworld_grpc_pb'); - -const PORT = 50051; - -/** Starts a gRPC server that receives requests on sample server port. */ -function startServer() { - // Creates a server - const server = new grpc.Server(); - server.addService(services.GreeterService, { sayHello }); - server.bind(`0.0.0.0:${PORT}`, grpc.ServerCredentials.createInsecure()); - console.log(`binding server on 0.0.0.0:${PORT}`); - server.start(); -} - -function sayHello(call, callback) { - const currentSpan = api.trace.getSpan(api.context.active()); - // display traceid in the terminal - console.log(`traceid: ${currentSpan.spanContext().traceId}`); - const span = tracer.startSpan('server.js:sayHello()', { - parent: currentSpan, - kind: 1, // server - attributes: { key: 'value' }, - }); - span.addEvent(`invoking sayHello() to ${call.request.getName()}`); - const reply = new messages.HelloReply(); - reply.setMessage(`Hello ${call.request.getName()}`); - callback(null, reply); - span.end(); -} - -startServer(); diff --git a/examples/grpc/tracer.js b/examples/grpc/tracer.js deleted file mode 100644 index 3dd3adddc7..0000000000 --- a/examples/grpc/tracer.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; - -const opentelemetry = require('@opentelemetry/api'); -const { registerInstrumentations } = require('@opentelemetry/instrumentation'); -const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node'); -const { Resource } = require('@opentelemetry/resources'); -const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions'); -const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base'); -const { JaegerExporter } = require('@opentelemetry/exporter-jaeger'); -const { ZipkinExporter } = require('@opentelemetry/exporter-zipkin'); -const { GrpcInstrumentation } = require('@opentelemetry/instrumentation-grpc'); - -const EXPORTER = process.env.EXPORTER || ''; - -module.exports = (serviceName) => { - const provider = new NodeTracerProvider({ - resource: new Resource({ - [SemanticResourceAttributes.SERVICE_NAME]: serviceName, - }), - }); - - let exporter; - if (EXPORTER.toLowerCase().startsWith('z')) { - exporter = new ZipkinExporter(); - } else { - exporter = new JaegerExporter(); - } - - provider.addSpanProcessor(new SimpleSpanProcessor(exporter)); - - // Initialize the OpenTelemetry APIs to use the NodeTracerProvider bindings - provider.register(); - - registerInstrumentations({ - instrumentations: [ - new GrpcInstrumentation(), - ], - }); - - return opentelemetry.trace.getTracer('grpc-example'); -}; diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index ff64e920fd..4d7da0576e 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -6,6 +6,8 @@ All notable changes to experimental packages in this project will be documented ### :boom: Breaking Change +* chore(instrumentation-grpc): Drop support for package `grpc`. [#3807](https://github.com/open-telemetry/opentelemetry-js/pull/3807) @llc1123 + ### :rocket: (Enhancement) ### :bug: (Bug Fix) diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/README.md b/experimental/packages/opentelemetry-instrumentation-grpc/README.md index 2aa6038c03..8916054eb4 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/README.md +++ b/experimental/packages/opentelemetry-instrumentation-grpc/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides automatic instrumentation for [`grpc`](https://grpc.github.io/grpc/node/) and [`@grpc/grpc-js`](https://grpc.io/blog/grpc-js-1.0/). Currently, version [`1.x`](https://www.npmjs.com/package/grpc?activeTab=versions) of `grpc` and version [`1.x`](https://www.npmjs.com/package/@grpc/grpc-js?activeTab=versions) of `@grpc/grpc-js` is supported. +This module provides automatic instrumentation for [`@grpc/grpc-js`](https://grpc.io/blog/grpc-js-1.0/). Currently, version [`1.x`](https://www.npmjs.com/package/@grpc/grpc-js?activeTab=versions) of `@grpc/grpc-js` is supported. For automatic instrumentation see the [@opentelemetry/sdk-trace-node](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node) package. @@ -18,7 +18,7 @@ npm install --save @opentelemetry/instrumentation-grpc ## Usage -OpenTelemetry gRPC Instrumentation allows the user to automatically collect trace data and export them to the backend of choice, to give observability to distributed systems when working with [gRPC](https://www.npmjs.com/package/grpc) or ([grpc-js](https://www.npmjs.com/package/@grpc/grpc-js)). +OpenTelemetry gRPC Instrumentation allows the user to automatically collect trace data and export them to the backend of choice, to give observability to distributed systems when working with ([grpc-js](https://www.npmjs.com/package/@grpc/grpc-js)). To load a specific instrumentation (**gRPC** in this case), specify it in the Node Tracer's configuration. @@ -38,15 +38,15 @@ registerInstrumentations({ ``` -See [examples/grpc](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/grpc) or [examples/grpc-js](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/grpc-js) for examples. +See [examples/grpc-js](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/grpc-js) for examples. ### gRPC Instrumentation Options gRPC instrumentation accepts the following configuration: -| Options | Type | Description | -|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [`ignoreGrpcMethods`](https://github.com/open-telemetry/opentelemetry-js/blob/main/experimental/packages/opentelemetry-instrumentation-grpc/src/types.ts#L25) | `IgnoreMatcher[]` | gRPC instrumentation will not trace any methods that match anything in this list. You may pass a string (case-insensitive match), a `RegExp` object, or a filter function. | +| Options | Type | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [`ignoreGrpcMethods`](https://github.com/open-telemetry/opentelemetry-js/blob/main/experimental/packages/opentelemetry-instrumentation-grpc/src/types.ts#L25) | `IgnoreMatcher[]` | gRPC instrumentation will not trace any methods that match anything in this list. You may pass a string (case-insensitive match), a `RegExp` object, or a filter function. | | [`metadataToSpanAttributes`](https://github.com/open-telemetry/opentelemetry-js/blob/main/experimental/packages/opentelemetry-instrumentation-grpc/src/types.ts#L27) | `object` | List of case insensitive metadata to convert to span attributes. Client and server (outgoing requests, incoming responses) metadata attributes will be converted to span attributes in the form of `rpc.{request\response}.metadata.metadata_key`, e.g. `rpc.response.metadata.date` | ## Useful links diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 7bbfdb8b1d..3bba4ddee3 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -18,8 +18,7 @@ "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", - "postinstall": "node -e \"console.log(\\\"\\x1b[95m%s\\x1b[0m\\\", \\\"@opentelemetry/instrumentation-grpc - warning: The package 'grpc' (https://www.npmjs.com/package/grpc) is deprecated. It will no longer be instrumented in the next release of '@opentelemetry/instrumentation-grpc'. Please migrate to '@grpc/grpc-js' (https://www.npmjs.com/package/@grpc/grpc-js) to continue receiving telemetry.\\\");\"" + "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "keywords": [ "opentelemetry", @@ -59,7 +58,6 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "grpc": "1.24.11", "mocha": "10.2.0", "node-pre-gyp": "0.17.0", "nyc": "15.1.0", 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 8c98a10936..1ffaab39bb 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/clientUtils.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/clientUtils.ts @@ -87,7 +87,7 @@ export function makeGrpcClientRemoteCall( ) { const wrappedFn: SendUnaryDataCallback = ( err: grpcJs.ServiceError | null, - res: any + res?: ResponseType ) => { if (err) { if (err.code) { @@ -226,6 +226,6 @@ export function getMetadata( */ export function setSpanContext(metadata: grpcJs.Metadata): void { propagation.inject(context.active(), metadata, { - set: (metadata, k, v) => metadata.set(k, v as grpcJs.MetadataValue), + set: (meta, k, v) => meta.set(k, v), }); } 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 6608521bd6..eaae47c8ef 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts @@ -80,7 +80,7 @@ export class GrpcJsInstrumentation extends InstrumentationBase { this._wrap( moduleExports.Server.prototype, 'register', - this._patchServer() as any + this._patchServer() ); // Patch Client methods if (isWrapped(moduleExports.makeGenericClientConstructor)) { diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/clientUtils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/clientUtils.ts deleted file mode 100644 index af56330a85..0000000000 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/clientUtils.ts +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import type * as grpcTypes from 'grpc'; -import type * as events from 'events'; -import { SendUnaryDataCallback, GrpcClientFunc } from './types'; -import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; -import { context, Span, SpanStatusCode, propagation } from '@opentelemetry/api'; -import { - _grpcStatusCodeToSpanStatus, - _grpcStatusCodeToOpenTelemetryStatusCode, - findIndex, -} from '../utils'; -import { AttributeNames } from '../enums/AttributeNames'; -import { metadataCaptureType } from '../internal-types'; -import { GRPC_STATUS_CODE_OK } from '../status-code'; - -/** - * This method handles the client remote call - */ -export const makeGrpcClientRemoteCall = function ( - metadataCapture: metadataCaptureType, - original: GrpcClientFunc, - args: any[], - metadata: grpcTypes.Metadata, - self: grpcTypes.Client -) { - /** - * 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, - _metadata: grpcTypes.Metadata - ) { - const wrappedFn = (err: grpcTypes.ServiceError, res: any) => { - 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 (!span) { - return original.apply(self, args); - } - - // if unary or clientStream - if (!original.responseStream) { - const callbackFuncIndex = findIndex(args, arg => { - return typeof arg === 'function'; - }); - if (callbackFuncIndex !== -1) { - args[callbackFuncIndex] = patchedCallback( - span, - args[callbackFuncIndex], - metadata - ); - } - } - - span.addEvent('sent'); - - setSpanContext(metadata); - const call = original.apply(self, args); - - (call as unknown as events.EventEmitter).on( - 'metadata', - responseMetadata => { - metadataCapture.client.captureResponseMetadata(span, responseMetadata); - } - ); - - // 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 as unknown as events.EventEmitter).on( - 'error', - (err: grpcTypes.ServiceError) => { - span.setStatus({ - code: _grpcStatusCodeToOpenTelemetryStatusCode(err.code), - message: err.message, - }); - span.setAttributes({ - [AttributeNames.GRPC_ERROR_NAME]: err.name, - [AttributeNames.GRPC_ERROR_MESSAGE]: err.message, - }); - if (err.code != null) { - span.setAttribute( - SemanticAttributes.RPC_GRPC_STATUS_CODE, - err.code - ); - } - endSpan(); - } - ); - - (call as unknown as events.EventEmitter).on( - 'status', - (status: grpcTypes.StatusObject) => { - span.setStatus({ code: SpanStatusCode.UNSET }); - span.setAttribute( - SemanticAttributes.RPC_GRPC_STATUS_CODE, - status.code - ); - endSpan(); - } - ); - } - return call; - }; -}; - -export const getMetadata = function ( - grpcClient: typeof grpcTypes, - original: GrpcClientFunc, - args: any[] -): grpcTypes.Metadata { - let metadata: grpcTypes.Metadata; - - // 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 = findIndex(args, (arg: any) => { - return ( - arg && - typeof arg === 'object' && - arg._internal_repr && - typeof arg.getMap === 'function' - ); - }); - if (metadataIndex === -1) { - metadata = new grpcClient.Metadata(); - if (!original.requestStream) { - // unary or server stream - if (args.length === 0) { - // No argument (for the gRPC call) was provided, so we will have to - // provide one, since metadata cannot be the first argument. - // The internal representation of argument defaults to undefined - // in its non-presence. - // Note that we can't pass null instead of undefined because the - // serializer within gRPC doesn't accept it. - args.push(undefined); - } - metadataIndex = 1; - } else { - // client stream or bidi - metadataIndex = 0; - } - args.splice(metadataIndex, 0, metadata); - } else { - metadata = args[metadataIndex]; - } - return metadata; -}; - -const setSpanContext = function (metadata: grpcTypes.Metadata): void { - propagation.inject(context.active(), metadata, { - set: (metadata, k, v) => metadata.set(k, v as grpcTypes.MetadataValue), - }); -}; diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/index.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/index.ts deleted file mode 100644 index fbeac0395e..0000000000 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/index.ts +++ /dev/null @@ -1,403 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import type * as grpcTypes from 'grpc'; -import { - InstrumentationNodeModuleDefinition, - InstrumentationNodeModuleFile, - InstrumentationBase, - isWrapped, -} from '@opentelemetry/instrumentation'; -import { - GrpcInternalClientTypes, - ServerCallWithMeta, - SendUnaryDataCallback, - GrpcClientFunc, -} from './types'; -import { GrpcInstrumentationConfig } from '../types'; -import { metadataCaptureType } from '../internal-types'; -import { - context, - propagation, - SpanOptions, - SpanKind, - trace, -} from '@opentelemetry/api'; -import { - clientStreamAndUnaryHandler, - shouldNotTraceServerCall, - serverStreamAndBidiHandler, -} from './serverUtils'; -import { makeGrpcClientRemoteCall, getMetadata } from './clientUtils'; -import { - _extractMethodAndService, - _methodIsIgnored, - metadataCapture, - URI_REGEX, -} from '../utils'; -import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; -import { AttributeValues } from '../enums/AttributeValues'; - -/** - * Holding reference to grpc module here to access constant of grpc modules - * instead of just requiring it avoid directly depending on grpc itself. - */ -let grpcClient: typeof grpcTypes; - -export class GrpcNativeInstrumentation extends InstrumentationBase< - typeof grpcTypes -> { - private _metadataCapture: metadataCaptureType; - - constructor( - name: string, - version: string, - config?: GrpcInstrumentationConfig - ) { - super(name, version, config); - this._metadataCapture = this._createMetadataCapture(); - } - - init() { - return [ - new InstrumentationNodeModuleDefinition( - 'grpc', - ['1.*'], - (moduleExports, version) => { - this._diag.debug(`Applying patch for grpc@${version}`); - grpcClient = moduleExports; - - if (isWrapped(moduleExports.Server.prototype.register)) { - this._unwrap(moduleExports.Server.prototype, 'register'); - } - this._wrap( - moduleExports.Server.prototype, - 'register', - this._patchServer() as any - ); - // Wrap the externally exported client constructor - if (isWrapped(moduleExports.makeGenericClientConstructor)) { - this._unwrap(moduleExports, 'makeGenericClientConstructor'); - } - this._wrap( - moduleExports, - 'makeGenericClientConstructor', - this._patchClient() - ); - return moduleExports; - }, - (moduleExports, version) => { - if (moduleExports === undefined) return; - this._diag.debug(`Removing patch for grpc@${version}`); - - this._unwrap(moduleExports.Server.prototype, 'register'); - }, - this._getInternalPatchs() - ), - ]; - } - - override getConfig(): GrpcInstrumentationConfig { - return super.getConfig(); - } - - override setConfig(config?: GrpcInstrumentationConfig): void { - super.setConfig(config); - this._metadataCapture = this._createMetadataCapture(); - } - - private _getInternalPatchs() { - const onPatch = ( - moduleExports: GrpcInternalClientTypes, - version?: string - ) => { - this._diag.debug(`Applying internal patch for grpc@${version}`); - if (isWrapped(moduleExports.makeClientConstructor)) { - this._unwrap(moduleExports, 'makeClientConstructor'); - } - this._wrap(moduleExports, 'makeClientConstructor', this._patchClient()); - return moduleExports; - }; - const onUnPatch = ( - moduleExports?: GrpcInternalClientTypes, - version?: string - ) => { - if (moduleExports === undefined) return; - this._diag.debug(`Removing internal patch for grpc@${version}`); - this._unwrap(moduleExports, 'makeClientConstructor'); - }; - return [ - new InstrumentationNodeModuleFile( - 'grpc/src/node/src/client.js', - ['0.13 - 1.6'], - onPatch, - onUnPatch - ), - new InstrumentationNodeModuleFile( - 'grpc/src/client.js', - ['^1.7'], - onPatch, - onUnPatch - ), - ]; - } - - private _patchServer() { - const instrumentation = this; - return (originalRegister: typeof grpcTypes.Server.prototype.register) => { - instrumentation._diag.debug('patched gRPC server'); - - return function register( - this: grpcTypes.Server & { handlers: any }, - name: string, - handler: grpcTypes.handleCall, - serialize: grpcTypes.serialize, - deserialize: grpcTypes.deserialize, - type: string - ) { - const originalResult = originalRegister.apply(this, arguments as any); - const handlerSet = this.handlers[name]; - - instrumentation._wrap( - handlerSet, - 'func', - (originalFunc: grpcTypes.handleCall) => { - return function func( - this: typeof handlerSet, - call: ServerCallWithMeta, - callback: SendUnaryDataCallback - ) { - const self = this; - if (shouldNotTraceServerCall.call(instrumentation, call, name)) { - switch (type) { - case 'unary': - case 'client_stream': - return (originalFunc as Function).call( - self, - call, - callback - ); - case 'server_stream': - case 'bidi': - return (originalFunc as Function).call(self, call); - default: - return originalResult; - } - } - const spanName = `grpc.${name.replace('/', '')}`; - const spanOptions: SpanOptions = { - kind: SpanKind.SERVER, - }; - - instrumentation._diag.debug( - `patch func: ${JSON.stringify(spanOptions)}` - ); - - context.with( - propagation.extract(context.active(), call.metadata, { - get: (metadata, key) => metadata.get(key).map(String), - keys: metadata => Object.keys(metadata.getMap()), - }), - () => { - const { service, method } = _extractMethodAndService(name); - - const span = instrumentation.tracer - .startSpan(spanName, spanOptions) - .setAttributes({ - [SemanticAttributes.RPC_SYSTEM]: - AttributeValues.RPC_SYSTEM, - [SemanticAttributes.RPC_METHOD]: method, - [SemanticAttributes.RPC_SERVICE]: service, - }); - - instrumentation._metadataCapture.server.captureRequestMetadata( - span, - call.metadata - ); - - instrumentation._wrap( - call as any, - 'sendMetadata', - originalSendMetadata => - (responseMetadata: grpcTypes.Metadata) => { - instrumentation._metadataCapture.server.captureResponseMetadata( - span, - responseMetadata - ); - originalSendMetadata.call(call, responseMetadata); - } - ); - - context.with(trace.setSpan(context.active(), span), () => { - switch (type) { - case 'unary': - case 'client_stream': - return clientStreamAndUnaryHandler( - span, - call, - callback, - originalFunc, - self - ); - case 'server_stream': - case 'bidi': - return serverStreamAndBidiHandler( - span, - call, - originalFunc, - self - ); - default: - break; - } - }); - } - ); - }; - } - ); - - return originalResult; - }; - }; - } - - private _patchClient() { - const instrumentation = this; - return (original: typeof grpcTypes.makeGenericClientConstructor): never => { - instrumentation._diag.debug('patching client'); - return function makeClientConstructor( - this: typeof grpcTypes.Client, - methods: { [key: string]: { originalName?: string } }, - _serviceName: string, - _options: grpcTypes.GenericClientOptions - ) { - const client = original.apply(this, arguments as any); - instrumentation._massWrap( - client.prototype as never, - instrumentation._getMethodsToWrap(client, methods) as never[], - instrumentation._getPatchedClientMethods() as any - ); - return client; - } as never; - }; - } - - private _getMethodsToWrap( - client: typeof grpcTypes.Client, - methods: { [key: string]: { originalName?: string } } - ): string[] { - const methodList: string[] = []; - - // For a method defined in .proto as "UnaryMethod" - Object.entries(methods).forEach(([name, { originalName }]) => { - if (!_methodIsIgnored(name, this.getConfig().ignoreGrpcMethods)) { - methodList.push(name); // adds camel case method name: "unaryMethod" - if ( - originalName && - // eslint-disable-next-line no-prototype-builtins - client.prototype.hasOwnProperty(originalName) && - name !== originalName // do not add duplicates - ) { - // adds original method name: "UnaryMethod", - methodList.push(originalName); - } - } - }); - return methodList; - } - - private _getPatchedClientMethods() { - const instrumentation = this; - return (original: GrpcClientFunc) => { - instrumentation._diag.debug('patch all client methods'); - function clientMethodTrace(this: grpcTypes.Client) { - const name = `grpc.${(original.path as string | undefined)?.replace( - '/', - '' - )}`; - const args = Array.prototype.slice.call(arguments); - const metadata = getMetadata(grpcClient, original, args); - const { service, method } = _extractMethodAndService(original.path); - const span = instrumentation.tracer - .startSpan(name, { - kind: SpanKind.CLIENT, - }) - .setAttributes({ - [SemanticAttributes.RPC_SYSTEM]: AttributeValues.RPC_SYSTEM, - [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._metadataCapture.client.captureRequestMetadata( - span, - metadata - ); - - return context.with(trace.setSpan(context.active(), span), () => - makeGrpcClientRemoteCall( - instrumentation._metadataCapture, - original, - args, - metadata, - this - )(span) - ); - } - Object.assign(clientMethodTrace, original); - return clientMethodTrace; - }; - } - - private _createMetadataCapture(): metadataCaptureType { - const config = this.getConfig(); - - return { - client: { - captureRequestMetadata: metadataCapture( - 'request', - config.metadataToSpanAttributes?.client?.requestMetadata ?? [] - ), - captureResponseMetadata: metadataCapture( - 'response', - config.metadataToSpanAttributes?.client?.responseMetadata ?? [] - ), - }, - server: { - captureRequestMetadata: metadataCapture( - 'request', - config.metadataToSpanAttributes?.server?.requestMetadata ?? [] - ), - captureResponseMetadata: metadataCapture( - 'response', - config.metadataToSpanAttributes?.server?.responseMetadata ?? [] - ), - }, - }; - } -} diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/serverUtils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/serverUtils.ts deleted file mode 100644 index d97a947443..0000000000 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/serverUtils.ts +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import type * as grpcTypes from 'grpc'; -import { SendUnaryDataCallback, ServerCallWithMeta } from './types'; -import { GrpcNativeInstrumentation } from './'; -import { context, Span, SpanStatusCode } from '@opentelemetry/api'; -import { - _grpcStatusCodeToOpenTelemetryStatusCode, - _grpcStatusCodeToSpanStatus, - _methodIsIgnored, -} from '../utils'; -import { AttributeNames } from '../enums/AttributeNames'; -import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; -import { GRPC_STATUS_CODE_OK } from '../status-code'; - -export const clientStreamAndUnaryHandler = function ( - span: Span, - call: ServerCallWithMeta, - callback: SendUnaryDataCallback, - original: - | grpcTypes.handleCall - | grpcTypes.ClientReadableStream, - self: {} -) { - function patchedCallback( - err: grpcTypes.ServiceError, - value: any, - trailer: grpcTypes.Metadata, - flags: grpcTypes.writeFlags - ) { - if (err) { - if (err.code) { - span.setStatus({ - code: _grpcStatusCodeToOpenTelemetryStatusCode(err.code), - message: err.message, - }); - 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.addEvent('received'); - - // end the span - span.end(); - return callback(err, value, trailer, flags); - } - - context.bind(context.active(), call); - return (original as Function).call(self, call, patchedCallback); -}; - -export const serverStreamAndBidiHandler = function ( - span: Span, - call: ServerCallWithMeta, - original: grpcTypes.handleCall, - self: {} -) { - let spanEnded = false; - const endSpan = () => { - if (!spanEnded) { - spanEnded = true; - span.end(); - } - }; - - context.bind(context.active(), call); - call.on('finish', () => { - span.setStatus(_grpcStatusCodeToSpanStatus(call.status.code)); - span.setAttribute( - SemanticAttributes.RPC_GRPC_STATUS_CODE, - call.status.code - ); - - // if there is an error, span will be ended on error event, otherwise end it here - if (call.status.code === 0) { - span.addEvent('finished'); - endSpan(); - } - }); - - call.on('error', (err: grpcTypes.ServiceError) => { - span.setStatus({ - code: _grpcStatusCodeToOpenTelemetryStatusCode(err.code), - message: err.message, - }); - span.addEvent('finished with error'); - span.setAttributes({ - [AttributeNames.GRPC_ERROR_NAME]: err.name, - [AttributeNames.GRPC_ERROR_MESSAGE]: err.message, - }); - if (err.code != null) { - span.setAttribute(SemanticAttributes.RPC_GRPC_STATUS_CODE, err.code); - } - endSpan(); - }); - - return (original as any).call(self, call); -}; - -/** - * Returns true if the server call should not be traced. - */ -export const shouldNotTraceServerCall = function ( - this: GrpcNativeInstrumentation, - call: ServerCallWithMeta, - name: string -): boolean { - const parsedName = name.split('/'); - return _methodIsIgnored( - parsedName[parsedName.length - 1] || name, - this.getConfig().ignoreGrpcMethods - ); -}; diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/types.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/types.ts deleted file mode 100644 index ef3e4ef9bb..0000000000 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/types.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import type * as grpcTypes from 'grpc'; -import * as events from 'events'; - -export type SendUnaryDataCallback = ( - error: grpcTypes.ServiceError | null, - value?: any, - trailer?: grpcTypes.Metadata, - flags?: grpcTypes.writeFlags -) => void; - -interface GrpcStatus { - code: number; - details: string; - metadata: grpcTypes.Metadata; -} - -export type ServerCall = - | typeof grpcTypes.ServerUnaryCall - | typeof grpcTypes.ServerReadableStream - | typeof grpcTypes.ServerWritableStream - | typeof grpcTypes.ServerDuplexStream; - -export type ServerCallWithMeta = ServerCall & { - metadata: grpcTypes.Metadata; - status: GrpcStatus; - request?: unknown; -} & events.EventEmitter; - -export type GrpcClientFunc = typeof Function & { - path: string; - requestStream: boolean; - responseStream: boolean; -}; - -export type GrpcInternalClientTypes = { - makeClientConstructor: typeof grpcTypes.makeGenericClientConstructor; -}; diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/instrumentation.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/instrumentation.ts index c2a8946f97..d597beaae2 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/instrumentation.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/instrumentation.ts @@ -16,7 +16,6 @@ import { GrpcInstrumentationConfig } from './types'; import { VERSION } from './version'; -import { GrpcNativeInstrumentation } from './grpc'; import { GrpcJsInstrumentation } from './grpc-js'; import * as api from '@opentelemetry/api'; @@ -24,7 +23,6 @@ import * as api from '@opentelemetry/api'; export const GRPC_TRACE_KEY = 'grpc-trace-bin'; export class GrpcInstrumentation { - private _grpcNativeInstrumentation: GrpcNativeInstrumentation; private _grpcJsInstrumentation: GrpcJsInstrumentation; public readonly instrumentationName: string = @@ -37,16 +35,10 @@ export class GrpcInstrumentation { this.instrumentationVersion, config ); - this._grpcNativeInstrumentation = new GrpcNativeInstrumentation( - this.instrumentationName, - this.instrumentationVersion, - config - ); } public setConfig(config?: GrpcInstrumentationConfig) { this._grpcJsInstrumentation.setConfig(config); - this._grpcNativeInstrumentation.setConfig(config); } /** @@ -66,12 +58,10 @@ export class GrpcInstrumentation { enable() { this._grpcJsInstrumentation.enable(); - this._grpcNativeInstrumentation.enable(); } disable() { this._grpcJsInstrumentation.disable(); - this._grpcNativeInstrumentation.disable(); } /** @@ -80,7 +70,6 @@ export class GrpcInstrumentation { */ public setMeterProvider(meterProvider: api.MeterProvider) { this._grpcJsInstrumentation.setMeterProvider(meterProvider); - this._grpcNativeInstrumentation.setMeterProvider(meterProvider); } /** @@ -89,6 +78,5 @@ export class GrpcInstrumentation { */ public setTracerProvider(tracerProvider: api.TracerProvider) { this._grpcJsInstrumentation.setTracerProvider(tracerProvider); - this._grpcNativeInstrumentation.setTracerProvider(tracerProvider); } } diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts index ebc17ae1d4..594ad7ce0a 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts @@ -16,27 +16,26 @@ import { Span } from '@opentelemetry/api'; import type * as grpcJsTypes from '@grpc/grpc-js'; -import type * as grpcTypes from 'grpc'; export type metadataCaptureType = { client: { captureRequestMetadata: ( span: Span, - metadata: grpcJsTypes.Metadata | grpcTypes.Metadata + metadata: grpcJsTypes.Metadata ) => void; captureResponseMetadata: ( span: Span, - metadata: grpcJsTypes.Metadata | grpcTypes.Metadata + metadata: grpcJsTypes.Metadata ) => void; }; server: { captureRequestMetadata: ( span: Span, - metadata: grpcJsTypes.Metadata | grpcTypes.Metadata + metadata: grpcJsTypes.Metadata ) => void; captureResponseMetadata: ( span: Span, - metadata: grpcJsTypes.Metadata | grpcTypes.Metadata + metadata: grpcJsTypes.Metadata ) => void; }; }; diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/utils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/utils.ts index 8d031107dd..d9e542f509 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/utils.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/utils.ts @@ -15,7 +15,6 @@ */ import { SpanStatusCode, SpanStatus, Span } from '@opentelemetry/api'; -import type * as grpcTypes from 'grpc'; import type * as grpcJsTypes from '@grpc/grpc-js'; import { IgnoreMatcher } from './types'; @@ -26,7 +25,7 @@ export const URI_REGEX = // Equivalent to lodash _.findIndex export const findIndex: (args: T[], fn: (arg: T) => boolean) => number = ( args, - fn: Function + fn ) => { let index = -1; for (const arg of args) { @@ -43,7 +42,7 @@ export const findIndex: (args: T[], fn: (arg: T) => boolean) => number = ( * @param status */ export const _grpcStatusCodeToOpenTelemetryStatusCode = ( - status?: grpcTypes.status | grpcJsTypes.status + status?: grpcJsTypes.status ): SpanStatusCode => { if (status !== undefined && status === 0) { return SpanStatusCode.UNSET; @@ -128,7 +127,7 @@ export function metadataCapture( ]) ); - return (span: Span, metadata: grpcJsTypes.Metadata | grpcTypes.Metadata) => { + return (span: Span, metadata: grpcJsTypes.Metadata) => { for (const [ capturedMetadata, normalizedMetadata, @@ -137,7 +136,7 @@ export function metadataCapture( .get(capturedMetadata) .flatMap(value => (typeof value === 'string' ? value.toString() : [])); - if (metadataValues === undefined || metadataValues === []) { + if (metadataValues === undefined || metadataValues.length === 0) { continue; } diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc.test.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc.test.ts deleted file mode 100644 index 453c6d6ef9..0000000000 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { runTests } from './helper'; -import { GrpcInstrumentation } from '../src/instrumentation'; - -const instrumentation = new GrpcInstrumentation(); -instrumentation.enable(); -instrumentation.disable(); - -import * as grpc from 'grpc'; - -describe('#grpc', () => { - runTests(instrumentation, 'grpc', grpc, 12345); -}); diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts index 58855a6a5f..661b309e90 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts @@ -32,7 +32,6 @@ import { } from '@opentelemetry/sdk-trace-base'; import * as assert from 'assert'; import * as protoLoader from '@grpc/proto-loader'; -import type * as grpcNapi from 'grpc'; import type * as grpcJs from '@grpc/grpc-js'; import { assertPropagation, assertSpan } from './utils/assertionUtils'; import { promisify } from 'util'; @@ -54,25 +53,17 @@ interface TestRequestResponse { num: number; } -type ServiceError = grpcNapi.ServiceError | grpcJs.ServiceError; -type Client = grpcNapi.Client | grpcJs.Client; -type Server = grpcNapi.Server | grpcJs.Server; -type ServerUnaryCall = - | grpcNapi.ServerUnaryCall - | grpcJs.ServerUnaryCall; +type ServiceError = grpcJs.ServiceError; +type Client = grpcJs.Client; +type Server = grpcJs.Server; +type ServerUnaryCall = grpcJs.ServerUnaryCall; type RequestCallback = grpcJs.requestCallback; -type ServerReadableStream = - | grpcNapi.ServerReadableStream - | grpcJs.ServerReadableStream; -type ServerWriteableStream = - | grpcNapi.ServerWriteableStream - | grpcJs.ServerWritableStream; -type ServerDuplexStream = - | grpcNapi.ServerDuplexStream - | grpcJs.ServerDuplexStream; -type Metadata = grpcNapi.Metadata | grpcJs.Metadata; - -type TestGrpcClient = (typeof grpcJs | typeof grpcNapi)['Client'] & { +type ServerReadableStream = grpcJs.ServerReadableStream; +type ServerWriteableStream = grpcJs.ServerWritableStream; +type ServerDuplexStream = grpcJs.ServerDuplexStream; +type Metadata = grpcJs.Metadata; + +type TestGrpcClient = typeof grpcJs['Client'] & { unaryMethodWithMetadata: any; unaryMethod: any; UnaryMethod: any; @@ -117,7 +108,7 @@ const checkEqual = export const runTests = ( plugin: GrpcInstrumentation, moduleName: string, - grpc: typeof grpcNapi | typeof grpcJs, + grpc: typeof grpcJs, grpcPort: number ) => { const MAX_ERROR_STATUS = grpc.status.UNAUTHENTICATED; @@ -289,10 +280,7 @@ export const runTests = ( return result; }; - async function startServer( - grpc: typeof grpcJs | typeof grpcNapi, - proto: any - ) { + async function startServer(grpc: typeof grpcJs, proto: any) { const server = new grpc.Server(); function getError(msg: string, code: number): ServiceError | null { @@ -302,6 +290,7 @@ export const runTests = ( message: msg, code, details: msg, + metadata: new grpc.Metadata(), }; return err; } @@ -422,7 +411,7 @@ export const runTests = ( return server; } - function createClient(grpc: typeof grpcJs | typeof grpcNapi, proto: any) { + function createClient(grpc: typeof grpcJs, proto: any) { return new proto.GrpcTester( 'localhost:' + grpcPort, grpc.credentials.createInsecure() diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts index 24d4bf7af8..fcdd546b32 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts @@ -16,7 +16,6 @@ import { SpanKind, SpanStatusCode } from '@opentelemetry/api'; import * as assert from 'assert'; -import type * as grpc from 'grpc'; import type * as grpcJs from '@grpc/grpc-js'; import { ReadableSpan } from '@opentelemetry/sdk-trace-base'; import { @@ -26,7 +25,7 @@ import { import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; export const grpcStatusCodeToOpenTelemetryStatusCode = ( - status: grpc.status | grpcJs.status + status: grpcJs.status ): SpanStatusCode => { if (status !== undefined && status === 0) { return SpanStatusCode.UNSET; @@ -40,7 +39,7 @@ export const assertSpan = ( kind: SpanKind, validations: { name: string; - status: grpc.status | grpcJs.status; + status: grpcJs.status; netPeerName?: string; netPeerPort?: number; } From 3b387d8f370a1d2a6ac613d799249757433c15fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=B2=92=E7=B2=92=E6=A9=99?= Date: Mon, 12 Jun 2023 19:20:02 +0800 Subject: [PATCH 009/141] fix: align dependency versions (#3847) Co-authored-by: Marc Pichler --- experimental/packages/exporter-logs-otlp-http/package.json | 2 +- .../packages/opentelemetry-instrumentation-grpc/package.json | 2 +- .../packages/opentelemetry-instrumentation-http/package.json | 2 +- .../packages/opentelemetry-instrumentation/package.json | 4 ++-- experimental/packages/opentelemetry-sdk-node/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 +- experimental/packages/shim-opencensus/package.json | 4 ++-- package.json | 2 +- packages/opentelemetry-sdk-trace-node/package.json | 2 +- packages/sdk-metrics/package.json | 2 +- packages/template/package.json | 2 +- 13 files changed, 15 insertions(+), 15 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index ef21270a4e..217a113377 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -90,7 +90,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "14.0.2", + "sinon": "15.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 3bba4ddee3..840b58b8b6 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -61,7 +61,7 @@ "mocha": "10.2.0", "node-pre-gyp": "0.17.0", "nyc": "15.1.0", - "semver": "7.3.5", + "semver": "7.5.1", "sinon": "15.0.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 591911e5ae..dbb6797e36 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -76,7 +76,7 @@ "@opentelemetry/core": "1.14.0", "@opentelemetry/instrumentation": "0.40.0", "@opentelemetry/semantic-conventions": "1.14.0", - "semver": "^7.3.5" + "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/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index a95ef56eac..a72bf1af41 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -73,8 +73,8 @@ "dependencies": { "@types/shimmer": "^1.0.2", "import-in-the-middle": "1.3.5", - "require-in-the-middle": "^7.1.0", - "semver": "^7.3.2", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.1", "shimmer": "^1.2.1" }, "peerDependencies": { diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index b0842de637..5b55e3eb27 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -72,7 +72,7 @@ "istanbul-instrumenter-loader": "3.0.1", "mocha": "10.2.0", "nyc": "15.1.0", - "semver": "7.3.5", + "semver": "7.5.1", "sinon": "15.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 9b67a57094..0c0056c4a1 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -74,7 +74,7 @@ "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.14.0", "@opentelemetry/otlp-exporter-base": "0.40.0", - "protobufjs": "^7.2.2" + "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 5560b8b436..f3fd5276e9 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -80,7 +80,7 @@ "dependencies": { "@opentelemetry/core": "1.14.0", "@opentelemetry/otlp-exporter-base": "0.40.0", - "protobufjs": "^7.1.2" + "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/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index c93f570590..9e2a86ea2e 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -87,7 +87,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "14.0.2", + "sinon": "15.0.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index d88d4a6927..2b92913dce 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -65,8 +65,8 @@ }, "dependencies": { "@opentelemetry/core": "1.14.0", - "require-in-the-middle": "^7.0.0", - "semver": "^7.3.5" + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/shim-opencensus", "sideEffects": false diff --git a/package.json b/package.json index 93302e80ef..7f8357c48c 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "linkinator": "5.0.1", "markdownlint-cli": "0.32.2", "prettier": "2.8.0", - "semver": "7.3.5", + "semver": "7.5.1", "typedoc": "0.22.18", "typedoc-plugin-missing-exports": "1.0.0", "typedoc-plugin-resolve-crossmodule-references": "0.2.2", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index 2495523d02..b8b41989e6 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -69,7 +69,7 @@ "@opentelemetry/propagator-b3": "1.14.0", "@opentelemetry/propagator-jaeger": "1.14.0", "@opentelemetry/sdk-trace-base": "1.14.0", - "semver": "^7.3.5" + "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/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 988f4ebca7..046cede520 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -79,7 +79,7 @@ "dependencies": { "@opentelemetry/core": "1.14.0", "@opentelemetry/resources": "1.14.0", - "lodash.merge": "4.6.2" + "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 979c49fc32..9ff7db8db0 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -88,7 +88,7 @@ "codecov": "3.8.3", "mocha": "10.0.0", "nyc": "15.1.0", - "sinon": "14.0.0", + "sinon": "15.0.0", "ts-mocha": "10.0.0" }, "Add these to devDependencies if browser is targeted": { From 630e0da2dc370c8d735e0c1d2064beb8664d09a0 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 12 Jun 2023 14:05:04 +0200 Subject: [PATCH 010/141] chore(deps): update dependency nock to v13.3.1 (#3884) --- .../packages/opentelemetry-instrumentation-http/package.json | 2 +- experimental/packages/otlp-exporter-base/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 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index dbb6797e36..dfee40b273 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -60,7 +60,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "mocha": "10.2.0", - "nock": "13.0.11", + "nock": "13.3.1", "nyc": "15.1.0", "request": "2.88.2", "request-promise-native": "1.0.9", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 6eb78d97da..627c5064a7 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -72,7 +72,7 @@ "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", "mocha": "10.2.0", - "nock": "13.0.11", + "nock": "13.3.1", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index b3d1375878..c9ebda34a5 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -52,7 +52,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "mocha": "10.2.0", - "nock": "13.0.11", + "nock": "13.3.1", "nyc": "15.1.0", "sinon": "15.0.0", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 5671faa25f..d705d28ce2 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -77,7 +77,7 @@ "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", - "nock": "13.0.11", + "nock": "13.3.1", "nyc": "15.1.0", "sinon": "15.0.0", "ts-loader": "8.4.0", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index e24c87d07b..0e784875a1 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -77,7 +77,7 @@ "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "10.2.0", - "nock": "13.0.11", + "nock": "13.3.1", "nyc": "15.1.0", "sinon": "15.0.0", "ts-mocha": "10.0.0", diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index a22d16b5df..f214247df8 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -55,7 +55,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "mocha": "10.2.0", - "nock": "13.0.11", + "nock": "13.3.1", "nyc": "15.1.0", "sinon": "15.0.0", "ts-mocha": "10.0.0", From 7fc17e5c45b72775067665d3f9bc4cc94c2564eb Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 12 Jun 2023 14:36:31 +0200 Subject: [PATCH 011/141] chore(deps): update actions/checkout action to v3.5.3 (#3883) --- .github/workflows/unit-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 6c61133e69..e326aa822e 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -143,7 +143,7 @@ jobs: NPM_CONFIG_UNSAFE_PERM: true steps: - name: Checkout - uses: actions/checkout@v3.0.2 + uses: actions/checkout@v3.5.3 - uses: actions/setup-node@v3 with: node-version: 16 From 2f472adb9306b4944c5db050ba8d3b37266e5058 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 13 Jun 2023 06:55:03 +0200 Subject: [PATCH 012/141] chore(deps): update dependency chromedriver to v114 (#3849) --- 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 0203ef7a0c..e3abf66275 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -40,7 +40,7 @@ "babel-loader": "8.2.3", "babel-polyfill": "6.26.0", "browserstack-local": "1.4.8", - "chromedriver": "113.0.0", + "chromedriver": "114.0.2", "dotenv": "16.0.0", "fast-safe-stringify": "2.1.1", "geckodriver": "3.0.1", From f606404cd704bd787cb8de96253b8a5c8c660773 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 13 Jun 2023 07:27:15 +0200 Subject: [PATCH 013/141] chore(deps): update dependency memfs to v3.5.3 (#3888) --- api/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/package.json b/api/package.json index 5100e4f82e..9cc7a83230 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", - "memfs": "3.4.9", + "memfs": "3.5.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.0.0", From 75691c92cd85abadc9dc2fac513335c487124d99 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 13 Jun 2023 07:50:32 +0200 Subject: [PATCH 014/141] chore(deps): update dependency protobufjs-cli to v1.1.1 (#3889) --- experimental/packages/otlp-grpc-exporter-base/package.json | 2 +- experimental/packages/otlp-proto-exporter-base/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 0c0056c4a1..f2c97113ad 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -61,7 +61,7 @@ "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", - "protobufjs-cli": "1.0.2", + "protobufjs-cli": "1.1.1", "sinon": "15.0.0", "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 f3fd5276e9..af5c1299f8 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -68,7 +68,7 @@ "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", - "protobufjs-cli": "1.0.2", + "protobufjs-cli": "1.1.1", "sinon": "15.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", From 95a5e0cadaea6fc0faf1fab113a5cdb0c6c9976b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 13 Jun 2023 08:16:47 +0200 Subject: [PATCH 015/141] chore(deps): update dependency unionfs to v4.5.1 (#3890) --- api/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/package.json b/api/package.json index 9cc7a83230..726262a6d8 100644 --- a/api/package.json +++ b/api/package.json @@ -83,7 +83,7 @@ "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", - "unionfs": "4.4.0", + "unionfs": "4.5.1", "webpack": "4.46.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/api", From 5a1cd99bae4eaa0c254e4849c69cd35c35faeef9 Mon Sep 17 00:00:00 2001 From: Chi Ma Date: Tue, 13 Jun 2023 21:44:43 +0700 Subject: [PATCH 016/141] fix(sdk-metrics): Update default Histogram's boundary to match OTEL's spec (#3893) --- CHANGELOG.md | 2 + .../test/PrometheusExporter.test.ts | 5 +++ packages/sdk-metrics/src/view/Aggregation.ts | 2 +- packages/sdk-metrics/test/Instruments.test.ts | 42 +++++++++++++------ .../sdk-metrics/test/view/Aggregation.test.ts | 5 ++- 5 files changed, 42 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bab1ea9942..1bd4e35ac0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) +* fix(sdk-metrics): Update default Histogram's boundary to match OTEL's spec [#3893](https://github.com/open-telemetry/opentelemetry-js/pull/3893/) @chigia001 + ### :books: (Refine Doc) ### :house: (Internal) diff --git a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts index 55061be083..292ad3db1e 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts @@ -514,7 +514,12 @@ describe('PrometheusExporter', () => { `test_histogram_bucket{key1="attributeValue1",le="100"} 1 ${mockedHrTimeMs}`, `test_histogram_bucket{key1="attributeValue1",le="250"} 1 ${mockedHrTimeMs}`, `test_histogram_bucket{key1="attributeValue1",le="500"} 1 ${mockedHrTimeMs}`, + `test_histogram_bucket{key1="attributeValue1",le="750"} 1 ${mockedHrTimeMs}`, `test_histogram_bucket{key1="attributeValue1",le="1000"} 1 ${mockedHrTimeMs}`, + `test_histogram_bucket{key1="attributeValue1",le="2500"} 1 ${mockedHrTimeMs}`, + `test_histogram_bucket{key1="attributeValue1",le="5000"} 1 ${mockedHrTimeMs}`, + `test_histogram_bucket{key1="attributeValue1",le="7500"} 1 ${mockedHrTimeMs}`, + `test_histogram_bucket{key1="attributeValue1",le="10000"} 1 ${mockedHrTimeMs}`, `test_histogram_bucket{key1="attributeValue1",le="+Inf"} 1 ${mockedHrTimeMs}`, '', ]); diff --git a/packages/sdk-metrics/src/view/Aggregation.ts b/packages/sdk-metrics/src/view/Aggregation.ts index 755cd17531..f36394c5bc 100644 --- a/packages/sdk-metrics/src/view/Aggregation.ts +++ b/packages/sdk-metrics/src/view/Aggregation.ts @@ -107,7 +107,7 @@ export class LastValueAggregation extends Aggregation { */ export class HistogramAggregation extends Aggregation { private static DEFAULT_INSTANCE = new HistogramAggregator( - [0, 5, 10, 25, 50, 75, 100, 250, 500, 1000], + [0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000], true ); createAggregator(_instrument: InstrumentDescriptor) { diff --git a/packages/sdk-metrics/test/Instruments.test.ts b/packages/sdk-metrics/test/Instruments.test.ts index ba0f86bdd4..8651643fa3 100644 --- a/packages/sdk-metrics/test/Instruments.test.ts +++ b/packages/sdk-metrics/test/Instruments.test.ts @@ -297,8 +297,11 @@ describe('Instruments', () => { attributes: {}, value: { buckets: { - boundaries: [0, 5, 10, 25, 50, 75, 100, 250, 500, 1000], - counts: [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], + boundaries: [ + 0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, + 7500, 10000, + ], + counts: [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], }, count: 2, sum: 10, @@ -310,8 +313,11 @@ describe('Instruments', () => { attributes: { foo: 'bar' }, value: { buckets: { - boundaries: [0, 5, 10, 25, 50, 75, 100, 250, 500, 1000], - counts: [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0], + boundaries: [ + 0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, + 7500, 10000, + ], + counts: [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], }, count: 2, sum: 100, @@ -352,8 +358,11 @@ describe('Instruments', () => { attributes: {}, value: { buckets: { - boundaries: [0, 5, 10, 25, 50, 75, 100, 250, 500, 1000], - counts: [0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0], + boundaries: [ + 0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, + 7500, 10000, + ], + counts: [0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], }, count: 2, sum: 110, @@ -379,8 +388,11 @@ describe('Instruments', () => { attributes: {}, value: { buckets: { - boundaries: [0, 5, 10, 25, 50, 75, 100, 250, 500, 1000], - counts: [0, 0, 0, 2, 0, 0, 1, 1, 0, 0, 0], + boundaries: [ + 0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, + 7500, 10000, + ], + counts: [0, 0, 0, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], }, count: 4, sum: 220, @@ -422,8 +434,11 @@ describe('Instruments', () => { attributes: {}, value: { buckets: { - boundaries: [0, 5, 10, 25, 50, 75, 100, 250, 500, 1000], - counts: [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], + boundaries: [ + 0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, + 7500, 10000, + ], + counts: [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], }, count: 2, sum: 10.1, @@ -435,8 +450,11 @@ describe('Instruments', () => { attributes: { foo: 'bar' }, value: { buckets: { - boundaries: [0, 5, 10, 25, 50, 75, 100, 250, 500, 1000], - counts: [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0], + boundaries: [ + 0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, + 7500, 10000, + ], + counts: [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], }, count: 2, sum: 100.1, diff --git a/packages/sdk-metrics/test/view/Aggregation.test.ts b/packages/sdk-metrics/test/view/Aggregation.test.ts index e4ef18f52c..0da2c09bee 100644 --- a/packages/sdk-metrics/test/view/Aggregation.test.ts +++ b/packages/sdk-metrics/test/view/Aggregation.test.ts @@ -135,7 +135,10 @@ describe('HistogramAggregator', () => { assert(aggregator instanceof HistogramAggregator); assert.deepStrictEqual( aggregator['_boundaries'], - [0, 5, 10, 25, 50, 75, 100, 250, 500, 1000] + [ + 0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, + 10000, + ] ); }); }); From 65fa45fdefcfea68d4a8db0286aa6bed1c69edf5 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 14 Jun 2023 07:10:12 +0200 Subject: [PATCH 017/141] chore(deps): update babel monorepo (#3891) --- .../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 +- .../opentelemetry-browser-detector/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../opentelemetry-instrumentation-fetch/package.json | 2 +- .../package.json | 2 +- .../opentelemetry-instrumentation/package.json | 2 +- .../packages/otlp-grpc-exporter-base/package.json | 2 +- .../packages/otlp-proto-exporter-base/package.json | 2 +- .../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 | 10 +++++----- 20 files changed, 24 insertions(+), 24 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index cdb76c11f4..05d378fb39 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.16.0", + "@babel/core": "7.22.5", "@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 217a113377..c8cd5ab0bb 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.16.0", + "@babel/core": "7.22.5", "@opentelemetry/api-logs": "0.40.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 079e27e7ef..ab9887ded1 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.16.0", + "@babel/core": "7.22.5", "@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 543b18b5d5..7a5537c098 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.16.0", + "@babel/core": "7.22.5", "@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 808972e1bf..73b1a08e7d 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.16.0", + "@babel/core": "7.22.5", "@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 72d7b5cf46..e186566138 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.16.0", + "@babel/core": "7.22.5", "@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 723281cf4e..665ffe6db1 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.16.0", + "@babel/core": "7.22.5", "@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 170e9b79cb..46fdd8d3d7 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.16.0", + "@babel/core": "7.22.5", "@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 e7f7496c01..ce38ae9d51 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.16.0", + "@babel/core": "7.22.5", "@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 6e5003df88..d683df2010 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.16.0", + "@babel/core": "7.22.5", "@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 5d97cef370..9e7089b886 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.16.0", + "@babel/core": "7.22.5", "@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 c63a7f76c6..8b9b5720d3 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.16.0", + "@babel/core": "7.22.5", "@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 a72bf1af41..d93af14dab 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.16.0", + "@babel/core": "7.22.5", "@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 f2c97113ad..38dec01f55 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.16.0", + "@babel/core": "7.22.5", "@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 af5c1299f8..3d2b6abb7e 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.16.0", + "@babel/core": "7.22.5", "@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 d44609131a..2b221808d5 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.16.0", + "@babel/core": "7.22.5", "@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 1625d76e65..d6df8a28f0 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.16.0", + "@babel/core": "7.22.5", "@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 d705d28ce2..7ea3cf21eb 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.16.0", + "@babel/core": "7.22.5", "@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 c3e0e5906f..8842e0cd89 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.16.0", + "@babel/core": "7.22.5", "@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 e3abf66275..3e0ccd11c1 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -31,11 +31,11 @@ "access": "restricted" }, "devDependencies": { - "@babel/core": "7.16.0", - "@babel/plugin-proposal-class-properties": "7.16.0", - "@babel/plugin-proposal-decorators": "7.16.4", - "@babel/plugin-transform-runtime": "7.16.4", - "@babel/preset-env": "7.16.4", + "@babel/core": "7.22.5", + "@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", "@opentelemetry/api": "^1.0.0", "babel-loader": "8.2.3", "babel-polyfill": "6.26.0", From 863c8a40811510ee4c5e3dd0ae4f97f582ac63f3 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 14 Jun 2023 07:55:54 +0200 Subject: [PATCH 018/141] chore(deps): update dependency @types/semver to v7.5.0 (#3895) --- .../packages/opentelemetry-instrumentation-grpc/package.json | 2 +- .../packages/opentelemetry-instrumentation-http/package.json | 2 +- .../packages/opentelemetry-instrumentation/package.json | 2 +- experimental/packages/opentelemetry-sdk-node/package.json | 2 +- packages/opentelemetry-sdk-trace-node/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 840b58b8b6..fcf06cafa1 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -54,7 +54,7 @@ "@opentelemetry/sdk-trace-node": "1.14.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/semver": "7.3.9", + "@types/semver": "7.5.0", "@types/sinon": "10.0.15", "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 dfee40b273..43c3904b44 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.3.9", + "@types/semver": "7.5.0", "@types/sinon": "10.0.15", "@types/superagent": "4.1.18", "axios": "1.4.0", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index d93af14dab..db903ad81b 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -86,7 +86,7 @@ "@opentelemetry/sdk-metrics": "1.14.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/semver": "7.3.9", + "@types/semver": "7.5.0", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "babel-loader": "8.2.3", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 5b55e3eb27..a02536d4bd 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -65,7 +65,7 @@ "@opentelemetry/context-async-hooks": "1.14.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/semver": "7.3.9", + "@types/semver": "7.5.0", "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index b8b41989e6..dd89a9475d 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.14.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/semver": "7.3.9", + "@types/semver": "7.5.0", "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", From 4f440aa3425d149ccd1d30922b185fdb63417db6 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 14 Jun 2023 08:12:00 +0200 Subject: [PATCH 019/141] chore(deps): update dependency babel-loader to v8.3.0 (#3897) --- experimental/packages/exporter-logs-otlp-http/package.json | 2 +- experimental/packages/exporter-trace-otlp-http/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-http/package.json | 2 +- .../packages/opentelemetry-instrumentation-fetch/package.json | 2 +- .../opentelemetry-instrumentation-xml-http-request/package.json | 2 +- .../packages/opentelemetry-instrumentation/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 | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index c8cd5ab0bb..8aaaf19b12 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -77,7 +77,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", - "babel-loader": "8.2.3", + "babel-loader": "8.3.0", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 73b1a08e7d..11766e727e 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -69,7 +69,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", - "babel-loader": "8.2.3", + "babel-loader": "8.3.0", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index ce38ae9d51..b79b814276 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -69,7 +69,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", - "babel-loader": "8.2.3", + "babel-loader": "8.3.0", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 9e7089b886..b827af3b2c 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -63,7 +63,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", - "babel-loader": "8.2.3", + "babel-loader": "8.3.0", "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 8b9b5720d3..566ad8ac48 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -63,7 +63,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", - "babel-loader": "8.2.3", + "babel-loader": "8.3.0", "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index db903ad81b..9fcaa3bd9e 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -89,7 +89,7 @@ "@types/semver": "7.5.0", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", - "babel-loader": "8.2.3", + "babel-loader": "8.3.0", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 2b221808d5..bca589b088 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -60,7 +60,7 @@ "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", "@types/zone.js": "0.5.12", - "babel-loader": "8.2.3", + "babel-loader": "8.3.0", "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index d6df8a28f0..683f1ac37a 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -55,7 +55,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", - "babel-loader": "8.2.3", + "babel-loader": "8.3.0", "codecov": "3.8.3", "cross-var": "1.1.0", "karma": "6.3.16", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 7ea3cf21eb..58ff5d0f4c 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -66,7 +66,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", - "babel-loader": "8.2.3", + "babel-loader": "8.3.0", "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 8842e0cd89..e21f54bbb7 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -65,7 +65,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.15", "@types/webpack-env": "1.16.3", - "babel-loader": "8.2.3", + "babel-loader": "8.3.0", "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 3e0ccd11c1..44fe0423d8 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -37,7 +37,7 @@ "@babel/plugin-transform-runtime": "7.22.5", "@babel/preset-env": "7.22.5", "@opentelemetry/api": "^1.0.0", - "babel-loader": "8.2.3", + "babel-loader": "8.3.0", "babel-polyfill": "6.26.0", "browserstack-local": "1.4.8", "chromedriver": "114.0.2", From 4bed3c92fffe707ee90ad9effad77d3def08e012 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 14 Jun 2023 08:41:02 +0200 Subject: [PATCH 020/141] chore(deps): update dependency dpdm to v3.13.1 (#3898) --- api/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/package.json b/api/package.json index 726262a6d8..bf9c516dda 100644 --- a/api/package.json +++ b/api/package.json @@ -67,7 +67,7 @@ "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "cross-var": "1.1.0", - "dpdm": "3.10.0", + "dpdm": "3.13.1", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", From 5288753c211820de90550fd2e5f65c44950dff6d Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 14 Jun 2023 09:06:07 +0200 Subject: [PATCH 021/141] chore(deps): update dependency sinon to v15.1.2 (#3900) --- api/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 +- 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-exporter-prometheus/package.json | 2 +- .../packages/opentelemetry-instrumentation-fetch/package.json | 2 +- .../packages/opentelemetry-instrumentation-grpc/package.json | 2 +- .../packages/opentelemetry-instrumentation-http/package.json | 2 +- .../opentelemetry-instrumentation-xml-http-request/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 | 2 +- experimental/packages/otlp-proto-exporter-base/package.json | 2 +- experimental/packages/sdk-logs/package.json | 2 +- experimental/packages/shim-opencensus/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 | 2 +- packages/opentelemetry-exporter-zipkin/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 | 2 +- packages/opentelemetry-semantic-conventions/package.json | 2 +- packages/sdk-metrics/package.json | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/api/package.json b/api/package.json index bf9c516dda..3e51ca7bd0 100644 --- a/api/package.json +++ b/api/package.json @@ -79,7 +79,7 @@ "memfs": "3.5.3", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index 05d378fb39..75cb057c8c 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -62,7 +62,7 @@ "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 8aaaf19b12..7ae3f3dbe6 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -90,7 +90,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index ab9887ded1..9287bafde0 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -73,7 +73,7 @@ "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 7a5537c098..7f4ce27a27 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -59,7 +59,7 @@ "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 11766e727e..5c40dbd8dd 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -82,7 +82,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index e186566138..fb37df438b 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -72,7 +72,7 @@ "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 665ffe6db1..a63c9f58c6 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -62,7 +62,7 @@ "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 46fdd8d3d7..5773a233c3 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -58,7 +58,7 @@ "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index b79b814276..9384eadd73 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -82,7 +82,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index d683df2010..e4b75b7bb2 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -57,7 +57,7 @@ "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index 232bf2e80a..1bd383b8d5 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -52,7 +52,7 @@ "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index b827af3b2c..cf6564df24 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -75,7 +75,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index fcf06cafa1..ec5ddd50af 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -62,7 +62,7 @@ "node-pre-gyp": "0.17.0", "nyc": "15.1.0", "semver": "7.5.1", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 43c3904b44..2c25b4abd3 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -64,7 +64,7 @@ "nyc": "15.1.0", "request": "2.88.2", "request-promise-native": "1.0.9", - "sinon": "15.0.0", + "sinon": "15.1.2", "superagent": "8.0.9", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 566ad8ac48..7814452535 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -75,7 +75,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 9fcaa3bd9e..e5e07041a7 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -102,7 +102,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "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 a02536d4bd..aafb3e13e6 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -73,7 +73,7 @@ "mocha": "10.2.0", "nyc": "15.1.0", "semver": "7.5.1", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 627c5064a7..e5047d16a9 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -74,7 +74,7 @@ "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 38dec01f55..7cef192d65 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -62,7 +62,7 @@ "mocha": "10.2.0", "nyc": "15.1.0", "protobufjs-cli": "1.1.1", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index 3d2b6abb7e..34e6d171dc 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -69,7 +69,7 @@ "mocha": "10.2.0", "nyc": "15.1.0", "protobufjs-cli": "1.1.1", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 9e2a86ea2e..a08a034964 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -87,7 +87,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index 2b92913dce..f0b4581a82 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -55,7 +55,7 @@ "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index bca589b088..1836cc1d59 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -72,7 +72,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 683f1ac37a..508ee1b2e9 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -65,7 +65,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 349a5cc19b..9596497acc 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -81,7 +81,7 @@ "lerna": "6.0.3", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index c9ebda34a5..bdd9ab1e9d 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -54,7 +54,7 @@ "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 58ff5d0f4c..8066527c03 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -79,7 +79,7 @@ "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index 77a8e9c356..ec76269552 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -70,7 +70,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 0e784875a1..587123643f 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -79,7 +79,7 @@ "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-mocha": "10.0.0", "typescript": "4.4.4", "webpack": "4.46.0", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 93f9df8662..44ac5857dc 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -82,7 +82,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index dd89a9475d..35e83895c6 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -56,7 +56,7 @@ "cross-var": "1.1.0", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index e21f54bbb7..375232a81b 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -79,7 +79,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index f214247df8..4296ed1c2e 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -57,7 +57,7 @@ "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 046cede520..778a9ff859 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -69,7 +69,7 @@ "karma-webpack": "4.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "sinon": "15.0.0", + "sinon": "15.1.2", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, From fbb7d72febf993a4ebd1f9017ae396acb4f8f898 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Wed, 14 Jun 2023 14:18:20 +0200 Subject: [PATCH 022/141] chore(deps): update dependency prettier to v2.8.8 (#3905) Co-authored-by: Renovate Bot --- .../test/helper.ts | 14 +++++----- .../src/types_internal.ts | 2 +- .../otlp-grpc-exporter-base/.eslintignore | 1 + package.json | 2 +- .../src/utils/environment.ts | 6 ++--- .../resource/SemanticResourceAttributes.ts | 13 ++++----- .../src/trace/SemanticAttributes.ts | 27 ++++++++++--------- 7 files changed, 34 insertions(+), 31 deletions(-) diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts index 661b309e90..7cdc85d268 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts @@ -63,7 +63,7 @@ type ServerWriteableStream = grpcJs.ServerWritableStream; type ServerDuplexStream = grpcJs.ServerDuplexStream; type Metadata = grpcJs.Metadata; -type TestGrpcClient = typeof grpcJs['Client'] & { +type TestGrpcClient = (typeof grpcJs)['Client'] & { unaryMethodWithMetadata: any; unaryMethod: any; UnaryMethod: any; @@ -533,7 +533,7 @@ export const runTests = ( }; const ClientServerValidationTest = ( - method: typeof methodList[0], + method: (typeof methodList)[0], provider: NodeTracerProvider, checkSpans = true, attributesValidation?: { @@ -577,7 +577,7 @@ export const runTests = ( }; const ErrorValidationTest = ( - method: typeof methodList[0], + method: (typeof methodList)[0], provider: NodeTracerProvider, checkSpans = true, attributesValidation?: { @@ -635,7 +635,7 @@ export const runTests = ( }; const runTestWithAttributeValidation = ( - method: typeof methodList[0], + method: (typeof methodList)[0], provider: NodeTracerProvider, checkSpans = true, attributesValidation: { @@ -653,7 +653,7 @@ export const runTests = ( }; const runTest = ( - method: typeof methodList[0], + method: (typeof methodList)[0], provider: NodeTracerProvider, checkSpans = true ) => { @@ -667,7 +667,7 @@ export const runTests = ( request instanceof Array ? [{ num: code }, ...request] : { num: code }; const runErrorTest = ( - method: typeof methodList[0], + method: (typeof methodList)[0], key: string, errorCode: number, provider: NodeTracerProvider @@ -750,7 +750,7 @@ export const runTests = ( }); }; - const runClientMethodTest = (method: typeof methodList[0]) => { + const runClientMethodTest = (method: (typeof methodList)[0]) => { it(`should assign original properties for grpc remote method ${method.methodName}`, async () => { const patchedClientMethod = (client as any)[method.methodName]; const properties = Object.keys(patchedClientMethod); diff --git a/experimental/packages/opentelemetry-instrumentation/src/types_internal.ts b/experimental/packages/opentelemetry-instrumentation/src/types_internal.ts index 016be0ad36..2cff387711 100644 --- a/experimental/packages/opentelemetry-instrumentation/src/types_internal.ts +++ b/experimental/packages/opentelemetry-instrumentation/src/types_internal.ts @@ -20,7 +20,7 @@ import { Instrumentation } from './types'; export type InstrumentationOption = | typeof InstrumentationBase - | typeof InstrumentationBase[] + | (typeof InstrumentationBase)[] | Instrumentation | Instrumentation[]; diff --git a/experimental/packages/otlp-grpc-exporter-base/.eslintignore b/experimental/packages/otlp-grpc-exporter-base/.eslintignore index 378eac25d3..345f1a599e 100644 --- a/experimental/packages/otlp-grpc-exporter-base/.eslintignore +++ b/experimental/packages/otlp-grpc-exporter-base/.eslintignore @@ -1 +1,2 @@ build +src/generated diff --git a/package.json b/package.json index 7f8357c48c..3c2b15e771 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "lerna": "6.0.3", "linkinator": "5.0.1", "markdownlint-cli": "0.32.2", - "prettier": "2.8.0", + "prettier": "2.8.8", "semver": "7.5.1", "typedoc": "0.22.18", "typedoc-plugin-missing-exports": "1.0.0", diff --git a/packages/opentelemetry-core/src/utils/environment.ts b/packages/opentelemetry-core/src/utils/environment.ts index 1ab79176da..fda6e103b7 100644 --- a/packages/opentelemetry-core/src/utils/environment.ts +++ b/packages/opentelemetry-core/src/utils/environment.ts @@ -27,7 +27,7 @@ const DEFAULT_LIST_SEPARATOR = ','; const ENVIRONMENT_BOOLEAN_KEYS = ['OTEL_SDK_DISABLED'] as const; type ENVIRONMENT_BOOLEANS = { - [K in typeof ENVIRONMENT_BOOLEAN_KEYS[number]]?: boolean; + [K in (typeof ENVIRONMENT_BOOLEAN_KEYS)[number]]?: boolean; }; function isEnvVarABoolean(key: unknown): key is keyof ENVIRONMENT_BOOLEANS { @@ -63,7 +63,7 @@ const ENVIRONMENT_NUMBERS_KEYS = [ ] as const; type ENVIRONMENT_NUMBERS = { - [K in typeof ENVIRONMENT_NUMBERS_KEYS[number]]?: number; + [K in (typeof ENVIRONMENT_NUMBERS_KEYS)[number]]?: number; }; function isEnvVarANumber(key: unknown): key is keyof ENVIRONMENT_NUMBERS { @@ -78,7 +78,7 @@ const ENVIRONMENT_LISTS_KEYS = [ ] as const; type ENVIRONMENT_LISTS = { - [K in typeof ENVIRONMENT_LISTS_KEYS[number]]?: string[]; + [K in (typeof ENVIRONMENT_LISTS_KEYS)[number]]?: string[]; }; function isEnvVarAList(key: unknown): key is keyof ENVIRONMENT_LISTS { diff --git a/packages/opentelemetry-semantic-conventions/src/resource/SemanticResourceAttributes.ts b/packages/opentelemetry-semantic-conventions/src/resource/SemanticResourceAttributes.ts index e57e4d959c..e123c3513e 100644 --- a/packages/opentelemetry-semantic-conventions/src/resource/SemanticResourceAttributes.ts +++ b/packages/opentelemetry-semantic-conventions/src/resource/SemanticResourceAttributes.ts @@ -486,7 +486,7 @@ export const CloudProviderValues = { GCP: 'gcp', } as const; export type CloudProviderValues = - typeof CloudProviderValues[keyof typeof CloudProviderValues]; + (typeof CloudProviderValues)[keyof typeof CloudProviderValues]; export const CloudPlatformValues = { /** Alibaba Cloud Elastic Compute Service. */ @@ -525,7 +525,7 @@ export const CloudPlatformValues = { GCP_APP_ENGINE: 'gcp_app_engine', } as const; export type CloudPlatformValues = - typeof CloudPlatformValues[keyof typeof CloudPlatformValues]; + (typeof CloudPlatformValues)[keyof typeof CloudPlatformValues]; export const AwsEcsLaunchtypeValues = { /** ec2. */ @@ -534,7 +534,7 @@ export const AwsEcsLaunchtypeValues = { FARGATE: 'fargate', } as const; export type AwsEcsLaunchtypeValues = - typeof AwsEcsLaunchtypeValues[keyof typeof AwsEcsLaunchtypeValues]; + (typeof AwsEcsLaunchtypeValues)[keyof typeof AwsEcsLaunchtypeValues]; export const HostArchValues = { /** AMD64. */ @@ -552,7 +552,8 @@ export const HostArchValues = { /** 32-bit x86. */ X86: 'x86', } as const; -export type HostArchValues = typeof HostArchValues[keyof typeof HostArchValues]; +export type HostArchValues = + (typeof HostArchValues)[keyof typeof HostArchValues]; export const OsTypeValues = { /** Microsoft Windows. */ @@ -578,7 +579,7 @@ export const OsTypeValues = { /** IBM z/OS. */ Z_OS: 'z_os', } as const; -export type OsTypeValues = typeof OsTypeValues[keyof typeof OsTypeValues]; +export type OsTypeValues = (typeof OsTypeValues)[keyof typeof OsTypeValues]; export const TelemetrySdkLanguageValues = { /** cpp. */ @@ -603,4 +604,4 @@ export const TelemetrySdkLanguageValues = { WEBJS: 'webjs', } as const; export type TelemetrySdkLanguageValues = - typeof TelemetrySdkLanguageValues[keyof typeof TelemetrySdkLanguageValues]; + (typeof TelemetrySdkLanguageValues)[keyof typeof TelemetrySdkLanguageValues]; diff --git a/packages/opentelemetry-semantic-conventions/src/trace/SemanticAttributes.ts b/packages/opentelemetry-semantic-conventions/src/trace/SemanticAttributes.ts index 8bfc4a141d..6d12b0f89a 100644 --- a/packages/opentelemetry-semantic-conventions/src/trace/SemanticAttributes.ts +++ b/packages/opentelemetry-semantic-conventions/src/trace/SemanticAttributes.ts @@ -826,7 +826,8 @@ export const DbSystemValues = { /** CockroachDB. */ COCKROACHDB: 'cockroachdb', } as const; -export type DbSystemValues = typeof DbSystemValues[keyof typeof DbSystemValues]; +export type DbSystemValues = + (typeof DbSystemValues)[keyof typeof DbSystemValues]; export const DbCassandraConsistencyLevelValues = { /** all. */ @@ -853,7 +854,7 @@ export const DbCassandraConsistencyLevelValues = { LOCAL_SERIAL: 'local_serial', } as const; export type DbCassandraConsistencyLevelValues = - typeof DbCassandraConsistencyLevelValues[keyof typeof DbCassandraConsistencyLevelValues]; + (typeof DbCassandraConsistencyLevelValues)[keyof typeof DbCassandraConsistencyLevelValues]; export const FaasTriggerValues = { /** A response to some data source operation such as a database or filesystem read/write. */ @@ -868,7 +869,7 @@ export const FaasTriggerValues = { OTHER: 'other', } as const; export type FaasTriggerValues = - typeof FaasTriggerValues[keyof typeof FaasTriggerValues]; + (typeof FaasTriggerValues)[keyof typeof FaasTriggerValues]; export const FaasDocumentOperationValues = { /** When a new object is created. */ @@ -879,7 +880,7 @@ export const FaasDocumentOperationValues = { DELETE: 'delete', } as const; export type FaasDocumentOperationValues = - typeof FaasDocumentOperationValues[keyof typeof FaasDocumentOperationValues]; + (typeof FaasDocumentOperationValues)[keyof typeof FaasDocumentOperationValues]; export const FaasInvokedProviderValues = { /** Alibaba Cloud. */ @@ -892,7 +893,7 @@ export const FaasInvokedProviderValues = { GCP: 'gcp', } as const; export type FaasInvokedProviderValues = - typeof FaasInvokedProviderValues[keyof typeof FaasInvokedProviderValues]; + (typeof FaasInvokedProviderValues)[keyof typeof FaasInvokedProviderValues]; export const NetTransportValues = { /** ip_tcp. */ @@ -911,7 +912,7 @@ export const NetTransportValues = { OTHER: 'other', } as const; export type NetTransportValues = - typeof NetTransportValues[keyof typeof NetTransportValues]; + (typeof NetTransportValues)[keyof typeof NetTransportValues]; export const NetHostConnectionTypeValues = { /** wifi. */ @@ -926,7 +927,7 @@ export const NetHostConnectionTypeValues = { UNKNOWN: 'unknown', } as const; export type NetHostConnectionTypeValues = - typeof NetHostConnectionTypeValues[keyof typeof NetHostConnectionTypeValues]; + (typeof NetHostConnectionTypeValues)[keyof typeof NetHostConnectionTypeValues]; export const NetHostConnectionSubtypeValues = { /** GPRS. */ @@ -973,7 +974,7 @@ export const NetHostConnectionSubtypeValues = { LTE_CA: 'lte_ca', } as const; export type NetHostConnectionSubtypeValues = - typeof NetHostConnectionSubtypeValues[keyof typeof NetHostConnectionSubtypeValues]; + (typeof NetHostConnectionSubtypeValues)[keyof typeof NetHostConnectionSubtypeValues]; export const HttpFlavorValues = { /** HTTP 1.0. */ @@ -988,7 +989,7 @@ export const HttpFlavorValues = { QUIC: 'QUIC', } as const; export type HttpFlavorValues = - typeof HttpFlavorValues[keyof typeof HttpFlavorValues]; + (typeof HttpFlavorValues)[keyof typeof HttpFlavorValues]; export const MessagingDestinationKindValues = { /** A message sent to a queue. */ @@ -997,7 +998,7 @@ export const MessagingDestinationKindValues = { TOPIC: 'topic', } as const; export type MessagingDestinationKindValues = - typeof MessagingDestinationKindValues[keyof typeof MessagingDestinationKindValues]; + (typeof MessagingDestinationKindValues)[keyof typeof MessagingDestinationKindValues]; export const MessagingOperationValues = { /** receive. */ @@ -1006,7 +1007,7 @@ export const MessagingOperationValues = { PROCESS: 'process', } as const; export type MessagingOperationValues = - typeof MessagingOperationValues[keyof typeof MessagingOperationValues]; + (typeof MessagingOperationValues)[keyof typeof MessagingOperationValues]; export const RpcGrpcStatusCodeValues = { /** OK. */ @@ -1045,7 +1046,7 @@ export const RpcGrpcStatusCodeValues = { UNAUTHENTICATED: 16, } as const; export type RpcGrpcStatusCodeValues = - typeof RpcGrpcStatusCodeValues[keyof typeof RpcGrpcStatusCodeValues]; + (typeof RpcGrpcStatusCodeValues)[keyof typeof RpcGrpcStatusCodeValues]; export const MessageTypeValues = { /** sent. */ @@ -1054,4 +1055,4 @@ export const MessageTypeValues = { RECEIVED: 'RECEIVED', } as const; export type MessageTypeValues = - typeof MessageTypeValues[keyof typeof MessageTypeValues]; + (typeof MessageTypeValues)[keyof typeof MessageTypeValues]; From b7d2fac77d7595f9267baad3ddf1f0bd4d4f0c5c Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 14 Jun 2023 15:12:09 +0200 Subject: [PATCH 023/141] chore(deps): update dependency webpack-merge to v5.9.0 (#3904) --- experimental/packages/exporter-logs-otlp-http/package.json | 2 +- experimental/packages/exporter-trace-otlp-http/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-http/package.json | 2 +- .../packages/opentelemetry-instrumentation-fetch/package.json | 2 +- .../opentelemetry-instrumentation-xml-http-request/package.json | 2 +- .../packages/opentelemetry-instrumentation/package.json | 2 +- packages/opentelemetry-context-zone/package.json | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- packages/opentelemetry-resources/package.json | 2 +- packages/opentelemetry-sdk-trace-web/package.json | 2 +- selenium-tests/package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 7ae3f3dbe6..8e1de3460d 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -96,7 +96,7 @@ "typescript": "4.4.4", "webpack": "4.46.0", "webpack-cli": "4.9.1", - "webpack-merge": "5.8.0" + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api-logs": ">=0.38.0" diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 5c40dbd8dd..dd9520c163 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -88,7 +88,7 @@ "typescript": "4.4.4", "webpack": "4.46.0", "webpack-cli": "4.9.1", - "webpack-merge": "5.8.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 9384eadd73..077dc558bb 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -88,7 +88,7 @@ "typescript": "4.4.4", "webpack": "4.46.0", "webpack-cli": "4.9.1", - "webpack-merge": "5.8.0" + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index cf6564df24..6d2856e07e 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -81,7 +81,7 @@ "typescript": "4.4.4", "webpack": "4.46.0", "webpack-cli": "4.9.1", - "webpack-merge": "5.8.0" + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 7814452535..317304b9a5 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -81,7 +81,7 @@ "typescript": "4.4.4", "webpack": "4.46.0", "webpack-cli": "4.9.1", - "webpack-merge": "5.8.0" + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index e5e07041a7..6be8d48953 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -108,7 +108,7 @@ "typescript": "4.4.4", "webpack": "4.46.0", "webpack-cli": "4.9.1", - "webpack-merge": "5.8.0" + "webpack-merge": "5.9.0" }, "engines": { "node": ">=14" diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 508ee1b2e9..7540e42216 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -71,7 +71,7 @@ "typescript": "4.4.4", "webpack": "4.46.0", "webpack-cli": "4.9.1", - "webpack-merge": "5.8.0" + "webpack-merge": "5.9.0" }, "dependencies": { "@opentelemetry/context-zone-peer-dep": "1.14.0", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 8066527c03..eb01400782 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -85,7 +85,7 @@ "typescript": "4.4.4", "webpack": "4.46.0", "webpack-cli": "4.9.1", - "webpack-merge": "5.8.0" + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 587123643f..6539303c0b 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -84,7 +84,7 @@ "typescript": "4.4.4", "webpack": "4.46.0", "webpack-cli": "4.9.1", - "webpack-merge": "5.8.0" + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0" diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 375232a81b..17fa9c9466 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -85,7 +85,7 @@ "typescript": "4.4.4", "webpack": "4.46.0", "webpack-cli": "4.9.1", - "webpack-merge": "5.8.0" + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0" diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 44fe0423d8..fd93de9a1f 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -50,7 +50,7 @@ "webpack": "4.46.0", "webpack-cli": "4.9.1", "webpack-dev-server": "4.5.0", - "webpack-merge": "5.8.0" + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" From 591250104367e751ff561cc8287e0ef19fa363d7 Mon Sep 17 00:00:00 2001 From: Aaron Abbott Date: Wed, 14 Jun 2023 10:39:12 -0400 Subject: [PATCH 024/141] docs(opencensus-shim) add an example showing how to use the opencensus shim (#3778) Co-authored-by: Marc Pichler --- .../examples/opencensus-shim/README.md | 75 ++++++++++++++++++ .../examples/opencensus-shim/client.js | 54 +++++++++++++ .../opencensus-shim/images/jaeger-trace.png | Bin 0 -> 500393 bytes .../examples/opencensus-shim/package.json | 41 ++++++++++ .../examples/opencensus-shim/server.js | 39 +++++++++ .../examples/opencensus-shim/setup.js | 51 ++++++++++++ .../examples/opencensus-shim/utils.js | 22 +++++ .../packages/shim-opencensus/README.md | 59 +++++++++++++- .../packages/shim-opencensus/package.json | 4 + .../packages/shim-opencensus/src/index.ts | 1 + 10 files changed, 345 insertions(+), 1 deletion(-) create mode 100644 experimental/examples/opencensus-shim/README.md create mode 100644 experimental/examples/opencensus-shim/client.js create mode 100644 experimental/examples/opencensus-shim/images/jaeger-trace.png create mode 100644 experimental/examples/opencensus-shim/package.json create mode 100644 experimental/examples/opencensus-shim/server.js create mode 100644 experimental/examples/opencensus-shim/setup.js create mode 100644 experimental/examples/opencensus-shim/utils.js diff --git a/experimental/examples/opencensus-shim/README.md b/experimental/examples/opencensus-shim/README.md new file mode 100644 index 0000000000..0738d67d89 --- /dev/null +++ b/experimental/examples/opencensus-shim/README.md @@ -0,0 +1,75 @@ +# Overview + +The OpenCensus shim allows existing OpenCensus instrumentation to interoperate with OpenTelemetry instrumentation by using the OpenTelemetry SDK as an implementation for OpenCensus. + +This is a simple example that demonstrates how existing OpenCensus instrumentation can be integrated with OpenTelemetry. + +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. + +## Installation + +```sh +# from this directory +$ npm install +``` + +## Run the Application + +### Jaeger + +Setup [Jaeger Tracing All in One](https://www.jaegertracing.io/docs/latest/getting-started/#all-in-one) agent. If you have docker installed: + +```sh +docker run \ + --rm \ + --name jaeger \ + -e COLLECTOR_OTLP_ENABLED=true \ + -p 16686:16686 \ + -p 4317:4317 \ + jaegertracing/all-in-one:latest +``` + +### Run the sample server + +```sh +# from this directory +$ node -r @opentelemetry/shim-opencensus/register ./server.js +``` + +The `-r @opentelemetry/shim-opencensus/register` flag to Node tells it to load the OpenCensus +shim's register module to install the OpenCensus shim. The shim bridges all calls to +OpenCensus's tracers to OpenTelemetry. + +### Run the sample client + +```sh +# from this directory +node -r @opentelemetry/shim-opencensus/register ./client.js +``` + +Again, we use the `-r @opentelemetry/shim-opencensus/register` flag to install the OpenCensus shim. + +## Check the trace + +Go to Jaeger with your browser and click on the "Service" dropdown. Choose `opencensus-shim-example-server` and hit "Find Traces". Click on one of the available traces and you should see 3 spans: + +- An outer span from the client. This came from the OpenCensus HTTP instrumentation. + - A child from the server. This came from the OpenCensus HTTP instrumentation. + - A child for the sleep operation. This was manually instrumented with OpenTelemetry. + Notice this span is correctly recorded as a child of the OpenCensus instrumentation. + +

+ +## Useful links + +- For more information on OpenTelemetry, visit: +- For more information on OpenTelemetry for Node.js, visit: +- For more information on OpenCensus, visit: + +## LICENSE + +Apache License 2.0 diff --git a/experimental/examples/opencensus-shim/client.js b/experimental/examples/opencensus-shim/client.js new file mode 100644 index 0000000000..e0a2ed52fa --- /dev/null +++ b/experimental/examples/opencensus-shim/client.js @@ -0,0 +1,54 @@ +/* + * 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. + */ +'use strict'; + +const setup = require('./setup'); + +const provider = setup('opencensus-shim-example-client'); + +const http = require('http'); + +makeRequest(); + +async function makeRequest() { + const data = await new Promise((resolve, reject) => { + http + .get( + { + host: 'localhost', + port: 3000, + path: '/', + }, + resp => { + let data = ''; + + resp.on('data', chunk => { + data += chunk; + }); + + resp.on('end', async () => { + resolve(JSON.parse(data)); + }); + } + ) + .on('error', err => { + reject(err); + }); + }); + console.log('Got data from server: ', data); + + await provider.shutdown(); +} diff --git a/experimental/examples/opencensus-shim/images/jaeger-trace.png b/experimental/examples/opencensus-shim/images/jaeger-trace.png new file mode 100644 index 0000000000000000000000000000000000000000..15521f64cdf4b5f384f430e408b29104d5574d2a GIT binary patch literal 500393 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

5Zfsbtn!6aO$$zqTDvJaV$(8@U3 zgXUhUyBDtFbMpFyMBPY@vQ~^b_00)Fhj9fNYWt!5yX*e!+0Ft6YTjF zZS|EXjQ%iRUQO(t_8Ms{yq%VJcgEQri!pCzH%A=YGIYb2|LyGl*EV8w#jBrIw#RGSvHZJS~?=P27$vaT?xzlaH z#h2+W_^5#v6BP=bx&G9j@|=^2>u{*oWsHKCJ!=|OkNiIUug}NGP&Po_G!UBLpdJxL zY3MiKqGX3FSL=4u4ovEa0v?MGZArnV|3PbM`lYnKcijQnN>`Jg_jk+jY>*RgIPpn} z=Y=7Z4xVnn6OpeaJDl;fz^h%*t5mI?I`Bn0>WdjkGui4t-CsUy*rCp;HO&QSET|kG zNjF(^8*?_%-=z|>+!8ml7|x{s&8Ti-J`KDJiU)+gvt?b^Ma*(EC>JoG4I~{ovgj1s z^bb1JA;=Yz6>~XlqkhR^6Yj`y$*MV`$#}JK%SdnK>{oE>U7Jd?I8Wc<*PEVryUqOF z4-iX+dsX61d_f!G)>vD_gLx<+zHY_JvMnXOa?h88kOoGd7WsLTr zVY&Kw1xmD5n!!Orcuv!I$~Vy!`G;A74=7NcZRC_4FWzran#V&INaR%MrQD3^)kVc( zvK#yvx35;m!g@B=>H9S}X}oKrzwy7Tvpn^E5eiI?=WbFE-$LwMdVEcc?DyW#Iv4@w zP5_#xaS>4QW|GGF!MULkl(flZ8GCGGel^0&#$>f~gxtu<(H3MlJ-kM?B~F=B6+ zOibGray(0P8(1s3^S)xOHh{;IXM|_JTj|H=&N6(LfK*~v;_}+wmFtN(zviZ8h3IIp zWg(CEAu?Y20Mgx~Tzk@9DlZCS$9!#3G3UeSR>%*Yk+>`R2Ots}#!UTV>ep-SP3CjQWbuSn|M|#UXTC*}&TNmj=7N9}6vrnlAYzjAs2%7G|i|X+#8XETfpsaGM zp8kIe+6;My{pQ06Y(~c5R*d-i=Riqhk5@fDb^G!oj$fD7W4QOnJy$-q-?WXN3;K%E zgOp?Vw@K|3#hzPRr&-a}m@78&j;ElI7#CCg$QN<6GV&(oge6kEcBMpZxyB~Vhwo43 z*336o3IU}u20{Z6D8pooB8cW9fukoJKGq{uC}jBUfF5|ljv6R?8YVTvkF z@mCXrh@`9B9g2PRZitkXftfVgZ;V*@uH;GhBtrveT%G3oGadzA59&)JEgZ$-ClKIG~Jz1>`_c>QVA z5{Olr>DN~;L?cSRT$X{1Z8PDbHDm>M^ro7qcpPp=Se2jM#PX6(;nTeUSnGYaqU41F z-4<_jf!^s%hvwTl#q@IjmffHH^c#VIp^c&R#EX`*9&Nw-&Y{Pa&-(Nuzgl>tB#netMOw|!W))zEXgU>cQ8@m zTOXZ3r~835xRoPy^Xv{!Aa339xrT?>pvQ6aps}gzTEFe@KGU`#iQQb&<&%5|cid8t zhP4iF=1DoT3sDwU9%WHNLVNm28QAM}$)_6Phn*M)Dpj%H{-cPZ>&W&WeX8o^`?Mx1 zHw~?W^pN0v00Q5|CQYS_VfdGt0bS%dGNJ%Itak;sm`>H8nQfx@v`Thv(bjSE55Y_39htz z;Ho>(BuVq!^;GF*Vi`62HT_$%749RZ2&XtGf2^4)3hp~wmW}$=|Ll1S0RY7 z)gONTp3_f3O82#prnGMp4cO27BiOrPY{*odbOS=bxY$slr3{3do##1w2E6==(vQ3Q zZ@I2t;|mj4iim}?XK?;Q-~HZkY@DB22LpB1;;Y01j9{h`zKa1v*ZO6N6=`=xL|hM)MRlwjLKTTRaF?tfq0gEfW4AE)P*e)zjH=b7Z)T=_5$n+uB z$hkzqi`_6KN^i-HH=9(jwldF?tEWT01Nb7tZp{A8^k=G`KcWx_YLX-I`3LBN_fx7% zTh<3}G~hjghCMH7;$niXK%XjbJNDM(|M3>R13LDs>hjsif)t{hF#h1yElM6d{b)Ij zEEKCicd;|zOy88@1W^ZF_i}r``&y#SR!M40#lzIz#eh56uMbsW`1!B)<)SO&(#S@& zD{W7>`I3OiJVB4<{_MnS=UW51`JU;~(1YwafezxkLoO^Qy1#5K4y7B61;k(SulIWV zY4sGJ{wu6lV6EC#F@DICIlI7FDg7BH`4Fzcp1wcJZz*ptL^UGcG2Og&hY%~aba|rf z0gn}f2MeXGCXd>GO3dzSp?ujO0idW=i-#v|PoTO{-$E4#Z>cXO;4%)=3ip>zw#{^LiRr?xJ~w#` z&FTVCi*`he4UWtXRyM7K<=o?Nm(-(J%c0a9_VK=IvwqU4bR4ljwsJgzo_*?NunDDS z-vO=X^y?pfz2(d7Pf`uMAHzm0Wb8s7$#m~EpDh%=;WSu$PM%R1%@R^Me>Y;LwTTi! zM<`yVgrfI?Es#~9IzqxX=SEN$Y@Sx78`Kh!$=bG-tfJ%-b|OzwWy(uULvDHJS82;qaliWyXu8E0L{GwNh?dF(ysqLX$-> z>&@p8ePr&&E}vM8PE6fEC`I#EJ@Y@N@+f2`rH>BP?Q@X>TWW^1Ad!9dX{F6O-E+_t zO5Xz&UCu_bV_TP?vu>yxn8hidZ(XqD)LyE=Su+X-XJ`6ogZ1s3!^pr(PAgn32nT92 z%Hk+-9}0#-OprS-9pkgaKW9d|x6T(QR;Pxo#pX4qooa5QyDaC3 znPVE~aD3Bzlhg5J=UtdP)S7NOD-ung#l_bJ-bgaVXFk!g;}PtO&rOB|e0^|{N-ZiZ zlLc~&~gS0j_?oL6tg;Pt0-po*fog| z3NAZ0k!a9S=aT7wD<&WFsWc8+i7Ll1kKAQEkDNU?PRCJJ`;U2Jc{#AyNo9a(KmQePjc#45hev78bCa{Qgc=t*&9}bZ$-lEG&FEF;u z)Kt(v3elCK^>s4T+ZaR4wJzd$&~mEVYKzjIYI97dc-qZa#|so%DtzMwsZmd(n#cA4?jac&e)w(I=0;{@-K>F&6&JxaN1#aBF|pDK~IExjYrvVppNY!w*g zw+l6G%y)&Y%!;f%?pF?az`~hXqnTE{1Uv35B}gpusZSC~lxs>Q)A?7|=xIn;n3cZL zO}YctTGN`P>$O$Iz3d)hH+jNY+P$&r?2`vt3KlWYd|H9OM6PvF6IT<4s89-iu7Dy^ zLSlMA7Q)w2@J0N&AAp6R>OKREivK;~;t~x~nVHvya+A^#v^|(%Vyt=r{o)DGUzCCz zX81O<^No&jur#yAuYO}NS#oE5qqhhxzTUPSqpUm{KRUg!HntY%Mg9n-vO(>Hy#3RE zn@N+B4;ms4lb?>C25O)?CNfD`sFneuXi_5Hr~^v&?Hu= zy5!F}xP0|FH>Vd{PO@BI))(Z5nrCde6``A=Y92D{;~>FMFO zezfDEPdI*jMM*=h=Mb7cSrwBto}IKzoQjQ7WlhjDJREi%d=o_XhL1rq550tE3jFS^ zb9<)R=DnM#BJXLWu-cbOAvIOb7}G{jm4L-}%Q?|X+qb(KGN7Z|^gYKlb8i(v(@wwC zJ6H);ZcvwZfwXS7mFGV;yGexpRFOY5vH|$uEk3IqiqmtQqb1%F<}mbd7q24&+$};$ zhH$I%a&4rr)$y%&K3#Bfpm4u$eY$+lIVHfmpUQug0=YAOmFDc0*ji_187AvTrE7%! z$Fh2KcMd(j3A-I!GiP<_z}sRYw0Pb2rH^-?ro?lqaK(xJd8xC-ZC-p~T<$$e8+XQl zgLtz-D?nm=^`$^J>i2zNEjnb**hnGwSC?J{Go~xySKI7m#n(-dyTWtQLUm>b{hTpl zWleRv+Lsb$t)tKG%N$Ay^(VxeY=e;ZHtcsQD7>}oaNqW`EIGk^zu*Tj$-56oFK(NB zYNpXEq9j)K3-LTSQPgj}o3OV2@MdU7w!&l3<@Opg0ORv(O6WIE_LX?G%xd%LB$wMW z=W3q3Dh00jH^R}U={B<-oo|>!FI-sN(^v~RWMOu2%sMe`xl^G4-$UgC=jg|~bSTM6fgvxzyO3@m~nHlmnlq!~X+3fM+_pTikOUyT8-swn7{=S^6yejYc zLha{H!zBm4=@N^y|D@sOW<$0lG+3-Pl36_sN+CU8@jgsHsDA@6E+`%QPAKq?^*|*r zm4iCPIo%J(|6a}hN4LLpGZ?g=nK`fi2=ed_yk|9${W|QNCY4aI?mBBE6~6+Gc8L0p zFctOmYYx%s`ER4941~~l0fcH6C2t9dE6HJ7=_Z|?Rl?z|Np}aX`Kpm)J}=b`QoT-@ z&>ZS1e+LfxNSR(bfn<=gVO*y)hgD7m#4BmiI=!4{db6f}Vp7^fNQ<3uE!JCAa{Udy z6Zn^(e76%j)zgP5_ESmlGl!2KEGR3=S~FG*;taT^r=hNh2g$6oY51RAGo0`l2)P`` zI*Z9waZLQK7gixeaCZgjUXKsC{DF#np-Vv$!!|80y;HkLsw-QwTT8P41?7UI1vS3V zqer%vE`m-UGcLc|{d95T7b}0BPCWVi5=5RZ%Kh`+mCrwZ28*Cf_u;gS&xZqKvlzM^ zse}?D9aaOTv!WzI!_Lm?GU%Ovw@Jco`wCb-Wzl&)2%SvUbpV{!><+vOx6b7>?Y>{r zwe<5vR5Z{r@Ay1u!}Qmb%}+W{irrLd`&nWn;r^L{r0R)gKzT4V(0w)G?bPpLZPfnc zG?H%8vkSK1udIx@pf%vF2eQDHa|(IolR@nH$+e_2W7&*#pJ3Rkd5)3h4>bjx-Dlyg z^16rmTpI*6{e8=I}Oj?1Z1 z<-IOMec3=o#P9Z#{0r2RSys%rEuaQ9ElYuDwKxnxF?$IT5H4In-B_?1;SS4uK^Y^8 zbQ~XvtuzY3S#<>B&FlvahBf`pr>-M?R7{%oN@HIdDf>LvRo{d%)BEo(K;1ElehUfq zKJ(cy*Q6r0pEdkOE9eRWNw*<` z@5WV>`5abw_ZCvzmlUn3n5a-kP`n__iMI>vK0I&<_z#SsMi-@RWqlGtT)8|LtSDNHpZ3~i z6JbM**F~162}0_0WLOgZCp8}``0B2iK1Gk@y@*i}%DP=~dfO1_Ey`~-+zZWa++t+o zwUBolvzHk{R^ce6dzel|;JRgMwm{d>CTvVijzu;3Qy!u!*UxmAJ*@pjhJt1=DN{yO zKim6G!A1NKUUm-cy$_$0|BwOPFLqwTPrCkSyh0r}YDlpV_5aYqu{v;e!G ze#(WS>fCQw{+oC?eQxZaJwjNcMP2qYj5~szshV;rmxlEuTM#9?Z27 zz~|YxTA6_sl{@_0uj0ZK(}j5kQnRU`xM4~6kxe5Y(0BW1W}{5px2IqudI6nsXAzw_ zhnS6Dh=?k0Td^(nkyS~&f`FW=SKNHhH_aHKR$94q(_0|Ki5T z6iHXRB^MVhp6Z18GT#fE{!jkFU+S>YiU5nWlapQuwkU5ABxJ+8@sp&;u}_pX`z74oh_0+|e?&iw9u_h3wSrx0Q+UXKdlnzYNmTgxx*Mun-bNH7rMs#CE(( z{T~ClnaGzU^vhj!it`k4E)?qm&!uGI#2Z#hI-5yxtY=+u4HFte|$T}n_emD=J*NCO7G1&P$d3N_behA z)HkQ|7#LCD=x!71og#3mh{$m_th~59)8v4m6SwC?z)pRO4&)x%lr+&FCVPG4O``RE zUc_G2kXtQVxE(m(mH3UB$eX6;@q_n1ce>bj{!=`u9&G=PYJ({Wo)>6blJG{Ri#r+& z`E1HEA$SB2r)jvUjo|47{ zmDRQWtoz;!QrtS(sorM@)MBkJS2^+DLbMwvJR4sJfD{^18zCW2P|sygqF)+LwC{yX zVm5Rz^?RhYRLwZnGbUJ)B8=D!$3VfgIiM@wFpi2!XJxLJ5y zZOhQE&R8vK@kqAaf4=D90t+F9GZx^xXZB9$RWoa;_19w{(UoQ&BFq^?kp_%&h?qZ^ zpr@q4s*{`SPqQg&wj?`N3@044{F1mkEko;=(7Ga6PK!jRpr)EU>{Vq)&&3cGC;PRL#bty_9RTl8+d`A?ah{I%UQw>7SV{ccGg z=@=PZXh4!i0)%*}X;c_WMo!Jhi$p>G{3Ah$jBG)2;ep(JGA&+b;M4_6QzN*F!FSsM z+=*7Pa&47RFm*a9aH~S#rmF z_t5_Nk1Mx%$re877HRC!U#B2E&D)pnS4qSD@{#*Zjdn^}yICZRs{iJ$bM9X=^3Puz z&_Y52pEvYSjhbzl?Gd2lGiMF^bi+xEo1Bvd9U(iDB&(w^k(+p zONt);xw27#qo0&;4=kGCT!rM{26|*Z4WA;(dj|9MqvM2)4KASDl|Geu_9LS%`sVZr zvh*Y?kAi_%n=V%!ThO+^(^B+EMP(HHXY-QgCV25ABQjkhV2|%_3;35!&RcACtZa1E z{S%8WEmaR&Y=~{vqle{g5czlor#Z5PZ?`Vg!QVlAV-qmuMV!acn&Z`#R!84jOdE)a z)_F(8qqBHqEaVmNU;}7?&wb>?d8!__1q7R-C`(T*({<5Bym&ilB;sSjPTEKwO{(GRTPaFxcY4?r|--hA2i~+7X$s@g;ZJ zF}>Vj@}A^V(URlKZDb44ZsU%z{}A+l?IZOp6oh#H;V9eD)%w?u|GZFe!8P8Jx#fWZ zHMN~#er`!80TkQ?&n1tQacAktS-l9Rh_jBH`RMO(oaIF+SZb8R&L4f>BQsV!OitX} z>wB;Lp|`O&YjMa3D*qUl7psQG{T?YWg2`V% z$a32S^v?EHhS!k~M4ANvxfxXcB60NFM^}dW62%$adf%<3vb9E}tSnW}p6f0?MIH+! zq{v`r3f?F<6~1mKJuXzLU!A1#7@me2yr&W%kXcrr6mYvF?MA8 z#?c4=bu%N)mKmQzh@?5(1oKC>aNa+Spk~&7?dTpDG9o)TIJgES7(ovfe2#1N%dXA8ti-DbMU~ZD6UJ869rG;;&1i24Qz+8= zXo1m}mnj&0sf}Fw(s?uI$P1zxDQUpr${7Fj=xh9KqCS(o7Ba2#^%(IQE^!AFRXJMF zzv!uUo=|T@QFmEdddRWT-kfl{)PzAf%FCLfr(J9KmmS#xr<2X?qXN<+1f;Xhm5&he zw!{dS$AH5!LUxQk?!SGkHPgcKvf2lof?Ip^7uA%z z4PV)(=WO;xzRrCDXX!C4*nIRLv<@B#U$nJ6_eURSiy4Qn{#lnj;y1aY>r$)$)@3>4 z0mspA|82N!$MW?{`EF1UGH}A`uP^i5O2*w<*brqyM(J4hvw)M#cyE~N7+UJ`l>j41 zKp&lB@X-ONSAv1Lr$hJn|MtOumE+<$8p6&_4xmUObdfxtSpeoso~K!53y&}%1Hz*A zzY~_uW~Oim1PM{Su5|zZOmJ$)G)N5r4eH%_xy7B7WYCA;BuLFz7~9vRAlS*alP&a- zJ5?T)5i`AW6+GxNUsLn_s8+WPZ&!=9`Ba z*Q<}%_LcT^2%4$;e{j#7L4gex|Fcw6_5xMUXm!u-oh`igDm_Jy8x!I617EHraL1%i znn;K8=eDyQ>E+9@S?_rY_2LEef-f4=^%4t&JN!R_@;&6HhOOb z+@&KOZKE$&rK=yGCNSH7WpAIwHO}cE~ zyO{-RVd+uZN0h4_;8U)F@%eV=K!}8@QK6#~l%NWBgyf=woX-DxO9U^T_|@%IAKeW| zXzpJx4@QhWy%ElurKKU0_2gT-F}j`arndsw0!%F~2I4E?kv1X|120Gox&@IB?a@Yx zp3~YngHrGq*uMU^(+Tu>AgasbBa@HL6zUd44*Oe*?P3 zViyfslNmF1RFMegI0y8W5RHm!f756FDys>u!NAWV6|iE-BeVxXz-!4G(o;{$KqhbG zQu|K*PMv$V3@&rx_u&p``s{fN{29sJts`2G)p%r)5%1#9pwfiU3|^NWFPujyRLqc$ z)X@oVo`6Vx%8HnQ<+j1!L}uoD-NOe%G`K{iqjN<~h(tkr*HVtlpZ=S${$*DV)sWZk zes#(QeMIWG`h%(932FEgoVquP1nBEa9w%f=C|+Fx4%7W7o!iY3_4V~-55K=JLjbK6 z;`;=vMnMpG3ZDrH2^mw#YS(lGFIafs0HiVbRI-8ys($fV#owNtO}e#eu&9IoB7zPt z$w*VuN8&xkU90`D?jwIlLJBQ59~V_$uJt!|l6?mBs9Mj}I~0W7@Ow+1YLL3r952_< z`^faj(lJJ_18uEy9V%#LIIS`X97ZyO-S=B&;BG; zAF0Z&3-0%ZB*NWSCtbKb-iz7qm!f0z<^7|4yN# zqUsdc+uKu1a9gX}(Ev`Vq!*7I`V}5wHrfaP86~^5wUy;Jwrp~CRIl=pF(@MZaC5v} zWmcwg*gE+VfMu0|dcw?FfE~-2cj}e`&57-ZyV#&K5-_9;6rvRDWGimIj*78L-;BwL zF^_zgoxqBl1X+I5zD_nJY!S<|fP|#!lJcz*xN;@O@M$|K&Xq1NKlu;!<&bnqWaPCz1;%>Zb$sxL6AvhPDt zy==hLaZ{CWHc<^_kR8m;I{eDAuBBr}{nw&qP|`F`iNW`dL50Jxw3<4??)!V~IRro! z23;65PszwVpk=xNynU=8O*>Tj&HiEO}0U-44{}lQnvj5*k zT4VOH>q9&5!bMIEt3Nq=*5AMo6LkkS_S3UcHZSKH30L;#L_8rv%H~lfdIJ1Z4v7dk zd*FQ*_!x~(v9k}Yw0i>QXqGN!nnmzg(2iG7{7<*^y@<*^mmK*S4y-^QDSbN5{K*GR zh27aQkffGPD$ANFl>E*tT0Q&bo|Ww5fv>FQd*B8*f8#06dJp8Wq$mIcq!fSb1}XoR z#3szh4g%!O+cqgKZMk+E^MJ^#{?Q*{+vC958&53&PUuqVOUZj*9s`i`5dKfc@P`1xa`!G^}T|8{BmZBns`!APXoE2eIgHNLOzE-Wh}-Y_ltO7-PRF1 z6{)y#*;EZF)`$Ohws7=$#;JLp!}ZYf&hV*GYD?uF8M2zYb23-od{n<*r2xF${2w@z z%f@Ptp_OBo>q1*fnewAvEZ(J%d%Uxu;F`7rMDLar;r5b>C6<&^^kh8V zwKu^hxjHCwd)&{H<$+Fud#ln&>TY$NKFj{-#G&VlMrR{kfZcTf%0t~P^I0eV8BQzC zj|B;=tALzr56a*3`QRVke(C>KA(;(dhoT+hBxi1Mr$-lb88hVN^?eWMsnIF=>c#pdl^i~Pz z;0S%7gFkl~{M*_240x`vub5ZG{zo0WIQIDUr|Y>V;lZDCP2?*Ueu7@*uL1!aob@RH z%^oIS&aA7pUAus)pNW*q22kiV`r2?_;!`#gJ+f`4`iWN;=DddVEU(^AIV1rkPre;1 z_((<^9pA1XM5phclb@o|RAC5MxTYM5p$v-`H8r`~D1P?6GwIS6Z6f4SH$3?A=Jgzj zvY4Ig|0i2Qe(7%1g+5Jia}WTWI3E+WSbn2Q`f3}KMG#JILgt=%z%}A#p;w*Ijf7p` z`S$kxF$33?N)7zIH<3fCojJQV0aTQm^S3Wan1J<)@_6SMB^7WDw(u=J_d1X8?5q?wG$?+8F~LYi3{LdI!Ns|5H|l^) zGG7FD-@X1@=LBXR|qn5o&-J<2B|#<`wf*Jo)~;39#g;WUxNYV$?`DrEBYC%X8d zpn`<@w*k9=e!u6sS_ioNw@A6np6Ba+dK9Sv2#`~+n#tyydmeS&5tc+y)Ri>t8?`J3 zxAyJ{f#1JS(Oz8zG-N}B#V(!9K+S=4CDV_Fg?Hf{mw5&!SENg4#>DajS3ybQk!YO&y~QslItWd4}m?6r<~y&P7h`{IkxS1(fm2 zHGV&{tQl|PXkdGelT5$vW#kcR7Q&a z%~gS8PVoZD*ji)#MEmwLDa>1PHBiIWf8wG7sF&y+g7~foHP77@3~&fX1(6dnUecl4 z%M7&T+mcsFtb9Q1oBo_hovw_Oh0{N0RXViY;8iNKkzdx&fJ;ALC-{xy(_Zgdy`74; z7Le)oyU!cdh*#xLy-&8!^du6`jVo3_-x*W{c#2ynxeL0=dV4Q~3I!CIAQP5R@;AwT zfAptYYZt%y|Fw4Ifl%)69uYZ36iN(nS`aG9Ze(c+5eXrZ6J_6-!Jw2%Oq(TpB>Ps3 zeN@)$`;u&lv5mouZ7}Zlb$;jGQ@8qE=XcLvF~>Xa`+cAN`8=N|pOl-aUz~M0M=DPo zY)@KD;3~WMm6E=iGE8PlK$Is`sc^8xVy>a`j%T13@v??a~_Rd6u>Ih zJ1Txqe&wS!Y=x(5RPYrq91KvsW>`h;dTRP?-W38X} zXwo5Zo}H23ksinH}*44?Z4P+$?j)co~1!ow;-fq>Go^7FE8> z(*BjYJ`>%|@g}>RN_o<+8sQ0uT92B4Nzvjp|CpP(y~P3*fKB}5am)jBE5rD00!*TY z2`Op3q2Yq3&_u7n61|g{8wt8Ddiapzc6xmw`rF1&z}lDk9Lja)2w7w|Km(pTtR&20=3e)B{OnrTQ!BoxEZ1C>Y8pXw2-S?$MYk-RRDGcOh;pgXC z-b2*H;mkwXz+y)Qh0bx$q9-rKMTW>urtF%j=RGYgKMZ`0j!aWwm%y?qU*s~h%7Yy2 z;GM|hq345{5>2B*5D9U3E=s}=cd&+g3gUm(gmyaD6+LiaW4*Qph5L9gjrejNqB9#c z>7YSnaCJ__E#@VM2C{u2apK{^DTpKrv_&HK90jb*i~!jy^@sxS4cZv5&m(ntWA*i> zi*M$UJBgGbgbSJ%leX-1RV~Pcy|Y&;|0-DTGKzZG>_d{x=*z?>;<8zJI+jj6YQF4^ zOMoKmb3i5x_YdlteknOgomWluQ}i&mE)YNuG*;+Oel-{IEd)i~dvAsO6nBlgf7isZ zi~wbmopQr0;olmmf61P4u97OR;Lajde?yoq2CBA*z+RbTn0)tW|unFitZmD@4|nQNP|=l$#< zjj+mB7qa|Jw=Flm^X{G9UaA^8of6xhF($7=vktZtT!1pS@K_L`CxcNi?+#OINBP4c zTuK}1<&^Y1=g~Tysg9x5ha4j6Zp4TcC~l;$#K5V`>`${qI?yxu-KIhmw#-F|Fa@wn zr7n*$KPv7k;{!4pz8xnan=eE=Aq%I&vo(aMPqCpwIETs5CYT#*W*ZA;?ZAr}RgcJ` z##Q(tv4G#Kt$>Le5!B)ukZe(8sF;-xF?!!HB^{#c%*7m0m^eQH*b6Qk_!K^do%A%R z(P>pMlBnf*xyIdsQS1!lokX$eVIEQ&X(;!2Z0LIh4S5L=ZFbw2s-UUY^>=947DLLl zc9Rl}ym!STj)J`->w^e|z3hDtnP=u`-iv_60`o=puX)jb=34-Q1jR;zeOZDF+?y=o zJNR<$TQ9KrVVe8El%fetAZ5y-E+@7IfEu3*6X#+s8hdk9Nt*U~4wGbw4HC`A>=}7o zFUI6m?HrNIq;GLyAPYLvlyS;Aj0)D8d4Y!4yA+8pwNT4G7EPAHMQm1+gyS8A44$ID zt8+a7ZSy186M;Vz9eS*ZKhxW@mq$}7dHezY15DKU@hV{4KF3tHy+x27W|QDcY`e_^ zY0W7EQT!3*LAMpAM8r`ABfaYwn*=P=A2ry7PBd=va<(vDgt7=$Q{eO#vg*6-)H)Ya z-mIsat*0H6(4kQfPKg8FdE(VGE%h267tI~j4(H4!(H5Ry?(`MJusQ+IB_hwX<>xA0 z0sBqxF?Nns!8P7)RlOa2eUrJTH~rbd8NUZuxVx{UpQ28DslE-SZXChmq?*QhNHfoy zzH{WIKT|?YksY@1?8uq>vky2g*CnR;X6_s`akr?35}wyko;yLy>ZybRskv9+g%0L% z4^GAM3U%Y2fMvyCVy+L#qvs-xf^SWAIlE%>$ja}oBh6~3{_3C6{Zqh!e=7TZKTo~a zA=gWFii)?V+R&^6f3S3JsJJ&-7XG0U3Taa_V0{mATy4{_OxLSd=jg_DPRL;gZJ)6z zWt*=g6>-mjs!ZGGepGPxHCMe;m>hdMw$CAPP?&KGWcecIB&G!fzk<=Oi0;v;Qjvb3~zRgtSQ5qA$EI{pemm^g=wxR73W9o=sj=7s{GcLzG4+FCo zNyctvDW<#!2XYC}@@lAxqN^tqC*@%Ju*E@75o4#y?*qoAj`>fgpkbY_K$L(OC8xv> z*yfApHa6-2;6o0Sq1KB*#4}HriH$x3ot}DiArE^!I!!@B7{)xpb`G-$Y6Rj7OG_9d z(FSO#(n&j88im7WFM8STlTPbG=Bni+-rRZ^*fpo05sV7|8VF|Fww?V$!73>vB&Ow2CpR{|fUI7P3@5tveyaMq& zRKaT76SrL1h8bg)G~{c)UR0W@$5ftx915 zwpN9D5ZQJ0sYQkpB^ zS_-S00n!paWnS9s-rrQsVzaysnE$osTB<2|5TSw)&LsqR$xML&SX^t0A5I=lc3v*M ztMZ;Sb8%T-c^q`~TrO*VI0^7Fe%8;vt!((cI|_>AIy?h^Z>s!H(E5&3csH^nrH=PZ zJJT~vx4_Z;?}?V@O1HN_^GVycZ$F#K$$^Dxis83(hGmrV*px#!{rgi|uJ-W(2_}Pm zHP<_^-I>PWP#yMEFD;oHT@Kg;G~yB*4zz=ANVM*P*K{!`PC01Qo-z?Uz5x=lgaD!q zO~JjqsHv--!*?e{9grF?P5~Paoc#)Kso-a5>MhfD72>*o_!z0T5W;y74~Bxn<~&nF zOQLAW5JUU~1cOXXz=4?J$qkFI&g;3fXgrRIx4M-#beYR#fkf1AEqQm3} zF42$^uh9!)|&9ruZNP9SEfvtisxIDK`xfR_wrZ`c9yx>bN4XVF{BAK-Jv+Q-hI>PgK~uB zAEDe?*_R0xXT2F!TND*bpw%>2(qb_gIWG{_5%SbX<#ihx4{T7e_pwVDVpG^4`&iXB zUZ;?mP`(x!?|}p!rRK}cr1GO)pvk==FkY?P2z7@62+fm>oW7*$W-89&)o;i^HZ8R# zKlnBbu!SPad&n!1-~Re9(Lr6hM);IJ0o3lo#Am>X_yU3&>+l9!f7E#?ubj*FN65n# zC~QoVKpb@k-7n$x5}7mm4^D!SLR^4p;!|h(Qt`r}+b1`GTYGn|YNE#y#AaxT&x#zh zWF{O!k{}H>>g~mFcJ?Jc^y0Ci|D0%zvSYi3(Hw({2JG>e3AX4EnuVUUF(3~3wii~hS3V3wMKBF% zg=m{vY2kO>EgpKyA-KvFI3SN{1A7QM-qfeeZl;_dN`Agx>BdF?*D{m^e0B)s#T(br zy^nFKj*7}tBMci;i;)#f>4=-_V2_I9j^=J$WjxZy zP({P?-}vl$Q?sy-mGhKHJYqu&6y#lN4+cJRU4ZJiMfw5_Fjn!(ZLr*R=_aUjl~lJn z0$VD4<6T%&6vD_BA~P1DJ1TFfHwcBw6DKgphFa_qi{BOZ%=O;q?Do~`ic7Hz9wte5 z)rQqrxetOZ+TyjXq*LT}Yt~()9Sv8=t(n~wt%+W8WG$M1+#|nsi9z6x)nxd3s_kKA zEYyXVBof8n&mOQZH2;G_%gA$F_k7XzmMNSdnS1K9=Sc9O3|PCMq0yZQ2ob%*6)}7A zwOZ&5leUyaSbijB41m(itUaZx1r1G?4h#=4sS&|qkrOtr)H;cVuNQCqQN8_<=3XVt z&^%NIXa5rN*s1XBKKSibHdwYDAT@3Xa$6kq-Eih{i(v{zh+ zPZHj^=P^Y~ZCiqhqa`qz$zjk{apVP z7$56z9ax;tt$P)T{4Tq^x(OY_?Xin_x|xat-PUs_VE*e#8sTA6t5DjjDV(`q39|!~ zOt{Rvol?hOQ&o2uoOr9vw%vd1od>N662gmB+c1##VK`@g;}Sb2Hn$SY=>vz#>z<{R zDtvP^%6a3ywr~op+pG`~N};SgN}F`bN<4{HXueTZT@U#Eu4a`~zY2zBc3bIv#Mm59 zo02kKtGdgSR#PF~iVds7FYFufI^INTTZ^yK0bNQecio_r%0V)2?R9ARtNA5ukB+!~ zyOpxNpGg7q7A^Us+!9vve|!#PTwbe#DsI{Apt|X|!a8#hyfZAwi|9#`LX;x+sZSZrUX#UQB_Bo&e^e?X<}46rHPbx2tl| z0e7S9K!Z;R9r=E?$34JtiULxC<+Jff+n`x19u0be;IbTO66FTHY6P+C%i&!A>7Fa} z3y>ZqGmUj~`cE;jb+^odvRVTivp%Z6 z+LQimIp|$IzvvOe^?p@)fctha4J7wgGNO2XXE6hlGO9&KjS9AE>#C%Q6U0zuYxNW~%KHo^<=9x$i7L zTv!`1i{0N-{?-CRavcpd2n%FLa9;JqAL+u3Cd_;2nhj;VZBmEgwt8)O9yZ_02hky5lj{O% z_L>IA{Yi=r?fNY8H-HMZj;k??+n09RR5+gTtV94nA+97BZzAe9xN{i4g%lm{1yG}B zqPDBwg{c2})h+el<1%k|axjg*Dd#wms2y&GMrQdb0!#i0pF~B9`NMR`>`HuIVC(fJ zbml+lqPsGgIKF3?7>jby0woULPxd8**NML^f?AuusBV0}eX>Yap@68F>|>Uwf_NSk zvyj*VXBve_=5ZC4OVm%BkQAZv-=`mcE2p;Z5F|y*`p%CZ@lW`SWx%^n`8MqUa?(Cb z;v5@7YQ=gO%iJCi1(Oc#t^f`A5AjJy>H23bol7L&3O<+eSqPh zpJHrXwe}vRK~FiG@9I;g0O(B&m3YbbivzrL$Pt7PNmME|^;3V|wAC9-ZgzIIo{|~X z^_DCI^$dx{PvTW90Lp5y7Qn6_+ESOw?2q~3R+@`Mzx%#aP5>;oc3Ktu4%zg#_F{y+ zKa*8~bI}Zwjzh4WqvLV4xw(%!dl3xe&UAz1Q830Z3t&rf!f}ZAq@CO(qoO_iN+EHd zKsgQqv8MSAbo7v&Xvr6(@)*9;hkhXN?LOP5e*yZvmd0SMY~b79B;;tg~WuYT_N*-lAn?p3t}7|My4s7ggp@ zyMwq`g4NCS(#)NabHsaYqZYRzcYL+}lIzkRlxBnZKO%SzMthaLStAN_RryRLo8aSvya3uXY} z#0}7btZ^kNn$`eEUkJfnO}R2E07A4IeL7J1KLaC2X!&a;Kl@^3b5kc&9{oB2!d6{Q z*9W6lfsMw`jr#S4{9uv*(5toNA-IbVp8p@UpCH`<*3=lqbOP94&%&u?QD_g@R&7UI6DUUVJN~NBf`8TG5SzVCsB*nAn9tLTS!(1&4x9hrna? z7|XPpf%9X%0Oq+)$c#X`s3?Q)*Z=m_ywhU_rY{NW!}d4W+P8wtw7W-^KH&=mMA|3z zD#b-@8<#;1G>tY3M#QGav0hff2#lY2iT(e1WBdR<4pJ^YMF*Wa9a6NUcB**!^En>H z=4WT6XvwXxXLDJber_bA@9=jJ1tSP8{=dfk{;qDcbjEl79D|zo_jfg9iBD!%0^<%o+OD0VB?lM0{qCE_IlwoW%Iu+hj~4yLKm$yK?MkuR zR9lD#XMdtACyKM!iawzY zVLAZ3I)rY#f{pzAlgwRU7i#DT?p`Wbn=9X{=C|kY!!PJzW)Lt_OwShQJ?){x62sc5 zNE|zgG7Cw-7}NTQoN_$(!@v54*zo7X(ybT0TN##t5a%{bWuX=0nGl2H>m-PYNkQty ziLKuxH-meRc_7dxR+;4?6Ivg0;g_ToZ$Ob)-IsVbTUfV-&Im$dPBIpNe z1s94{nP>%WlzsAvX7}IR(U1P}do2N8d5l>VE04BZTEa7r2i+5i#}BO>KW_se(VHe* zgMaSM|M#Ufe`ASN615))ml#8Qr9qvK#ecyQhHvA6NohFjOy2U_XxSUlIin$h7dy5> z(%%(_2TiFc_3CfU!N0%7;}r}5hZosDXa+hEEAnUnhT}nO4w3d1$rt}}@b$+R7qC?< zfo25{wUB(lu&55xRR-5?#&4DT|8V?|*vISDnlKRsM-3GDBIWgVD1dQFB$?+T@$lsq z1QPiZ(7;bm(SN_t?v?o~K0Xt(MM0OO+?+>A?$&_;%;OUCD94tc{@G9NJK`dkCw{w1 zX@BX$^>r30f^RZTjj6ytQ3AuB771HFH3{SR_6HB~nYy&=IYmMDwv7uJC~Frnqrk+N zD=P1#h2tb0iD`NJc#O`F# zp*T){H{bDZ5AfYiE)e0S#-ztB;o~Zt8OXIU_+q?TlAbb=CEtYG=jNB4OU}#x_A=ke zTtq9K%=K7H5C?=pf!qm_y=qG$1*s3_hOP2K?)+-7>4z57Uk92%87-|!Rgll`v>W9| zg(Rf=Db{^Fu+`IV@C25hFH!`|X6r1;C*k&u)r||sH!o{!`|c6`y)K;n?K$(f3s>@U z7d+b;%o~qN~mSRRaedcPUOq-8)%%$CuxfWw$$f5hnqDAUwO3Uqr;-1 z*DCAbl!}HiG=p(2IWFZt-$pPD&ixZ>@x$lb{OSgP6^KG$OTm;zL7~#~Ql!}3fyNCm z1mFBQsN%^l215QGoBX%8i5F_w3EiAdT~d<7t<~wcb4CF}NxFY$GtzXO<>#biR&MPY}9H0DBcpTZ&xS>wNyJySi1!kU6 zYYj7Tp)4^a$Me+}NL?2>z`%)zY>fSj+V9ftA0E+vpVglZIZr9mZ(z_qIh4d1K8crk z0tgNW9Up<{S&>JFhqkH+jtGAoj}knCzJ*k3ub#Q42!?(EkA-?!%#oX0wQT&y-$LPA zNj9AKq=&h%5Xoe{w9`7&3EbLZ{_yygZ;jEPYBIFeQWONx_XhB07nj2d3!_q*TFLFf zr~ZkXPoSe@;Bf3p4&h`Z%S(I%QqzF89{@JCDrbrGmidByxSP_Rz)!vGJ>+Nlblj~j zrL*+MDA8X?jQ%b|O)u zPrz*lW>hprl~5wdErNj{D%Z}*`ndHsx{bjyf3@u(i8IOlK@6A{lL~AW42az`iPYPw zkp!nK=K$Bpm2~2^pqvSjXS;zDzP4u73 z&9$@4syJ_bv%zyT3cCfoV}o8E0ZQ=o&~W@#mEbrIq>ENd3&|>DVs)X-BZFXA&afER zM>TE*@x3Zrb}samu}Xi`*<^VG{($W063?UFu@+-7CRF*f_=2qU3cg}FLSf?UN<)bv z&xv0M?hikj;ddMXP^lQeiq2c?0^-0~WK%3Y+#WC_T$=I-&z_tqs+sXH{7Apmz+`s> zlFlH*D0H!R6*dtc!v&J1e%)z#e2WX1m-9uos`cO4woS!BFg9zesh8ioM|(kx2YTDZ zr!ot>(V*DGk7#l^Aa-Y6+@0*WjAI>|#XuImQ{l zm$ii?k5jHL})3H&E87iYcm0zs)Lg#fK#Z zF-iha*Uq@Lj%2syWg=@5C~E=6lSfs~LqArk9|o(Naue~94j^WtlNAJg7N1$YKGa8e zp0EgsiaASsO}UCbY(Rl%Jb3gL`NgBro-Hd(JA*&~byg6g6;35;w|%iI(8zQb^B?#~ z3x-@{jcta%C=}c1n<=)(@cfEG=q~}k^KOp-4b2V@hzsDGH)WZj1V%;G8jWRcD(2u# zC+vLz{gk{-)XOydl^ehN4RpiPy$F)suXx=HSO4K5f!y{3UdqJR=hKauQdc5j>~+aP zBR5MdYom=Dz=G;;obLCPTj(Gsl>3^`Jq-PV*s@9X&oqm_*F17=aOHKutM1Y-p|=JJ z_}5f@FFmZh?pP+yZf2mYd;ZXb6@10%$*nAt!=77rahdw@?GvxuOJc4U&Z8M$r;Dv$ zFv=si3x%K7CU|$~49Po>A%D-O;HN)dC>VGQF|Ox%_bQ!XQy#R=-o?1pywu-`0qrw) zXu{8H@Q7&C+e^h>8`B*ymRJOnf>rA!DS?T%GdLTM*|7s{=7EaRJ^=hFcHkim>h~VW zEgPjC3WIJ;m8&GJB$tMtwRscQ&xOltKTlb#)D4Unb zDYtQs-N*@#^0H%4rCBREk(olUt^S$1|0U($NH+MNb1pM~25r_`gI?3m>`N9gx0>xd zYIR8Z)@ns06OOV_MxEcvVi4+2NLK(1Ky#91AWXL4^Yf7Ppu~1AxNlQS!^{eeL zsEzt7(SICC?uVsWQ!5d%k8!J=*~w~s_Hkq61-xLxd(v?Ca54VS{eij_z#!xUW;GD9 zW#E8QJBuV0RXhSr>Jc_9@v;!dUe&( zF3Pv>)DjlC7%fy?B40R; zI_lCMvflTqAKRa$+NhCF`n>v-ulbUCfV@>hpv!owxbx_`$6)4xIg+Q)3fYjqpea)( zV4z4+^s`+!Iai|ToQMHTw=SiodNQQ`_CLFwnG%-7JMgucB>=PX)-4{cvuV?k@m6$L z?7w&WYtkfAoiKb2DdeR1T!~LHOMf!xA|-=IiSJ=FYi6sM5Siy(vx6L{uaptOI+`j} z46-zd$R)Y)L6nc`Lp z!l|XO1+hZ$UU`#4J9A1IR)HO4uhKABN(pt>Zq&&y3aF1>j&rXk@v zARnJwUx`lWG=HR>=iLy*NlL7e-6LwVQ2^(0v^v{a#!}&yFlu3Xikekk$l^`)-q0jp z9bWAQn?|GwO<7MUUdb#|#PG4zh%Q_7#`5}}?mL5U^v362k04^)%fLIth7@#jm$`S= zVI##cHPZUjs#Mmt!E&7M5lWWh29Y{QG%NR=T304f1zxKK5%0^Eu~<-42Zc_EN3OCi z@j3ApZa8k7X!W=Y{WJsr?Ax(=cWhlvGiZ!jv2IW%HhDZN=m9#pvh?N*yx+IlZHU^w zj#nMzfPO08aNW2<+O;lcch8?MD|GIFQNX7E5-B#)Jje+=Gjj$%4a3qpC&CB_9 zO7`T$6LmhLm!$`Kuf;~-T}xulB_!LkBzkOjxlHaj5733ipR7JUJ(Xj7#mKqY>$Sqt zCkauL9DV}M(+Pmrv;n(-`dh1J*vd6YxNUCdr)uz{82PIh?RmCb0kkajmJbpS<5l)Cc+7LqQ5(iYz!D|99Ywn$s4pL Xy15FIV*U{{;J@=~TB=#f*KYq8c`gIA literal 0 HcmV?d00001 diff --git a/experimental/examples/opencensus-shim/package.json b/experimental/examples/opencensus-shim/package.json new file mode 100644 index 0000000000..689d1c7c24 --- /dev/null +++ b/experimental/examples/opencensus-shim/package.json @@ -0,0 +1,41 @@ +{ + "name": "opencensus-shim", + "private": true, + "version": "0.40.0", + "description": "Example of using @opentelemetry/shim-opencensus in Node.js", + "main": "index.js", + "scripts": { + "client": "node -r @opentelemetry/shim-opencensus/register ./client.js", + "server": "node -r @opentelemetry/shim-opencensus/register ./server.js" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/open-telemetry/opentelemetry-js.git" + }, + "keywords": [ + "opentelemetry", + "http", + "tracing", + "opencensus" + ], + "engines": { + "node": ">=14" + }, + "author": "OpenTelemetry Authors", + "license": "Apache-2.0", + "bugs": { + "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": "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" + }, + "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/opencensus-shim", + "devDependencies": {} +} diff --git a/experimental/examples/opencensus-shim/server.js b/experimental/examples/opencensus-shim/server.js new file mode 100644 index 0000000000..98ddcf5b60 --- /dev/null +++ b/experimental/examples/opencensus-shim/server.js @@ -0,0 +1,39 @@ +'use strict'; + +const { SpanStatusCode } = require('@opentelemetry/api'); +const setup = require('./setup'); +const utils = require('./utils'); +const { trace } = require('@opentelemetry/api'); + +setup('opencensus-shim-example-server'); +const http = require('http'); + +const otelTracer = trace.getTracer('opencensus-shim-example'); + +function startServer(port) { + // requests are traced by OpenCensus http instrumentation + const server = http.createServer(async (req, res) => { + // you can mix OTel and OC instrumentation + + // deliberately sleeping to mock some action + await otelTracer.startActiveSpan('sleep', async span => { + await utils.sleep(1000); + span.end(); + }); + + trace.getActiveSpan()?.addEvent('write headers'); + res.writeHead(200, { 'Content-Type': 'application/json' }); + trace.getActiveSpan()?.addEvent('write json response'); + res.write(JSON.stringify({ status: 'OK', message: 'Hello World!' })); + trace.getActiveSpan()?.setStatus(SpanStatusCode.OK); + res.end(); + }); + + server.listen(port, err => { + if (err) throw err; + + console.log(`Server is listening on ${port}`); + }); +} + +startServer(3000); diff --git a/experimental/examples/opencensus-shim/setup.js b/experimental/examples/opencensus-shim/setup.js new file mode 100644 index 0000000000..e96c62ae0c --- /dev/null +++ b/experimental/examples/opencensus-shim/setup.js @@ -0,0 +1,51 @@ +/* + * 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. + */ +'use strict'; + +const { DiagConsoleLogger, diag, DiagLogLevel } = require('@opentelemetry/api'); +const { + NodeTracerProvider, + BatchSpanProcessor, +} = require('@opentelemetry/sdk-trace-node'); +const { + OTLPTraceExporter, +} = require('@opentelemetry/exporter-trace-otlp-grpc'); +const { Resource } = require('@opentelemetry/resources'); +const { + SemanticResourceAttributes, +} = require('@opentelemetry/semantic-conventions'); + +module.exports = function setup(serviceName) { + const tracing = require('@opencensus/nodejs'); + + diag.setLogger(new DiagConsoleLogger(), { logLevel: DiagLogLevel.ALL }); + const provider = new NodeTracerProvider({ + resource: new Resource({ + [SemanticResourceAttributes.SERVICE_NAME]: serviceName, + }), + }); + provider.addSpanProcessor( + new BatchSpanProcessor(new OTLPTraceExporter(), { + scheduledDelayMillis: 5000, + }) + ); + provider.register(); + + // Start OpenCensus tracing + tracing.start({ samplingRate: 1, logger: diag }); + + return provider; +}; diff --git a/experimental/examples/opencensus-shim/utils.js b/experimental/examples/opencensus-shim/utils.js new file mode 100644 index 0000000000..3b1c625009 --- /dev/null +++ b/experimental/examples/opencensus-shim/utils.js @@ -0,0 +1,22 @@ +/* + * 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. + */ +'use strict'; + +async function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +exports.sleep = sleep; diff --git a/experimental/packages/shim-opencensus/README.md b/experimental/packages/shim-opencensus/README.md index e614fccf38..e79cfc0f43 100644 --- a/experimental/packages/shim-opencensus/README.md +++ b/experimental/packages/shim-opencensus/README.md @@ -15,7 +15,64 @@ npm install --save @opentelemetry/shim-opencensus ## Usage -TODO +### Installing the shim's require-in-the-middle hook + +This is the recommended way to use the shim. + +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 +usage of OpenCensus's tracing methods (in OpenCensus instrumentation or your own custom +instrumentation) to be reported to OpenTelemetry. + +There are two options for installing the hook: + +1. Using Node's `--require` flag to load the register module: + + ```sh + node --require @opentelemetry/shim-opencensus/register ./app.js + ``` + +2. Programmatically: + + ```js + // Early in your application startup + require('@opentelemetry/shim-opencensus').installShim(); + ``` + + Note that this has to be run before any OpenCensus tracers have been created. + +### Replace OpenCensus tracer with the `ShimTracer` in your code + +Alternatively, you can replace any usage of OpenCensus tracers in your code with the `ShimTracer` directly. + +Before: + +```js +const tracing = require('@opencensus/nodejs'); +const tracer = tracing.start({samplingRate: 1}).tracer; + +// ... + +tracer.startRootSpan({name: 'main'}, rootSpan => { + rootSpan.end(); +}); +``` + +After: + +```js +const { trace } = require('@opentelemetry/api'); +const { ShimTracer } = require('@opentelemetry/shim-opencensus'); +const tracer = new ShimTracer(trace.getTracer('my-module')); + +// ... + +tracer.startRootSpan({name: 'main'}, rootSpan => { + rootSpan.end(); +}); +``` + +## Example See [examples/opencensus-shim](https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/opencensus-shim) for a short example. diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index f0b4581a82..75e08e6c64 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -4,6 +4,10 @@ "description": "OpenCensus to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", + "exports": { + ".": "./build/src/index.js", + "./register": "./build/src/register.js" + }, "repository": "open-telemetry/opentelemetry-js", "scripts": { "prepublishOnly": "npm run compile", diff --git a/experimental/packages/shim-opencensus/src/index.ts b/experimental/packages/shim-opencensus/src/index.ts index ccfe42e2f8..5df2f6c315 100644 --- a/experimental/packages/shim-opencensus/src/index.ts +++ b/experimental/packages/shim-opencensus/src/index.ts @@ -15,3 +15,4 @@ */ export { ShimTracer } from './ShimTracer'; +export { installShim, uninstallShim } from './shim'; From 661b2831e4f9b3c2d89fc905eb34e6798e2c254b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 14 Jun 2023 16:40:01 +0200 Subject: [PATCH 025/141] chore(deps): update dependency markdownlint-cli to v0.34.0 (#3906) Co-authored-by: Marc Pichler --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3c2b15e771..0e7aceefbc 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "gh-pages": "5.0.0", "lerna": "6.0.3", "linkinator": "5.0.1", - "markdownlint-cli": "0.32.2", + "markdownlint-cli": "0.34.0", "prettier": "2.8.8", "semver": "7.5.1", "typedoc": "0.22.18", From 51fb576c169745d0da66ae82d43d7b7d1b8d9323 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 14 Jun 2023 17:28:49 +0200 Subject: [PATCH 026/141] chore(deps): update dependency webpack-cli to v4.10.0 (#3907) --- experimental/packages/exporter-logs-otlp-http/package.json | 2 +- experimental/packages/exporter-trace-otlp-http/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-http/package.json | 2 +- .../packages/opentelemetry-instrumentation-fetch/package.json | 2 +- .../opentelemetry-instrumentation-xml-http-request/package.json | 2 +- .../packages/opentelemetry-instrumentation/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-resources/package.json | 2 +- packages/opentelemetry-sdk-trace-web/package.json | 2 +- selenium-tests/package.json | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 8e1de3460d..a87c9086e9 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -95,7 +95,7 @@ "ts-mocha": "10.0.0", "typescript": "4.4.4", "webpack": "4.46.0", - "webpack-cli": "4.9.1", + "webpack-cli": "4.10.0", "webpack-merge": "5.9.0" }, "peerDependencies": { diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index dd9520c163..a9d1c2a233 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -87,7 +87,7 @@ "ts-mocha": "10.0.0", "typescript": "4.4.4", "webpack": "4.46.0", - "webpack-cli": "4.9.1", + "webpack-cli": "4.10.0", "webpack-merge": "5.9.0" }, "peerDependencies": { diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 077dc558bb..0db0336308 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -87,7 +87,7 @@ "ts-mocha": "10.0.0", "typescript": "4.4.4", "webpack": "4.46.0", - "webpack-cli": "4.9.1", + "webpack-cli": "4.10.0", "webpack-merge": "5.9.0" }, "peerDependencies": { diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 6d2856e07e..54e46b6471 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -80,7 +80,7 @@ "ts-mocha": "10.0.0", "typescript": "4.4.4", "webpack": "4.46.0", - "webpack-cli": "4.9.1", + "webpack-cli": "4.10.0", "webpack-merge": "5.9.0" }, "peerDependencies": { diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 317304b9a5..55e976c345 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -80,7 +80,7 @@ "ts-mocha": "10.0.0", "typescript": "4.4.4", "webpack": "4.46.0", - "webpack-cli": "4.9.1", + "webpack-cli": "4.10.0", "webpack-merge": "5.9.0" }, "peerDependencies": { diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 6be8d48953..8859ceb3a7 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -107,7 +107,7 @@ "ts-mocha": "10.0.0", "typescript": "4.4.4", "webpack": "4.46.0", - "webpack-cli": "4.9.1", + "webpack-cli": "4.10.0", "webpack-merge": "5.9.0" }, "engines": { diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 1836cc1d59..a30b14f40a 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -77,7 +77,7 @@ "ts-mocha": "10.0.0", "typescript": "4.4.4", "webpack": "4.46.0", - "webpack-cli": "4.9.1", + "webpack-cli": "4.10.0", "zone.js": "0.11.4" }, "peerDependencies": { diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 7540e42216..8c3e53159d 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -70,7 +70,7 @@ "ts-mocha": "10.0.0", "typescript": "4.4.4", "webpack": "4.46.0", - "webpack-cli": "4.9.1", + "webpack-cli": "4.10.0", "webpack-merge": "5.9.0" }, "dependencies": { diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index eb01400782..341b5aacf3 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -84,7 +84,7 @@ "ts-mocha": "10.0.0", "typescript": "4.4.4", "webpack": "4.46.0", - "webpack-cli": "4.9.1", + "webpack-cli": "4.10.0", "webpack-merge": "5.9.0" }, "peerDependencies": { diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 6539303c0b..48e167e933 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -83,7 +83,7 @@ "ts-mocha": "10.0.0", "typescript": "4.4.4", "webpack": "4.46.0", - "webpack-cli": "4.9.1", + "webpack-cli": "4.10.0", "webpack-merge": "5.9.0" }, "peerDependencies": { diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 17fa9c9466..bba04425df 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -84,7 +84,7 @@ "ts-mocha": "10.0.0", "typescript": "4.4.4", "webpack": "4.46.0", - "webpack-cli": "4.9.1", + "webpack-cli": "4.10.0", "webpack-merge": "5.9.0" }, "peerDependencies": { diff --git a/selenium-tests/package.json b/selenium-tests/package.json index fd93de9a1f..cc0ee0108a 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -48,7 +48,7 @@ "selenium-server": "3.141.59", "terser-webpack-plugin": "4.2.3", "webpack": "4.46.0", - "webpack-cli": "4.9.1", + "webpack-cli": "4.10.0", "webpack-dev-server": "4.5.0", "webpack-merge": "5.9.0" }, From c981558b50f237437930d1c1bc5bbc568e2a60ae Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 14 Jun 2023 17:48:01 +0200 Subject: [PATCH 027/141] chore(deps): update typescript-eslint monorepo to v5.59.11 (#3910) --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0e7aceefbc..4ffd239f21 100644 --- a/package.json +++ b/package.json @@ -63,8 +63,8 @@ "author": "OpenTelemetry Authors", "license": "Apache-2.0", "devDependencies": { - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "eslint": "8.22.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", From 4b2d887cd5030b7751a2e55bcc7ce92823c1ce88 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 15 Jun 2023 11:18:45 +0200 Subject: [PATCH 028/141] chore(deps): update dependency karma to v6.4.2 (#3911) --- api/package.json | 2 +- experimental/packages/api-events/package.json | 2 +- experimental/packages/api-logs/package.json | 2 +- experimental/packages/exporter-logs-otlp-http/package.json | 2 +- experimental/packages/exporter-trace-otlp-http/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-http/package.json | 2 +- .../packages/opentelemetry-instrumentation-fetch/package.json | 2 +- .../opentelemetry-instrumentation-xml-http-request/package.json | 2 +- .../packages/opentelemetry-instrumentation/package.json | 2 +- experimental/packages/otlp-transformer/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-core/package.json | 2 +- packages/opentelemetry-exporter-zipkin/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-web/package.json | 2 +- packages/sdk-metrics/package.json | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/api/package.json b/api/package.json index 3e51ca7bd0..f8778eca5a 100644 --- a/api/package.json +++ b/api/package.json @@ -69,7 +69,7 @@ "cross-var": "1.1.0", "dpdm": "3.13.1", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index 2c93e18c36..d0099e6b37 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -70,7 +70,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index eabcfc00fb..1d8f9be947 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -70,7 +70,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index a87c9086e9..021f474873 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -82,7 +82,7 @@ "cpx": "1.5.0", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index a9d1c2a233..024e1c8a8a 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -74,7 +74,7 @@ "cpx": "1.5.0", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.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 0db0336308..f9fd7b2c8f 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -74,7 +74,7 @@ "cpx": "1.5.0", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 54e46b6471..a9316939d3 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -67,7 +67,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 55e976c345..c8b8069cd3 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -67,7 +67,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 8859ceb3a7..653d68cf7b 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -94,7 +94,7 @@ "cpx": "1.5.0", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index 9e1af19e88..a92ed10f69 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -65,7 +65,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index a08a034964..fa845b235a 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -79,7 +79,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index a30b14f40a..1e5d673d76 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -64,7 +64,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 8c3e53159d..08cebd7359 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -58,7 +58,7 @@ "babel-loader": "8.3.0", "codecov": "3.8.3", "cross-var": "1.1.0", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 9596497acc..2411e5d894 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -72,7 +72,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 341b5aacf3..eadbe549f1 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -70,7 +70,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index ec76269552..f748e6a311 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -62,7 +62,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 48e167e933..004477eb19 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -69,7 +69,7 @@ "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "cross-var": "1.1.0", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 44ac5857dc..7f93ea4c1b 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -73,7 +73,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index bba04425df..0004fb222b 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -69,7 +69,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-jquery": "0.2.4", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 778a9ff859..48e28af1ae 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -61,7 +61,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "karma": "6.3.16", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", From e8f3432bdec680bc8d77359dec1eda36a2840244 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Fri, 16 Jun 2023 12:37:29 +0200 Subject: [PATCH 029/141] chore: add lerna to devDependencies in all packages (#3909) --- api/package.json | 1 + experimental/packages/api-events/package.json | 1 + experimental/packages/api-logs/package.json | 1 + experimental/packages/exporter-logs-otlp-grpc/package.json | 1 + experimental/packages/exporter-logs-otlp-http/package.json | 1 + experimental/packages/exporter-logs-otlp-proto/package.json | 1 + experimental/packages/exporter-trace-otlp-grpc/package.json | 1 + experimental/packages/exporter-trace-otlp-http/package.json | 1 + experimental/packages/exporter-trace-otlp-proto/package.json | 1 + .../packages/opentelemetry-browser-detector/package.json | 1 + .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 1 + .../opentelemetry-exporter-metrics-otlp-http/package.json | 1 + .../opentelemetry-exporter-metrics-otlp-proto/package.json | 1 + .../packages/opentelemetry-exporter-prometheus/package.json | 1 + .../packages/opentelemetry-instrumentation-fetch/package.json | 1 + .../packages/opentelemetry-instrumentation-grpc/package.json | 1 + .../packages/opentelemetry-instrumentation-http/package.json | 1 + .../opentelemetry-instrumentation-xml-http-request/package.json | 1 + experimental/packages/opentelemetry-instrumentation/package.json | 1 + experimental/packages/opentelemetry-sdk-node/package.json | 1 + experimental/packages/otlp-exporter-base/package.json | 1 + experimental/packages/otlp-grpc-exporter-base/package.json | 1 + experimental/packages/otlp-proto-exporter-base/package.json | 1 + experimental/packages/otlp-transformer/package.json | 1 + experimental/packages/sdk-logs/package.json | 1 + experimental/packages/shim-opencensus/package.json | 1 + packages/opentelemetry-context-async-hooks/package.json | 1 + packages/opentelemetry-context-zone-peer-dep/package.json | 1 + packages/opentelemetry-context-zone/package.json | 1 + packages/opentelemetry-exporter-jaeger/package.json | 1 + packages/opentelemetry-exporter-zipkin/package.json | 1 + packages/opentelemetry-propagator-b3/package.json | 1 + packages/opentelemetry-propagator-jaeger/package.json | 1 + packages/opentelemetry-resources/package.json | 1 + packages/opentelemetry-sdk-trace-base/package.json | 1 + packages/opentelemetry-sdk-trace-node/package.json | 1 + packages/opentelemetry-sdk-trace-web/package.json | 1 + packages/opentelemetry-semantic-conventions/package.json | 1 + packages/opentelemetry-shim-opentracing/package.json | 1 + packages/sdk-metrics/package.json | 1 + packages/template/package.json | 1 + 41 files changed, 41 insertions(+) diff --git a/api/package.json b/api/package.json index f8778eca5a..63bd7361e3 100644 --- a/api/package.json +++ b/api/package.json @@ -76,6 +76,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 d0099e6b37..1a97263cca 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -76,6 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 1d8f9be947..c2816018b0 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -76,6 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 75cb057c8c..f7acfd1683 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -60,6 +60,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", + "lerna": "6.0.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 021f474873..422c873ec1 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -88,6 +88,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 9287bafde0..9e1b831311 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -71,6 +71,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", + "lerna": "6.0.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 7f4ce27a27..27528117ae 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -57,6 +57,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", + "lerna": "6.0.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 024e1c8a8a..94f1ba2172 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -80,6 +80,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 fb37df438b..9d7ddcd95a 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -70,6 +70,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", + "lerna": "6.0.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 a63c9f58c6..80eccd5ebe 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -60,6 +60,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", + "lerna": "6.0.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 5773a233c3..f5597ea8ab 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -56,6 +56,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", + "lerna": "6.0.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 f9fd7b2c8f..cf8265e2f2 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -80,6 +80,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 e4b75b7bb2..715d8576d0 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -55,6 +55,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", + "lerna": "6.0.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 1bd383b8d5..c7c7b4e976 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -50,6 +50,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", + "lerna": "6.0.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 a9316939d3..56f01a2f0b 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -73,6 +73,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 ec5ddd50af..00bb975161 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -58,6 +58,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", + "lerna": "6.0.3", "mocha": "10.2.0", "node-pre-gyp": "0.17.0", "nyc": "15.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 2c25b4abd3..894400a26f 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -59,6 +59,7 @@ "axios": "1.4.0", "codecov": "3.8.3", "cross-var": "1.1.0", + "lerna": "6.0.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 c8b8069cd3..677f0b7af4 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -73,6 +73,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 653d68cf7b..17af8f71a0 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -100,6 +100,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 aafb3e13e6..26880e8289 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -70,6 +70,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", + "lerna": "6.0.3", "mocha": "10.2.0", "nyc": "15.1.0", "semver": "7.5.1", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index e5047d16a9..b42eff0084 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -71,6 +71,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", + "lerna": "6.0.3", "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 7cef192d65..277ba2d883 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -59,6 +59,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", + "lerna": "6.0.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 34e6d171dc..e324cc5bcd 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -66,6 +66,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", + "lerna": "6.0.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 a92ed10f69..5a4943237d 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -71,6 +71,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 fa845b235a..b1812c8a67 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -85,6 +85,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 75e08e6c64..dd38b1f1d1 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -57,6 +57,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", + "lerna": "6.0.3", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 699ccc0bd7..5445e07861 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -49,6 +49,7 @@ "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", + "lerna": "6.0.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 1e5d673d76..c24d7ca2b2 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -70,6 +70,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 08cebd7359..b1091f959a 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -63,6 +63,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 bdd9ab1e9d..2b303ab20d 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -51,6 +51,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", + "lerna": "6.0.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 eadbe549f1..cc9bfec4ac 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -76,6 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 b2e782672c..e5b61772c1 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -63,6 +63,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", + "lerna": "6.0.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 f748e6a311..37f9786d3b 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -68,6 +68,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 004477eb19..c0d875a9a6 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -76,6 +76,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 7f93ea4c1b..f39c976cb8 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -80,6 +80,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 35e83895c6..37d5178f7f 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -54,6 +54,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", + "lerna": "6.0.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 0004fb222b..29d6d1267b 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -77,6 +77,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 4296ed1c2e..57c244af85 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -54,6 +54,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", + "lerna": "6.0.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 0a4c56882a..d221b825fe 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -50,6 +50,7 @@ "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", + "lerna": "6.0.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 48e28af1ae..90ed681bc6 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -67,6 +67,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", + "lerna": "6.0.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 9ff7db8db0..c90e6b5b6d 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -80,6 +80,7 @@ "devDependencies": { "@types/node": "18.6.5", "cross-var": "1.1.0", + "lerna": "6.0.3", "typescript": "4.4.4" }, "Add these to devDependencies for testing": { From dfe6fe827297f9f848e5fa5b78f144b0fd13d6e1 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 16 Jun 2023 12:51:35 +0200 Subject: [PATCH 030/141] chore(deps): update dependency lerna to v6.6.2 (#3885) --- 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 +- 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-exporter-prometheus/package.json | 2 +- .../packages/opentelemetry-instrumentation-fetch/package.json | 2 +- .../packages/opentelemetry-instrumentation-grpc/package.json | 2 +- .../packages/opentelemetry-instrumentation-http/package.json | 2 +- .../opentelemetry-instrumentation-xml-http-request/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 | 2 +- experimental/packages/otlp-proto-exporter-base/package.json | 2 +- experimental/packages/otlp-transformer/package.json | 2 +- experimental/packages/sdk-logs/package.json | 2 +- experimental/packages/shim-opencensus/package.json | 2 +- package.json | 2 +- 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 | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- 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 | 2 +- packages/opentelemetry-semantic-conventions/package.json | 2 +- packages/opentelemetry-shim-opentracing/package.json | 2 +- packages/sdk-metrics/package.json | 2 +- packages/template/package.json | 2 +- 43 files changed, 43 insertions(+), 43 deletions(-) diff --git a/api/package.json b/api/package.json index 63bd7361e3..f938ff131b 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": "6.0.3", + "lerna": "6.6.2", "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 1a97263cca..ae67318f24 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": "6.0.3", + "lerna": "6.6.2", "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 c2816018b0..7c81c223fc 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": "6.0.3", + "lerna": "6.6.2", "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 f7acfd1683..5f23cf62ec 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": "6.0.3", + "lerna": "6.6.2", "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 422c873ec1..8ce3c71865 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -88,7 +88,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "6.0.3", + "lerna": "6.6.2", "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 9e1b831311..d4b7b7e9c7 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -71,7 +71,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "6.0.3", + "lerna": "6.6.2", "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 27528117ae..83982a9ee8 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": "6.0.3", + "lerna": "6.6.2", "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 94f1ba2172..2f6470ea16 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": "6.0.3", + "lerna": "6.6.2", "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 9d7ddcd95a..9934282fbc 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -70,7 +70,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "6.0.3", + "lerna": "6.6.2", "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 80eccd5ebe..4754938569 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -60,7 +60,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "6.0.3", + "lerna": "6.6.2", "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 f5597ea8ab..e0289cda7d 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": "6.0.3", + "lerna": "6.6.2", "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 cf8265e2f2..27838945dc 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": "6.0.3", + "lerna": "6.6.2", "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 715d8576d0..1e3be6aabd 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": "6.0.3", + "lerna": "6.6.2", "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 c7c7b4e976..b1c1f53207 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": "6.0.3", + "lerna": "6.6.2", "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 56f01a2f0b..d4f7d576ee 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": "6.0.3", + "lerna": "6.6.2", "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 00bb975161..2e8efd422a 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": "6.0.3", + "lerna": "6.6.2", "mocha": "10.2.0", "node-pre-gyp": "0.17.0", "nyc": "15.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 894400a26f..189902c595 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": "6.0.3", + "lerna": "6.6.2", "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 677f0b7af4..31022d95ad 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": "6.0.3", + "lerna": "6.6.2", "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 17af8f71a0..2bfd6c87bd 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": "6.0.3", + "lerna": "6.6.2", "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 26880e8289..f58ad1f429 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -70,7 +70,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "lerna": "6.0.3", + "lerna": "6.6.2", "mocha": "10.2.0", "nyc": "15.1.0", "semver": "7.5.1", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index b42eff0084..5a7026bbb5 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -71,7 +71,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "lerna": "6.0.3", + "lerna": "6.6.2", "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 277ba2d883..8502876aa1 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -59,7 +59,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "6.0.3", + "lerna": "6.6.2", "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 e324cc5bcd..9c99881442 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -66,7 +66,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "6.0.3", + "lerna": "6.6.2", "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 5a4943237d..b27be31811 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -71,7 +71,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "6.0.3", + "lerna": "6.6.2", "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 b1812c8a67..35536fafd0 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -85,7 +85,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "6.0.3", + "lerna": "6.6.2", "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 dd38b1f1d1..893399131b 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": "6.0.3", + "lerna": "6.6.2", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/package.json b/package.json index 4ffd239f21..eacb5cc205 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "4.2.1", "gh-pages": "5.0.0", - "lerna": "6.0.3", + "lerna": "6.6.2", "linkinator": "5.0.1", "markdownlint-cli": "0.34.0", "prettier": "2.8.8", diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 5445e07861..6f4dc6833d 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": "6.0.3", + "lerna": "6.6.2", "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 c24d7ca2b2..1e62d98b0c 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": "6.0.3", + "lerna": "6.6.2", "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 b1091f959a..79b02e47fd 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": "6.0.3", + "lerna": "6.6.2", "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 2411e5d894..d9d8f0e6b7 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": "6.0.3", + "lerna": "6.6.2", "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 2b303ab20d..28a93cd632 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": "6.0.3", + "lerna": "6.6.2", "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 cc9bfec4ac..0d60085f6b 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -76,7 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "6.0.3", + "lerna": "6.6.2", "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 e5b61772c1..d49ad3d5d8 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -63,7 +63,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "lerna": "6.0.3", + "lerna": "6.6.2", "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 37f9786d3b..dc0f502c5a 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": "6.0.3", + "lerna": "6.6.2", "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 c0d875a9a6..fce03769bc 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": "6.0.3", + "lerna": "6.6.2", "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 f39c976cb8..5d1a556c11 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": "6.0.3", + "lerna": "6.6.2", "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 37d5178f7f..366817f63f 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": "6.0.3", + "lerna": "6.6.2", "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 29d6d1267b..bffbaa2f70 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -77,7 +77,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "6.0.3", + "lerna": "6.6.2", "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 57c244af85..edd54ccb24 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": "6.0.3", + "lerna": "6.6.2", "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 d221b825fe..e2bfae06a7 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": "6.0.3", + "lerna": "6.6.2", "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 90ed681bc6..aca2f6457a 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -67,7 +67,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "6.0.3", + "lerna": "6.6.2", "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 c90e6b5b6d..0af80862c8 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": "6.0.3", + "lerna": "6.6.2", "typescript": "4.4.4" }, "Add these to devDependencies for testing": { From d76f34eef248bbbeec9a588df8e968bd6326ff87 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 19 Jun 2023 11:31:30 +0200 Subject: [PATCH 031/141] chore(deps): update dependency semver to v7.5.2 (#3919) --- .../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 2e8efd422a..43d366ec89 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -62,7 +62,7 @@ "mocha": "10.2.0", "node-pre-gyp": "0.17.0", "nyc": "15.1.0", - "semver": "7.5.1", + "semver": "7.5.2", "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 f58ad1f429..ec4e96ea6a 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -73,7 +73,7 @@ "lerna": "6.6.2", "mocha": "10.2.0", "nyc": "15.1.0", - "semver": "7.5.1", + "semver": "7.5.2", "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", diff --git a/package.json b/package.json index eacb5cc205..dca33d4c27 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "linkinator": "5.0.1", "markdownlint-cli": "0.34.0", "prettier": "2.8.8", - "semver": "7.5.1", + "semver": "7.5.2", "typedoc": "0.22.18", "typedoc-plugin-missing-exports": "1.0.0", "typedoc-plugin-resolve-crossmodule-references": "0.2.2", From 5bee444ab6767d8c6e9d805cf6fa50dcd998f65c Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 20 Jun 2023 05:29:28 +0200 Subject: [PATCH 032/141] chore: fix misaligned dependency versions (#3924) * chore: fix misaligned dependency versions * chore(otlp-transformer): remove sdk-logs devDependency --- examples/esm-http-ts/package.json | 16 ++++++++-------- .../packages/otlp-transformer/package.json | 2 -- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/examples/esm-http-ts/package.json b/examples/esm-http-ts/package.json index 6cba2efe26..71977f73ff 100644 --- a/examples/esm-http-ts/package.json +++ b/examples/esm-http-ts/package.json @@ -30,13 +30,13 @@ }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/", "dependencies": { - "@opentelemetry/api": "1.4.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.38.0", - "@opentelemetry/instrumentation": "0.38.0", - "@opentelemetry/instrumentation-http": "0.38.0", - "@opentelemetry/resources": "1.9.1", - "@opentelemetry/sdk-trace-base": "1.9.1", - "@opentelemetry/sdk-trace-node": "1.9.1", - "@opentelemetry/semantic-conventions": "1.9.1" + "@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" } } diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index b27be31811..d6146dcbb8 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -58,8 +58,6 @@ }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/api-logs": "0.39.1", - "@opentelemetry/sdk-logs": "0.39.1", "@types/mocha": "10.0.1", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", From 67d4b806653e31a4ad76c30dd728d9ba448caf43 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 20 Jun 2023 11:57:51 +0200 Subject: [PATCH 033/141] chore: bump lerna to 7.0.2, add @lerna/legacy-package-management (#3926) --- 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 +- 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-exporter-prometheus/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 | 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 | 2 +- experimental/packages/otlp-proto-exporter-base/package.json | 2 +- experimental/packages/otlp-transformer/package.json | 2 +- experimental/packages/sdk-logs/package.json | 2 +- experimental/packages/shim-opencensus/package.json | 2 +- package.json | 3 ++- 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 | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- 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 | 2 +- packages/opentelemetry-semantic-conventions/package.json | 2 +- packages/opentelemetry-shim-opentracing/package.json | 2 +- packages/sdk-metrics/package.json | 2 +- packages/template/package.json | 2 +- 43 files changed, 44 insertions(+), 43 deletions(-) diff --git a/api/package.json b/api/package.json index f938ff131b..0195f70550 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": "6.6.2", + "lerna": "7.0.2", "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 ae67318f24..d1a1072aa3 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": "6.6.2", + "lerna": "7.0.2", "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 7c81c223fc..10cf74653d 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": "6.6.2", + "lerna": "7.0.2", "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 5f23cf62ec..96125109e7 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": "6.6.2", + "lerna": "7.0.2", "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 8ce3c71865..0f777e5bec 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -88,7 +88,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "6.6.2", + "lerna": "7.0.2", "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 d4b7b7e9c7..c665ae50de 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -71,7 +71,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "6.6.2", + "lerna": "7.0.2", "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 83982a9ee8..61ad5e4861 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": "6.6.2", + "lerna": "7.0.2", "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 2f6470ea16..fe5222fd9c 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": "6.6.2", + "lerna": "7.0.2", "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 9934282fbc..90720984d9 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -70,7 +70,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "6.6.2", + "lerna": "7.0.2", "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 4754938569..9cf3f179dd 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -60,7 +60,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "6.6.2", + "lerna": "7.0.2", "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 e0289cda7d..7fb9d1dba7 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": "6.6.2", + "lerna": "7.0.2", "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 27838945dc..f2f5e1d5ed 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": "6.6.2", + "lerna": "7.0.2", "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 1e3be6aabd..293109c727 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": "6.6.2", + "lerna": "7.0.2", "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 b1c1f53207..8a40e2a893 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": "6.6.2", + "lerna": "7.0.2", "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 d4f7d576ee..407c77006f 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": "6.6.2", + "lerna": "7.0.2", "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 43d366ec89..c224158e8e 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": "6.6.2", + "lerna": "7.0.2", "mocha": "10.2.0", "node-pre-gyp": "0.17.0", "nyc": "15.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 189902c595..9d4b657a84 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": "6.6.2", + "lerna": "7.0.2", "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 31022d95ad..f8e5325545 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": "6.6.2", + "lerna": "7.0.2", "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 2bfd6c87bd..32c7fb2c54 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": "6.6.2", + "lerna": "7.0.2", "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 ec4e96ea6a..f8f6ab04d4 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -70,7 +70,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "lerna": "6.6.2", + "lerna": "7.0.2", "mocha": "10.2.0", "nyc": "15.1.0", "semver": "7.5.2", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 5a7026bbb5..3f10a7d7f5 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -71,7 +71,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "lerna": "6.6.2", + "lerna": "7.0.2", "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 8502876aa1..0fd6150aa9 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -59,7 +59,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "6.6.2", + "lerna": "7.0.2", "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 9c99881442..8d16f23995 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -66,7 +66,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "6.6.2", + "lerna": "7.0.2", "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 d6146dcbb8..3af3c81a4a 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": "6.6.2", + "lerna": "7.0.2", "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 35536fafd0..48b0bd249e 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -85,7 +85,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "6.6.2", + "lerna": "7.0.2", "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 893399131b..9c0596f55e 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": "6.6.2", + "lerna": "7.0.2", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/package.json b/package.json index dca33d4c27..c315860f32 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,8 @@ "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "4.2.1", "gh-pages": "5.0.0", - "lerna": "6.6.2", + "lerna": "7.0.2", + "@lerna/legacy-package-management": "7.0.2", "linkinator": "5.0.1", "markdownlint-cli": "0.34.0", "prettier": "2.8.8", diff --git a/packages/opentelemetry-context-async-hooks/package.json b/packages/opentelemetry-context-async-hooks/package.json index 6f4dc6833d..15afdd385d 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": "6.6.2", + "lerna": "7.0.2", "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 1e62d98b0c..1953baa5ab 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": "6.6.2", + "lerna": "7.0.2", "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 79b02e47fd..014010ff51 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": "6.6.2", + "lerna": "7.0.2", "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 d9d8f0e6b7..e31b72adb6 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": "6.6.2", + "lerna": "7.0.2", "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 28a93cd632..bb1b0f0ce5 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": "6.6.2", + "lerna": "7.0.2", "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 0d60085f6b..1a45055f4a 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -76,7 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "6.6.2", + "lerna": "7.0.2", "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 d49ad3d5d8..96dfb8ae47 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -63,7 +63,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "lerna": "6.6.2", + "lerna": "7.0.2", "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 dc0f502c5a..4fe14702b6 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": "6.6.2", + "lerna": "7.0.2", "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 fce03769bc..1315523a5a 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": "6.6.2", + "lerna": "7.0.2", "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 5d1a556c11..8343363431 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": "6.6.2", + "lerna": "7.0.2", "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 366817f63f..1d349de0b1 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": "6.6.2", + "lerna": "7.0.2", "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 bffbaa2f70..697ea92a97 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -77,7 +77,7 @@ "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "6.6.2", + "lerna": "7.0.2", "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 edd54ccb24..e95dcf1616 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": "6.6.2", + "lerna": "7.0.2", "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 e2bfae06a7..1c477967f3 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": "6.6.2", + "lerna": "7.0.2", "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 aca2f6457a..6fcb0e4ef4 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -67,7 +67,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "6.6.2", + "lerna": "7.0.2", "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 0af80862c8..233c29e79c 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": "6.6.2", + "lerna": "7.0.2", "typescript": "4.4.4" }, "Add these to devDependencies for testing": { From f40e3de178af02766e0c1e146216b19a9c6a5d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=B2=92=E7=B2=92=E6=A9=99?= Date: Tue, 20 Jun 2023 18:32:33 +0800 Subject: [PATCH 034/141] feat(otlp-grpc-exporters): Add support for Unix domain socket endpoints. (#3853) * feat(otlp-grpc-exporter-base): add support for unix domain socket * test(otlp-grpc-exporter): add tests * chore(docs): update docs and changelog * fix: skip UDS tests on windows * Update CHANGELOG.md * fix: add protocol to http test urls * fix: update tests --------- Co-authored-by: Marc Pichler Co-authored-by: Chengzhong Wu --- experimental/CHANGELOG.md | 2 + .../exporter-logs-otlp-grpc/README.md | 1 + .../test/OTLPLogExporter.test.ts | 69 +++++++++++-------- .../exporter-trace-otlp-grpc/README.md | 5 ++ .../test/OTLPTraceExporter.test.ts | 65 ++++++++++------- .../README.md | 1 + .../test/OTLPMetricExporter.test.ts | 47 ++++++++----- .../otlp-grpc-exporter-base/src/util.ts | 3 + .../otlp-grpc-exporter-base/test/util.test.ts | 5 ++ 9 files changed, 130 insertions(+), 68 deletions(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 4d7da0576e..1ac87111b5 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -10,6 +10,8 @@ All notable changes to experimental packages in this project will be documented ### :rocket: (Enhancement) +* feat(otlp-grpc-exporters): add support for UDS endpoints. [#3853](https://github.com/open-telemetry/opentelemetry-js/pull/3853) @llc1123 + ### :bug: (Bug Fix) ### :books: (Refine Doc) diff --git a/experimental/packages/exporter-logs-otlp-grpc/README.md b/experimental/packages/exporter-logs-otlp-grpc/README.md index 17c9573398..d683d0bebe 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/README.md +++ b/experimental/packages/exporter-logs-otlp-grpc/README.md @@ -34,6 +34,7 @@ import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-grpc'; const collectorOptions = { // url is optional and can be omitted - default is http://localhost:4317 + // Unix domain sockets are also supported: 'unix:///path/to/socket.sock' url: 'http://:', }; diff --git a/experimental/packages/exporter-logs-otlp-grpc/test/OTLPLogExporter.test.ts b/experimental/packages/exporter-logs-otlp-grpc/test/OTLPLogExporter.test.ts index 48f1fa865e..9bda910924 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/test/OTLPLogExporter.test.ts +++ b/experimental/packages/exporter-logs-otlp-grpc/test/OTLPLogExporter.test.ts @@ -44,9 +44,11 @@ const includeDirs = [ path.resolve(__dirname, '../../otlp-grpc-exporter-base/protos'), ]; -const address = 'localhost:1503'; +const httpAddr = 'https://localhost:1503'; +const udsAddr = 'unix:///tmp/otlp-logs.sock'; type TestParams = { + address?: string; useTLS?: boolean; metadata?: grpc.Metadata; }; @@ -54,10 +56,11 @@ type TestParams = { const metadata = new grpc.Metadata(); metadata.set('k', 'v'); -const testCollectorExporter = (params: TestParams) => - describe(`OTLPLogExporter - node ${params.useTLS ? 'with' : 'without'} TLS, ${ - params.metadata ? 'with' : 'without' - } metadata`, () => { +const testCollectorExporter = (params: TestParams) => { + const { address = httpAddr, useTLS, metadata } = params; + return describe(`OTLPLogExporter - node ${useTLS ? 'with' : 'without'} TLS, ${ + metadata ? 'with' : 'without' + } metadata, target ${address}`, () => { let collectorExporter: OTLPLogExporter; let server: grpc.Server; let exportedData: IResourceLogs | undefined; @@ -92,7 +95,7 @@ const testCollectorExporter = (params: TestParams) => }, } ); - const credentials = params.useTLS + const credentials = useTLS ? grpc.ServerCredentials.createSsl( fs.readFileSync('./test/certs/ca.crt'), [ @@ -103,10 +106,15 @@ const testCollectorExporter = (params: TestParams) => ] ) : grpc.ServerCredentials.createInsecure(); - server.bindAsync(address, credentials, () => { - server.start(); - done(); - }); + const serverAddr = new URL(address); + server.bindAsync( + serverAddr.protocol === 'https:' ? serverAddr.host : address, + credentials, + () => { + server.start(); + done(); + } + ); }); }); @@ -115,7 +123,7 @@ const testCollectorExporter = (params: TestParams) => }); beforeEach(done => { - const credentials = params.useTLS + const credentials = useTLS ? grpc.credentials.createSsl( fs.readFileSync('./test/certs/ca.crt'), fs.readFileSync('./test/certs/client.key'), @@ -123,9 +131,9 @@ const testCollectorExporter = (params: TestParams) => ) : grpc.credentials.createInsecure(); collectorExporter = new OTLPLogExporter({ - url: 'https://' + address, + url: address, credentials, - metadata: params.metadata, + metadata: metadata, }); done(); }); @@ -141,7 +149,7 @@ const testCollectorExporter = (params: TestParams) => // Need to stub/spy on the underlying logger as the 'diag' instance is global const spyLoggerWarn = sinon.stub(diag, 'warn'); collectorExporter = new OTLPLogExporter({ - url: `http://${address}`, + url: address, headers: { foo: 'bar', }, @@ -150,9 +158,13 @@ const testCollectorExporter = (params: TestParams) => assert.strictEqual(args[0], 'Headers cannot be set when using grpc'); }); it('should warn about path in url', () => { + if (new URL(address).protocol === 'unix:') { + // Skip this test for UDS + return; + } const spyLoggerWarn = sinon.stub(diag, 'warn'); collectorExporter = new OTLPLogExporter({ - url: `http://${address}/v1/logs`, + url: `${address}/v1/logs`, }); const args = spyLoggerWarn.args[0]; assert.strictEqual( @@ -190,7 +202,7 @@ const testCollectorExporter = (params: TestParams) => }, 500); }); it('should log deadline exceeded error', done => { - const credentials = params.useTLS + const credentials = useTLS ? grpc.credentials.createSsl( fs.readFileSync('./test/certs/ca.crt'), fs.readFileSync('./test/certs/client.key'), @@ -199,9 +211,9 @@ const testCollectorExporter = (params: TestParams) => : grpc.credentials.createInsecure(); const collectorExporterWithTimeout = new OTLPLogExporter({ - url: 'grpcs://' + address, + url: address, credentials, - metadata: params.metadata, + metadata: metadata, timeoutMillis: 100, }); @@ -222,7 +234,7 @@ const testCollectorExporter = (params: TestParams) => }); describe('export - with gzip compression', () => { beforeEach(() => { - const credentials = params.useTLS + const credentials = useTLS ? grpc.credentials.createSsl( fs.readFileSync('./test/certs/ca.crt'), fs.readFileSync('./test/certs/client.key'), @@ -230,13 +242,13 @@ const testCollectorExporter = (params: TestParams) => ) : grpc.credentials.createInsecure(); collectorExporter = new OTLPLogExporter({ - url: 'https://' + address, + url: address, credentials, - metadata: params.metadata, + metadata: metadata, compression: CompressionAlgorithm.GZIP, }); }); - it('should successfully send the spans', done => { + it('should successfully send the log records', done => { const responseSpy = sinon.spy(); const logRecords = [Object.assign({}, mockedReadableLogRecord)]; collectorExporter.export(logRecords, responseSpy); @@ -248,13 +260,13 @@ const testCollectorExporter = (params: TestParams) => const logs = exportedData.scopeLogs[0].logRecords; const resource = exportedData.resource; - assert.ok(typeof logs !== 'undefined', 'spans do not exist'); + assert.ok(typeof logs !== 'undefined', 'log records do not exist'); ensureExportedLogRecordIsCorrect(logs[0]); assert.ok(typeof resource !== 'undefined', "resource doesn't exist"); ensureResourceIsCorrect(resource); - ensureMetadataIsCorrect(reqMetadata, params.metadata); + ensureMetadataIsCorrect(reqMetadata, metadata); done(); }, 500); @@ -263,7 +275,7 @@ const testCollectorExporter = (params: TestParams) => describe('Logs Exporter with compression', () => { const envSource = process.env; it('should return gzip compression algorithm on exporter', () => { - const credentials = params.useTLS + const credentials = useTLS ? grpc.credentials.createSsl( fs.readFileSync('./test/certs/ca.crt'), fs.readFileSync('./test/certs/client.key'), @@ -273,9 +285,9 @@ const testCollectorExporter = (params: TestParams) => envSource.OTEL_EXPORTER_OTLP_COMPRESSION = 'gzip'; collectorExporter = new OTLPLogExporter({ - url: 'https://' + address, + url: address, credentials, - metadata: params.metadata, + metadata: metadata, }); assert.strictEqual( collectorExporter.compression, @@ -285,6 +297,7 @@ const testCollectorExporter = (params: TestParams) => }); }); }); +}; describe('OTLPLogExporter - node (getDefaultUrl)', () => { it('should default to localhost', done => { @@ -344,3 +357,5 @@ describe('when configuring via environment', () => { testCollectorExporter({ useTLS: true }); testCollectorExporter({ useTLS: false }); testCollectorExporter({ metadata }); +// skip UDS tests on windows +process.platform !== 'win32' && testCollectorExporter({ address: udsAddr }); diff --git a/experimental/packages/exporter-trace-otlp-grpc/README.md b/experimental/packages/exporter-trace-otlp-grpc/README.md index b03274b320..933e120775 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/README.md +++ b/experimental/packages/exporter-trace-otlp-grpc/README.md @@ -30,6 +30,7 @@ const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc' const collectorOptions = { // url is optional and can be omitted - default is http://localhost:4317 + // Unix domain sockets are also supported: 'unix:///path/to/socket.sock' url: 'http://:', }; @@ -54,6 +55,7 @@ const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc' const collectorOptions = { // url is optional and can be omitted - default is http://localhost:4317 + // Unix domain sockets are also supported: 'unix:///path/to/socket.sock' url: 'http://:', credentials: grpc.credentials.createSsl(), }; @@ -94,6 +96,7 @@ metadata.set('k', 'v'); const collectorOptions = { // url is optional and can be omitted - default is http://localhost:4317 + // Unix domain sockets are also supported: 'unix:///path/to/socket.sock' url: 'http://:', metadata, // // an optional grpc.Metadata object to be sent with each request }; @@ -120,6 +123,7 @@ The OTLPTraceExporter has a timeout configuration option which is the maximum ti const collectorOptions = { timeoutMillis: 15000, // url is optional and can be omitted - default is localhost:4317 + // Unix domain sockets are also supported: 'unix:///path/to/socket.sock' url: ':', metadata, // // an optional grpc.Metadata object to be sent with each request }; @@ -138,6 +142,7 @@ const { CompressionAlgorithm } = require('@opentelemetry/exporter-trace-otlp-grp const collectorOptions = { // url is optional and can be omitted - default is http://localhost:4317 + // Unix domain sockets are also supported: 'unix:///path/to/socket.sock' url: 'http://:', metadata, // // an optional grpc.Metadata object to be sent with each request compression: CompressionAlgorithm.GZIP, diff --git a/experimental/packages/exporter-trace-otlp-grpc/test/OTLPTraceExporter.test.ts b/experimental/packages/exporter-trace-otlp-grpc/test/OTLPTraceExporter.test.ts index 17e5511010..f22fc95d2a 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/test/OTLPTraceExporter.test.ts +++ b/experimental/packages/exporter-trace-otlp-grpc/test/OTLPTraceExporter.test.ts @@ -49,9 +49,11 @@ const includeDirs = [ path.resolve(__dirname, '../../otlp-grpc-exporter-base/protos'), ]; -const address = 'localhost:1501'; +const httpAddr = 'https://localhost:1501'; +const udsAddr = 'unix:///tmp/otlp-traces.sock'; type TestParams = { + address?: string; useTLS?: boolean; metadata?: grpc.Metadata; }; @@ -59,10 +61,11 @@ type TestParams = { const metadata = new grpc.Metadata(); metadata.set('k', 'v'); -const testCollectorExporter = (params: TestParams) => - describe(`OTLPTraceExporter - node ${ - params.useTLS ? 'with' : 'without' - } TLS, ${params.metadata ? 'with' : 'without'} metadata`, () => { +const testCollectorExporter = (params: TestParams) => { + const { address = httpAddr, useTLS, metadata } = params; + return describe(`OTLPTraceExporter - node ${ + useTLS ? 'with' : 'without' + } TLS, ${metadata ? 'with' : 'without'} metadata, target ${address}`, () => { let collectorExporter: OTLPTraceExporter; let server: grpc.Server; let exportedData: IResourceSpans | undefined; @@ -97,7 +100,7 @@ const testCollectorExporter = (params: TestParams) => }, } ); - const credentials = params.useTLS + const credentials = useTLS ? grpc.ServerCredentials.createSsl( fs.readFileSync('./test/certs/ca.crt'), [ @@ -108,10 +111,15 @@ const testCollectorExporter = (params: TestParams) => ] ) : grpc.ServerCredentials.createInsecure(); - server.bindAsync(address, credentials, () => { - server.start(); - done(); - }); + const serverAddr = new URL(address); + server.bindAsync( + serverAddr.protocol === 'https:' ? serverAddr.host : address, + credentials, + () => { + server.start(); + done(); + } + ); }); }); @@ -120,7 +128,7 @@ const testCollectorExporter = (params: TestParams) => }); beforeEach(done => { - const credentials = params.useTLS + const credentials = useTLS ? grpc.credentials.createSsl( fs.readFileSync('./test/certs/ca.crt'), fs.readFileSync('./test/certs/client.key'), @@ -128,9 +136,9 @@ const testCollectorExporter = (params: TestParams) => ) : grpc.credentials.createInsecure(); collectorExporter = new OTLPTraceExporter({ - url: 'https://' + address, + url: address, credentials, - metadata: params.metadata, + metadata: metadata, }); const provider = new BasicTracerProvider(); @@ -149,7 +157,7 @@ const testCollectorExporter = (params: TestParams) => // Need to stub/spy on the underlying logger as the 'diag' instance is global const spyLoggerWarn = sinon.stub(diag, 'warn'); collectorExporter = new OTLPTraceExporter({ - url: `http://${address}`, + url: address, headers: { foo: 'bar', }, @@ -158,9 +166,13 @@ const testCollectorExporter = (params: TestParams) => assert.strictEqual(args[0], 'Headers cannot be set when using grpc'); }); it('should warn about path in url', () => { + if (new URL(address).protocol === 'unix:') { + // Skip this test for UDS + return; + } const spyLoggerWarn = sinon.stub(diag, 'warn'); collectorExporter = new OTLPTraceExporter({ - url: `http://${address}/v1/trace`, + url: `${address}/v1/trace`, }); const args = spyLoggerWarn.args[0]; assert.strictEqual( @@ -198,7 +210,7 @@ const testCollectorExporter = (params: TestParams) => }, 500); }); it('should log deadline exceeded error', done => { - const credentials = params.useTLS + const credentials = useTLS ? grpc.credentials.createSsl( fs.readFileSync('./test/certs/ca.crt'), fs.readFileSync('./test/certs/client.key'), @@ -207,9 +219,9 @@ const testCollectorExporter = (params: TestParams) => : grpc.credentials.createInsecure(); const collectorExporterWithTimeout = new OTLPTraceExporter({ - url: 'grpcs://' + address, + url: address, credentials, - metadata: params.metadata, + metadata: metadata, timeoutMillis: 100, }); @@ -230,7 +242,7 @@ const testCollectorExporter = (params: TestParams) => }); describe('export - with gzip compression', () => { beforeEach(() => { - const credentials = params.useTLS + const credentials = useTLS ? grpc.credentials.createSsl( fs.readFileSync('./test/certs/ca.crt'), fs.readFileSync('./test/certs/client.key'), @@ -238,9 +250,9 @@ const testCollectorExporter = (params: TestParams) => ) : grpc.credentials.createInsecure(); collectorExporter = new OTLPTraceExporter({ - url: 'https://' + address, + url: address, credentials, - metadata: params.metadata, + metadata: metadata, compression: CompressionAlgorithm.GZIP, }); @@ -265,7 +277,7 @@ const testCollectorExporter = (params: TestParams) => assert.ok(typeof resource !== 'undefined', "resource doesn't exist"); ensureResourceIsCorrect(resource); - ensureMetadataIsCorrect(reqMetadata, params.metadata); + ensureMetadataIsCorrect(reqMetadata, metadata); done(); }, 500); @@ -274,7 +286,7 @@ const testCollectorExporter = (params: TestParams) => describe('Trace Exporter with compression', () => { const envSource = process.env; it('should return gzip compression algorithm on exporter', () => { - const credentials = params.useTLS + const credentials = useTLS ? grpc.credentials.createSsl( fs.readFileSync('./test/certs/ca.crt'), fs.readFileSync('./test/certs/client.key'), @@ -284,9 +296,9 @@ const testCollectorExporter = (params: TestParams) => envSource.OTEL_EXPORTER_OTLP_COMPRESSION = 'gzip'; collectorExporter = new OTLPTraceExporter({ - url: 'https://' + address, + url: address, credentials, - metadata: params.metadata, + metadata: metadata, }); assert.strictEqual( collectorExporter.compression, @@ -296,6 +308,7 @@ const testCollectorExporter = (params: TestParams) => }); }); }); +}; describe('OTLPTraceExporter - node (getDefaultUrl)', () => { it('should default to localhost', done => { @@ -361,3 +374,5 @@ describe('when configuring via environment', () => { testCollectorExporter({ useTLS: true }); testCollectorExporter({ useTLS: false }); testCollectorExporter({ metadata }); +// skip UDS tests on windows +process.platform !== 'win32' && testCollectorExporter({ address: udsAddr }); diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md index 3aee8d08a4..5445862afc 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md @@ -32,6 +32,7 @@ const { MeterProvider, PeriodicExportingMetricReader } = require('@opentelemetry const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc'); const collectorOptions = { // url is optional and can be omitted - default is http://localhost:4317 + // Unix domain sockets are also supported: 'unix:///path/to/socket.sock' url: 'http://:', }; diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts index 9e4e27ecb0..6749c60106 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts @@ -51,9 +51,11 @@ const includeDirs = [ path.resolve(__dirname, '../../otlp-grpc-exporter-base/protos'), ]; -const address = 'localhost:1502'; +const httpAddr = 'https://localhost:1502'; +const udsAddr = 'unix:///tmp/otlp-metrics.sock'; type TestParams = { + address?: string; useTLS?: boolean; metadata?: grpc.Metadata; }; @@ -61,10 +63,11 @@ type TestParams = { const metadata = new grpc.Metadata(); metadata.set('k', 'v'); -const testOTLPMetricExporter = (params: TestParams) => - describe(`OTLPMetricExporter - node ${ - params.useTLS ? 'with' : 'without' - } TLS, ${params.metadata ? 'with' : 'without'} metadata`, () => { +const testOTLPMetricExporter = (params: TestParams) => { + const { address = httpAddr, useTLS, metadata } = params; + return describe(`OTLPMetricExporter - node ${ + useTLS ? 'with' : 'without' + } TLS, ${metadata ? 'with' : 'without'} metadata, target ${address}`, () => { let collectorExporter: OTLPMetricExporter; let server: grpc.Server; let exportedData: IResourceMetrics[] | undefined; @@ -102,7 +105,7 @@ const testOTLPMetricExporter = (params: TestParams) => }, } ); - const credentials = params.useTLS + const credentials = useTLS ? grpc.ServerCredentials.createSsl( fs.readFileSync('./test/certs/ca.crt'), [ @@ -113,10 +116,15 @@ const testOTLPMetricExporter = (params: TestParams) => ] ) : grpc.ServerCredentials.createInsecure(); - server.bindAsync(address, credentials, () => { - server.start(); - done(); - }); + const serverAddr = new URL(address); + server.bindAsync( + serverAddr.protocol === 'https:' ? serverAddr.host : address, + credentials, + () => { + server.start(); + done(); + } + ); }); }); @@ -125,7 +133,7 @@ const testOTLPMetricExporter = (params: TestParams) => }); beforeEach(async () => { - const credentials = params.useTLS + const credentials = useTLS ? grpc.credentials.createSsl( fs.readFileSync('./test/certs/ca.crt'), fs.readFileSync('./test/certs/client.key'), @@ -133,9 +141,9 @@ const testOTLPMetricExporter = (params: TestParams) => ) : grpc.credentials.createInsecure(); collectorExporter = new OTLPMetricExporter({ - url: 'https://' + address, + url: address, credentials, - metadata: params.metadata, + metadata: metadata, temporalityPreference: AggregationTemporality.CUMULATIVE, }); @@ -187,7 +195,7 @@ const testOTLPMetricExporter = (params: TestParams) => it('should warn about headers', () => { collectorExporter = new OTLPMetricExporter({ - url: `http://${address}`, + url: address, headers: { foo: 'bar', }, @@ -197,8 +205,12 @@ const testOTLPMetricExporter = (params: TestParams) => assert.strictEqual(args[0], 'Headers cannot be set when using grpc'); }); it('should warn about path in url', () => { + if (new URL(address).protocol === 'unix:') { + // Skip this test for UDS + return; + } collectorExporter = new OTLPMetricExporter({ - url: `http://${address}/v1/metrics`, + url: `${address}/v1/metrics`, temporalityPreference: AggregationTemporality.CUMULATIVE, }); const args = warnStub.args[0]; @@ -261,13 +273,14 @@ const testOTLPMetricExporter = (params: TestParams) => assert.ok(typeof resource !== 'undefined', "resource doesn't exist"); ensureResourceIsCorrect(resource); - ensureMetadataIsCorrect(reqMetadata, params.metadata); + ensureMetadataIsCorrect(reqMetadata, metadata); done(); }, 500); }); }); }); +}; describe('OTLPMetricExporter - node (getDefaultUrl)', () => { it('should default to localhost', done => { @@ -352,3 +365,5 @@ describe('when configuring via environment', () => { testOTLPMetricExporter({ useTLS: true }); testOTLPMetricExporter({ useTLS: false }); testOTLPMetricExporter({ metadata }); +// skip UDS tests on windows +process.platform !== 'win32' && testOTLPMetricExporter({ address: udsAddr }); diff --git a/experimental/packages/otlp-grpc-exporter-base/src/util.ts b/experimental/packages/otlp-grpc-exporter-base/src/util.ts index 7e1d58dff7..78809466c9 100644 --- a/experimental/packages/otlp-grpc-exporter-base/src/util.ts +++ b/experimental/packages/otlp-grpc-exporter-base/src/util.ts @@ -125,6 +125,9 @@ export function validateAndNormalizeUrl(url: string): string { url = `https://${url}`; } const target = new URL(url); + if (target.protocol === 'unix:') { + return url; + } if (target.pathname && target.pathname !== '/') { diag.warn( 'URL path should not be set when using grpc, the path part of the URL will be ignored.' diff --git a/experimental/packages/otlp-grpc-exporter-base/test/util.test.ts b/experimental/packages/otlp-grpc-exporter-base/test/util.test.ts index c25f086f8c..967ece6716 100644 --- a/experimental/packages/otlp-grpc-exporter-base/test/util.test.ts +++ b/experimental/packages/otlp-grpc-exporter-base/test/util.test.ts @@ -47,6 +47,11 @@ describe('validateAndNormalizeUrl()', () => { input: 'https://api.datacat.io:1234', expected: 'api.datacat.io:1234', }, + { + name: 'should accept unix socket', + input: 'unix:///tmp/grpc.sock', + expected: 'unix:///tmp/grpc.sock', + }, { name: 'bad protocol should warn but return host:port', input: 'badproto://api.datacat.io:1234', From 196b6442b90fd06e3bb0c73877a1b6954a868f26 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 20 Jun 2023 13:11:24 +0200 Subject: [PATCH 035/141] chore(deps): update dependency markdownlint-cli to v0.35.0 (#3928) Co-authored-by: Marc Pichler --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c315860f32..79f203bbe7 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "lerna": "7.0.2", "@lerna/legacy-package-management": "7.0.2", "linkinator": "5.0.1", - "markdownlint-cli": "0.34.0", + "markdownlint-cli": "0.35.0", "prettier": "2.8.8", "semver": "7.5.2", "typedoc": "0.22.18", From 74393ac6397dcb130b9d5dae35354a2bf9a0d2c3 Mon Sep 17 00:00:00 2001 From: Nev <54870357+MSNev@users.noreply.github.com> Date: Tue, 20 Jun 2023 04:30:36 -0700 Subject: [PATCH 036/141] feat(minification): Add noEmitHelpers, importHelpers and tslib as a dependency (#3914) * feat(minification): Add noEmitHelpers, importHelpers and tslib as a dependency * fix: Lint fixes * Remove noEmitHelpers as not needed --------- Co-authored-by: Chengzhong Wu --- CHANGELOG.md | 2 ++ 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 | 3 ++- 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, 121 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1bd4e35ac0..819fab8972 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :house: (Internal) +* feat(minification): [Minification] Add noEmitHelpers, importHelpers and tslib as a dependency [#3913](https://github.com/open-telemetry/opentelemetry-js/issues/3913) + ## 1.14.0 ### :rocket: (Enhancement) diff --git a/api/package.json b/api/package.json index 0195f70550..119fcece0c 100644 --- a/api/package.json +++ b/api/package.json @@ -87,6 +87,9 @@ "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 5f821d66c7..f7c20de0d1 100644 --- a/examples/esm-http-ts/tsconfig.json +++ b/examples/esm-http-ts/tsconfig.json @@ -18,7 +18,8 @@ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, /* Completeness */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */, + "importHelpers": true }, "include": ["**/*.ts", "**/*.js", "*.config.js"], "exclude": ["node_modules"] diff --git a/examples/opentelemetry-web/package.json b/examples/opentelemetry-web/package.json index c9afb00edd..7caa50413f 100644 --- a/examples/opentelemetry-web/package.json +++ b/examples/opentelemetry-web/package.json @@ -56,7 +56,8 @@ "@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/semantic-conventions": "1.14.0", + "tslib": "^2.3.1" }, "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 74b211cc10..a18a2795f4 100644 --- a/experimental/backwards-compatibility/node14/package.json +++ b/experimental/backwards-compatibility/node14/package.json @@ -10,7 +10,8 @@ }, "dependencies": { "@opentelemetry/sdk-node": "0.40.0", - "@opentelemetry/sdk-trace-base": "1.14.0" + "@opentelemetry/sdk-trace-base": "1.14.0", + "tslib": "^2.3.1" }, "devDependencies": { "@types/node": "14.18.25", diff --git a/experimental/backwards-compatibility/node16/package.json b/experimental/backwards-compatibility/node16/package.json index 5170101e1d..aaeb4db421 100644 --- a/experimental/backwards-compatibility/node16/package.json +++ b/experimental/backwards-compatibility/node16/package.json @@ -10,7 +10,8 @@ }, "dependencies": { "@opentelemetry/sdk-node": "0.40.0", - "@opentelemetry/sdk-trace-base": "1.14.0" + "@opentelemetry/sdk-trace-base": "1.14.0", + "tslib": "^2.3.1" }, "devDependencies": { "@types/node": "16.11.52", diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index d1a1072aa3..bf4ecca09d 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -61,7 +61,8 @@ "access": "public" }, "dependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.0.0", + "tslib": "^2.3.1" }, "devDependencies": { "@types/mocha": "10.0.1", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 10cf74653d..2b0e373057 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -61,7 +61,8 @@ "access": "public" }, "dependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.0.0", + "tslib": "^2.3.1" }, "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 96125109e7..77e2285f74 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -76,7 +76,8 @@ "@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/sdk-logs": "0.40.0", + "tslib": "^2.3.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 0f777e5bec..19ec49940b 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -106,6 +106,7 @@ "@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/sdk-logs": "0.40.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 c665ae50de..87c6c6f0eb 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -90,7 +90,8 @@ "@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/sdk-trace-base": "1.14.0", + "tslib": "^2.3.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 61ad5e4861..2ff7f9172c 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -74,7 +74,8 @@ "@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/sdk-trace-base": "1.14.0", + "tslib": "^2.3.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 fe5222fd9c..767df86231 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -99,7 +99,8 @@ "@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/sdk-trace-base": "1.14.0", + "tslib": "^2.3.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 90720984d9..b5a87081d6 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -87,7 +87,8 @@ "@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/sdk-trace-base": "1.14.0", + "tslib": "^2.3.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 9cf3f179dd..233187c2cf 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -73,7 +73,8 @@ }, "dependencies": { "@opentelemetry/resources": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/semantic-conventions": "1.14.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 7fb9d1dba7..4697eacdbb 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -74,7 +74,8 @@ "@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/sdk-metrics": "1.14.0", + "tslib": "^2.3.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 f2f5e1d5ed..5256a337bc 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -99,7 +99,8 @@ "@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/sdk-metrics": "1.14.0", + "tslib": "^2.3.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 293109c727..08a8fb0538 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -73,7 +73,8 @@ "@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/sdk-metrics": "1.14.0", + "tslib": "^2.3.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 8a40e2a893..6a501c55d6 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -63,7 +63,8 @@ "dependencies": { "@opentelemetry/core": "1.14.0", "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0" + "@opentelemetry/sdk-metrics": "1.14.0", + "tslib": "^2.3.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 407c77006f..01cc35fe48 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -91,7 +91,8 @@ "@opentelemetry/core": "1.14.0", "@opentelemetry/instrumentation": "0.40.0", "@opentelemetry/sdk-trace-web": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/semantic-conventions": "1.14.0", + "tslib": "^2.3.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 c224158e8e..b05ee51721 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -72,7 +72,8 @@ }, "dependencies": { "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/semantic-conventions": "1.14.0", + "tslib": "^2.3.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 9d4b657a84..91d0b99a42 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -77,7 +77,8 @@ "@opentelemetry/core": "1.14.0", "@opentelemetry/instrumentation": "0.40.0", "@opentelemetry/semantic-conventions": "1.14.0", - "semver": "^7.5.1" + "semver": "^7.5.1", + "tslib": "^2.3.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 f8e5325545..82f28f158a 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -91,7 +91,8 @@ "@opentelemetry/core": "1.14.0", "@opentelemetry/instrumentation": "0.40.0", "@opentelemetry/sdk-trace-web": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/semantic-conventions": "1.14.0", + "tslib": "^2.3.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 32c7fb2c54..9d08197039 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -75,7 +75,8 @@ "import-in-the-middle": "1.3.5", "require-in-the-middle": "^7.1.1", "semver": "^7.5.1", - "shimmer": "^1.2.1" + "shimmer": "^1.2.1", + "tslib": "^2.3.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 24c76056a1..0b238b42b8 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 * from './instrumentation'; +export { InstrumentationBase } from './instrumentation'; diff --git a/experimental/packages/opentelemetry-instrumentation/src/platform/index.ts b/experimental/packages/opentelemetry-instrumentation/src/platform/index.ts index cdaf8858ce..1fc5f5e14a 100644 --- a/experimental/packages/opentelemetry-instrumentation/src/platform/index.ts +++ b/experimental/packages/opentelemetry-instrumentation/src/platform/index.ts @@ -14,4 +14,10 @@ * limitations under the License. */ -export * from './node'; +export { + InstrumentationBase, + InstrumentationModuleDefinition, + InstrumentationModuleFile, + InstrumentationNodeModuleDefinition, + InstrumentationNodeModuleFile, +} 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 842797c341..d3df10491f 100644 --- a/experimental/packages/opentelemetry-instrumentation/src/platform/node/index.ts +++ b/experimental/packages/opentelemetry-instrumentation/src/platform/node/index.ts @@ -13,7 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export * from './instrumentation'; -export * from './instrumentationNodeModuleDefinition'; -export * from './instrumentationNodeModuleFile'; -export * from './types'; +export { InstrumentationBase } from './instrumentation'; +export { InstrumentationNodeModuleDefinition } from './instrumentationNodeModuleDefinition'; +export { InstrumentationNodeModuleFile } from './instrumentationNodeModuleFile'; +export { + InstrumentationModuleDefinition, + InstrumentationModuleFile, +} 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 f09097cd79..715dbdbff2 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/index.js'; +} from '../../build/src/platform/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 f8f6ab04d4..66c4bf9471 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -55,7 +55,8 @@ "@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/semantic-conventions": "1.14.0", + "tslib": "^2.3.1" }, "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 3f10a7d7f5..8e3705b2c1 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -61,7 +61,8 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.14.0" + "@opentelemetry/core": "1.14.0", + "tslib": "^2.3.1" }, "devDependencies": { "@opentelemetry/api": "1.4.1", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 0fd6150aa9..7955aac4ff 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -75,7 +75,8 @@ "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.14.0", "@opentelemetry/otlp-exporter-base": "0.40.0", - "protobufjs": "^7.2.3" + "protobufjs": "^7.2.3", + "tslib": "^2.3.1" }, "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 8d16f23995..7430c153cb 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -81,7 +81,8 @@ "dependencies": { "@opentelemetry/core": "1.14.0", "@opentelemetry/otlp-exporter-base": "0.40.0", - "protobufjs": "^7.2.3" + "protobufjs": "^7.2.3", + "tslib": "^2.3.1" }, "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 3af3c81a4a..ad12b3e16f 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -83,7 +83,8 @@ "@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/sdk-trace-base": "1.14.0", + "tslib": "^2.3.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 48b0bd249e..70abad035b 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -94,6 +94,7 @@ }, "dependencies": { "@opentelemetry/core": "1.14.0", - "@opentelemetry/resources": "1.14.0" + "@opentelemetry/resources": "1.14.0", + "tslib": "^2.3.1" } } diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index 9c0596f55e..6f870cfc69 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -71,7 +71,8 @@ "dependencies": { "@opentelemetry/core": "1.14.0", "require-in-the-middle": "^7.1.1", - "semver": "^7.5.1" + "semver": "^7.5.1", + "tslib": "^2.3.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 1658c1ed26..880251c503 100644 --- a/integration-tests/propagation-validation-server/package.json +++ b/integration-tests/propagation-validation-server/package.json @@ -17,7 +17,8 @@ "@opentelemetry/sdk-trace-base": "1.14.0", "axios": "1.4.0", "body-parser": "1.19.0", - "express": "4.17.3" + "express": "4.17.3", + "tslib": "^2.3.1" }, "devDependencies": { "typescript": "4.4.4" diff --git a/package.json b/package.json index 79f203bbe7..d52d6225d7 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,8 @@ "typedoc": "0.22.18", "typedoc-plugin-missing-exports": "1.0.0", "typedoc-plugin-resolve-crossmodule-references": "0.2.2", - "typescript": "4.4.4" + "typescript": "4.4.4", + "tslib": "^2.3.1" }, "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 15afdd385d..62a77cf7e8 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -43,6 +43,9 @@ "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 1953baa5ab..fa4b547427 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -85,6 +85,9 @@ "@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 014010ff51..43c775f413 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -76,7 +76,8 @@ }, "dependencies": { "@opentelemetry/context-zone-peer-dep": "1.14.0", - "zone.js": "^0.11.0" + "zone.js": "^0.11.0", + "tslib": "^2.3.1" }, "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 e31b72adb6..3bd4796e7f 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -91,7 +91,8 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/semantic-conventions": "1.14.0", + "tslib": "^2.3.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 bb1b0f0ce5..a45636c9ac 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -66,7 +66,8 @@ "@opentelemetry/core": "1.14.0", "@opentelemetry/sdk-trace-base": "1.14.0", "@opentelemetry/semantic-conventions": "1.14.0", - "jaeger-client": "^3.15.0" + "jaeger-client": "^3.15.0", + "tslib": "^2.3.1" }, "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 1a45055f4a..cf3b1ddff2 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -95,7 +95,8 @@ "@opentelemetry/core": "1.14.0", "@opentelemetry/resources": "1.14.0", "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/semantic-conventions": "1.14.0", + "tslib": "^2.3.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 96dfb8ae47..97303e5076 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -51,7 +51,8 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.14.0" + "@opentelemetry/core": "1.14.0", + "tslib": "^2.3.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 4fe14702b6..d15ebcfea0 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -81,7 +81,8 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0" + "@opentelemetry/core": "1.14.0", + "tslib": "^2.3.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 1315523a5a..340875b9fe 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -92,7 +92,8 @@ }, "dependencies": { "@opentelemetry/core": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/semantic-conventions": "1.14.0", + "tslib": "^2.3.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 8343363431..10ffe262e6 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -95,7 +95,8 @@ "dependencies": { "@opentelemetry/core": "1.14.0", "@opentelemetry/resources": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/semantic-conventions": "1.14.0", + "tslib": "^2.3.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 1d349de0b1..51e5d59e51 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -70,7 +70,8 @@ "@opentelemetry/propagator-b3": "1.14.0", "@opentelemetry/propagator-jaeger": "1.14.0", "@opentelemetry/sdk-trace-base": "1.14.0", - "semver": "^7.5.1" + "semver": "^7.5.1", + "tslib": "^2.3.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 697ea92a97..84555c91be 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -94,7 +94,8 @@ "dependencies": { "@opentelemetry/core": "1.14.0", "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/semantic-conventions": "1.14.0", + "tslib": "^2.3.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 e95dcf1616..d1f733190b 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -62,6 +62,9 @@ "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 1c477967f3..f4745b1f7c 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -62,7 +62,8 @@ "dependencies": { "@opentelemetry/core": "1.14.0", "@opentelemetry/semantic-conventions": "1.14.0", - "opentracing": "^0.14.4" + "opentracing": "^0.14.4", + "tslib": "^2.3.1" }, "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 6fcb0e4ef4..3ec2a1fe4b 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -80,7 +80,8 @@ "dependencies": { "@opentelemetry/core": "1.14.0", "@opentelemetry/resources": "1.14.0", - "lodash.merge": "^4.6.2" + "lodash.merge": "^4.6.2", + "tslib": "^2.3.1" }, "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 233c29e79c..5f0dd1cb52 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -83,6 +83,9 @@ "lerna": "7.0.2", "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 cbafb67678..84e684c8a5 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -21,7 +21,8 @@ "strict": true, "strictNullChecks": true, "target": "es2017", - "useUnknownInCatchVariables": false + "useUnknownInCatchVariables": false, + "importHelpers": true }, "exclude": [ "node_modules" From 5dc0f6974a91d86c08531d11153cdb40857eca74 Mon Sep 17 00:00:00 2001 From: Nicolas Hansse Date: Wed, 21 Jun 2023 14:16:16 +0200 Subject: [PATCH 037/141] fix(exporter-logs-otlp-http): set useHex to true (#3875) --- experimental/CHANGELOG.md | 2 + .../exporter-logs-otlp-http/package.json | 1 + .../src/platform/browser/OTLPLogExporter.ts | 2 +- .../src/platform/node/OTLPLogExporter.ts | 2 +- .../test/browser/OTLPLogExporter.test.ts | 86 ++++++++- .../exporter-logs-otlp-http/test/logHelper.ts | 166 +++++++++++++++++ .../test/node/OTLPLogExporter.test.ts | 169 +++++++++++++++++- .../exporter-logs-otlp-http/tsconfig.json | 6 +- 8 files changed, 428 insertions(+), 6 deletions(-) create mode 100644 experimental/packages/exporter-logs-otlp-http/test/logHelper.ts diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 1ac87111b5..4ce74a2709 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -14,6 +14,8 @@ All notable changes to experimental packages in this project will be documented ### :bug: (Bug Fix) +* fix(exporter-logs-otlp-http): set useHex to true [#3875](https://github.com/open-telemetry/opentelemetry-js/pull/3875) @Nico385412 + ### :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 19ec49940b..41b72085be 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -73,6 +73,7 @@ "devDependencies": { "@babel/core": "7.22.5", "@opentelemetry/api-logs": "0.40.0", + "@opentelemetry/resources": "1.14.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/sinon": "10.0.15", diff --git a/experimental/packages/exporter-logs-otlp-http/src/platform/browser/OTLPLogExporter.ts b/experimental/packages/exporter-logs-otlp-http/src/platform/browser/OTLPLogExporter.ts index ef837614e2..a7ecbbac95 100644 --- a/experimental/packages/exporter-logs-otlp-http/src/platform/browser/OTLPLogExporter.ts +++ b/experimental/packages/exporter-logs-otlp-http/src/platform/browser/OTLPLogExporter.ts @@ -48,7 +48,7 @@ export class OTLPLogExporter } convert(logRecords: ReadableLogRecord[]): IExportLogsServiceRequest { - return createExportLogsServiceRequest(logRecords); + return createExportLogsServiceRequest(logRecords, true); } getDefaultUrl(config: OTLPExporterConfigBase): string { diff --git a/experimental/packages/exporter-logs-otlp-http/src/platform/node/OTLPLogExporter.ts b/experimental/packages/exporter-logs-otlp-http/src/platform/node/OTLPLogExporter.ts index 7f7c538df7..a1d101e87c 100644 --- a/experimental/packages/exporter-logs-otlp-http/src/platform/node/OTLPLogExporter.ts +++ b/experimental/packages/exporter-logs-otlp-http/src/platform/node/OTLPLogExporter.ts @@ -48,7 +48,7 @@ export class OTLPLogExporter } convert(logRecords: ReadableLogRecord[]): IExportLogsServiceRequest { - return createExportLogsServiceRequest(logRecords); + return createExportLogsServiceRequest(logRecords, true); } getDefaultUrl(config: OTLPExporterNodeConfigBase): string { diff --git a/experimental/packages/exporter-logs-otlp-http/test/browser/OTLPLogExporter.test.ts b/experimental/packages/exporter-logs-otlp-http/test/browser/OTLPLogExporter.test.ts index 66958a9fef..2443c97ef4 100644 --- a/experimental/packages/exporter-logs-otlp-http/test/browser/OTLPLogExporter.test.ts +++ b/experimental/packages/exporter-logs-otlp-http/test/browser/OTLPLogExporter.test.ts @@ -13,15 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import * as assert from 'assert'; import * as sinon from 'sinon'; import * as Config from '../../src/platform/config'; import { OTLPLogExporter } from '../../src/platform/browser'; +import { OTLPExporterConfigBase } from '@opentelemetry/otlp-exporter-base'; +import { ReadableLogRecord } from '@opentelemetry/sdk-logs'; +import { mockedReadableLogRecord } from '../logHelper'; +import { ExportResultCode } from '@opentelemetry/core'; describe('OTLPLogExporter', () => { let envSource: Record; + let collectorExporter: OTLPLogExporter; + let collectorExporterConfig: OTLPExporterConfigBase; + + afterEach(() => { + sinon.restore(); + }); if (typeof process === 'undefined') { envSource = globalThis as unknown as Record; @@ -61,4 +70,79 @@ describe('OTLPLogExporter', () => { assert.strictEqual(getDefaultUrl.callCount, 2); }); }); + + describe('export - common', () => { + let spySend: any; + beforeEach(() => { + spySend = sinon.stub(OTLPLogExporter.prototype, 'send'); + collectorExporter = new OTLPLogExporter(collectorExporterConfig); + }); + + it('should export spans as otlpTypes.Spans', done => { + const logs: ReadableLogRecord[] = []; + logs.push(Object.assign({}, mockedReadableLogRecord)); + + collectorExporter.export(logs, () => {}); + setTimeout(() => { + const log = spySend.args[0][0][0] as ReadableLogRecord; + assert.deepStrictEqual(logs[0], log); + done(); + }); + assert.strictEqual(spySend.callCount, 1); + }); + + describe('when exporter is shutdown', () => { + it( + 'should not export anything but return callback with code' + + ' "FailedNotRetryable"', + async () => { + const spans: ReadableLogRecord[] = []; + spans.push(Object.assign({}, mockedReadableLogRecord)); + await collectorExporter.shutdown(); + spySend.resetHistory(); + + const callbackSpy = sinon.spy(); + collectorExporter.export(spans, callbackSpy); + const returnCode = callbackSpy.args[0][0]; + + assert.strictEqual( + returnCode.code, + ExportResultCode.FAILED, + 'return value is wrong' + ); + assert.strictEqual(spySend.callCount, 0, 'should not call send'); + } + ); + }); + describe('when an error occurs', () => { + it('should return failed export result', done => { + const spans: ReadableLogRecord[] = []; + spans.push(Object.assign({}, mockedReadableLogRecord)); + spySend.throws({ + code: 100, + details: 'Test error', + metadata: {}, + message: 'Non-retryable', + stack: 'Stack', + }); + const callbackSpy = sinon.spy(); + collectorExporter.export(spans, callbackSpy); + setTimeout(() => { + const returnCode = callbackSpy.args[0][0]; + assert.strictEqual( + returnCode.code, + ExportResultCode.FAILED, + 'return value is wrong' + ); + assert.strictEqual( + returnCode.error.message, + 'Non-retryable', + 'return error message is wrong' + ); + assert.strictEqual(spySend.callCount, 1, 'should call send'); + done(); + }); + }); + }); + }); }); diff --git a/experimental/packages/exporter-logs-otlp-http/test/logHelper.ts b/experimental/packages/exporter-logs-otlp-http/test/logHelper.ts new file mode 100644 index 0000000000..1d9461f873 --- /dev/null +++ b/experimental/packages/exporter-logs-otlp-http/test/logHelper.ts @@ -0,0 +1,166 @@ +/* + * 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 { HrTime, TraceFlags } from '@opentelemetry/api'; +import { SeverityNumber } from '@opentelemetry/api-logs'; +import { Resource } from '@opentelemetry/resources'; +import * as assert from 'assert'; +import { VERSION } from '@opentelemetry/core'; +import { + IAnyValue, + IExportLogsServiceRequest, + IKeyValue, + ILogRecord, + IResource, +} from '@opentelemetry/otlp-transformer'; +import { ReadableLogRecord } from '@opentelemetry/sdk-logs'; + +export const mockedReadableLogRecord: ReadableLogRecord = { + resource: Resource.default().merge( + new Resource({ + 'resource-attribute': 'some resource-attr value', + }) + ), + instrumentationScope: { + name: 'scope_name_1', + version: '0.1.0', + schemaUrl: 'http://url.to.schema', + }, + hrTime: [1680253513, 123241635] as HrTime, + hrTimeObserved: [1680253513, 123241635] as HrTime, + attributes: { + 'some-attribute': 'some attribute value', + }, + severityNumber: SeverityNumber.ERROR, + severityText: 'error', + body: 'some_log_body', + spanContext: { + traceFlags: TraceFlags.SAMPLED, + traceId: '1f1008dc8e270e85c40a0d7c3939b278', + spanId: '5e107261f64fa53e', + }, +}; +export function ensureExportedAttributesAreCorrect(attributes: IKeyValue[]) { + assert.deepStrictEqual( + attributes, + [ + { + key: 'some-attribute', + value: { + stringValue: 'some attribute value', + }, + }, + ], + 'exported attributes are incorrect' + ); +} + +export function ensureExportedBodyIsCorrect(body?: IAnyValue) { + assert.deepStrictEqual( + body, + { stringValue: 'some_log_body' }, + 'exported attributes are incorrect' + ); +} + +export function ensureExportedLogRecordIsCorrect(logRecord: ILogRecord) { + ensureExportedBodyIsCorrect(logRecord.body); + ensureExportedAttributesAreCorrect(logRecord.attributes); + assert.strictEqual( + logRecord.timeUnixNano, + 1680253513123241700, + 'timeUnixNano is wrong' + ); + assert.strictEqual( + logRecord.observedTimeUnixNano, + 1680253513123241700, + 'observedTimeUnixNano is wrong' + ); + assert.strictEqual( + logRecord.severityNumber, + SeverityNumber.ERROR, + 'severityNumber is wrong' + ); + assert.strictEqual(logRecord.severityText, 'error', 'severityText is wrong'); + assert.strictEqual( + logRecord.droppedAttributesCount, + 0, + 'droppedAttributesCount is wrong' + ); + assert.strictEqual(logRecord.flags, TraceFlags.SAMPLED, 'flags is wrong'); +} + +export function ensureResourceIsCorrect(resource: IResource) { + assert.deepStrictEqual(resource, { + attributes: [ + { + key: 'service.name', + value: { + stringValue: `unknown_service:${process.argv0}`, + value: 'stringValue', + }, + }, + { + key: 'telemetry.sdk.language', + value: { + stringValue: 'nodejs', + value: 'stringValue', + }, + }, + { + key: 'telemetry.sdk.name', + value: { + stringValue: 'opentelemetry', + value: 'stringValue', + }, + }, + { + key: 'telemetry.sdk.version', + value: { + stringValue: VERSION, + value: 'stringValue', + }, + }, + { + key: 'resource-attribute', + value: { + stringValue: 'some resource-attr value', + value: 'stringValue', + }, + }, + ], + droppedAttributesCount: 0, + }); +} + +export function ensureExportLogsServiceRequestIsSet( + json: IExportLogsServiceRequest +) { + const resourceLogs = json.resourceLogs; + assert.strictEqual(resourceLogs?.length, 1, 'resourceLogs is missing'); + + const resource = resourceLogs?.[0].resource; + assert.ok(resource, 'resource is missing'); + + const scopeLogs = resourceLogs?.[0].scopeLogs; + assert.strictEqual(scopeLogs?.length, 1, 'scopeLogs is missing'); + + const scope = scopeLogs?.[0].scope; + assert.ok(scope, 'scope is missing'); + + const logRecords = scopeLogs?.[0].logRecords; + assert.strictEqual(logRecords?.length, 1, 'logs are missing'); +} 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 aa0d345348..2ae11142ad 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 @@ -14,14 +14,55 @@ * limitations under the License. */ +import { diag } from '@opentelemetry/api'; import * as assert from 'assert'; +import * as http from 'http'; import * as sinon from 'sinon'; - import * as Config from '../../src/platform/config'; + import { OTLPLogExporter } from '../../src/platform/node'; +import { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base'; +import { ReadableLogRecord } from '@opentelemetry/sdk-logs'; +import { + ensureExportLogsServiceRequestIsSet, + ensureExportedLogRecordIsCorrect, + mockedReadableLogRecord, +} from '../logHelper'; +import { PassThrough, Stream } from 'stream'; +import { IExportLogsServiceRequest } from '@opentelemetry/otlp-transformer'; +import { ExportResultCode } from '@opentelemetry/core'; + +let fakeRequest: PassThrough; + +class MockedResponse extends Stream { + constructor(private _code: number, private _msg?: string) { + super(); + } + + send(data: string) { + this.emit('data', data); + this.emit('end'); + } + + get statusCode() { + return this._code; + } + + get statusMessage() { + return this._msg; + } +} describe('OTLPLogExporter', () => { let envSource: Record; + let collectorExporter: OTLPLogExporter; + let collectorExporterConfig: OTLPExporterNodeConfigBase; + let logs: ReadableLogRecord[]; + + afterEach(() => { + fakeRequest = new Stream.PassThrough(); + sinon.restore(); + }); if (typeof process === 'undefined') { envSource = globalThis as unknown as Record; @@ -61,4 +102,130 @@ describe('OTLPLogExporter', () => { assert.strictEqual(getDefaultUrl.callCount, 2); }); }); + + describe('export', () => { + beforeEach(() => { + collectorExporterConfig = { + headers: { + foo: 'bar', + }, + hostname: 'foo', + url: 'http://foo.bar.com', + keepAlive: true, + httpAgentOptions: { keepAliveMsecs: 2000 }, + }; + collectorExporter = new OTLPLogExporter(collectorExporterConfig); + logs = []; + logs.push(Object.assign({}, mockedReadableLogRecord)); + }); + afterEach(() => { + sinon.restore(); + }); + + it('should open the connection', done => { + sinon.stub(http, 'request').callsFake((options: any, cb: any) => { + assert.strictEqual(options.hostname, 'foo.bar.com'); + assert.strictEqual(options.method, 'POST'); + assert.strictEqual(options.path, '/'); + + const mockRes = new MockedResponse(200); + cb(mockRes); + mockRes.send('success'); + done(); + return fakeRequest as any; + }); + collectorExporter.export(logs, () => {}); + }); + + it('should set custom headers', done => { + sinon.stub(http, 'request').callsFake((options: any, cb: any) => { + assert.strictEqual(options.headers['foo'], 'bar'); + + const mockRes = new MockedResponse(200); + cb(mockRes); + mockRes.send('success'); + done(); + return fakeRequest as any; + }); + + collectorExporter.export(logs, () => {}); + }); + + it('should have keep alive and keepAliveMsecs option set', done => { + sinon.stub(http, 'request').callsFake((options: any, cb: any) => { + assert.strictEqual(options.agent.keepAlive, true); + assert.strictEqual(options.agent.options.keepAliveMsecs, 2000); + + const mockRes = new MockedResponse(200); + cb(mockRes); + mockRes.send('success'); + done(); + return fakeRequest as any; + }); + + collectorExporter.export(logs, () => {}); + }); + + it('should successfully send the logs', done => { + const fakeRequest = new Stream.PassThrough(); + sinon.stub(http, 'request').returns(fakeRequest as any); + + let buff = Buffer.from(''); + fakeRequest.on('end', () => { + const responseBody = buff.toString(); + const json = JSON.parse(responseBody) as IExportLogsServiceRequest; + const log1 = json.resourceLogs?.[0].scopeLogs?.[0].logRecords?.[0]; + assert.ok(typeof log1 !== 'undefined', "log doesn't exist"); + ensureExportedLogRecordIsCorrect(log1); + + ensureExportLogsServiceRequestIsSet(json); + + done(); + }); + + fakeRequest.on('data', chunk => { + buff = Buffer.concat([buff, chunk]); + }); + + const clock = sinon.useFakeTimers(); + collectorExporter.export(logs, () => {}); + clock.tick(200); + clock.restore(); + }); + + it('should log the successful message', done => { + // Need to stub/spy on the underlying logger as the "diag" instance is global + const spyLoggerError = sinon.stub(diag, 'error'); + + sinon.stub(http, 'request').callsFake((options: any, cb: any) => { + const mockRes = new MockedResponse(200); + cb(mockRes); + mockRes.send('success'); + return fakeRequest as any; + }); + + collectorExporter.export(logs, result => { + assert.strictEqual(result.code, ExportResultCode.SUCCESS); + assert.strictEqual(spyLoggerError.args.length, 0); + done(); + }); + }); + + it('should log the error message', done => { + sinon.stub(http, 'request').callsFake((options: any, cb: any) => { + const mockResError = new MockedResponse(400); + cb(mockResError); + mockResError.send('failed'); + + return fakeRequest as any; + }); + + collectorExporter.export(logs, result => { + assert.strictEqual(result.code, ExportResultCode.FAILED); + // @ts-expect-error verify error code + assert.strictEqual(result.error.code, 400); + done(); + }); + }); + }); }); diff --git a/experimental/packages/exporter-logs-otlp-http/tsconfig.json b/experimental/packages/exporter-logs-otlp-http/tsconfig.json index c4eda837a9..52330c182e 100644 --- a/experimental/packages/exporter-logs-otlp-http/tsconfig.json +++ b/experimental/packages/exporter-logs-otlp-http/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "esModuleInterop": true, "outDir": "build", "rootDir": "." }, @@ -24,6 +23,9 @@ }, { "path": "../sdk-logs" - } + }, + { + "path": "../../../packages/opentelemetry-resources" + }, ] } From 19fb033900077505f43bcbacb8a5744be997fe37 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Wed, 21 Jun 2023 20:26:54 +0200 Subject: [PATCH 038/141] feat(otlp-exporters): bump otlp proto to 0.20.0 (#3932) --- experimental/CHANGELOG.md | 1 + .../packages/otlp-grpc-exporter-base/protos | 2 +- .../src/LogsExportServiceClient.ts | 6 ++++-- .../src/MetricsExportServiceClient.ts | 6 ++++-- .../src/TraceExportServiceClient.ts | 6 ++++-- .../packages/otlp-proto-exporter-base/protos | 2 +- .../packages/otlp-transformer/src/common/types.ts | 6 ++++++ .../packages/otlp-transformer/src/logs/types.ts | 13 +++++++++++++ .../packages/otlp-transformer/src/metrics/types.ts | 13 +++++++++++++ .../packages/otlp-transformer/src/trace/types.ts | 13 +++++++++++++ 10 files changed, 60 insertions(+), 8 deletions(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 4ce74a2709..a1efc18445 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -11,6 +11,7 @@ All notable changes to experimental packages in this project will be documented ### :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 ### :bug: (Bug Fix) diff --git a/experimental/packages/otlp-grpc-exporter-base/protos b/experimental/packages/otlp-grpc-exporter-base/protos index c5c8b28012..1608f92cf0 160000 --- a/experimental/packages/otlp-grpc-exporter-base/protos +++ b/experimental/packages/otlp-grpc-exporter-base/protos @@ -1 +1 @@ -Subproject commit c5c8b28012583fda55b0cb16f73a820722171d49 +Subproject commit 1608f92cf08119f9aec237c910b200d1317ec696 diff --git a/experimental/packages/otlp-grpc-exporter-base/src/LogsExportServiceClient.ts b/experimental/packages/otlp-grpc-exporter-base/src/LogsExportServiceClient.ts index 148fca31a1..b867743cea 100644 --- a/experimental/packages/otlp-grpc-exporter-base/src/LogsExportServiceClient.ts +++ b/experimental/packages/otlp-grpc-exporter-base/src/LogsExportServiceClient.ts @@ -16,9 +16,11 @@ import * as root from './generated/root'; import * as grpc from '@grpc/grpc-js'; -import { IExportLogsServiceRequest } from '@opentelemetry/otlp-transformer'; +import { + IExportLogsServiceRequest, + IExportLogsServiceResponse, +} from '@opentelemetry/otlp-transformer'; import { ExportType } from './internal-types'; -import IExportLogsServiceResponse = root.opentelemetry.proto.collector.logs.v1.IExportLogsServiceResponse; const responseType = root.opentelemetry.proto.collector.logs.v1 .ExportLogsServiceResponse as ExportType; diff --git a/experimental/packages/otlp-grpc-exporter-base/src/MetricsExportServiceClient.ts b/experimental/packages/otlp-grpc-exporter-base/src/MetricsExportServiceClient.ts index 9a791ca2f3..7f81be6087 100644 --- a/experimental/packages/otlp-grpc-exporter-base/src/MetricsExportServiceClient.ts +++ b/experimental/packages/otlp-grpc-exporter-base/src/MetricsExportServiceClient.ts @@ -16,9 +16,11 @@ import * as root from './generated/root'; import * as grpc from '@grpc/grpc-js'; -import { IExportMetricsServiceRequest } from '@opentelemetry/otlp-transformer'; +import { + IExportMetricsServiceRequest, + IExportMetricsServiceResponse, +} from '@opentelemetry/otlp-transformer'; import { ExportType } from './internal-types'; -import IExportMetricsServiceResponse = root.opentelemetry.proto.collector.metrics.v1.IExportMetricsServiceResponse; const responseType = root.opentelemetry.proto.collector.metrics.v1 .ExportMetricsServiceResponse as ExportType; diff --git a/experimental/packages/otlp-grpc-exporter-base/src/TraceExportServiceClient.ts b/experimental/packages/otlp-grpc-exporter-base/src/TraceExportServiceClient.ts index 6a150a24b1..d332e4f4da 100644 --- a/experimental/packages/otlp-grpc-exporter-base/src/TraceExportServiceClient.ts +++ b/experimental/packages/otlp-grpc-exporter-base/src/TraceExportServiceClient.ts @@ -16,9 +16,11 @@ import * as root from './generated/root'; import * as grpc from '@grpc/grpc-js'; -import { IExportTraceServiceRequest } from '@opentelemetry/otlp-transformer'; +import { + IExportTraceServiceRequest, + IExportTraceServiceResponse, +} from '@opentelemetry/otlp-transformer'; import { ExportType } from './internal-types'; -import IExportTraceServiceResponse = root.opentelemetry.proto.collector.trace.v1.IExportTraceServiceResponse; const responseType = root.opentelemetry.proto.collector.trace.v1 .ExportTraceServiceResponse as ExportType; diff --git a/experimental/packages/otlp-proto-exporter-base/protos b/experimental/packages/otlp-proto-exporter-base/protos index c5c8b28012..1608f92cf0 160000 --- a/experimental/packages/otlp-proto-exporter-base/protos +++ b/experimental/packages/otlp-proto-exporter-base/protos @@ -1 +1 @@ -Subproject commit c5c8b28012583fda55b0cb16f73a820722171d49 +Subproject commit 1608f92cf08119f9aec237c910b200d1317ec696 diff --git a/experimental/packages/otlp-transformer/src/common/types.ts b/experimental/packages/otlp-transformer/src/common/types.ts index 8b30231e74..159a595ba9 100644 --- a/experimental/packages/otlp-transformer/src/common/types.ts +++ b/experimental/packages/otlp-transformer/src/common/types.ts @@ -21,6 +21,12 @@ export interface IInstrumentationScope { /** InstrumentationScope version */ version?: string; + + /** InstrumentationScope attributes */ + attributes?: IKeyValue[]; + + /** InstrumentationScope droppedAttributesCount */ + droppedAttributesCount?: number; } /** Properties of a KeyValue. */ diff --git a/experimental/packages/otlp-transformer/src/logs/types.ts b/experimental/packages/otlp-transformer/src/logs/types.ts index 3d3e610bc7..05709af6f5 100644 --- a/experimental/packages/otlp-transformer/src/logs/types.ts +++ b/experimental/packages/otlp-transformer/src/logs/types.ts @@ -27,6 +27,19 @@ export interface IExportLogsServiceRequest { resourceLogs?: IResourceLogs[]; } +export interface IExportLogsServiceResponse { + /** ExportLogsServiceResponse partialSuccess */ + partialSuccess?: IExportLogsPartialSuccess; +} + +export interface IExportLogsPartialSuccess { + /** ExportLogsPartialSuccess rejectedLogRecords */ + rejectedLogRecords?: number; + + /** ExportLogsPartialSuccess errorMessage */ + errorMessage?: string; +} + /** Properties of a ResourceLogs. */ export interface IResourceLogs { /** ResourceLogs resource */ diff --git a/experimental/packages/otlp-transformer/src/metrics/types.ts b/experimental/packages/otlp-transformer/src/metrics/types.ts index 6db9c17a9b..2728ab1aba 100644 --- a/experimental/packages/otlp-transformer/src/metrics/types.ts +++ b/experimental/packages/otlp-transformer/src/metrics/types.ts @@ -22,6 +22,19 @@ export interface IExportMetricsServiceRequest { resourceMetrics: IResourceMetrics[]; } +export interface IExportMetricsServiceResponse { + /** ExportMetricsServiceResponse partialSuccess */ + partialSuccess?: IExportMetricsPartialSuccess; +} + +export interface IExportMetricsPartialSuccess { + /** ExportMetricsPartialSuccess rejectedDataPoints */ + rejectedDataPoints?: number; + + /** ExportMetricsPartialSuccess errorMessage */ + errorMessage?: string; +} + /** Properties of a ResourceMetrics. */ export interface IResourceMetrics { /** ResourceMetrics resource */ diff --git a/experimental/packages/otlp-transformer/src/trace/types.ts b/experimental/packages/otlp-transformer/src/trace/types.ts index 08e52c7a06..a6cfb82ad7 100644 --- a/experimental/packages/otlp-transformer/src/trace/types.ts +++ b/experimental/packages/otlp-transformer/src/trace/types.ts @@ -23,6 +23,19 @@ export interface IExportTraceServiceRequest { resourceSpans?: IResourceSpans[]; } +export interface IExportTraceServiceResponse { + /** ExportTraceServiceResponse partialSuccess */ + partialSuccess?: IExportTracePartialSuccess; +} + +export interface IExportTracePartialSuccess { + /** ExportLogsServiceResponse rejectedLogRecords */ + rejectedSpans?: number; + + /** ExportLogsServiceResponse errorMessage */ + errorMessage?: string; +} + /** Properties of a ResourceSpans. */ export interface IResourceSpans { /** ResourceSpans resource */ From 9977de79242cba0985595dd917ab302face0809b Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Thu, 22 Jun 2023 16:06:59 +0200 Subject: [PATCH 039/141] fix(otlp-proto-exporter-base): add missing type import (#3937) --- experimental/CHANGELOG.md | 1 + .../packages/otlp-proto-exporter-base/src/platform/util.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index a1efc18445..097f9925f8 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -16,6 +16,7 @@ All notable changes to experimental packages in this project will be documented ### :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 ### :books: (Refine Doc) diff --git a/experimental/packages/otlp-proto-exporter-base/src/platform/util.ts b/experimental/packages/otlp-proto-exporter-base/src/platform/util.ts index c6e1272816..2fe428b432 100644 --- a/experimental/packages/otlp-proto-exporter-base/src/platform/util.ts +++ b/experimental/packages/otlp-proto-exporter-base/src/platform/util.ts @@ -16,6 +16,7 @@ import * as root from '../generated/root'; import { ServiceClientType } from './types'; +import type * as protobuf from 'protobufjs'; export interface ExportRequestType unknown }> { create(properties?: T): R; From 655e373c53416c23dc1caa7430f8f8898a85024b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 23 Jun 2023 06:55:45 +0200 Subject: [PATCH 040/141] chore(deps): update dependency semver to v7.5.3 (#3942) --- .../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 b05ee51721..85e49c1c24 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -62,7 +62,7 @@ "mocha": "10.2.0", "node-pre-gyp": "0.17.0", "nyc": "15.1.0", - "semver": "7.5.2", + "semver": "7.5.3", "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 66c4bf9471..d62cc04d56 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -74,7 +74,7 @@ "lerna": "7.0.2", "mocha": "10.2.0", "nyc": "15.1.0", - "semver": "7.5.2", + "semver": "7.5.3", "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", diff --git a/package.json b/package.json index d52d6225d7..b2b015c269 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.2", + "semver": "7.5.3", "typedoc": "0.22.18", "typedoc-plugin-missing-exports": "1.0.0", "typedoc-plugin-resolve-crossmodule-references": "0.2.2", From a30952cc50e9a7a7be11e661bc3190fbe71ee400 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 26 Jun 2023 09:35:45 +0200 Subject: [PATCH 041/141] chore(deps): update dependency nightwatch to v3 (#3950) --- 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 cc0ee0108a..6d7726c134 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -44,7 +44,7 @@ "dotenv": "16.0.0", "fast-safe-stringify": "2.1.1", "geckodriver": "3.0.1", - "nightwatch": "2.0.10", + "nightwatch": "3.0.1", "selenium-server": "3.141.59", "terser-webpack-plugin": "4.2.3", "webpack": "4.46.0", From 4dc8416f9e1c808ba0eaa74bdbcbdb73c2e31e02 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Mon, 26 Jun 2023 11:04:48 +0200 Subject: [PATCH 042/141] fix(exporter-logs-otlp-http): update tsconfigs (#3936) --- .../packages/exporter-logs-otlp-http/tsconfig.esm.json | 3 +++ .../packages/exporter-logs-otlp-http/tsconfig.esnext.json | 3 +++ .../packages/exporter-logs-otlp-http/tsconfig.json | 8 ++++---- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-http/tsconfig.esm.json b/experimental/packages/exporter-logs-otlp-http/tsconfig.esm.json index 554367c373..f7353a3e87 100644 --- a/experimental/packages/exporter-logs-otlp-http/tsconfig.esm.json +++ b/experimental/packages/exporter-logs-otlp-http/tsconfig.esm.json @@ -12,6 +12,9 @@ { "path": "../../../packages/opentelemetry-core" }, + { + "path": "../../../packages/opentelemetry-resources" + }, { "path": "../api-logs" }, diff --git a/experimental/packages/exporter-logs-otlp-http/tsconfig.esnext.json b/experimental/packages/exporter-logs-otlp-http/tsconfig.esnext.json index 87a369521c..7a3b4e394e 100644 --- a/experimental/packages/exporter-logs-otlp-http/tsconfig.esnext.json +++ b/experimental/packages/exporter-logs-otlp-http/tsconfig.esnext.json @@ -12,6 +12,9 @@ { "path": "../../../packages/opentelemetry-core" }, + { + "path": "../../../packages/opentelemetry-resources" + }, { "path": "../api-logs" }, diff --git a/experimental/packages/exporter-logs-otlp-http/tsconfig.json b/experimental/packages/exporter-logs-otlp-http/tsconfig.json index 52330c182e..e347a2eef9 100644 --- a/experimental/packages/exporter-logs-otlp-http/tsconfig.json +++ b/experimental/packages/exporter-logs-otlp-http/tsconfig.json @@ -12,6 +12,9 @@ { "path": "../../../packages/opentelemetry-core" }, + { + "path": "../../../packages/opentelemetry-resources" + }, { "path": "../api-logs" }, @@ -23,9 +26,6 @@ }, { "path": "../sdk-logs" - }, - { - "path": "../../../packages/opentelemetry-resources" - }, + } ] } From 15ede4700b6049c44f30e511a7e8a643519ad254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=B2=92=E7=B2=92=E6=A9=99?= Date: Mon, 26 Jun 2023 20:20:53 +0800 Subject: [PATCH 043/141] fix(example-opencensus-shim): avoid OpenCensus auto instrumentations (#3951) * fix(example-opencensus-shim): avoid opencensus instrumentations being auto imported * chore: changelog --------- Co-authored-by: Haddas Bronfman <85441461+haddasbronfman@users.noreply.github.com> --- experimental/CHANGELOG.md | 1 + experimental/examples/opencensus-shim/package.json | 2 +- experimental/examples/opencensus-shim/setup.js | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 097f9925f8..dca209e1a6 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -17,6 +17,7 @@ All notable changes to experimental packages in this project will be documented * 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(example-opencensus-shim): avoid OpenCensus auto instrumentations [#3951](https://github.com/open-telemetry/opentelemetry-js/pull/3951) @llc1123 ### :books: (Refine Doc) diff --git a/experimental/examples/opencensus-shim/package.json b/experimental/examples/opencensus-shim/package.json index 689d1c7c24..fd231ef119 100644 --- a/experimental/examples/opencensus-shim/package.json +++ b/experimental/examples/opencensus-shim/package.json @@ -30,7 +30,7 @@ "@opentelemetry/api": "1.4.1", "@opentelemetry/sdk-trace-node": "1.14.0", "@opencensus/core": "0.1.0", - "@opencensus/nodejs": "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", diff --git a/experimental/examples/opencensus-shim/setup.js b/experimental/examples/opencensus-shim/setup.js index e96c62ae0c..37206971e7 100644 --- a/experimental/examples/opencensus-shim/setup.js +++ b/experimental/examples/opencensus-shim/setup.js @@ -29,7 +29,7 @@ const { } = require('@opentelemetry/semantic-conventions'); module.exports = function setup(serviceName) { - const tracing = require('@opencensus/nodejs'); + const tracing = require('@opencensus/nodejs-base'); diag.setLogger(new DiagConsoleLogger(), { logLevel: DiagLogLevel.ALL }); const provider = new NodeTracerProvider({ From 10c3e934cc743211af9811037e6fa63bea2744ee Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 27 Jun 2023 07:08:03 +0200 Subject: [PATCH 044/141] fix(selenium-tests): restore tests to functional state (#3923) --- selenium-tests/babel.config.js | 8 ++++---- selenium-tests/pages/fetch/index.js | 2 +- selenium-tests/pages/xhr/index.js | 4 ++-- selenium-tests/tests-helpers/constants.js | 2 +- selenium-tests/webpack.common.js | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/selenium-tests/babel.config.js b/selenium-tests/babel.config.js index 26b15edca0..31007c1484 100644 --- a/selenium-tests/babel.config.js +++ b/selenium-tests/babel.config.js @@ -22,12 +22,12 @@ module.exports = function (api) { ]; const plugins = [ ['@babel/plugin-proposal-decorators', { decoratorsBeforeExport: true }], - ['@babel/plugin-proposal-class-properties', { 'loose': true }], - ["@babel/plugin-proposal-private-methods", { "loose": true }], - ["@babel/plugin-proposal-private-property-in-object", { "loose": true }], + ['@babel/plugin-transform-class-properties', { 'loose': true }], + ["@babel/plugin-transform-private-methods", { "loose": true }], + ["@babel/plugin-transform-private-property-in-object", { "loose": true }], ]; return { presets, plugins, }; -}; \ No newline at end of file +}; diff --git a/selenium-tests/pages/fetch/index.js b/selenium-tests/pages/fetch/index.js index dbd2fe1166..4a3b7ae374 100644 --- a/selenium-tests/pages/fetch/index.js +++ b/selenium-tests/pages/fetch/index.js @@ -29,7 +29,7 @@ const getData = (url) => fetch(url, { // example of keeping track of context between async operations const prepareClickEvent = () => { - const url = 'https://httpbin.org/get'; + const url = 'https://httpstat.us/200'; const element = document.getElementById('button1'); diff --git a/selenium-tests/pages/xhr/index.js b/selenium-tests/pages/xhr/index.js index e998c58962..ba03da9c40 100644 --- a/selenium-tests/pages/xhr/index.js +++ b/selenium-tests/pages/xhr/index.js @@ -10,7 +10,7 @@ const provider = loadOtel([ new XMLHttpRequestInstrumentation({ ignoreUrls: [/localhost:8090\/sockjs-node/], propagateTraceHeaderCorsUrls: [ - 'https://httpbin.org/get', + 'https://httpstat.us/200', ], clearTimingResources: true, }), @@ -35,7 +35,7 @@ const getData = (url) => new Promise((resolve, reject) => { // example of keeping track of context between async operations const prepareClickEvent = () => { - const url = 'https://httpbin.org/get'; + const url = 'https://httpstat.us/200'; const element = document.getElementById('button1'); diff --git a/selenium-tests/tests-helpers/constants.js b/selenium-tests/tests-helpers/constants.js index 3362a3585c..2549a7fc27 100644 --- a/selenium-tests/tests-helpers/constants.js +++ b/selenium-tests/tests-helpers/constants.js @@ -2,4 +2,4 @@ const TIMEOUT_ELEMENT_MS = 5000; module.exports = { TIMEOUT_ELEMENT_MS, -}; \ No newline at end of file +}; diff --git a/selenium-tests/webpack.common.js b/selenium-tests/webpack.common.js index 0d00b07c60..3306d91b0d 100644 --- a/selenium-tests/webpack.common.js +++ b/selenium-tests/webpack.common.js @@ -11,7 +11,7 @@ module.exports = { filename: '[name].js', sourceMapFilename: '[file].map', }, - target: ['web', 'es5'], + target: 'web', module: { rules: [ { @@ -35,4 +35,4 @@ module.exports = { ], extensions: ['.ts', '.js', '.jsx', '.json'], }, -}; \ No newline at end of file +}; From e2e291c5837a10fa6e15b6274a3022680a4cdfd7 Mon Sep 17 00:00:00 2001 From: Aaron Abbott Date: Thu, 29 Jun 2023 02:31:08 -0400 Subject: [PATCH 045/141] fix(sdk-metrics): preserve startTime for cumulative ExponentialHistograms (#3934) Co-authored-by: Marc Pichler --- CHANGELOG.md | 1 + .../src/aggregator/ExponentialHistogram.ts | 33 +++---- .../aggregator/ExponentialHistogram.test.ts | 9 ++ .../cumulative-exponential-histogram.test.ts | 90 +++++++++++++++++++ 4 files changed, 117 insertions(+), 16 deletions(-) create mode 100644 packages/sdk-metrics/test/regression/cumulative-exponential-histogram.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 819fab8972..a162eae0a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) * 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) diff --git a/packages/sdk-metrics/src/aggregator/ExponentialHistogram.ts b/packages/sdk-metrics/src/aggregator/ExponentialHistogram.ts index 5a70a478a8..51c71ee211 100644 --- a/packages/sdk-metrics/src/aggregator/ExponentialHistogram.ts +++ b/packages/sdk-metrics/src/aggregator/ExponentialHistogram.ts @@ -213,32 +213,33 @@ export class ExponentialHistogramAccumulation implements Accumulation { } /** - * merge combines data from other into self - * @param {ExponentialHistogramAccumulation} other + * merge combines data from previous value into self + * @param {ExponentialHistogramAccumulation} previous */ - merge(other: ExponentialHistogramAccumulation) { + merge(previous: ExponentialHistogramAccumulation) { if (this._count === 0) { - this._min = other.min; - this._max = other.max; - } else if (other.count !== 0) { - if (other.min < this.min) { - this._min = other.min; + this._min = previous.min; + this._max = previous.max; + } else if (previous.count !== 0) { + if (previous.min < this.min) { + this._min = previous.min; } - if (other.max > this.max) { - this._max = other.max; + if (previous.max > this.max) { + this._max = previous.max; } } - this._sum += other.sum; - this._count += other.count; - this._zeroCount += other.zeroCount; + this.startTime = previous.startTime; + this._sum += previous.sum; + this._count += previous.count; + this._zeroCount += previous.zeroCount; - const minScale = this._minScale(other); + const minScale = this._minScale(previous); this._downscale(this.scale - minScale); - this._mergeBuckets(this.positive, other, other.positive, minScale); - this._mergeBuckets(this.negative, other, other.negative, minScale); + this._mergeBuckets(this.positive, previous, previous.positive, minScale); + this._mergeBuckets(this.negative, previous, previous.negative, minScale); } /** diff --git a/packages/sdk-metrics/test/aggregator/ExponentialHistogram.test.ts b/packages/sdk-metrics/test/aggregator/ExponentialHistogram.test.ts index 150eb13e91..2bcbc43307 100644 --- a/packages/sdk-metrics/test/aggregator/ExponentialHistogram.test.ts +++ b/packages/sdk-metrics/test/aggregator/ExponentialHistogram.test.ts @@ -574,6 +574,15 @@ describe('ExponentialHistogramAggregation', () => { assert.deepStrictEqual(acc0.toPointValue(), acc0Snapshot); assert.deepStrictEqual(acc1.toPointValue(), acc1Snapshot); }); + + it("keeps the previous point's startTime", () => { + const agg = new ExponentialHistogramAggregator(4, true); + const acc0 = agg.createAccumulation([0, 0]); + const acc1 = agg.createAccumulation([3, 0]); + + const result = agg.merge(acc0, acc1); + assert.strictEqual(result.startTime, acc0.startTime); + }); }); describe('diff', () => { diff --git a/packages/sdk-metrics/test/regression/cumulative-exponential-histogram.test.ts b/packages/sdk-metrics/test/regression/cumulative-exponential-histogram.test.ts new file mode 100644 index 0000000000..79dcfc434f --- /dev/null +++ b/packages/sdk-metrics/test/regression/cumulative-exponential-histogram.test.ts @@ -0,0 +1,90 @@ +/* + * 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 assert from 'assert'; +import * as sinon from 'sinon'; +import { + Aggregation, + AggregationTemporality, + InstrumentType, + MeterProvider, + MetricReader, +} from '../../src'; +import { TestMetricReader } from '../export/TestMetricReader'; + +describe('cumulative-exponential-histogram', () => { + let clock: sinon.SinonFakeTimers; + + beforeEach(() => { + clock = sinon.useFakeTimers(); + }); + afterEach(() => { + sinon.restore(); + }); + + it('Cumulative Histogram should have the same startTime every collection', async () => { + // Works fine and passes + await doTest(Aggregation.Histogram()); + }); + + it('Cumulative ExponentialHistogram should have the same startTime every collection', async () => { + // Fails + await doTest(Aggregation.ExponentialHistogram()); + }); + + const doTest = async (histogramAggregation: Aggregation) => { + const meterProvider = new MeterProvider(); + const reader = new TestMetricReader({ + aggregationTemporalitySelector() { + return AggregationTemporality.CUMULATIVE; + }, + aggregationSelector(type) { + return type === InstrumentType.HISTOGRAM + ? histogramAggregation + : Aggregation.Default(); + }, + }); + + meterProvider.addMetricReader(reader); + const meter = meterProvider.getMeter('my-meter'); + const hist = meter.createHistogram('testhist'); + + hist.record(1); + + const resourceMetrics1 = await collectNoErrors(reader); + const dataPoint1 = + resourceMetrics1.scopeMetrics[0].metrics[0].dataPoints[0]; + + clock.tick(1000); + hist.record(2); + + const resourceMetrics2 = await collectNoErrors(reader); + const dataPoint2 = + resourceMetrics2.scopeMetrics[0].metrics[0].dataPoints[0]; + + assert.deepStrictEqual( + dataPoint1.startTime, + dataPoint2.startTime, + 'The start time should be the same across cumulative collections' + ); + }; + + const collectNoErrors = async (reader: MetricReader) => { + const { resourceMetrics, errors } = await reader.collect(); + assert.strictEqual(errors.length, 0); + return resourceMetrics; + }; +}); From b3d57bb295c853fac2a0659dafd5594406e35712 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 29 Jun 2023 08:49:38 +0200 Subject: [PATCH 046/141] chore(deps): update lerna monorepo to v7.1.1 (#3956) --- 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 +- 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-exporter-prometheus/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 | 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 | 2 +- experimental/packages/otlp-proto-exporter-base/package.json | 2 +- experimental/packages/otlp-transformer/package.json | 2 +- experimental/packages/sdk-logs/package.json | 2 +- 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 | 2 +- packages/opentelemetry-context-zone/package.json | 2 +- packages/opentelemetry-core/package.json | 2 +- packages/opentelemetry-exporter-jaeger/package.json | 2 +- packages/opentelemetry-exporter-zipkin/package.json | 2 +- 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 | 2 +- packages/opentelemetry-semantic-conventions/package.json | 2 +- packages/opentelemetry-shim-opentracing/package.json | 2 +- packages/sdk-metrics/package.json | 2 +- packages/template/package.json | 2 +- 43 files changed, 44 insertions(+), 44 deletions(-) diff --git a/api/package.json b/api/package.json index 119fcece0c..888e602e5e 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.0.2", + "lerna": "7.1.1", "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 bf4ecca09d..ec768c6188 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.0.2", + "lerna": "7.1.1", "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 2b0e373057..7be2db96e3 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.0.2", + "lerna": "7.1.1", "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 77e2285f74..43dc22d223 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.0.2", + "lerna": "7.1.1", "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 41b72085be..a1ff957253 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -89,7 +89,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.0.2", + "lerna": "7.1.1", "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 87c6c6f0eb..204414966f 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -71,7 +71,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.1", "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 2ff7f9172c..fce71adbd5 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.0.2", + "lerna": "7.1.1", "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 767df86231..9e55231aa6 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.0.2", + "lerna": "7.1.1", "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 b5a87081d6..5f0deff40b 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -70,7 +70,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.1", "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 233187c2cf..788fb3dd99 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -60,7 +60,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.1", "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 4697eacdbb..cebe38c3c9 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.0.2", + "lerna": "7.1.1", "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 5256a337bc..e26bbcd17b 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.0.2", + "lerna": "7.1.1", "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 08a8fb0538..f10cf504ca 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.0.2", + "lerna": "7.1.1", "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 6a501c55d6..8ae497886f 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.0.2", + "lerna": "7.1.1", "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 01cc35fe48..c8f1bfcb39 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.0.2", + "lerna": "7.1.1", "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 85e49c1c24..2dc97dddd1 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.0.2", + "lerna": "7.1.1", "mocha": "10.2.0", "node-pre-gyp": "0.17.0", "nyc": "15.1.0", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index 91d0b99a42..c39d34ace9 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.0.2", + "lerna": "7.1.1", "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 82f28f158a..4eb469da07 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.0.2", + "lerna": "7.1.1", "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 9d08197039..dd8ac1eb87 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -101,7 +101,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.0.2", + "lerna": "7.1.1", "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 d62cc04d56..5db8e3ced7 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -71,7 +71,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "lerna": "7.0.2", + "lerna": "7.1.1", "mocha": "10.2.0", "nyc": "15.1.0", "semver": "7.5.3", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 8e3705b2c1..de1a701996 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -72,7 +72,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "lerna": "7.0.2", + "lerna": "7.1.1", "mocha": "10.2.0", "nock": "13.3.1", "nyc": "15.1.0", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 7955aac4ff..4956fbee14 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -59,7 +59,7 @@ "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.1", "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 7430c153cb..0587dc9de5 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -66,7 +66,7 @@ "@types/sinon": "10.0.15", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.1", "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 ad12b3e16f..4e2a831389 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.0.2", + "lerna": "7.1.1", "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 70abad035b..be245fbe15 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -85,7 +85,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.0.2", + "lerna": "7.1.1", "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 6f870cfc69..636efed876 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.0.2", + "lerna": "7.1.1", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", diff --git a/package.json b/package.json index b2b015c269..c0b6c172ef 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.0.2", - "@lerna/legacy-package-management": "7.0.2", + "lerna": "7.1.1", + "@lerna/legacy-package-management": "7.1.1", "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 62a77cf7e8..64366b205c 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.0.2", + "lerna": "7.1.1", "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 fa4b547427..9904e9da84 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.0.2", + "lerna": "7.1.1", "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 43c775f413..84a937ce93 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.0.2", + "lerna": "7.1.1", "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 3bd4796e7f..23e11a9e5c 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.0.2", + "lerna": "7.1.1", "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 a45636c9ac..3b4164d3f9 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.0.2", + "lerna": "7.1.1", "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 cf3b1ddff2..bbe473b650 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -76,7 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.0.2", + "lerna": "7.1.1", "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 97303e5076..89dcef29be 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -64,7 +64,7 @@ "codecov": "3.8.3", "cross-var": "1.1.0", "istanbul-instrumenter-loader": "3.0.1", - "lerna": "7.0.2", + "lerna": "7.1.1", "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 d15ebcfea0..de2e90601f 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.0.2", + "lerna": "7.1.1", "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 340875b9fe..17de24f223 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.0.2", + "lerna": "7.1.1", "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 10ffe262e6..6cceaa64d5 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.0.2", + "lerna": "7.1.1", "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 51e5d59e51..bd4fb782fe 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.0.2", + "lerna": "7.1.1", "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 84555c91be..b3bfc15586 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/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.0.2", + "lerna": "7.1.1", "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 d1f733190b..c7585e68f3 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.0.2", + "lerna": "7.1.1", "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 f4745b1f7c..9b05c66d6c 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.0.2", + "lerna": "7.1.1", "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 3ec2a1fe4b..2e327b6acd 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -67,7 +67,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.0.2", + "lerna": "7.1.1", "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 5f0dd1cb52..00876cf2c4 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.0.2", + "lerna": "7.1.1", "typescript": "4.4.4" }, "dependencies": { From bb8a4f7ab71494a59b42daf6958a6f10d1ce6870 Mon Sep 17 00:00:00 2001 From: Andreas Odysseos Date: Thu, 29 Jun 2023 15:59:09 +0300 Subject: [PATCH 047/141] fix(http-intrumentation): prevent request socket null from throwing uncaught error (#3858) Co-authored-by: Marc Pichler --- experimental/CHANGELOG.md | 1 + .../src/utils.ts | 34 +++++++++++-------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index dca209e1a6..af2ea3a26e 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -18,6 +18,7 @@ All notable changes to experimental packages in this project will be documented * 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(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) diff --git a/experimental/packages/opentelemetry-instrumentation-http/src/utils.ts b/experimental/packages/opentelemetry-instrumentation-http/src/utils.ts index a563e29471..a70dd3de85 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/src/utils.ts +++ b/experimental/packages/opentelemetry-instrumentation-http/src/utils.ts @@ -403,11 +403,12 @@ export const getOutgoingRequestAttributesOnResponse = ( response: IncomingMessage ): SpanAttributes => { const { statusCode, statusMessage, httpVersion, socket } = response; - const { remoteAddress, remotePort } = socket; - const attributes: SpanAttributes = { - [SemanticAttributes.NET_PEER_IP]: remoteAddress, - [SemanticAttributes.NET_PEER_PORT]: remotePort, - }; + const attributes: SpanAttributes = {}; + if (socket) { + const { remoteAddress, remotePort } = socket; + attributes[SemanticAttributes.NET_PEER_IP] = remoteAddress; + attributes[SemanticAttributes.NET_PEER_PORT] = remotePort; + } setResponseContentLengthAttribute(response, attributes); if (statusCode) { @@ -529,17 +530,20 @@ export const getIncomingRequestAttributesOnResponse = ( // since it may be detached from the response object in keep-alive mode const { socket } = request; const { statusCode, statusMessage } = response; - const { localAddress, localPort, remoteAddress, remotePort } = socket; - const rpcMetadata = getRPCMetadata(context.active()); - const attributes: SpanAttributes = { - [SemanticAttributes.NET_HOST_IP]: localAddress, - [SemanticAttributes.NET_HOST_PORT]: localPort, - [SemanticAttributes.NET_PEER_IP]: remoteAddress, - [SemanticAttributes.NET_PEER_PORT]: remotePort, - [SemanticAttributes.HTTP_STATUS_CODE]: statusCode, - [AttributeNames.HTTP_STATUS_TEXT]: (statusMessage || '').toUpperCase(), - }; + const rpcMetadata = getRPCMetadata(context.active()); + const attributes: SpanAttributes = {}; + if (socket) { + const { localAddress, localPort, remoteAddress, remotePort } = socket; + attributes[SemanticAttributes.NET_HOST_IP] = localAddress; + attributes[SemanticAttributes.NET_HOST_PORT] = localPort; + attributes[SemanticAttributes.NET_PEER_IP] = remoteAddress; + attributes[SemanticAttributes.NET_PEER_PORT] = remotePort; + } + attributes[SemanticAttributes.HTTP_STATUS_CODE] = statusCode; + attributes[AttributeNames.HTTP_STATUS_TEXT] = ( + statusMessage || '' + ).toUpperCase(); if (rpcMetadata?.type === RPCType.HTTP && rpcMetadata.route !== undefined) { attributes[SemanticAttributes.HTTP_ROUTE] = rpcMetadata.route; From 070b6852a546104f73499973a09475afcded9b97 Mon Sep 17 00:00:00 2001 From: Martin Kuba Date: Fri, 30 Jun 2023 11:13:03 -0700 Subject: [PATCH 048/141] LowMemory metrics temporality preference (#3915) Co-authored-by: Marc Pichler --- CHANGELOG.md | 5 + .../README.md | 2 +- .../test/OTLPMetricExporter.test.ts | 16 +-- .../README.md | 2 +- .../src/OTLPMetricExporterBase.ts | 35 ++++- .../src/OTLPMetricExporterOptions.ts | 12 +- .../browser/CollectorMetricExporter.test.ts | 20 +-- .../test/node/CollectorMetricExporter.test.ts | 134 +++++++++++++++++- .../README.md | 2 +- .../test/OTLPMetricExporter.test.ts | 10 +- 10 files changed, 202 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a162eae0a4..865601c10d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ 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) * fix(sdk-metrics): Update default Histogram's boundary to match OTEL's spec [#3893](https://github.com/open-telemetry/opentelemetry-js/pull/3893/) @chigia001 diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md index 5445862afc..05f6b48039 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md @@ -71,7 +71,7 @@ In addition to settings passed to the constructor, the exporter also supports co | OTEL_EXPORTER_OTLP_CLIENT_KEY | The path to the file containing private client key to use when verifying an OTLP trace, metric or log client's TLS credentials. Must provide a client certificate/chain when providing a private client key. By default no client key file is used. | | OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE | The path to the file containing trusted client certificate/chain for clients private key to use when verifying an OTLP metric server's TLS credentials. Must provide a private client key when providing a certificate/chain. By default no chain file is used. | | OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE | The path to the file containing trusted client certificate/chain for clients private key to use when verifying an OTLP trace, metric and log server's TLS credentials. Must provide a private client key when providing a certificate/chain. By default no chain file is used. | -| OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | The exporters aggregation temporality preference. Valid values are `cumulative`, and `delta`. `cumulative` selects cumulative temporality for all instrument kinds. `delta` selects delta aggregation temporality for Counter, Asynchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter and Asynchronous UpDownCounter instrument kinds. By default `cumulative` is used. | +| OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | The exporters aggregation temporality preference. Valid values are `cumulative`, `delta`, and `lowmemory`. `cumulative` selects cumulative temporality for all instrument kinds. `delta` selects delta aggregation temporality for Counter, Asynchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter and Asynchronous UpDownCounter instrument kinds. `lowmemory` select delta aggregation temporality for Synchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for Synchronous UpDownCounter, Asynchronous Counter and Asynchronous UpDownCounter instrument kinds. By default `cumulative` is used. | > Settings configured programmatically take precedence over environment variables. Per-signal environment variables take precedence over non-per-signal environment variables. diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts index 6749c60106..a85d2f342e 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts @@ -35,15 +35,13 @@ import { setUp, shutdown, } from './metricsHelper'; -import { - AggregationTemporality, - ResourceMetrics, -} from '@opentelemetry/sdk-metrics'; +import { ResourceMetrics } from '@opentelemetry/sdk-metrics'; import { IExportMetricsServiceRequest, IResourceMetrics, } from '@opentelemetry/otlp-transformer'; import { VERSION } from '../src/version'; +import { AggregationTemporalityPreference } from '@opentelemetry/exporter-metrics-otlp-http'; const metricsServiceProtoPath = 'opentelemetry/proto/collector/metrics/v1/metrics_service.proto'; @@ -144,7 +142,7 @@ const testOTLPMetricExporter = (params: TestParams) => { url: address, credentials, metadata: metadata, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); setUp(); @@ -199,7 +197,7 @@ const testOTLPMetricExporter = (params: TestParams) => { headers: { foo: 'bar', }, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); const args = warnStub.args[0]; assert.strictEqual(args[0], 'Headers cannot be set when using grpc'); @@ -211,7 +209,7 @@ const testOTLPMetricExporter = (params: TestParams) => { } collectorExporter = new OTLPMetricExporter({ url: `${address}/v1/metrics`, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); const args = warnStub.args[0]; assert.strictEqual( @@ -294,7 +292,7 @@ describe('OTLPMetricExporter - node (getDefaultUrl)', () => { const url = 'http://foo.bar.com'; const collectorExporter = new OTLPMetricExporter({ url, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); setTimeout(() => { assert.strictEqual(collectorExporter._otlpExporter.url, 'foo.bar.com'); @@ -343,7 +341,7 @@ describe('when configuring via environment', () => { envSource.OTEL_EXPORTER_OTLP_METRICS_HEADERS = 'foo=boo'; const collectorExporter = new OTLPMetricExporter({ metadata, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); assert.deepStrictEqual( collectorExporter._otlpExporter.metadata?.get('foo'), diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md index 0645aa1219..b475d02838 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md @@ -81,7 +81,7 @@ In addition to settings passed to the constructor, the exporter also supports co |---------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | OTEL_EXPORTER_OTLP_ENDPOINT | The endpoint to send metrics to. This will also be used for the traces exporter if `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` is not configured. By default `http://localhost:4318` will be used. `/v1/metrics` will be automatically appended to configured values. | | OTEL_EXPORTER_OTLP_METRICS_ENDPOINT | The endpoint to send metrics to. By default `https://localhost:4318/v1/metrics` will be used. `v1/metrics` will not be appended automatically and has to be added explicitly. | -| OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | The exporters aggregation temporality preference. Valid values are `cumulative`, and `delta`. `cumulative` selects cumulative temporality for all instrument kinds. `delta` selects delta aggregation temporality for Counter, Asynchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter and Asynchronous UpDownCounter instrument kinds. By default `cumulative` is used. | +| OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | The exporters aggregation temporality preference. Valid values are `cumulative`, `delta`, and `lowmemory`. `cumulative` selects cumulative temporality for all instrument kinds. `delta` selects delta aggregation temporality for Counter, Asynchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter and Asynchronous UpDownCounter instrument kinds. `lowmemory` selects delta aggregation temporality for Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter, Asynchronous Counter and Asynchronous UpDownCounter instrument kinds. By default `cumulative` is used. | > Settings configured programmatically take precedence over environment variables. Per-signal environment variables take > precedence over non-per-signal environment variables. 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 bbebe6cd1f..21177777f6 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterBase.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterBase.ts @@ -22,7 +22,10 @@ import { PushMetricExporter, ResourceMetrics, } from '@opentelemetry/sdk-metrics'; -import { OTLPMetricExporterOptions } from './OTLPMetricExporterOptions'; +import { + AggregationTemporalityPreference, + OTLPMetricExporterOptions, +} from './OTLPMetricExporterOptions'; import { OTLPExporterBase } from '@opentelemetry/otlp-exporter-base'; import { IExportMetricsServiceRequest } from '@opentelemetry/otlp-transformer'; import { diag } from '@opentelemetry/api'; @@ -45,6 +48,21 @@ export const DeltaTemporalitySelector: AggregationTemporalitySelector = ( } }; +export const LowMemoryTemporalitySelector: AggregationTemporalitySelector = ( + instrumentType: InstrumentType +) => { + switch (instrumentType) { + case InstrumentType.COUNTER: + case InstrumentType.HISTOGRAM: + return AggregationTemporality.DELTA; + case InstrumentType.UP_DOWN_COUNTER: + case InstrumentType.OBSERVABLE_UP_DOWN_COUNTER: + case InstrumentType.OBSERVABLE_COUNTER: + case InstrumentType.OBSERVABLE_GAUGE: + return AggregationTemporality.CUMULATIVE; + } +}; + function chooseTemporalitySelectorFromEnvironment() { const env = getEnv(); const configuredTemporality = @@ -56,6 +74,9 @@ function chooseTemporalitySelectorFromEnvironment() { if (configuredTemporality === 'delta') { return DeltaTemporalitySelector; } + if (configuredTemporality === 'lowmemory') { + return LowMemoryTemporalitySelector; + } diag.warn( `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE is set to '${env.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE}', but only 'cumulative' and 'delta' are allowed. Using default ('cumulative') instead.` @@ -64,12 +85,18 @@ function chooseTemporalitySelectorFromEnvironment() { } function chooseTemporalitySelector( - temporalityPreference?: AggregationTemporality + temporalityPreference?: + | AggregationTemporalityPreference + | AggregationTemporality ): AggregationTemporalitySelector { // Directly passed preference has priority. if (temporalityPreference != null) { - if (temporalityPreference === AggregationTemporality.DELTA) { + if (temporalityPreference === AggregationTemporalityPreference.DELTA) { return DeltaTemporalitySelector; + } else if ( + temporalityPreference === AggregationTemporalityPreference.LOWMEMORY + ) { + return LowMemoryTemporalitySelector; } return CumulativeTemporalitySelector; } @@ -86,7 +113,7 @@ export class OTLPMetricExporterBase< > implements PushMetricExporter { public _otlpExporter: T; - protected _aggregationTemporalitySelector: AggregationTemporalitySelector; + private _aggregationTemporalitySelector: AggregationTemporalitySelector; constructor(exporter: T, config?: OTLPMetricExporterOptions) { this._otlpExporter = exporter; diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterOptions.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterOptions.ts index 32529efee1..e03bde4e75 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterOptions.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/src/OTLPMetricExporterOptions.ts @@ -14,9 +14,17 @@ * limitations under the License. */ -import { AggregationTemporality } from '@opentelemetry/sdk-metrics'; import { OTLPExporterConfigBase } from '@opentelemetry/otlp-exporter-base'; +import { AggregationTemporality } from '@opentelemetry/sdk-metrics'; export interface OTLPMetricExporterOptions extends OTLPExporterConfigBase { - temporalityPreference?: AggregationTemporality; + temporalityPreference?: + | AggregationTemporalityPreference + | AggregationTemporality; +} + +export enum AggregationTemporalityPreference { + DELTA, + CUMULATIVE, + LOWMEMORY, } diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/browser/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/browser/CollectorMetricExporter.test.ts index 7dbc7cc889..053376b032 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/browser/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/browser/CollectorMetricExporter.test.ts @@ -22,10 +22,7 @@ import { Histogram, } from '@opentelemetry/api'; import { ExportResultCode, hrTimeToNanoseconds } from '@opentelemetry/core'; -import { - AggregationTemporality, - ResourceMetrics, -} from '@opentelemetry/sdk-metrics'; +import { ResourceMetrics } from '@opentelemetry/sdk-metrics'; import * as assert from 'assert'; import * as sinon from 'sinon'; import { OTLPMetricExporter } from '../../src/platform/browser'; @@ -44,7 +41,10 @@ import { setUp, shutdown, } from '../metricsHelper'; -import { OTLPMetricExporterOptions } from '../../src'; +import { + AggregationTemporalityPreference, + OTLPMetricExporterOptions, +} from '../../src'; import { OTLPExporterConfigBase } from '@opentelemetry/otlp-exporter-base'; import { IExportMetricsServiceRequest } from '@opentelemetry/otlp-transformer'; @@ -102,7 +102,7 @@ describe('OTLPMetricExporter - web', () => { beforeEach(() => { collectorExporter = new OTLPMetricExporter({ url: 'http://foo.bar.com', - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); }); @@ -230,7 +230,7 @@ describe('OTLPMetricExporter - web', () => { (window.navigator as any).sendBeacon = false; collectorExporter = new OTLPMetricExporter({ url: 'http://foo.bar.com', - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); // Overwrites the start time to make tests consistent Object.defineProperty(collectorExporter, '_startTime', { @@ -386,7 +386,7 @@ describe('OTLPMetricExporter - web', () => { beforeEach(() => { collectorExporterConfig = { headers: customHeaders, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }; server = sinon.fakeServer.create(); }); @@ -518,7 +518,7 @@ describe('when configuring via environment', () => { envSource.OTEL_EXPORTER_OTLP_HEADERS = 'foo=bar'; const collectorExporter = new OTLPMetricExporter({ headers: {}, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); assert.strictEqual( collectorExporter['_otlpExporter']['_headers'].foo, @@ -531,7 +531,7 @@ describe('when configuring via environment', () => { envSource.OTEL_EXPORTER_OTLP_METRICS_HEADERS = 'foo=boo'; const collectorExporter = new OTLPMetricExporter({ headers: {}, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); assert.strictEqual( collectorExporter['_otlpExporter']['_headers'].foo, diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts index 042e5ebb4b..0844e5a9f2 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts @@ -20,8 +20,10 @@ import * as assert from 'assert'; import * as http from 'http'; import * as sinon from 'sinon'; import { + AggregationTemporalityPreference, CumulativeTemporalitySelector, DeltaTemporalitySelector, + LowMemoryTemporalitySelector, OTLPMetricExporterOptions, } from '../../src'; @@ -42,6 +44,7 @@ import { import { MockedResponse } from './nodeHelpers'; import { AggregationTemporality, + InstrumentType, ResourceMetrics, } from '@opentelemetry/sdk-metrics'; import { PassThrough, Stream } from 'stream'; @@ -105,6 +108,116 @@ describe('OTLPMetricExporter - node with json over http', () => { }); }); + describe('temporality', () => { + it('should use the right temporality when Cumulative preference is selected', () => { + const exporter = new OTLPMetricExporter({ + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, + }); + + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.COUNTER), + AggregationTemporality.CUMULATIVE, + 'Counter' + ); + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.HISTOGRAM), + AggregationTemporality.CUMULATIVE, + 'Histogram' + ); + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.UP_DOWN_COUNTER), + AggregationTemporality.CUMULATIVE, + 'UpDownCounter' + ); + assert.equal( + exporter.selectAggregationTemporality( + InstrumentType.OBSERVABLE_COUNTER + ), + AggregationTemporality.CUMULATIVE, + 'Asynchronous Counter' + ); + assert.equal( + exporter.selectAggregationTemporality( + InstrumentType.OBSERVABLE_UP_DOWN_COUNTER + ), + AggregationTemporality.CUMULATIVE, + 'Asynchronous UpDownCounter' + ); + }); + + it('should use the right temporality when Delta preference is selected', () => { + const exporter = new OTLPMetricExporter({ + temporalityPreference: AggregationTemporalityPreference.DELTA, + }); + + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.COUNTER), + AggregationTemporality.DELTA, + 'Counter' + ); + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.HISTOGRAM), + AggregationTemporality.DELTA, + 'Histogram' + ); + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.UP_DOWN_COUNTER), + AggregationTemporality.CUMULATIVE, + 'UpDownCounter' + ); + assert.equal( + exporter.selectAggregationTemporality( + InstrumentType.OBSERVABLE_COUNTER + ), + AggregationTemporality.DELTA, + 'Asynchronous Counter' + ); + assert.equal( + exporter.selectAggregationTemporality( + InstrumentType.OBSERVABLE_UP_DOWN_COUNTER + ), + AggregationTemporality.CUMULATIVE, + 'Asynchronous UpDownCounter' + ); + }); + + it('should use the right temporality when LowMemory preference is selected', () => { + const exporter = new OTLPMetricExporter({ + temporalityPreference: AggregationTemporalityPreference.LOWMEMORY, + }); + + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.COUNTER), + AggregationTemporality.DELTA, + 'Counter' + ); + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.HISTOGRAM), + AggregationTemporality.DELTA, + 'Histogram' + ); + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.UP_DOWN_COUNTER), + AggregationTemporality.CUMULATIVE, + 'UpDownCounter' + ); + assert.equal( + exporter.selectAggregationTemporality( + InstrumentType.OBSERVABLE_COUNTER + ), + AggregationTemporality.CUMULATIVE, + 'Asynchronous Counter' + ); + assert.equal( + exporter.selectAggregationTemporality( + InstrumentType.OBSERVABLE_UP_DOWN_COUNTER + ), + AggregationTemporality.CUMULATIVE, + 'Asynchronous UpDownCounter' + ); + }); + }); + describe('when configuring via environment', () => { const envSource = process.env; it('should use url defined in env that ends with root path and append version and signal path', () => { @@ -230,6 +343,21 @@ describe('OTLPMetricExporter - node with json over http', () => { ); } }); + it('should use low memory temporality defined via env', () => { + for (const envValue of [ + 'lowmemory', + 'LOWMEMORY', + 'LoWMeMOrY', + 'lowmemory ', + ]) { + envSource.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE = envValue; + const exporter = new OTLPMetricExporter(); + assert.strictEqual( + exporter['_aggregationTemporalitySelector'], + LowMemoryTemporalitySelector + ); + } + }); it('should configure cumulative temporality with invalid value in env', () => { for (const envValue of ['invalid', ' ']) { envSource.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE = envValue; @@ -244,7 +372,7 @@ describe('OTLPMetricExporter - node with json over http', () => { envSource.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE = 'cumulative'; const exporter = new OTLPMetricExporter({ - temporalityPreference: AggregationTemporality.DELTA, + temporalityPreference: AggregationTemporalityPreference.DELTA, }); assert.strictEqual( exporter['_aggregationTemporalitySelector'], @@ -264,7 +392,7 @@ describe('OTLPMetricExporter - node with json over http', () => { url: 'http://foo.bar.com', keepAlive: true, httpAgentOptions: { keepAliveMsecs: 2000 }, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }; collectorExporter = new OTLPMetricExporter(collectorExporterConfig); @@ -485,7 +613,7 @@ describe('OTLPMetricExporter - node with json over http', () => { const url = 'http://foo.bar.com'; const collectorExporter = new OTLPMetricExporter({ url, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); setTimeout(() => { assert.strictEqual(collectorExporter._otlpExporter.url, url); diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md index 6a2e160bac..5f89cc17bc 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md @@ -51,7 +51,7 @@ In addition to settings passed to the constructor, the exporter also supports co |---------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | OTEL_EXPORTER_OTLP_ENDPOINT | The endpoint to send metrics to. This will also be used for the traces exporter if `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` is not configured. By default `http://localhost:4318` will be used. `/v1/metrics` will be automatically appended to configured values. | | OTEL_EXPORTER_OTLP_METRICS_ENDPOINT | The endpoint to send metrics to. By default `https://localhost:4318/v1/metrics` will be used. `v1/metrics` will not be appended automatically and has to be added explicitly. | -| OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | The exporters aggregation temporality preference. Valid values are `cumulative`, and `delta`. `cumulative` selects cumulative temporality for all instrument kinds. `delta` selects delta aggregation temporality for Counter, Asynchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter and Asynchronous UpDownCounter instrument kinds. By default `cumulative` is used. | +| OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | The exporters aggregation temporality preference. Valid values are `cumulative`, `delta` and `lowmemory`. `cumulative` selects cumulative temporality for all instrument kinds. `delta` selects delta aggregation temporality for Counter, Asynchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter and Asynchronous UpDownCounter instrument kinds. `lowmemory` selects delta aggregation temporality for Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter, Asynchronous Counter and Asynchronous UpDownCounter instrument kinds. By default `cumulative` is used. | > Settings configured programmatically take precedence over environment variables. Per-signal environment variables take > precedence over non-per-signal environment variables. diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts index d3270b6a9f..4d4856481d 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts @@ -38,11 +38,11 @@ import { setUp, shutdown, } from './metricsHelper'; +import { ResourceMetrics } from '@opentelemetry/sdk-metrics'; import { - AggregationTemporality, - ResourceMetrics, -} from '@opentelemetry/sdk-metrics'; -import { OTLPMetricExporterOptions } from '@opentelemetry/exporter-metrics-otlp-http'; + AggregationTemporalityPreference, + OTLPMetricExporterOptions, +} from '@opentelemetry/exporter-metrics-otlp-http'; import { Stream, PassThrough } from 'stream'; import { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base'; import { IExportMetricsServiceRequest } from '@opentelemetry/otlp-transformer'; @@ -176,7 +176,7 @@ describe('OTLPMetricExporter - node with proto over http', () => { url: 'http://foo.bar.com', keepAlive: true, httpAgentOptions: { keepAliveMsecs: 2000 }, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }; collectorExporter = new OTLPMetricExporter(collectorExporterConfig); setUp(); From 1ce8a899cf2af1790787e48dad36769fe3af7b0d Mon Sep 17 00:00:00 2001 From: Jackson Weber <47067795+JacksonWeber@users.noreply.github.com> Date: Mon, 3 Jul 2023 04:34:35 -0700 Subject: [PATCH 049/141] Update the Prometheus Exporter to by Default not Append Timestamp (#3961) --- CHANGELOG.md | 1 + .../src/PrometheusExporter.ts | 2 +- .../src/PrometheusSerializer.ts | 2 +- .../test/PrometheusExporter.test.ts | 68 ++++----- .../test/PrometheusSerializer.test.ts | 141 +++++++++--------- 5 files changed, 106 insertions(+), 108 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 865601c10d..7de3dc1f1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :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 diff --git a/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts b/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts index 2a7cb5fb43..8f84c5134c 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts @@ -33,7 +33,7 @@ export class PrometheusExporter extends MetricReader { port: 9464, endpoint: '/metrics', prefix: '', - appendTimestamp: true, + appendTimestamp: false, }; private readonly _host?: string; diff --git a/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts b/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts index 75b29bb61b..7dc424a2b7 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts @@ -176,7 +176,7 @@ export class PrometheusSerializer { private _prefix: string | undefined; private _appendTimestamp: boolean; - constructor(prefix?: string, appendTimestamp = true) { + constructor(prefix?: string, appendTimestamp = false) { if (prefix) { this._prefix = prefix + '_'; } diff --git a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts index 292ad3db1e..b4c6f0ade0 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts @@ -21,12 +21,12 @@ import * as sinon from 'sinon'; import * as http from 'http'; import { PrometheusExporter } from '../src'; import { - mockedHrTimeMs, mockHrTime, sdkLanguage, sdkName, sdkVersion, serviceName, + mockedHrTimeMs, } from './util'; import { SinonStubbedInstance } from 'sinon'; @@ -290,7 +290,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_total a test description', '# TYPE counter_total counter', - `counter_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, + 'counter_total{key1="attributeValue1"} 10', '', ]); }); @@ -320,7 +320,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP metric_observable_gauge a test description', '# TYPE metric_observable_gauge gauge', - `metric_observable_gauge{pid="123",core="1"} 0.999 ${mockedHrTimeMs}`, + 'metric_observable_gauge{pid="123",core="1"} 0.999', '', ]); }); @@ -340,8 +340,8 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_total a test description', '# TYPE counter_total counter', - `counter_total{counterKey1="attributeValue1"} 10 ${mockedHrTimeMs}`, - `counter_total{counterKey1="attributeValue2"} 20 ${mockedHrTimeMs}`, + 'counter_total{counterKey1="attributeValue1"} 10', + 'counter_total{counterKey1="attributeValue2"} 20', '', ]); }); @@ -389,7 +389,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_total description missing', '# TYPE counter_total counter', - `counter_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, + 'counter_total{key1="attributeValue1"} 10', '', ]); }); @@ -406,7 +406,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_bad_name_total description missing', '# TYPE counter_bad_name_total counter', - `counter_bad_name_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, + 'counter_bad_name_total{key1="attributeValue1"} 10', '', ]); }); @@ -424,7 +424,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter a test description', '# TYPE counter gauge', - `counter{key1="attributeValue1"} 20 ${mockedHrTimeMs}`, + 'counter{key1="attributeValue1"} 20', '', ]); }); @@ -453,7 +453,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP metric_observable_counter a test description', '# TYPE metric_observable_counter counter', - `metric_observable_counter{key1="attributeValue1"} 20 ${mockedHrTimeMs}`, + 'metric_observable_counter{key1="attributeValue1"} 20', '', ]); }); @@ -484,7 +484,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP metric_observable_up_down_counter a test description', '# TYPE metric_observable_up_down_counter gauge', - `metric_observable_up_down_counter{key1="attributeValue1"} 20 ${mockedHrTimeMs}`, + 'metric_observable_up_down_counter{key1="attributeValue1"} 20', '', ]); }); @@ -503,24 +503,24 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP test_histogram a test description', '# TYPE test_histogram histogram', - `test_histogram_count{key1="attributeValue1"} 1 ${mockedHrTimeMs}`, - `test_histogram_sum{key1="attributeValue1"} 20 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="0"} 0 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="5"} 0 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="10"} 0 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="25"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="50"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="75"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="100"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="250"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="500"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="750"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="1000"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="2500"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="5000"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="7500"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="10000"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="+Inf"} 1 ${mockedHrTimeMs}`, + 'test_histogram_count{key1="attributeValue1"} 1', + 'test_histogram_sum{key1="attributeValue1"} 20', + 'test_histogram_bucket{key1="attributeValue1",le="0"} 0', + 'test_histogram_bucket{key1="attributeValue1",le="5"} 0', + 'test_histogram_bucket{key1="attributeValue1",le="10"} 0', + 'test_histogram_bucket{key1="attributeValue1",le="25"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="50"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="75"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="100"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="250"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="500"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="750"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="1000"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="2500"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="5000"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="7500"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="10000"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="+Inf"} 1', '', ]); }); @@ -562,7 +562,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP test_prefix_counter_total description missing', '# TYPE test_prefix_counter_total counter', - `test_prefix_counter_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, + 'test_prefix_counter_total{key1="attributeValue1"} 10', '', ]); @@ -591,7 +591,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_total description missing', '# TYPE counter_total counter', - `counter_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, + 'counter_total{key1="attributeValue1"} 10', '', ]); @@ -620,7 +620,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_total description missing', '# TYPE counter_total counter', - `counter_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, + 'counter_total{key1="attributeValue1"} 10', '', ]); @@ -632,10 +632,10 @@ describe('PrometheusExporter', () => { ); }); - it('should export a metric without timestamp', done => { + it('should export a metric with timestamp', done => { exporter = new PrometheusExporter( { - appendTimestamp: false, + appendTimestamp: true, }, async () => { setup(exporter); @@ -649,7 +649,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_total description missing', '# TYPE counter_total counter', - 'counter_total{key1="attributeValue1"} 10', + `counter_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, '', ]); diff --git a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts index 5495ca0a8b..1a39aae003 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts +++ b/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts @@ -118,17 +118,17 @@ describe('PrometheusSerializer', () => { it('should serialize metrics with singular data type', async () => { const serializer = new PrometheusSerializer(); const result = await testSerializer(serializer); + assert.strictEqual(result, 'test_total{foo1="bar1",foo2="bar2"} 1\n'); + }); + + it('should serialize metrics with singular data type with timestamp', async () => { + const serializer = new PrometheusSerializer(undefined, true); + const result = await testSerializer(serializer); assert.strictEqual( result, `test_total{foo1="bar1",foo2="bar2"} 1 ${mockedHrTimeMs}\n` ); }); - - it('should serialize metrics with singular data type without timestamp', async () => { - const serializer = new PrometheusSerializer(undefined, false); - const result = await testSerializer(serializer); - assert.strictEqual(result, 'test_total{foo1="bar1",foo2="bar2"} 1\n'); - }); }); describe('Histogram', () => { @@ -168,20 +168,6 @@ describe('PrometheusSerializer', () => { it('should serialize metrics with histogram data type', async () => { const serializer = new PrometheusSerializer(); const result = await testSerializer(serializer); - assert.strictEqual( - result, - `test_count{foo1="bar1",foo2="bar2"} 1 ${mockedHrTimeMs}\n` + - `test_sum{foo1="bar1",foo2="bar2"} 5 ${mockedHrTimeMs}\n` + - `test_bucket{foo1="bar1",foo2="bar2",le="1"} 0 ${mockedHrTimeMs}\n` + - `test_bucket{foo1="bar1",foo2="bar2",le="10"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{foo1="bar1",foo2="bar2",le="100"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{foo1="bar1",foo2="bar2",le="+Inf"} 1 ${mockedHrTimeMs}\n` - ); - }); - - it('serialize metric record with sum aggregator without timestamp', async () => { - const serializer = new PrometheusSerializer(undefined, false); - const result = await testSerializer(serializer); assert.strictEqual( result, 'test_count{foo1="bar1",foo2="bar2"} 1\n' + @@ -192,6 +178,20 @@ describe('PrometheusSerializer', () => { 'test_bucket{foo1="bar1",foo2="bar2",le="+Inf"} 1\n' ); }); + + it('serialize metric record with sum aggregator with timestamp', async () => { + const serializer = new PrometheusSerializer(undefined, true); + const result = await testSerializer(serializer); + assert.strictEqual( + result, + `test_count{foo1="bar1",foo2="bar2"} 1 ${mockedHrTimeMs}\n` + + `test_sum{foo1="bar1",foo2="bar2"} 5 ${mockedHrTimeMs}\n` + + `test_bucket{foo1="bar1",foo2="bar2",le="1"} 0 ${mockedHrTimeMs}\n` + + `test_bucket{foo1="bar1",foo2="bar2",le="10"} 1 ${mockedHrTimeMs}\n` + + `test_bucket{foo1="bar1",foo2="bar2",le="100"} 1 ${mockedHrTimeMs}\n` + + `test_bucket{foo1="bar1",foo2="bar2",le="+Inf"} 1 ${mockedHrTimeMs}\n` + ); + }); }); }); @@ -233,20 +233,20 @@ describe('PrometheusSerializer', () => { result, '# HELP test_total foobar\n' + '# TYPE test_total counter\n' + - `test_total{val="1"} 1 ${mockedHrTimeMs}\n` + - `test_total{val="2"} 1 ${mockedHrTimeMs}\n` + 'test_total{val="1"} 1\n' + + 'test_total{val="2"} 1\n' ); }); - it('should serialize metric record without timestamp', async () => { - const serializer = new PrometheusSerializer(undefined, false); + it('should serialize metric record with timestamp', async () => { + const serializer = new PrometheusSerializer(undefined, true); const result = await testSerializer(serializer); assert.strictEqual( result, '# HELP test_total foobar\n' + '# TYPE test_total counter\n' + - 'test_total{val="1"} 1\n' + - 'test_total{val="2"} 1\n' + `test_total{val="1"} 1 ${mockedHrTimeMs}\n` + + `test_total{val="2"} 1 ${mockedHrTimeMs}\n` ); }); }); @@ -287,20 +287,20 @@ describe('PrometheusSerializer', () => { result, '# HELP test_total foobar\n' + '# TYPE test_total gauge\n' + - `test_total{val="1"} 1 ${mockedHrTimeMs}\n` + - `test_total{val="2"} 1 ${mockedHrTimeMs}\n` + 'test_total{val="1"} 1\n' + + 'test_total{val="2"} 1\n' ); }); - it('serialize metric record without timestamp', async () => { - const serializer = new PrometheusSerializer(undefined, false); + it('serialize metric record with timestamp', async () => { + const serializer = new PrometheusSerializer(undefined, true); const result = await testSerializer(serializer); assert.strictEqual( result, '# HELP test_total foobar\n' + '# TYPE test_total gauge\n' + - 'test_total{val="1"} 1\n' + - 'test_total{val="2"} 1\n' + `test_total{val="1"} 1 ${mockedHrTimeMs}\n` + + `test_total{val="2"} 1 ${mockedHrTimeMs}\n` ); }); }); @@ -341,20 +341,20 @@ describe('PrometheusSerializer', () => { result, '# HELP test_total foobar\n' + '# TYPE test_total gauge\n' + - `test_total{val="1"} 1 ${mockedHrTimeMs}\n` + - `test_total{val="2"} 1 ${mockedHrTimeMs}\n` + 'test_total{val="1"} 1\n' + + 'test_total{val="2"} 1\n' ); }); - it('serialize metric record without timestamp', async () => { - const serializer = new PrometheusSerializer(undefined, false); + it('serialize metric record with timestamp', async () => { + const serializer = new PrometheusSerializer(undefined, true); const result = await testSerializer(serializer); assert.strictEqual( result, '# HELP test_total foobar\n' + '# TYPE test_total gauge\n' + - 'test_total{val="1"} 1\n' + - 'test_total{val="2"} 1\n' + `test_total{val="1"} 1 ${mockedHrTimeMs}\n` + + `test_total{val="2"} 1 ${mockedHrTimeMs}\n` ); }); }); @@ -399,18 +399,18 @@ describe('PrometheusSerializer', () => { result, '# HELP test foobar\n' + '# TYPE test histogram\n' + - `test_count{val="1"} 3 ${mockedHrTimeMs}\n` + - `test_sum{val="1"} 175 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="1"} 0 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="10"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="100"} 2 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="+Inf"} 3 ${mockedHrTimeMs}\n` + - `test_count{val="2"} 1 ${mockedHrTimeMs}\n` + - `test_sum{val="2"} 5 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="1"} 0 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="10"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="100"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="+Inf"} 1 ${mockedHrTimeMs}\n` + 'test_count{val="1"} 3\n' + + 'test_sum{val="1"} 175\n' + + 'test_bucket{val="1",le="1"} 0\n' + + 'test_bucket{val="1",le="10"} 1\n' + + 'test_bucket{val="1",le="100"} 2\n' + + 'test_bucket{val="1",le="+Inf"} 3\n' + + 'test_count{val="2"} 1\n' + + 'test_sum{val="2"} 5\n' + + 'test_bucket{val="2",le="1"} 0\n' + + 'test_bucket{val="2",le="10"} 1\n' + + 'test_bucket{val="2",le="100"} 1\n' + + 'test_bucket{val="2",le="+Inf"} 1\n' ); }); @@ -448,16 +448,16 @@ describe('PrometheusSerializer', () => { result, '# HELP test foobar\n' + '# TYPE test histogram\n' + - `test_count{val="1"} 3 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="1"} 0 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="10"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="100"} 2 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="+Inf"} 3 ${mockedHrTimeMs}\n` + - `test_count{val="2"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="1"} 0 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="10"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="100"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="+Inf"} 1 ${mockedHrTimeMs}\n` + 'test_count{val="1"} 3\n' + + 'test_bucket{val="1",le="1"} 0\n' + + 'test_bucket{val="1",le="10"} 1\n' + + 'test_bucket{val="1",le="100"} 2\n' + + 'test_bucket{val="1",le="+Inf"} 3\n' + + 'test_count{val="2"} 1\n' + + 'test_bucket{val="2",le="1"} 0\n' + + 'test_bucket{val="2",le="10"} 1\n' + + 'test_bucket{val="2",le="100"} 1\n' + + 'test_bucket{val="2",le="+Inf"} 1\n' ); }); }); @@ -518,7 +518,7 @@ describe('PrometheusSerializer', () => { '# HELP test_total description missing\n' + `# UNIT test_total ${unitOfMetric}\n` + '# TYPE test_total counter\n' + - `test_total 1 ${mockedHrTimeMs}\n` + 'test_total 1\n' ); }); @@ -533,7 +533,7 @@ describe('PrometheusSerializer', () => { serializedDefaultResource + '# HELP test_total description missing\n' + '# TYPE test_total counter\n' + - `test_total 1 ${mockedHrTimeMs}\n` + 'test_total 1\n' ); }); @@ -541,14 +541,14 @@ describe('PrometheusSerializer', () => { const serializer = new PrometheusSerializer(); const result = await getCounterResult('test', serializer); - assert.strictEqual(result, `test_total 1 ${mockedHrTimeMs}\n`); + assert.strictEqual(result, 'test_total 1\n'); }); it('should not rename metric of type counter when name contains _total suffix', async () => { const serializer = new PrometheusSerializer(); const result = await getCounterResult('test_total', serializer); - assert.strictEqual(result, `test_total 1 ${mockedHrTimeMs}\n`); + assert.strictEqual(result, 'test_total 1\n'); }); }); @@ -594,7 +594,7 @@ describe('PrometheusSerializer', () => { counter.add(1); }); - assert.strictEqual(result, `test_total 1 ${mockedHrTimeMs}\n`); + assert.strictEqual(result, 'test_total 1\n'); }); it('should serialize non-string attribute values in JSON representations', async () => { @@ -615,7 +615,7 @@ describe('PrometheusSerializer', () => { assert.strictEqual( result, - `test_total{true="true",false="false",array="[1,null,null,2]",object="{}",Infinity="null",NaN="null",null="null",undefined=""} 1 ${mockedHrTimeMs}\n` + 'test_total{true="true",false="false",array="[1,null,null,2]",object="{}",Infinity="null",NaN="null",null="null",undefined=""} 1\n' ); }); @@ -634,7 +634,7 @@ describe('PrometheusSerializer', () => { assert.strictEqual( result, - `test{foo1="bar1",foo2="bar2"} ${esac[1]} ${mockedHrTimeMs}\n` + `test{foo1="bar1",foo2="bar2"} ${esac[1]}\n` ); } }); @@ -662,7 +662,7 @@ describe('PrometheusSerializer', () => { 'backslashN="\u005c\u005c\u006e",' + 'backslashDoubleQuote="\u005c\u005c\u005c\u0022",' + 'backslashLineFeed="\u005c\u005c\u005c\u006e"' + - `} 1 ${mockedHrTimeMs}\n` + '} 1\n' ); }); @@ -678,10 +678,7 @@ describe('PrometheusSerializer', () => { } as unknown as MetricAttributes); }); - assert.strictEqual( - result, - `test_total{account_id="123456"} 1 ${mockedHrTimeMs}\n` - ); + assert.strictEqual(result, 'test_total{account_id="123456"} 1\n'); }); }); From de5cd0f40908c48bcc5b472f7372ea2bbd5bc7d7 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 3 Jul 2023 14:25:58 +0200 Subject: [PATCH 050/141] fix(deps): update dependency import-in-the-middle to v1.4.1 (#3962) --- .../packages/opentelemetry-instrumentation/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index dd8ac1eb87..944258ad8f 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.3.5", + "import-in-the-middle": "1.4.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.1", "shimmer": "^1.2.1", From c51c9eb95421cc0e04b04d59be8ed521cd78f312 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 4 Jul 2023 15:23:08 +0200 Subject: [PATCH 051/141] docs(otlp-exporters): update docs to reflect OTLP 0.20.0 is used (#3938) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Gerhard Stöbich --- experimental/packages/exporter-logs-otlp-grpc/README.md | 2 +- experimental/packages/exporter-logs-otlp-http/README.md | 2 +- experimental/packages/exporter-logs-otlp-proto/README.md | 2 +- experimental/packages/exporter-trace-otlp-grpc/README.md | 3 +-- experimental/packages/exporter-trace-otlp-http/README.md | 3 +-- experimental/packages/exporter-trace-otlp-proto/README.md | 3 +-- .../opentelemetry-exporter-metrics-otlp-grpc/README.md | 3 +-- .../opentelemetry-exporter-metrics-otlp-http/README.md | 3 +-- .../opentelemetry-exporter-metrics-otlp-proto/README.md | 3 +-- 9 files changed, 9 insertions(+), 15 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-grpc/README.md b/experimental/packages/exporter-logs-otlp-grpc/README.md index d683d0bebe..b2ba24bf9a 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/README.md +++ b/experimental/packages/exporter-logs-otlp-grpc/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides an exporter for OTLP gRPC logs using protocol version `v0.18`. +This module provides a logs-exporter for OTLP (gRPC) using protocol version `v0.20.0`. ## Installation diff --git a/experimental/packages/exporter-logs-otlp-http/README.md b/experimental/packages/exporter-logs-otlp-http/README.md index 256e1d88d8..24f0d7f4a0 100644 --- a/experimental/packages/exporter-logs-otlp-http/README.md +++ b/experimental/packages/exporter-logs-otlp-http/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides an exporter for OTLP (http/json) logs using protocol version `v0.18`. +This module provides a logs-exporter for OTLP (http/json) using protocol version `v0.20.0`. ## Installation diff --git a/experimental/packages/exporter-logs-otlp-proto/README.md b/experimental/packages/exporter-logs-otlp-proto/README.md index 3019f50d3f..3a00476c32 100644 --- a/experimental/packages/exporter-logs-otlp-proto/README.md +++ b/experimental/packages/exporter-logs-otlp-proto/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides an exporter for OTLP (http/protobuf) logs using protocol version `v0.18`. +This module provides a logs-exporter for OTLP (http/protobuf) using protocol version `v0.20.0`. ## Installation diff --git a/experimental/packages/exporter-trace-otlp-grpc/README.md b/experimental/packages/exporter-trace-otlp-grpc/README.md index 933e120775..32d4231870 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/README.md +++ b/experimental/packages/exporter-trace-otlp-grpc/README.md @@ -5,8 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides exporter for node to be used with OTLP (`grpc`) compatible receivers. -Compatible with [opentelemetry-collector][opentelemetry-collector-url] versions `>=0.16 <=0.50`. +This module provides a trace-exporter for OTLP (gRPC) traces using protocol version `v0.20.0`. ## Installation diff --git a/experimental/packages/exporter-trace-otlp-http/README.md b/experimental/packages/exporter-trace-otlp-http/README.md index f5944a047b..141a4a2765 100644 --- a/experimental/packages/exporter-trace-otlp-http/README.md +++ b/experimental/packages/exporter-trace-otlp-http/README.md @@ -5,8 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides exporter for web and node to be used with OTLP (`http/json`) compatible receivers. -Compatible with [opentelemetry-collector][opentelemetry-collector-url] versions `>=0.48 <=0.50`. +This module provides a trace-exporter for OTLP (http/json) using protocol version `v0.20.0`. ## Installation diff --git a/experimental/packages/exporter-trace-otlp-proto/README.md b/experimental/packages/exporter-trace-otlp-proto/README.md index efd22d2abf..0be283bebe 100644 --- a/experimental/packages/exporter-trace-otlp-proto/README.md +++ b/experimental/packages/exporter-trace-otlp-proto/README.md @@ -5,8 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides exporter for node to be used with OTLP (`http/protobuf`) compatible receivers. -Compatible with [opentelemetry-collector][opentelemetry-collector-url] versions `>=0.32 <=0.50`. +This module provides a trace-exporter for OTLP (http/protobuf) using protocol version `v0.20.0`. ## Installation diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md index 05f6b48039..7a257ba1b7 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md @@ -5,8 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides exporter for node to be used with OTLP (`grpc`) compatible receivers. -Compatible with [opentelemetry-collector][opentelemetry-collector-url] versions `>=0.16 <=0.53`. +This module provides a metrics-exporter for OTLP (gRPC) using protocol version `v0.20.0`. ## Installation diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md index b475d02838..ba449280b0 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md @@ -5,8 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides exporter for web and node to be used with OTLP (`http/json`) compatible receivers. -Compatible with [opentelemetry-collector][opentelemetry-collector-url] versions `>=0.52 <=0.53`. +This module provides a metrics-exporter for OTLP (http/json) using protocol version `v0.20.0`. ## Installation diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md index 5f89cc17bc..0056d2f3ca 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md @@ -5,8 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides exporter for node to be used with OTLP (`http/protobuf`) compatible receivers. -Compatible with [opentelemetry-collector][opentelemetry-collector-url] versions `>=0.32 <=0.53`. +This module provides a metrics-exporter for OTLP (http/protobuf) using protocol version `v0.20.0`. ## Installation From dccd90603bf52ba3b52eced9e8a6489bbdc78388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=B2=92=E7=B2=92=E6=A9=99?= Date: Tue, 4 Jul 2023 23:25:43 +0800 Subject: [PATCH 052/141] chore(instrumentation-grpc): cleanup remnants of grpc-native support (#3886) --- experimental/CHANGELOG.md | 2 + .../package.json | 1 - .../src/grpc-js/clientUtils.ts | 55 ++++--- .../src/grpc-js/index.ts | 89 +++++------ .../src/grpc-js/serverUtils.ts | 39 +++-- .../src/grpc-js/types.ts | 28 ++-- .../src/index.ts | 2 +- .../src/instrumentation.ts | 9 +- .../src/internal-types.ts | 24 +-- .../src/utils.ts | 11 +- .../test/grpc-js.test.ts | 4 +- .../test/helper.ts | 144 +++++++++--------- .../test/utils/assertionUtils.ts | 6 +- 13 files changed, 209 insertions(+), 205 deletions(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index af2ea3a26e..2ad8923f8b 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -24,6 +24,8 @@ All notable changes to experimental packages in this project will be documented ### :house: (Internal) +* chore(instrumentation-grpc): Cleanup remnants of grpc-native support. [#3886](https://github.com/open-telemetry/opentelemetry-js/pull/3886) @llc1123 + ## 0.40.0 ### :boom: Breaking Change diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 2dc97dddd1..f8b247ffa6 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -60,7 +60,6 @@ "cross-var": "1.1.0", "lerna": "7.1.1", "mocha": "10.2.0", - "node-pre-gyp": "0.17.0", "nyc": "15.1.0", "semver": "7.5.3", "sinon": "15.1.2", 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 1ffaab39bb..c61edf771b 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/clientUtils.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/clientUtils.ts @@ -14,27 +14,24 @@ * limitations under the License. */ -import { GrpcJsInstrumentation } from './'; -import type { GrpcClientFunc, SendUnaryDataCallback } from './types'; -import { - Span, - SpanStatusCode, - SpanStatus, - propagation, - context, -} from '@opentelemetry/api'; +import type { EventEmitter } from 'events'; +import type { Span, SpanStatus } from '@opentelemetry/api'; +import type { Client, Metadata, ServiceError } from '@grpc/grpc-js'; import type * as grpcJs from '@grpc/grpc-js'; +import type { GrpcJsInstrumentation } from './'; +import type { GrpcClientFunc, SendUnaryDataCallback } from './types'; +import type { metadataCaptureType } from '../internal-types'; + +import { SpanStatusCode, 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 { _grpcStatusCodeToSpanStatus, _grpcStatusCodeToOpenTelemetryStatusCode, _methodIsIgnored, } from '../utils'; -import { CALL_SPAN_ENDED } from './serverUtils'; -import { EventEmitter } from 'events'; -import { AttributeNames } from '../enums/AttributeNames'; -import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; -import { metadataCaptureType } from '../internal-types'; -import { GRPC_STATUS_CODE_OK } from '../status-code'; /** * Parse a package method list and return a list of methods to patch @@ -42,7 +39,7 @@ import { GRPC_STATUS_CODE_OK } from '../status-code'; */ export function getMethodsToWrap( this: GrpcJsInstrumentation, - client: typeof grpcJs.Client, + client: typeof Client, methods: { [key: string]: { originalName?: string } } ): string[] { const methodList: string[] = []; @@ -74,8 +71,8 @@ export function makeGrpcClientRemoteCall( metadataCapture: metadataCaptureType, original: GrpcClientFunc, args: unknown[], - metadata: grpcJs.Metadata, - self: grpcJs.Client + metadata: Metadata, + self: Client ): (span: Span) => EventEmitter { /** * Patches a callback so that the current span for this trace is also ended @@ -86,7 +83,7 @@ export function makeGrpcClientRemoteCall( callback: SendUnaryDataCallback ) { const wrappedFn: SendUnaryDataCallback = ( - err: grpcJs.ServiceError | null, + err: ServiceError | null, res?: ResponseType ) => { if (err) { @@ -145,7 +142,7 @@ export function makeGrpcClientRemoteCall( } }; context.bind(context.active(), call); - call.on('error', (err: grpcJs.ServiceError) => { + call.on('error', (err: ServiceError) => { if (call[CALL_SPAN_ENDED]) { return; } @@ -185,22 +182,22 @@ export function makeGrpcClientRemoteCall( */ export function getMetadata( this: GrpcJsInstrumentation, - grpcClient: typeof grpcJs, original: GrpcClientFunc, - args: Array -): grpcJs.Metadata { - let metadata: grpcJs.Metadata; + grpcClient: typeof grpcJs, + args: Array +): Metadata { + let metadata: Metadata; // 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 | grpcJs.Metadata) => { + let metadataIndex = args.findIndex((arg: unknown | Metadata) => { return ( arg && typeof arg === 'object' && - (arg as grpcJs.Metadata)['internalRepr'] && // changed from _internal_repr in grpc --> @grpc/grpc-js https://github.com/grpc/grpc-node/blob/95289edcaf36979cccf12797cc27335da8d01f03/packages/grpc-js/src/metadata.ts#L88 - typeof (arg as grpcJs.Metadata).getMap === 'function' + (arg as Metadata)['internalRepr'] && // changed from _internal_repr in grpc --> @grpc/grpc-js https://github.com/grpc/grpc-node/blob/95289edcaf36979cccf12797cc27335da8d01f03/packages/grpc-js/src/metadata.ts#L88 + typeof (arg as Metadata).getMap === 'function' ); }); if (metadataIndex === -1) { @@ -214,7 +211,7 @@ export function getMetadata( } args.splice(metadataIndex, 0, metadata); } else { - metadata = args[metadataIndex] as grpcJs.Metadata; + metadata = args[metadataIndex] as Metadata; } return metadata; } @@ -224,7 +221,7 @@ export function getMetadata( * grpc receiver * @param metadata */ -export function setSpanContext(metadata: grpcJs.Metadata): void { +export function setSpanContext(metadata: Metadata): void { propagation.inject(context.active(), metadata, { set: (meta, k, v) => meta.set(k, v), }); 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 eaae47c8ef..72ad45e3bd 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts @@ -14,15 +14,21 @@ * limitations under the License. */ +import type { EventEmitter } from 'events'; + +import type { + Server, + serialize as Serialize, + deserialize as Deserialize, + Metadata, + Client, + ServiceDefinition, + loadPackageDefinition, + GrpcObject, +} from '@grpc/grpc-js'; import type * as grpcJs from '@grpc/grpc-js'; -import { - InstrumentationNodeModuleDefinition, - isWrapped, -} from '@opentelemetry/instrumentation'; -import { InstrumentationBase } from '@opentelemetry/instrumentation'; -import { GrpcInstrumentationConfig } from '../types'; -import { metadataCaptureType } from '../internal-types'; -import { + +import type { ServerCallWithMeta, SendUnaryDataCallback, ServerRegisterFunction, @@ -31,6 +37,9 @@ import { PackageDefinition, GrpcClientFunc, } from './types'; +import type { GrpcInstrumentationConfig } from '../types'; +import type { metadataCaptureType } from '../internal-types'; + import { context, propagation, @@ -39,6 +48,13 @@ import { SpanKind, trace, } from '@opentelemetry/api'; +import { + InstrumentationNodeModuleDefinition, + isWrapped, + InstrumentationBase, +} from '@opentelemetry/instrumentation'; +import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; + import { shouldNotTraceServerCall, handleServerFunction, @@ -49,10 +65,8 @@ import { makeGrpcClientRemoteCall, getMetadata, } from './clientUtils'; -import { EventEmitter } from 'events'; import { _extractMethodAndService, metadataCapture, URI_REGEX } from '../utils'; import { AttributeValues } from '../enums/AttributeValues'; -import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; export class GrpcJsInstrumentation extends InstrumentationBase { private _metadataCapture: metadataCaptureType; @@ -143,11 +157,11 @@ export class GrpcJsInstrumentation extends InstrumentationBase { const config = this.getConfig(); instrumentation._diag.debug('patched gRPC server'); return function register( - this: grpcJs.Server, + this: Server, name: string, handler: HandleCall, - serialize: grpcJs.serialize, - deserialize: grpcJs.deserialize, + serialize: Serialize, + deserialize: Deserialize, type: string ): boolean { const originalRegisterResult = originalRegister.call( @@ -171,13 +185,7 @@ export class GrpcJsInstrumentation extends InstrumentationBase { ) { const self = this; - if ( - shouldNotTraceServerCall( - call.metadata, - name, - config.ignoreGrpcMethods - ) - ) { + if (shouldNotTraceServerCall(name, config.ignoreGrpcMethods)) { return handleUntracedServerFunction( type, originalFunc, @@ -220,14 +228,13 @@ export class GrpcJsInstrumentation extends InstrumentationBase { instrumentation._wrap( call, 'sendMetadata', - originalSendMetadata => - (responseMetadata: grpcJs.Metadata) => { - instrumentation._metadataCapture.server.captureResponseMetadata( - span, - responseMetadata - ); - originalSendMetadata.call(call, responseMetadata); - } + originalSendMetadata => (responseMetadata: Metadata) => { + instrumentation._metadataCapture.server.captureResponseMetadata( + span, + responseMetadata + ); + originalSendMetadata.call(call, responseMetadata); + } ); context.with(trace.setSpan(context.active(), span), () => { @@ -246,7 +253,7 @@ export class GrpcJsInstrumentation extends InstrumentationBase { } ); return originalRegisterResult; - } as typeof grpcJs.Server.prototype.register; + } as typeof Server.prototype.register; }; } @@ -263,8 +270,8 @@ export class GrpcJsInstrumentation extends InstrumentationBase { return (original: MakeClientConstructorFunction) => { instrumentation._diag.debug('patching client'); return function makeClientConstructor( - this: typeof grpcJs.Client, - methods: grpcJs.ServiceDefinition, + this: typeof Client, + methods: ServiceDefinition, serviceName: string, options?: object ) { @@ -286,18 +293,18 @@ export class GrpcJsInstrumentation extends InstrumentationBase { private _patchLoadPackageDefinition(grpcClient: typeof grpcJs) { const instrumentation = this; instrumentation._diag.debug('patching loadPackageDefinition'); - return (original: typeof grpcJs.loadPackageDefinition) => { + return (original: typeof loadPackageDefinition) => { return function patchedLoadPackageDefinition( this: null, packageDef: PackageDefinition ) { - const result: grpcJs.GrpcObject = original.call( + const result: GrpcObject = original.call( this, packageDef - ) as grpcJs.GrpcObject; + ) as GrpcObject; instrumentation._patchLoadedPackage(grpcClient, result); return result; - } as typeof grpcJs.loadPackageDefinition; + } as typeof loadPackageDefinition; }; } @@ -310,13 +317,13 @@ export class GrpcJsInstrumentation extends InstrumentationBase { const instrumentation = this; return (original: GrpcClientFunc) => { instrumentation._diag.debug('patch all client methods'); - function clientMethodTrace(this: grpcJs.Client) { + function clientMethodTrace(this: Client) { const name = `grpc.${original.path.replace('/', '')}`; const args = [...arguments]; const metadata = getMetadata.call( instrumentation, - grpcClient, original, + grpcClient, args ); const { service, method } = _extractMethodAndService(original.path); @@ -369,7 +376,7 @@ export class GrpcJsInstrumentation extends InstrumentationBase { */ private _patchLoadedPackage( grpcClient: typeof grpcJs, - result: grpcJs.GrpcObject + result: GrpcObject ): void { Object.values(result).forEach(service => { if (typeof service === 'function') { @@ -380,11 +387,7 @@ export class GrpcJsInstrumentation extends InstrumentationBase { ); } else if (typeof service.format !== 'string') { // GrpcObject - this._patchLoadedPackage.call( - this, - grpcClient, - service as grpcJs.GrpcObject - ); + this._patchLoadedPackage.call(this, grpcClient, service as GrpcObject); } }); } diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/serverUtils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/serverUtils.ts index ecfbc3d957..ad07828e68 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/serverUtils.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/serverUtils.ts @@ -20,21 +20,31 @@ * error event should be processed. */ -import { context, Span, SpanStatusCode } from '@opentelemetry/api'; -import type * as grpcJs from '@grpc/grpc-js'; +import type { + ClientReadableStream, + handleBidiStreamingCall, + handleServerStreamingCall, + handleUnaryCall, + ServiceError, +} from '@grpc/grpc-js'; +import type { Span } from '@opentelemetry/api'; + import type { ServerCallWithMeta, SendUnaryDataCallback, GrpcEmitter, HandleCall, } from './types'; +import type { IgnoreMatcher } from '../types'; + +import { context, SpanStatusCode } from '@opentelemetry/api'; +import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; + import { _grpcStatusCodeToOpenTelemetryStatusCode, _methodIsIgnored, } from '../utils'; -import { IgnoreMatcher } from '../types'; import { AttributeNames } from '../enums/AttributeNames'; -import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; import { GRPC_STATUS_CODE_OK } from '../status-code'; export const CALL_SPAN_ENDED = Symbol('opentelemetry call span ended'); @@ -46,8 +56,8 @@ function serverStreamAndBidiHandler( span: Span, call: GrpcEmitter, original: - | grpcJs.handleBidiStreamingCall - | grpcJs.handleServerStreamingCall + | handleBidiStreamingCall + | handleServerStreamingCall ): void { let spanEnded = false; const endSpan = () => { @@ -79,7 +89,7 @@ function serverStreamAndBidiHandler( endSpan(); }); - call.on('error', (err: grpcJs.ServiceError) => { + call.on('error', (err: ServiceError) => { if (call[CALL_SPAN_ENDED]) { return; } @@ -111,11 +121,11 @@ function clientStreamAndUnaryHandler( call: ServerCallWithMeta, callback: SendUnaryDataCallback, original: - | grpcJs.handleUnaryCall - | grpcJs.ClientReadableStream + | handleUnaryCall + | ClientReadableStream ): void { const patchedCallback: SendUnaryDataCallback = ( - err: grpcJs.ServiceError | null, + err: ServiceError | null, value?: ResponseType ) => { if (err) { @@ -166,8 +176,8 @@ export function handleServerFunction( call, callback, originalFunc as - | grpcJs.handleUnaryCall - | grpcJs.ClientReadableStream + | handleUnaryCall + | ClientReadableStream ); case 'serverStream': case 'server_stream': @@ -176,8 +186,8 @@ export function handleServerFunction( span, call, originalFunc as - | grpcJs.handleBidiStreamingCall - | grpcJs.handleServerStreamingCall + | handleBidiStreamingCall + | handleServerStreamingCall ); default: break; @@ -212,7 +222,6 @@ export function handleUntracedServerFunction( * Returns true if the server call should not be traced. */ export function shouldNotTraceServerCall( - metadata: grpcJs.Metadata, methodName: string, ignoreGrpcMethods?: IgnoreMatcher[] ): boolean { 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 e0ae1545d2..e9f15b45ab 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/types.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/types.ts @@ -14,29 +14,38 @@ * limitations under the License. */ -import type * as grpcJs from '@grpc/grpc-js'; import type { EventEmitter } from 'events'; import type { CALL_SPAN_ENDED } from './serverUtils'; +import type { + requestCallback, + ServerUnaryCall, + ServerReadableStream, + ServerWritableStream, + ServerDuplexStream, + Metadata, + Server, + makeGenericClientConstructor, +} from '@grpc/grpc-js'; /** * Server Unary callback type */ -export type SendUnaryDataCallback = grpcJs.requestCallback; +export type SendUnaryDataCallback = requestCallback; /** * Intersection type of all grpc server call types */ export type ServerCall = - | grpcJs.ServerUnaryCall - | grpcJs.ServerReadableStream - | grpcJs.ServerWritableStream - | grpcJs.ServerDuplexStream; + | ServerUnaryCall + | ServerReadableStream + | ServerWritableStream + | ServerDuplexStream; /** * {@link ServerCall} ServerCall extended with misc. missing utility types */ export type ServerCallWithMeta = ServerCall & { - metadata: grpcJs.Metadata; + metadata: Metadata; }; /** @@ -53,10 +62,9 @@ export type GrpcClientFunc = ((...args: unknown[]) => GrpcEmitter) & { responseStream: boolean; }; -export type ServerRegisterFunction = typeof grpcJs.Server.prototype.register; +export type ServerRegisterFunction = typeof Server.prototype.register; -export type MakeClientConstructorFunction = - typeof grpcJs.makeGenericClientConstructor; +export type MakeClientConstructorFunction = typeof makeGenericClientConstructor; export type { HandleCall } from '@grpc/grpc-js/build/src/server-call'; export type { PackageDefinition } from '@grpc/grpc-js/build/src/make-client'; diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/index.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/index.ts index 26ea0efdb4..5e1bb947d1 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/index.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/index.ts @@ -15,4 +15,4 @@ */ export * from './instrumentation'; -export { GrpcInstrumentationConfig } from './types'; +export type { GrpcInstrumentationConfig } from './types'; diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/instrumentation.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/instrumentation.ts index d597beaae2..bb6e095cf7 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/instrumentation.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/instrumentation.ts @@ -14,10 +14,11 @@ * limitations under the License. */ -import { GrpcInstrumentationConfig } from './types'; +import type { GrpcInstrumentationConfig } from './types'; +import type { MeterProvider, TracerProvider } from '@opentelemetry/api'; + import { VERSION } from './version'; import { GrpcJsInstrumentation } from './grpc-js'; -import * as api from '@opentelemetry/api'; /** The metadata key under which span context is stored as a binary value. */ export const GRPC_TRACE_KEY = 'grpc-trace-bin'; @@ -68,7 +69,7 @@ export class GrpcInstrumentation { * Sets MeterProvider to this plugin * @param meterProvider */ - public setMeterProvider(meterProvider: api.MeterProvider) { + public setMeterProvider(meterProvider: MeterProvider) { this._grpcJsInstrumentation.setMeterProvider(meterProvider); } @@ -76,7 +77,7 @@ export class GrpcInstrumentation { * Sets TraceProvider to this plugin * @param tracerProvider */ - public setTracerProvider(tracerProvider: api.TracerProvider) { + public setTracerProvider(tracerProvider: TracerProvider) { this._grpcJsInstrumentation.setTracerProvider(tracerProvider); } } diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts index 594ad7ce0a..50d337b636 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts @@ -14,28 +14,16 @@ * limitations under the License. */ -import { Span } from '@opentelemetry/api'; -import type * as grpcJsTypes from '@grpc/grpc-js'; +import type { Span } from '@opentelemetry/api'; +import type { Metadata } from '@grpc/grpc-js'; export type metadataCaptureType = { client: { - captureRequestMetadata: ( - span: Span, - metadata: grpcJsTypes.Metadata - ) => void; - captureResponseMetadata: ( - span: Span, - metadata: grpcJsTypes.Metadata - ) => void; + captureRequestMetadata: (span: Span, metadata: Metadata) => void; + captureResponseMetadata: (span: Span, metadata: Metadata) => void; }; server: { - captureRequestMetadata: ( - span: Span, - metadata: grpcJsTypes.Metadata - ) => void; - captureResponseMetadata: ( - span: Span, - metadata: grpcJsTypes.Metadata - ) => void; + captureRequestMetadata: (span: Span, metadata: Metadata) => void; + captureResponseMetadata: (span: Span, metadata: Metadata) => void; }; }; diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/src/utils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/src/utils.ts index d9e542f509..3cfbfc1f55 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/src/utils.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/src/utils.ts @@ -14,9 +14,10 @@ * limitations under the License. */ -import { SpanStatusCode, SpanStatus, Span } from '@opentelemetry/api'; -import type * as grpcJsTypes from '@grpc/grpc-js'; -import { IgnoreMatcher } from './types'; +import { SpanStatusCode } from '@opentelemetry/api'; +import type { SpanStatus, Span } from '@opentelemetry/api'; +import type { status as GrpcStatus, Metadata } from '@grpc/grpc-js'; +import type { IgnoreMatcher } from './types'; // e.g., "dns:otel-productcatalogservice:8080" or "otel-productcatalogservice:8080" or "127.0.0.1:8080" export const URI_REGEX = @@ -42,7 +43,7 @@ export const findIndex: (args: T[], fn: (arg: T) => boolean) => number = ( * @param status */ export const _grpcStatusCodeToOpenTelemetryStatusCode = ( - status?: grpcJsTypes.status + status?: GrpcStatus ): SpanStatusCode => { if (status !== undefined && status === 0) { return SpanStatusCode.UNSET; @@ -127,7 +128,7 @@ export function metadataCapture( ]) ); - return (span: Span, metadata: grpcJsTypes.Metadata) => { + return (span: Span, metadata: Metadata) => { for (const [ capturedMetadata, normalizedMetadata, diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-js.test.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-js.test.ts index 624d267a21..b7e2210298 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-js.test.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-js.test.ts @@ -21,8 +21,8 @@ const instrumentation = new GrpcInstrumentation(); instrumentation.enable(); instrumentation.disable(); -import * as grpcJs from '@grpc/grpc-js'; +import '@grpc/grpc-js'; describe('#grpc-js', () => { - runTests(instrumentation, 'grpc', grpcJs, 12346); + runTests(instrumentation, 'grpc', 12346); }); diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts index 7cdc85d268..693cdeab46 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts @@ -32,7 +32,21 @@ import { } from '@opentelemetry/sdk-trace-base'; import * as assert from 'assert'; import * as protoLoader from '@grpc/proto-loader'; -import type * as grpcJs from '@grpc/grpc-js'; +import { + status as GrpcStatus, + requestCallback, + ServerUnaryCall, + ServerReadableStream, + ServerWritableStream, + ServerDuplexStream, + Client, + Metadata, + ServiceError, + Server, + ServerCredentials, + credentials, + loadPackageDefinition, +} from '@grpc/grpc-js'; import { assertPropagation, assertSpan } from './utils/assertionUtils'; import { promisify } from 'util'; import type { GrpcInstrumentation } from '../src'; @@ -53,17 +67,7 @@ interface TestRequestResponse { num: number; } -type ServiceError = grpcJs.ServiceError; -type Client = grpcJs.Client; -type Server = grpcJs.Server; -type ServerUnaryCall = grpcJs.ServerUnaryCall; -type RequestCallback = grpcJs.requestCallback; -type ServerReadableStream = grpcJs.ServerReadableStream; -type ServerWriteableStream = grpcJs.ServerWritableStream; -type ServerDuplexStream = grpcJs.ServerDuplexStream; -type Metadata = grpcJs.Metadata; - -type TestGrpcClient = (typeof grpcJs)['Client'] & { +type TestGrpcClient = Client & { unaryMethodWithMetadata: any; unaryMethod: any; UnaryMethod: any; @@ -108,10 +112,9 @@ const checkEqual = export const runTests = ( plugin: GrpcInstrumentation, moduleName: string, - grpc: typeof grpcJs, grpcPort: number ) => { - const MAX_ERROR_STATUS = grpc.status.UNAUTHENTICATED; + const MAX_ERROR_STATUS = GrpcStatus.UNAUTHENTICATED; const grpcClient = { unaryMethodWithMetadata: ( @@ -137,7 +140,7 @@ export const runTests = ( unaryMethod: ( client: TestGrpcClient, request: TestRequestResponse, - metadata: Metadata = new grpc.Metadata() + metadata = new Metadata() ): Promise => { return new Promise((resolve, reject) => { return client.unaryMethod( @@ -157,7 +160,7 @@ export const runTests = ( UnaryMethod: ( client: TestGrpcClient, request: TestRequestResponse, - metadata: Metadata = new grpc.Metadata() + metadata = new Metadata() ): Promise => { return new Promise((resolve, reject) => { return client.UnaryMethod( @@ -177,7 +180,7 @@ export const runTests = ( camelCaseMethod: ( client: TestGrpcClient, request: TestRequestResponse, - metadata: Metadata = new grpc.Metadata() + metadata = new Metadata() ): Promise => { return new Promise((resolve, reject) => { return client.camelCaseMethod( @@ -197,7 +200,7 @@ export const runTests = ( clientStreamMethod: ( client: TestGrpcClient, request: TestRequestResponse[], - metadata: Metadata = new grpc.Metadata() + metadata = new Metadata() ): Promise => { return new Promise((resolve, reject) => { const writeStream = client.clientStreamMethod( @@ -221,7 +224,7 @@ export const runTests = ( serverStreamMethod: ( client: TestGrpcClient, request: TestRequestResponse, - metadata: Metadata = new grpc.Metadata() + metadata = new Metadata() ): Promise => { return new Promise((resolve, reject) => { const result: TestRequestResponse[] = []; @@ -242,7 +245,7 @@ export const runTests = ( bidiStreamMethod: ( client: TestGrpcClient, request: TestRequestResponse[], - metadata: Metadata = new grpc.Metadata() + metadata = new Metadata() ): Promise => { return new Promise((resolve, reject) => { const result: TestRequestResponse[] = []; @@ -280,8 +283,8 @@ export const runTests = ( return result; }; - async function startServer(grpc: typeof grpcJs, proto: any) { - const server = new grpc.Server(); + async function startServer(proto: any) { + const server = new Server(); function getError(msg: string, code: number): ServiceError | null { const err: ServiceError = { @@ -290,7 +293,7 @@ export const runTests = ( message: msg, code, details: msg, - metadata: new grpc.Metadata(), + metadata: new Metadata(), }; return err; } @@ -302,56 +305,49 @@ export const runTests = ( // This method returns the request unaryMethodWithMetadata( - call: ServerUnaryCall, - callback: RequestCallback + call: ServerUnaryCall, + callback: requestCallback ) { - const serverMetadata: any = new grpc.Metadata(); + 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 - ) as grpcJs.ServiceError + 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) { + unaryMethod( + call: ServerUnaryCall, + callback: requestCallback + ) { call.request.num <= MAX_ERROR_STATUS - ? callback( - getError( - 'Unary Method Error', - call.request.num - ) as grpcJs.ServiceError - ) + ? callback(getError('Unary Method Error', call.request.num)) : callback(null, { num: call.request.num }); }, // This method returns the request - camelCaseMethod(call: ServerUnaryCall, callback: RequestCallback) { + camelCaseMethod( + call: ServerUnaryCall, + callback: requestCallback + ) { call.request.num <= MAX_ERROR_STATUS - ? callback( - getError( - 'Unary Method Error', - call.request.num - ) as grpcJs.ServiceError - ) + ? callback(getError('Unary Method Error', call.request.num)) : callback(null, { num: call.request.num }); }, // This method sums the requests clientStreamMethod( - call: ServerReadableStream, - callback: RequestCallback + call: ServerReadableStream, + callback: requestCallback ) { let sum = 0; let hasError = false; - let code = grpc.status.OK; + let code = GrpcStatus.OK; call.on('data', (data: TestRequestResponse) => { sum += data.num; if (data.num <= MAX_ERROR_STATUS) { @@ -368,7 +364,7 @@ export const runTests = ( // This method returns an array that replicates the request, request.num of // times - serverStreamMethod: (call: ServerWriteableStream) => { + serverStreamMethod: (call: ServerWritableStream) => { const result = replicate(call.request); if (call.request.num <= MAX_ERROR_STATUS) { @@ -385,7 +381,7 @@ export const runTests = ( }, // This method returns the request - bidiStreamMethod: (call: ServerDuplexStream) => { + bidiStreamMethod: (call: ServerDuplexStream) => { call.on('data', (data: TestRequestResponse) => { if (data.num <= MAX_ERROR_STATUS) { call.emit( @@ -405,16 +401,16 @@ export const runTests = ( await bindAwait.call( server, 'localhost:' + grpcPort, - grpc.ServerCredentials.createInsecure() as grpcJs.ServerCredentials + ServerCredentials.createInsecure() ); server.start(); return server; } - function createClient(grpc: typeof grpcJs, proto: any) { + function createClient(proto: any) { return new proto.GrpcTester( 'localhost:' + grpcPort, - grpc.credentials.createInsecure() + credentials.createInsecure() ); } @@ -503,7 +499,7 @@ export const runTests = ( ) => { const validations = { name: `grpc.pkg_test.GrpcTester/${methodName}`, - status: grpc.status.OK, + status: GrpcStatus.OK, netPeerName: 'localhost', netPeerPort: grpcPort, }; @@ -770,10 +766,10 @@ export const runTests = ( plugin.enable(); const packageDefinition = await protoLoader.load(PROTO_PATH, options); - const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(grpc, proto); - client = createClient(grpc, proto); + server = await startServer(proto); + client = createClient(proto); }); after(done => { @@ -792,9 +788,9 @@ export const runTests = ( methodList.forEach(method => { describe(`Test error raising for grpc remote ${method.description}`, () => { - Object.keys(grpc.status).forEach((statusKey: string) => { - const errorCode = Number(grpc.status[statusKey as any]); - if (errorCode > grpc.status.OK) { + Object.keys(GrpcStatus).forEach((statusKey: string) => { + const errorCode = Number(GrpcStatus[statusKey as any]); + if (errorCode > GrpcStatus.OK) { runErrorTest(method, statusKey, errorCode, provider); } }); @@ -813,10 +809,10 @@ export const runTests = ( plugin.disable(); const packageDefinition = await protoLoader.load(PROTO_PATH, options); - const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(grpc, proto); - client = createClient(grpc, proto); + server = await startServer(proto); + client = createClient(proto); }); after(done => { @@ -847,10 +843,10 @@ export const runTests = ( plugin.enable(); const packageDefinition = await protoLoader.load(PROTO_PATH, options); - const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(grpc, proto); - client = createClient(grpc, proto); + server = await startServer(proto); + client = createClient(proto); }); after(done => { @@ -891,10 +887,10 @@ export const runTests = ( plugin.enable(); const packageDefinition = await protoLoader.load(PROTO_PATH, options); - const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(grpc, proto); - client = createClient(grpc, proto); + server = await startServer(proto); + client = createClient(proto); }); after(done => { @@ -921,9 +917,9 @@ export const runTests = ( plugin.enable(); const packageDefinition = await protoLoader.load(PROTO_PATH, options); - const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + const proto = loadPackageDefinition(packageDefinition).pkg_test; - client = createClient(grpc, proto); + client = createClient(proto); }); after(done => { @@ -943,7 +939,7 @@ export const runTests = ( const provider = new NodeTracerProvider(); provider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); - const clientMetadata: Metadata = new grpc.Metadata(); + const clientMetadata = new Metadata(); clientMetadata.add('client_metadata_key', 'client_metadata_value'); const customMetadataMethod: TestGrpcCall = { @@ -978,10 +974,10 @@ export const runTests = ( plugin.enable(); const packageDefinition = await protoLoader.load(PROTO_PATH, options); - const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(grpc, proto); - client = createClient(grpc, proto); + server = await startServer(proto); + client = createClient(proto); }); after(done => { diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts index fcdd546b32..1b7966639e 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts @@ -16,7 +16,7 @@ import { SpanKind, SpanStatusCode } from '@opentelemetry/api'; import * as assert from 'assert'; -import type * as grpcJs from '@grpc/grpc-js'; +import type { status as GrpcStatus } from '@grpc/grpc-js'; import { ReadableSpan } from '@opentelemetry/sdk-trace-base'; import { hrTimeToMilliseconds, @@ -25,7 +25,7 @@ import { import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; export const grpcStatusCodeToOpenTelemetryStatusCode = ( - status: grpcJs.status + status: GrpcStatus ): SpanStatusCode => { if (status !== undefined && status === 0) { return SpanStatusCode.UNSET; @@ -39,7 +39,7 @@ export const assertSpan = ( kind: SpanKind, validations: { name: string; - status: grpcJs.status; + status: GrpcStatus; netPeerName?: string; netPeerPort?: number; } From ea160d9c5c13fb32b39129397c43913d63c8b29f Mon Sep 17 00:00:00 2001 From: Abinet18 <35442169+Abinet18@users.noreply.github.com> Date: Wed, 5 Jul 2023 01:29:28 -0700 Subject: [PATCH 053/141] fix: add secureConnectionStart to https only (#3879) Co-authored-by: t2t2 Co-authored-by: Marc Pichler --- CHANGELOG.md | 1 + .../test/fetch.test.ts | 188 ++++++------- .../test/xhr.test.ts | 260 ++++++------------ .../opentelemetry-sdk-trace-web/src/utils.ts | 7 +- .../test/utils.test.ts | 11 +- 5 files changed, 188 insertions(+), 279 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7de3dc1f1b..42ca36c051 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ 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/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts b/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts index 318e0f98c3..14dcec9978 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts +++ b/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts @@ -139,6 +139,19 @@ function createFakePerformanceObs(url: string) { return FakePerfObs; } +function testForCorrectEvents( + events: tracing.TimedEvent[], + eventNames: string[] +) { + for (let i = 0; i < events.length; i++) { + assert.strictEqual( + events[i].name, + eventNames[i], + `event ${eventNames[i]} is not defined` + ); + } +} + describe('fetch', () => { let contextManager: ZoneContextManager; let lastResponse: any | undefined; @@ -152,6 +165,7 @@ describe('fetch', () => { let fetchInstrumentation: FetchInstrumentation; const url = 'http://localhost:8090/get'; + const secureUrl = 'https://localhost:8090/get'; const badUrl = 'http://foo.bar.com/get'; const clearData = () => { @@ -399,53 +413,17 @@ describe('fetch', () => { it('span should have correct events', () => { const span: tracing.ReadableSpan = exportSpy.args[1][0][0]; const events = span.events; - assert.strictEqual(events.length, 9, 'number of events is wrong'); - - assert.strictEqual( - events[0].name, + assert.strictEqual(events.length, 8, 'number of events is wrong'); + testForCorrectEvents(events, [ PTN.FETCH_START, - `event ${PTN.FETCH_START} is not defined` - ); - assert.strictEqual( - events[1].name, PTN.DOMAIN_LOOKUP_START, - `event ${PTN.DOMAIN_LOOKUP_START} is not defined` - ); - assert.strictEqual( - events[2].name, PTN.DOMAIN_LOOKUP_END, - `event ${PTN.DOMAIN_LOOKUP_END} is not defined` - ); - assert.strictEqual( - events[3].name, PTN.CONNECT_START, - `event ${PTN.CONNECT_START} is not defined` - ); - assert.strictEqual( - events[4].name, - PTN.SECURE_CONNECTION_START, - `event ${PTN.SECURE_CONNECTION_START} is not defined` - ); - assert.strictEqual( - events[5].name, PTN.CONNECT_END, - `event ${PTN.CONNECT_END} is not defined` - ); - assert.strictEqual( - events[6].name, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); - assert.strictEqual( - events[7].name, PTN.RESPONSE_START, - `event ${PTN.RESPONSE_START} is not defined` - ); - assert.strictEqual( - events[8].name, PTN.RESPONSE_END, - `event ${PTN.RESPONSE_END} is not defined` - ); + ]); }); it('should create a span for preflight request', () => { @@ -479,53 +457,17 @@ describe('fetch', () => { it('preflight request span should have correct events', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const events = span.events; - assert.strictEqual(events.length, 9, 'number of events is wrong'); - - assert.strictEqual( - events[0].name, + assert.strictEqual(events.length, 8, 'number of events is wrong'); + testForCorrectEvents(events, [ PTN.FETCH_START, - `event ${PTN.FETCH_START} is not defined` - ); - assert.strictEqual( - events[1].name, PTN.DOMAIN_LOOKUP_START, - `event ${PTN.DOMAIN_LOOKUP_START} is not defined` - ); - assert.strictEqual( - events[2].name, PTN.DOMAIN_LOOKUP_END, - `event ${PTN.DOMAIN_LOOKUP_END} is not defined` - ); - assert.strictEqual( - events[3].name, PTN.CONNECT_START, - `event ${PTN.CONNECT_START} is not defined` - ); - assert.strictEqual( - events[4].name, - PTN.SECURE_CONNECTION_START, - `event ${PTN.SECURE_CONNECTION_START} is not defined` - ); - assert.strictEqual( - events[5].name, PTN.CONNECT_END, - `event ${PTN.CONNECT_END} is not defined` - ); - assert.strictEqual( - events[6].name, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); - assert.strictEqual( - events[7].name, PTN.RESPONSE_START, - `event ${PTN.RESPONSE_START} is not defined` - ); - assert.strictEqual( - events[8].name, PTN.RESPONSE_END, - `event ${PTN.RESPONSE_END} is not defined` - ); + ]); }); it('should set trace headers', () => { @@ -639,6 +581,51 @@ describe('fetch', () => { }); }); + describe('when request is secure and successful', () => { + beforeEach(async () => { + const propagateTraceHeaderCorsUrls = [secureUrl]; + await prepareData(secureUrl, { propagateTraceHeaderCorsUrls }); + }); + + afterEach(() => { + clearData(); + }); + + it('span should have correct events', () => { + const span: tracing.ReadableSpan = exportSpy.args[1][0][0]; + const events = span.events; + assert.strictEqual(events.length, 9, 'number of events is wrong'); + testForCorrectEvents(events, [ + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.SECURE_CONNECTION_START, + PTN.CONNECT_END, + PTN.REQUEST_START, + PTN.RESPONSE_START, + PTN.RESPONSE_END, + ]); + }); + + it('preflight request span should have correct events', () => { + const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; + const events = span.events; + assert.strictEqual(events.length, 9, 'number of events is wrong'); + testForCorrectEvents(events, [ + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.SECURE_CONNECTION_START, + PTN.CONNECT_END, + PTN.REQUEST_START, + PTN.RESPONSE_START, + PTN.RESPONSE_END, + ]); + }); + }); + describe('applyCustomAttributesOnSpan option', () => { const prepare = async ( url: string, @@ -815,13 +802,18 @@ describe('fetch', () => { `Wrong number of spans: ${exportSpy.args.length}` ); - assert.strictEqual(events.length, 9, 'number of events is wrong'); + assert.strictEqual(events.length, 8, 'number of events is wrong'); - assert.strictEqual( - events[6].name, + testForCorrectEvents(events, [ + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.CONNECT_END, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); + PTN.RESPONSE_START, + PTN.RESPONSE_END, + ]); }); }); @@ -844,12 +836,17 @@ describe('fetch', () => { `Wrong number of spans: ${exportSpy.args.length}` ); - assert.strictEqual(events.length, 9, 'number of events is wrong'); - assert.strictEqual( - events[6].name, + assert.strictEqual(events.length, 8, 'number of events is wrong'); + testForCorrectEvents(events, [ + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.CONNECT_END, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); + PTN.RESPONSE_START, + PTN.RESPONSE_END, + ]); }); it('should have an absolute http.url attribute', () => { @@ -882,12 +879,17 @@ describe('fetch', () => { 2, `Wrong number of spans: ${exportSpy.args.length}` ); - assert.strictEqual(events.length, 9, 'number of events is wrong'); - assert.strictEqual( - events[6].name, + assert.strictEqual(events.length, 8, 'number of events is wrong'); + testForCorrectEvents(events, [ + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.CONNECT_END, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); + PTN.RESPONSE_START, + PTN.RESPONSE_END, + ]); }); }); diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts b/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts index b304bb9c03..c3614a42e8 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts @@ -162,6 +162,19 @@ function createFakePerformanceObs(url: string) { return FakePerfObs; } +function testForCorrectEvents( + events: tracing.TimedEvent[], + eventNames: string[] +) { + for (let i = 0; i < events.length; i++) { + assert.strictEqual( + events[i].name, + eventNames[i], + `event ${eventNames[i]} is not defined` + ); + } +} + describe('xhr', () => { const asyncTests = [{ async: true }, { async: false }]; asyncTests.forEach(test => { @@ -200,6 +213,7 @@ describe('xhr', () => { let rootSpan: api.Span; let spyEntries: any; const url = 'http://localhost:8090/xml-http-request.js'; + const secureUrl = 'https://localhost:8090/xml-http-request.js'; let fakeNow = 0; let xmlHttpRequestInstrumentation: XMLHttpRequestInstrumentation; @@ -383,69 +397,20 @@ describe('xhr', () => { it('span should have correct events', () => { const span: tracing.ReadableSpan = exportSpy.args[1][0][0]; const events = span.events; - - assert.strictEqual( - events[0].name, + testForCorrectEvents(events, [ EventNames.METHOD_OPEN, - `event ${EventNames.METHOD_OPEN} is not defined` - ); - assert.strictEqual( - events[1].name, EventNames.METHOD_SEND, - `event ${EventNames.METHOD_SEND} is not defined` - ); - assert.strictEqual( - events[2].name, PTN.FETCH_START, - `event ${PTN.FETCH_START} is not defined` - ); - assert.strictEqual( - events[3].name, PTN.DOMAIN_LOOKUP_START, - `event ${PTN.DOMAIN_LOOKUP_START} is not defined` - ); - assert.strictEqual( - events[4].name, PTN.DOMAIN_LOOKUP_END, - `event ${PTN.DOMAIN_LOOKUP_END} is not defined` - ); - assert.strictEqual( - events[5].name, PTN.CONNECT_START, - `event ${PTN.CONNECT_START} is not defined` - ); - assert.strictEqual( - events[6].name, - PTN.SECURE_CONNECTION_START, - `event ${PTN.SECURE_CONNECTION_START} is not defined` - ); - assert.strictEqual( - events[7].name, PTN.CONNECT_END, - `event ${PTN.CONNECT_END} is not defined` - ); - assert.strictEqual( - events[8].name, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); - assert.strictEqual( - events[9].name, PTN.RESPONSE_START, - `event ${PTN.RESPONSE_START} is not defined` - ); - assert.strictEqual( - events[10].name, PTN.RESPONSE_END, - `event ${PTN.RESPONSE_END} is not defined` - ); - assert.strictEqual( - events[11].name, EventNames.EVENT_LOAD, - `event ${EventNames.EVENT_LOAD} is not defined` - ); - - assert.strictEqual(events.length, 12, 'number of events is wrong'); + ]); + assert.strictEqual(events.length, 11, 'number of events is wrong'); }); it('should create a span for preflight request', () => { @@ -479,53 +444,17 @@ describe('xhr', () => { it('preflight request span should have correct events', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const events = span.events; - assert.strictEqual(events.length, 9, 'number of events is wrong'); - - assert.strictEqual( - events[0].name, + assert.strictEqual(events.length, 8, 'number of events is wrong'); + testForCorrectEvents(events, [ PTN.FETCH_START, - `event ${PTN.FETCH_START} is not defined` - ); - assert.strictEqual( - events[1].name, PTN.DOMAIN_LOOKUP_START, - `event ${PTN.DOMAIN_LOOKUP_START} is not defined` - ); - assert.strictEqual( - events[2].name, PTN.DOMAIN_LOOKUP_END, - `event ${PTN.DOMAIN_LOOKUP_END} is not defined` - ); - assert.strictEqual( - events[3].name, PTN.CONNECT_START, - `event ${PTN.CONNECT_START} is not defined` - ); - assert.strictEqual( - events[4].name, - PTN.SECURE_CONNECTION_START, - `event ${PTN.SECURE_CONNECTION_START} is not defined` - ); - assert.strictEqual( - events[5].name, PTN.CONNECT_END, - `event ${PTN.CONNECT_END} is not defined` - ); - assert.strictEqual( - events[6].name, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); - assert.strictEqual( - events[7].name, PTN.RESPONSE_START, - `event ${PTN.RESPONSE_START} is not defined` - ); - assert.strictEqual( - events[8].name, PTN.RESPONSE_END, - `event ${PTN.RESPONSE_END} is not defined` - ); + ]); }); it('should NOT clear the resources', () => { @@ -534,6 +463,53 @@ describe('xhr', () => { 'resources have been cleared' ); }); + describe('When making https requests', () => { + beforeEach(done => { + clearData(); + // this won't generate a preflight span + const propagateTraceHeaderCorsUrls = [secureUrl]; + prepareData(done, secureUrl, { + propagateTraceHeaderCorsUrls, + }); + }); + + it('span should have correct events', () => { + const span: tracing.ReadableSpan = exportSpy.args[1][0][0]; + const events = span.events; + testForCorrectEvents(events, [ + EventNames.METHOD_OPEN, + EventNames.METHOD_SEND, + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.SECURE_CONNECTION_START, + PTN.CONNECT_END, + PTN.REQUEST_START, + PTN.RESPONSE_START, + PTN.RESPONSE_END, + EventNames.EVENT_LOAD, + ]); + assert.strictEqual(events.length, 12, 'number of events is wrong'); + }); + + it('preflight request span should have correct events', () => { + const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; + const events = span.events; + assert.strictEqual(events.length, 9, 'number of events is wrong'); + testForCorrectEvents(events, [ + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.SECURE_CONNECTION_START, + PTN.CONNECT_END, + PTN.REQUEST_START, + PTN.RESPONSE_START, + PTN.RESPONSE_END, + ]); + }); + }); describe('AND origin match with window.location', () => { beforeEach(done => { @@ -786,11 +762,11 @@ describe('xhr', () => { assert.strictEqual( events.length, - 12, + 11, `number of events is wrong: ${events.length}` ); assert.strictEqual( - events[8].name, + events[7].name, PTN.REQUEST_START, `event ${PTN.REQUEST_START} is not defined` ); @@ -1008,67 +984,20 @@ describe('xhr', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const events = span.events; - assert.strictEqual( - events[0].name, + testForCorrectEvents(events, [ EventNames.METHOD_OPEN, - `event ${EventNames.METHOD_OPEN} is not defined` - ); - assert.strictEqual( - events[1].name, EventNames.METHOD_SEND, - `event ${EventNames.METHOD_SEND} is not defined` - ); - assert.strictEqual( - events[2].name, PTN.FETCH_START, - `event ${PTN.FETCH_START} is not defined` - ); - assert.strictEqual( - events[3].name, PTN.DOMAIN_LOOKUP_START, - `event ${PTN.DOMAIN_LOOKUP_START} is not defined` - ); - assert.strictEqual( - events[4].name, PTN.DOMAIN_LOOKUP_END, - `event ${PTN.DOMAIN_LOOKUP_END} is not defined` - ); - assert.strictEqual( - events[5].name, PTN.CONNECT_START, - `event ${PTN.CONNECT_START} is not defined` - ); - assert.strictEqual( - events[6].name, PTN.SECURE_CONNECTION_START, - `event ${PTN.SECURE_CONNECTION_START} is not defined` - ); - assert.strictEqual( - events[7].name, PTN.CONNECT_END, - `event ${PTN.CONNECT_END} is not defined` - ); - assert.strictEqual( - events[8].name, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); - assert.strictEqual( - events[9].name, PTN.RESPONSE_START, - `event ${PTN.RESPONSE_START} is not defined` - ); - assert.strictEqual( - events[10].name, PTN.RESPONSE_END, - `event ${PTN.RESPONSE_END} is not defined` - ); - assert.strictEqual( - events[11].name, EventNames.EVENT_ERROR, - `event ${EventNames.EVENT_ERROR} is not defined` - ); - + ]); assert.strictEqual(events.length, 12, 'number of events is wrong'); }); }); @@ -1123,23 +1052,11 @@ describe('xhr', () => { it('span should have correct events', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const events = span.events; - - assert.strictEqual( - events[0].name, + testForCorrectEvents(events, [ EventNames.METHOD_OPEN, - `event ${EventNames.METHOD_OPEN} is not defined` - ); - assert.strictEqual( - events[1].name, EventNames.METHOD_SEND, - `event ${EventNames.METHOD_SEND} is not defined` - ); - assert.strictEqual( - events[2].name, EventNames.EVENT_ERROR, - `event ${EventNames.EVENT_ERROR} is not defined` - ); - + ]); assert.strictEqual(events.length, 3, 'number of events is wrong'); }); }); @@ -1201,23 +1118,11 @@ describe('xhr', () => { it('span should have correct events', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const events = span.events; - - assert.strictEqual( - events[0].name, + testForCorrectEvents(events, [ EventNames.METHOD_OPEN, - `event ${EventNames.METHOD_OPEN} is not defined` - ); - assert.strictEqual( - events[1].name, EventNames.METHOD_SEND, - `event ${EventNames.METHOD_SEND} is not defined` - ); - assert.strictEqual( - events[2].name, EventNames.EVENT_ABORT, - `event ${EventNames.EVENT_ABORT} is not defined` - ); - + ]); assert.strictEqual(events.length, 3, 'number of events is wrong'); }); }); @@ -1280,22 +1185,11 @@ describe('xhr', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const events = span.events; - assert.strictEqual( - events[0].name, + testForCorrectEvents(events, [ EventNames.METHOD_OPEN, - `event ${EventNames.METHOD_OPEN} is not defined` - ); - assert.strictEqual( - events[1].name, EventNames.METHOD_SEND, - `event ${EventNames.METHOD_SEND} is not defined` - ); - assert.strictEqual( - events[2].name, EventNames.EVENT_TIMEOUT, - `event ${EventNames.EVENT_TIMEOUT} is not defined` - ); - + ]); assert.strictEqual(events.length, 3, 'number of events is wrong'); }); }); diff --git a/packages/opentelemetry-sdk-trace-web/src/utils.ts b/packages/opentelemetry-sdk-trace-web/src/utils.ts index 2027abc42f..b3f583676f 100644 --- a/packages/opentelemetry-sdk-trace-web/src/utils.ts +++ b/packages/opentelemetry-sdk-trace-web/src/utils.ts @@ -85,7 +85,12 @@ export function addSpanNetworkEvents( addSpanNetworkEvent(span, PTN.DOMAIN_LOOKUP_START, resource); addSpanNetworkEvent(span, PTN.DOMAIN_LOOKUP_END, resource); addSpanNetworkEvent(span, PTN.CONNECT_START, resource); - addSpanNetworkEvent(span, PTN.SECURE_CONNECTION_START, resource); + if ( + hasKey(resource as PerformanceResourceTiming, 'name') && + (resource as PerformanceResourceTiming)['name'].startsWith('https:') + ) { + addSpanNetworkEvent(span, PTN.SECURE_CONNECTION_START, resource); + } addSpanNetworkEvent(span, PTN.CONNECT_END, resource); addSpanNetworkEvent(span, PTN.REQUEST_START, resource); addSpanNetworkEvent(span, PTN.RESPONSE_START, resource); diff --git a/packages/opentelemetry-sdk-trace-web/test/utils.test.ts b/packages/opentelemetry-sdk-trace-web/test/utils.test.ts index 06e550c1f0..dd00e6b061 100644 --- a/packages/opentelemetry-sdk-trace-web/test/utils.test.ts +++ b/packages/opentelemetry-sdk-trace-web/test/utils.test.ts @@ -116,9 +116,16 @@ describe('utils', () => { assert.strictEqual(addEventSpy.callCount, 0); addSpanNetworkEvents(span, entries); - - assert.strictEqual(addEventSpy.callCount, 9); assert.strictEqual(setAttributeSpy.callCount, 2); + //secure connect start should not be added to non-https resource + assert.strictEqual(addEventSpy.callCount, 8); + //secure connect start should be added to an https resource + addEventSpy.resetHistory(); + addSpanNetworkEvents(span, { + ...entries, + name: 'https://foo', + } as PerformanceResourceTiming); + assert.strictEqual(addEventSpy.callCount, 9); }); it('should only include encoded size when content encoding is being used', () => { const addEventSpy = sinon.spy(); From a675ae817b51ea6b8853e62ea460e3e944cd0930 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 5 Jul 2023 11:21:20 +0200 Subject: [PATCH 054/141] 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 43dc22d223..fc70f70d07 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 a1ff957253..351eaa0cc7 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 204414966f..b8b685c42f 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 fce71adbd5..5b888affd7 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 9e55231aa6..8d41fc0873 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 5f0deff40b..27acfa4e12 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 788fb3dd99..52bc1e7f27 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 cebe38c3c9..17e35ee07b 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 e26bbcd17b..fa10515d33 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 f10cf504ca..f384dec981 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 c8f1bfcb39..742ec40861 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 4eb469da07..a9d38e65f3 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 944258ad8f..bdfaa89e58 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 4956fbee14..65d86fe705 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 0587dc9de5..46b31d990d 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 9904e9da84..b2905d6da9 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 84a937ce93..1edc610e32 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 bbe473b650..ff26a83e19 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 b3bfc15586..8e16b16378 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 6d7726c134..3cdfb5d9d4 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 055/141] 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 42ca36c051..6f72946061 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 71977f73ff..4dcbbf6009 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 a48f8e2c1b..22d3d29d9c 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 2a63c724c9..15b3ac513d 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 7caa50413f..762f17d65f 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 bb5fa25136..888a0b1be8 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 2ad8923f8b..7d22becab6 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 a18a2795f4..1fc32b91f5 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 aaeb4db421..136ff5ff0b 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 0df41c352f..f4295a7c90 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 fd231ef119..ee201e1171 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 037e147dc9..45c9f661dc 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 ec768c6188..1976e7ced3 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 7be2db96e3..1591770cae 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 fc70f70d07..9a8244e50e 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 351eaa0cc7..f0db30c443 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 b8b685c42f..f7f08642e8 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 5b888affd7..2cf8e237a6 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 8d41fc0873..ac6a84593a 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 27acfa4e12..f01322ce03 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 52bc1e7f27..0a6cd39d19 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 17e35ee07b..380c0e212e 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 fa10515d33..556fbf9a9c 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 f384dec981..440af69cb0 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 8ae497886f..c9ffe2cdcc 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 742ec40861..bf8d325635 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 f8b247ffa6..ca20eade98 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 c39d34ace9..93ed303fa6 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 a9d38e65f3..62852cb31a 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 bdfaa89e58..e2c06c4ff8 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 5db8e3ced7..e21bf69995 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 de1a701996..b6d15f7ae2 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 65d86fe705..c8fcd6fcda 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 46b31d990d..fb8a8ce047 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 4e2a831389..d0cb3701e3 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 be245fbe15..61415c040a 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 636efed876..b57628d38f 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 880251c503..8d577ea659 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 64366b205c..23e3e65eeb 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 b2905d6da9..cf65319c1f 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 1edc610e32..b2735c9014 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 23e11a9e5c..3fa3c7b208 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 3b4164d3f9..89e57e4c7b 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 ff26a83e19..dc3a8aaa4e 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 89dcef29be..85bc378792 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 de2e90601f..5d67b474c6 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 17de24f223..b450f1d577 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 6cceaa64d5..0b08b67d82 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 bd4fb782fe..1608b10f30 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 8e16b16378..551fbaab11 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 c7585e68f3..93cff0e7cf 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 9b05c66d6c..0555f0d708 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 2e327b6acd..37184d2d0f 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 00876cf2c4..451da5d1e2 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 3cdfb5d9d4..829be06e36 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 056/141] 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 22383d8aba..eb64eeca29 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 888e602e5e..296c86d4c8 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 1976e7ced3..4b3f8660cc 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 1591770cae..315534d6bd 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 f0db30c443..b29e26ec07 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 f7f08642e8..5935d17191 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 ac6a84593a..ce26e94630 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 f01322ce03..a812a1e7ca 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 0a6cd39d19..5c20aa95b0 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 556fbf9a9c..6190a4144e 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 bf8d325635..f641b9ec49 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 62852cb31a..f628c633ef 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 e2c06c4ff8..4141beed00 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 e21bf69995..9ec166cb75 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 b6d15f7ae2..77c49bfaa2 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 d0cb3701e3..6c020a16f4 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 61415c040a..898bb86bed 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 7df76d7b13..2af2869368 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 138112547b..b7fa7acb97 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 cf65319c1f..fa1ef04204 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 3fa3c7b208..70d32b5dec 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 dc3a8aaa4e..e8bd41837e 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 85bc378792..1cb95ba6b1 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 5d67b474c6..fdabf7a7e8 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 b450f1d577..a5862f44d5 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 0b08b67d82..884e0e8c73 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 551fbaab11..ab668e3c47 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 37184d2d0f..e7d695ca93 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 451da5d1e2..7d04d854ac 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 0000000000..bd9c8b8eab --- /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 057/141] 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 7d5c10c7f9..08f88d4912 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 7927fa0c36..3f58849df9 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 7654abb6ac..5cb19b0298 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 7654abb6ac..5cb19b0298 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 3ed0fbeba3..9cfb3fd423 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 f3f22e8617..24f29328f9 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 3ed0fbeba3..9cfb3fd423 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 3ed0fbeba3..9cfb3fd423 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 e41d9a9299..c054089042 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 3ed0fbeba3..9cfb3fd423 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 3ed0fbeba3..9cfb3fd423 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 3ed0fbeba3..9cfb3fd423 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 e41d9a9299..c054089042 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 3ed0fbeba3..9cfb3fd423 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 f756f4488b..9baf1b4956 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 e41d9a9299..c054089042 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 f756f4488b..9baf1b4956 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 f756f4488b..9baf1b4956 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 b50dfd815b..7364a382d0 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 e41d9a9299..c054089042 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 f756f4488b..9baf1b4956 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 e41d9a9299..c054089042 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 3ed0fbeba3..9cfb3fd423 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 3ed0fbeba3..9cfb3fd423 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 b9004d2025..0fe1bbf975 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 0c986a856c..fc24af194b 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 f756f4488b..9baf1b4956 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 c0b6c172ef..a1fbadf6d0 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 f726f3becb..3d9af536bb 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 f21c674001..7561e7f833 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 c21aa0e358..a374ccda6a 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 9dfe62f9b8..36847df9fb 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 f726f3becb..3d9af536bb 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 9dfe62f9b8..36847df9fb 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 9dfe62f9b8..36847df9fb 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 b23ee98fc0..3913d6d94b 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 9dfe62f9b8..36847df9fb 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 9dfe62f9b8..36847df9fb 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 f726f3becb..3d9af536bb 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 86d794e2f5..359356edd4 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 9dfe62f9b8..36847df9fb 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 f726f3becb..3d9af536bb 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 f726f3becb..3d9af536bb 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 9dfe62f9b8..36847df9fb 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 058/141] 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 a1fbadf6d0..2890bbe58c 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 059/141] 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 296c86d4c8..e8952c3cf1 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 4b3f8660cc..fe43dbc694 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 315534d6bd..02cc0bc2b0 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 9a8244e50e..1a71d47cf8 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 b29e26ec07..459612e2c0 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 5935d17191..a166f62416 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 2cf8e237a6..524adb1065 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 ce26e94630..cdb697283a 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 a812a1e7ca..ef8f876acf 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 5c20aa95b0..29373f3059 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 380c0e212e..15624bac4c 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 6190a4144e..1e696f5270 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 440af69cb0..2168d2864e 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 f641b9ec49..c1213ea31a 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 f628c633ef..c7179d59d3 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 4141beed00..b788dea267 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 77c49bfaa2..142f9ca886 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 c8fcd6fcda..0610cb9d4f 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 fb8a8ce047..a764299858 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 6c020a16f4..ca8d12685f 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 898bb86bed..106a3dbf4a 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 fa1ef04204..8026461c6f 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 b2735c9014..70f79503fb 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 70d32b5dec..1e9d1d8c66 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 e8bd41837e..4b979ec13c 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 fdabf7a7e8..f110f2d8d2 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 a5862f44d5..997635f42b 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 884e0e8c73..4c306805cf 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 ab668e3c47..f7dd504e76 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 e7d695ca93..f85e67fafc 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 829be06e36..5c0fe40dad 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 060/141] 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 ca20eade98..10019d25cc 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 9ec166cb75..dcf827d0fd 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 2890bbe58c..2b8572602f 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 061/141] 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 7162f43638..e2f2b5a147 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 7d22becab6..762a2b9aa6 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 062/141] 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 762a2b9aa6..c629931887 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 dcf827d0fd..a99bab01a9 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 d246174208..891288ee6e 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 07921a88b9..8b96dddeab 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 03efc31142..9292e0ae70 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 7a385a7604..6fb76f3dad 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 add730f8bc..4091bf66e9 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 063/141] 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 b36d5bf06e..a4e3459f01 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 064/141] 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 4091bf66e9..94c80b8846 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 065/141] 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 e8952c3cf1..d78638160d 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 fe43dbc694..e2fed0e67e 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 02cc0bc2b0..15f4d1c863 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 1a71d47cf8..643ab186fc 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 459612e2c0..b77b63df22 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 a166f62416..355e5333da 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 524adb1065..22a4eae703 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 cdb697283a..56e01988a6 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 ef8f876acf..96c327b60f 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 29373f3059..357f630611 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 15624bac4c..4c239a6e26 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 1e696f5270..89017dfb0b 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 2168d2864e..d98c421bc1 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 c9ffe2cdcc..5b44a67c37 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 c1213ea31a..b36c60a677 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 10019d25cc..ac047252ee 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 93ed303fa6..d765adc528 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 c7179d59d3..71585b4e00 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 b788dea267..46ba9af641 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 a99bab01a9..8e6f97f27a 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 142f9ca886..687fcdf505 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 0610cb9d4f..232b83bf6c 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 a764299858..f1fd58623c 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 ca8d12685f..3a53906d50 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 106a3dbf4a..14a18889e8 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 b57628d38f..d5ebb224de 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 2b8572602f..8671540526 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 23e3e65eeb..a1073523bb 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 8026461c6f..515059557f 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 70f79503fb..342c580ff9 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 1e9d1d8c66..c8ba0b3647 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 89e57e4c7b..9419fe1040 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 4b979ec13c..d4cdf4472d 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 1cb95ba6b1..69fce8a126 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 f110f2d8d2..ef8d9915ab 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 997635f42b..a56531034a 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 4c306805cf..d220f8cae7 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 1608b10f30..7afeef5bc3 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 f7dd504e76..4c1c347cd0 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 93cff0e7cf..6ccbe2ddbe 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 0555f0d708..6f28c3c067 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 f85e67fafc..0ce67e77d4 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 7d04d854ac..8906041279 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 5c0fe40dad..16f2d6e9bc 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 066/141] 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 d765adc528..2c5d28cd7f 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 9419fe1040..2158bd3066 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 d4cdf4472d..6ef32c8de5 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 a56531034a..a121a1c4fd 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 6ccbe2ddbe..29b28f22f4 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 067/141] 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 6f72946061..b30dce0392 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 d78638160d..d857ae33f4 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 f7c20de0d1..5f821d66c7 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 762f17d65f..e57cc764a3 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 1fc32b91f5..9414b949f5 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 136ff5ff0b..ed473eae27 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 e2fed0e67e..dd4111bb3c 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 15f4d1c863..9bddeaa794 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 643ab186fc..6a61908731 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 b77b63df22..428d2ed878 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 355e5333da..6047b0bd62 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 22a4eae703..4c89ede04e 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 56e01988a6..631b0ac6d5 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 96c327b60f..84a44cb055 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 357f630611..9c90b945e4 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 4c239a6e26..414dae9354 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 89017dfb0b..6f83683c86 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 d98c421bc1..c92aaae08b 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 5b44a67c37..b87439eb40 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 b36c60a677..bbb989e09c 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 ac047252ee..8a7d6af1f0 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 2c5d28cd7f..50f9c5ea80 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 71585b4e00..d823392acf 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 46ba9af641..b3e1a2aadf 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 0b238b42b8..24c76056a1 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 1fc5f5e14a..cdaf8858ce 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 d3df10491f..842797c341 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 715dbdbff2..f09097cd79 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 8e6f97f27a..acaad73e01 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 687fcdf505..1b37716bef 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 232b83bf6c..4db399497b 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 f1fd58623c..5480ef6ce7 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 3a53906d50..66e4244291 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 14a18889e8..54d9063d6f 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 d5ebb224de..cf637d1a8d 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 8d577ea659..0158a21f68 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 8671540526..2a6cffca35 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 a1073523bb..01439b30f9 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 515059557f..0a7cab2c00 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 342c580ff9..01fafc419f 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 c8ba0b3647..5340df9514 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 2158bd3066..a595bf3e4c 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 6ef32c8de5..0de3f4a5de 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 69fce8a126..2d0bbb4c51 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 ef8d9915ab..a9b2e15612 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 a121a1c4fd..dac50ececf 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 d220f8cae7..c0285dd5f4 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 7afeef5bc3..fe776628b0 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 4c1c347cd0..e19b365b23 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 29b28f22f4..367416299a 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 6f28c3c067..fbbb58096c 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 0ce67e77d4..7aaf05fd68 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 8906041279..3949c871fa 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 84e684c8a5..cbafb67678 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 068/141] 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 b30dce0392..ea4e3c0caa 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 4dcbbf6009..a36bbf7225 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 22d3d29d9c..1452ccbd8c 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 15b3ac513d..2241782992 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 e57cc764a3..6f70a428ae 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 888a0b1be8..c16a341a26 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 c629931887..38d9b83974 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 9414b949f5..cf9cc50bec 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 ed473eae27..92f16e43e5 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 ee201e1171..ee2bb6e08b 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 45c9f661dc..9b51db4a97 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 dd4111bb3c..94c3ce510d 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 9bddeaa794..e99c9fd651 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 6a61908731..bbd94bea1a 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 428d2ed878..49e2f2eab5 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 6047b0bd62..f24ffbaacd 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 4c89ede04e..1a6a0114ef 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 631b0ac6d5..0b51ceb782 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 84a44cb055..bf01be8e55 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 9c90b945e4..bdf8566924 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 414dae9354..c5fffbadb2 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 6f83683c86..6adc7387e7 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 c92aaae08b..59b19416e7 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 b87439eb40..8b9a7251f1 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 bbb989e09c..55b7b3565c 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 8a7d6af1f0..51b6358759 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 50f9c5ea80..f945fbefc1 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 d823392acf..3c729d4009 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 b3e1a2aadf..faa4b5a883 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 acaad73e01..a00499ab74 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 1b37716bef..2d3a61a5b8 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 4db399497b..67330ada1e 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 5480ef6ce7..a411fb4a97 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 66e4244291..1ea9fa0db4 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 54d9063d6f..3ac1aba876 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 cf637d1a8d..b1724c988a 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 0158a21f68..c027ea34c3 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 01439b30f9..a753211702 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 0a7cab2c00..b375a49f9e 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 01fafc419f..ee7ba24069 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 5340df9514..974185bdf0 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 a595bf3e4c..437b2b1919 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 0de3f4a5de..ff789993ae 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 2d0bbb4c51..dc771041f5 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 a9b2e15612..487e6efa23 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 dac50ececf..8889e298c6 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 c0285dd5f4..7f9cdfe0a5 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 fe776628b0..97b12571bb 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 e19b365b23..bcc00574fc 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 367416299a..59473df709 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 fbbb58096c..26a8ba076e 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 7aaf05fd68..f0abbe927a 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 3949c871fa..4cbc426dde 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 16f2d6e9bc..04d420abec 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 069/141] 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 ea4e3c0caa..b7b8a06ef3 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 49e2f2eab5..8d2c4c2e92 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 070/141] 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 b7b8a06ef3..c5f1569a88 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 8dd650a992..8d3051b00c 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 cd3749a681..2da2f80003 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 071/141] 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 e326aa822e..241e487cec 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 d857ae33f4..f73aef244f 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 072/141] 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 f7353a3e87..0edcb89fa7 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 7a3b4e394e..0c19aa0aaf 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 e347a2eef9..96f229bb8e 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 073/141] 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 38d9b83974..fa0d69b502 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 378eac25d3..cd163f08be 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 51b6358759..f3e705dd62 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 c61edf771b..9e26062d1c 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 72ad45e3bd..36be79fd07 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 e9f15b45ab..06ca7c0b61 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 0000000000..c9438a302c --- /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 0000000000..a0aba044f1 --- /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 0000000000..65d8f1f75c --- /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 0000000000..dc977e439a --- /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 0000000000..8e238a6acc --- /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 693cdeab46..9d861fd651 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 0000000000..2fc2a3d1be --- /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 074/141] 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 c5f1569a88..0266669bdf 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 d99c621c0b..f665952f05 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 31e194290c..9298a46d93 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 8651643fa3..80f834f30c 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 f07b3f9f21..9aacc46066 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 075/141] 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 f73aef244f..d2e4572f5f 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 94c3ce510d..55d58ba1f3 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 e99c9fd651..4a50492b49 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 bbd94bea1a..a1e3cbc0ad 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 8d2c4c2e92..c7a7e41f94 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 f24ffbaacd..31b6b025bf 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 1a6a0114ef..f9bcb032e1 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 0b51ceb782..be7ba958f5 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 bf01be8e55..3eea7ce959 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 bdf8566924..75a4a7fde4 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 c5fffbadb2..70f2e344bf 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 6adc7387e7..021cdd182c 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 59b19416e7..4b24923e20 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 8b9a7251f1..af3ea68331 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 55b7b3565c..8f6ebd9a65 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 f3e705dd62..0fc2fd5bfe 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 f945fbefc1..32a25479b8 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 3c729d4009..7ac60c0068 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 faa4b5a883..2e84dc74cf 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 a00499ab74..d5773f83b7 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 2d3a61a5b8..73407d7801 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 67330ada1e..a29489916d 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 a411fb4a97..c22110429a 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 1ea9fa0db4..c8a77ae0b4 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 3ac1aba876..6113aeca58 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 b1724c988a..d2deaae5f1 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 2a6cffca35..864a548b05 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 a753211702..f8f4797227 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 b375a49f9e..0b6929bcce 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 ee7ba24069..0d290af7af 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 974185bdf0..cb8da74b13 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 437b2b1919..e31c28eaa9 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 ff789993ae..1c325eaafa 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 dc771041f5..a67230166a 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 487e6efa23..26e16812d8 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 8889e298c6..ddcc1e48d8 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 7f9cdfe0a5..c8b2ea54a9 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 97b12571bb..80b0976561 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 bcc00574fc..58f407d0ba 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 59473df709..778d89dd11 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 26a8ba076e..473b473cd0 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 f0abbe927a..21a56b2191 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 4cbc426dde..f7e010f22d 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 04d420abec..aeff430066 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 076/141] 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 be6943f81d..4fa477a4f8 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 077/141] 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 ca72796747..370dfb17d9 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 078/141] 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 0266669bdf..190756613d 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 991b8a89a6..bb8b4b0155 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 c30bfb3014..801496513f 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 079/141] 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 a1e3cbc0ad..bc9f28c60a 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 c7a7e41f94..23ad53c619 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 31b6b025bf..37200e912a 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 f9bcb032e1..002839950b 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 be7ba958f5..9d5f3efc31 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 3eea7ce959..d41027bacc 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 75a4a7fde4..0f29c9c6de 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 70f2e344bf..727b5ca2be 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 021cdd182c..e0e814bcde 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 4b24923e20..12496de959 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 8f6ebd9a65..d91814f305 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 7ac60c0068..2ef2fc8941 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 2e84dc74cf..97a8b5d4e9 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 73407d7801..70c6fef126 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 a29489916d..87def63d63 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 c22110429a..61873ad1d2 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 6113aeca58..a23006ad2c 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 0b6929bcce..65193793ed 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 0d290af7af..b827d82110 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 1c325eaafa..e32960e4bd 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 58f407d0ba..fa1287b20a 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 21a56b2191..612036af21 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 aeff430066..7585425167 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 080/141] 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 190756613d..d449ad83dc 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 a36bbf7225..bc2aa9665e 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 1452ccbd8c..641344b3f6 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 2241782992..8eeac36fa9 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 6f70a428ae..2b79e07cc2 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 c16a341a26..c8817d0e45 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 fa0d69b502..0c7912b3a3 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 cf9cc50bec..fc19e3ddb3 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 92f16e43e5..6c94e03209 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 f4295a7c90..f978265643 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 ee2bb6e08b..d3c2726c36 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 9b51db4a97..678f2212c4 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 55d58ba1f3..23d69298f1 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 4a50492b49..06d473b6bd 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 bc9f28c60a..d3c2fb9b1e 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 23ad53c619..5abf5d1b68 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 37200e912a..4a210f1222 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 002839950b..7d310c875e 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 9d5f3efc31..8bed923c84 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 d41027bacc..1b143605c8 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 0f29c9c6de..c5c56290b3 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 727b5ca2be..b1156ba3f7 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 e0e814bcde..6cfc836a05 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 12496de959..e27d1c89f3 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 af3ea68331..327e452c9d 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 d91814f305..2b219797d0 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 0fc2fd5bfe..4e3b39bcea 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 32a25479b8..19b0d56512 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 2ef2fc8941..2b12f444d9 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 97a8b5d4e9..8590586953 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 d5773f83b7..857c8c79d9 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 70c6fef126..9896eaaf8e 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 87def63d63..66bf284d2f 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 61873ad1d2..6426bf9eb5 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 c8a77ae0b4..6b48eacda6 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 a23006ad2c..5c53b84177 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 d2deaae5f1..3c9d4e8207 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 c027ea34c3..5057970074 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 f8f4797227..3621271019 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 65193793ed..ba41bbe517 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 b827d82110..5b9581933b 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 cb8da74b13..061821f188 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 e31c28eaa9..1629974256 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 e32960e4bd..c68c7eb44d 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 a67230166a..2a50fd93ec 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 26e16812d8..868cb0c2a4 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 ddcc1e48d8..bed20a9541 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 c8b2ea54a9..2e741d532d 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 80b0976561..bd88e07fdb 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 fa1287b20a..1d31e720e3 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 778d89dd11..bca2bd960f 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 473b473cd0..123ed49b87 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 612036af21..7de85fe7e3 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 f7e010f22d..cb538a503d 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 7585425167..71c40a8ed2 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 081/141] 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 d449ad83dc..63e669ceba 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 3bc4c63a06..8aad601d70 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 4760da3ccc..c9623707f2 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 297622982d..c0643a60da 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 29137d62a4..d4865724c3 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 61727322a4..46fd41c045 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 082/141] 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 370dfb17d9..dfd297a7bc 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 083/141] 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 0c7912b3a3..64b4debd38 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 084/141] 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 64b4debd38..0c4f724d83 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 8b96dddeab..30a1bea790 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 085/141] 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 63e669ceba..5468b2b67f 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 94983057f6..54392321f8 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 65a06922af..810b9e32f9 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 086/141] 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 71c40a8ed2..ef11738733 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 087/141] 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 dfd297a7bc..7fbe787972 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 088/141] 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 5468b2b67f..72e7508827 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 0000000000..c4b5d09d7b --- /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 089/141] 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 c4b5d09d7b..ea349fdde7 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 090/141] 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 19b0d56512..ed70652dfe 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 8590586953..497ddb1b21 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 3c9d4e8207..75651fc753 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 bd88e07fdb..f4d44f0f97 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 091/141] 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 c399fc5fb7..1405ae7473 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 36d773441e..533aa264b1 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 5b4f9e962b..29a82db120 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 2ae11142ad..6dac23b580 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 7b8c8e8b9a..54a752af1e 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 1219f2d976..d2dce6517b 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 5e2b71c573..ff6a9c7b85 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 21177777f6..db8a4a32ed 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 1219f2d976..d2dce6517b 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 0012f0c118..27b816fe10 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 15ca92a45e..9422bbc9ef 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 c960305783..2c55a7f91c 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 57556d81a5..2888e317df 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 088a0fd0a0..5a8b1dfdfa 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 884505daa8..b4f06472c6 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 34c80d6e82..4bc9e5c70a 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 c0ff4b6b39..17804c47b4 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 92d42fe44b..027f103c07 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 864a548b05..963f7b826a 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 ebbad5f96b..56c900c2ab 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 76e9ab2fe0..56c08c8321 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 d760ff5809..7d84e0c734 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 51c71ee211..bceb86b8ec 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 330d293eea..099a21c0d7 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 f36394c5bc..821b55ec2f 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 092/141] 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 963f7b826a..1bc2622a43 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 093/141] 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 d2e4572f5f..7369e951c0 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 23d69298f1..eb7081e519 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 06d473b6bd..617a8acfc7 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 d3c2fb9b1e..1a9becddcc 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 5abf5d1b68..487d2bf3ea 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 4a210f1222..b1163fa6df 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 7d310c875e..c9568d7031 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 8bed923c84..ac7287672d 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 1b143605c8..6bc5f4c77e 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 c5c56290b3..2660890244 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 b1156ba3f7..bb20957c85 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 6cfc836a05..1bfc020b2c 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 e27d1c89f3..d42edbd998 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 327e452c9d..b81d783d07 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 2b219797d0..8b4f2ff8bc 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 4e3b39bcea..ebed7aa924 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 ed70652dfe..b61e290b48 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 2b12f444d9..feab1cc9f7 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 497ddb1b21..90ccb50553 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 857c8c79d9..e13f7a31e4 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 9896eaaf8e..9853508ca4 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 66bf284d2f..f9fbf252fc 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 6426bf9eb5..ff177d8eb1 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 6b48eacda6..f5b1a59469 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 5c53b84177..59b3a04976 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 75651fc753..77693eb533 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 1bc2622a43..21e1a41ef3 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 3621271019..866b103a4b 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 ba41bbe517..d945bddb7c 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 5b9581933b..0c0efd45b5 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 061821f188..e2b3e90b60 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 1629974256..2da2d89716 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 c68c7eb44d..e427297009 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 2a50fd93ec..9a9674b97d 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 868cb0c2a4..6a6b3a703c 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 bed20a9541..7615592d7b 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 2e741d532d..b4bc4e41c2 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 f4d44f0f97..22641f7ed8 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 1d31e720e3..4c6ee6e89d 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 bca2bd960f..9e17927e39 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 123ed49b87..a15916ceac 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 7de85fe7e3..af3b5952e2 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 cb538a503d..09b643b65d 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 094/141] 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 5a106908e4..c7d143d797 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 095/141] 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 72e7508827..ec685bdbb5 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 0c4f724d83..3972a9b75a 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 8f84c5134c..42e4fc41e8 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 f43c456813..78721a90c0 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 2371ecb67f..5ecafff682 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 096/141] 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 b61e290b48..9777f7a184 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 5057970074..2e52beae0a 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 097/141] 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 1a9becddcc..d77260bb81 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 487d2bf3ea..b5b1f8f1ca 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 b1163fa6df..70177cc4ff 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 c9568d7031..46473c9abf 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 ac7287672d..fc03b1965f 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 6bc5f4c77e..c187fb9cd7 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 2660890244..6874a8d98e 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 bb20957c85..4b3c0332a1 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 1bfc020b2c..7fe60c0dd6 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 d42edbd998..7582bbe517 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 8b4f2ff8bc..920d0a91b4 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 ebed7aa924..b85656844f 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 9777f7a184..6036fa0c18 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 feab1cc9f7..5e81576c2c 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 90ccb50553..37f839ea58 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 e13f7a31e4..8870322699 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 9853508ca4..623a68698c 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 f9fbf252fc..f91d29e13d 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 ff177d8eb1..b8b6f6ae1b 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 59b3a04976..1689f7ccb2 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 d945bddb7c..2df641b922 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 0c0efd45b5..aecb55eb0e 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 e427297009..3dedccc8db 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 22641f7ed8..dd0ad05ca0 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 4c6ee6e89d..3e1997cfdf 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 af3b5952e2..d3f069054a 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 ef11738733..3a3483e575 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 098/141] 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 3972a9b75a..76d136bd8d 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 8870322699..1b70578077 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 099/141] 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 76d136bd8d..b796a557b8 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 b5b1f8f1ca..3f0c192b0c 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 100/141] 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 ec685bdbb5..049f668cfc 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 5b52050074..a1dcf67d4f 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 a9e5bcaf9b..dc7e3de3d7 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 d80b8c2626..59eb233a85 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 31fb1555ac..ea3526b29b 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 11a94ffc7c..873865a0dc 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 101/141] 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 21e1a41ef3..8dd00b6326 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 102/141] 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 3a3483e575..48dfb2108c 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 103/141] 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 241e487cec..26eea6386b 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 104/141] 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 8dd00b6326..c1b6fc0280 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 105/141] 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 ea3e38284b..fb3371d4fa 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 106/141] 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 049f668cfc..47f735d6ad 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 01eabe2614..ac742fc0ee 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 835de92fe1..9a8f80abde 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 7d8796cbf1..5bf3196693 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 4ffe41607d..e40d6aa507 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 fa7a54b07f..ef081cf67a 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 107/141] 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 26eea6386b..6acd8d20dd 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 108/141] 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 d77260bb81..b4434e31e2 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 3f0c192b0c..f83a9c0125 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 70177cc4ff..9b59b80f61 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 46473c9abf..7443e1fc15 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 fc03b1965f..849d2c31d7 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 c187fb9cd7..a88e105c89 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 6874a8d98e..eb62c726d0 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 4b3c0332a1..ff1dbab571 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 7fe60c0dd6..f7290daa27 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 7582bbe517..fe6f0419fa 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 920d0a91b4..b5aa623cb1 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 5e81576c2c..cfd84d3b49 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 37f839ea58..96353f6df2 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 623a68698c..000b8b96ae 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 f91d29e13d..749fc60cd4 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 b8b6f6ae1b..d02b039fcf 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 1689f7ccb2..c383c780b7 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 2df641b922..0e4987dd12 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 aecb55eb0e..cde461f901 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 3dedccc8db..2170b91261 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 3e1997cfdf..79f2b1a0e3 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 d3f069054a..566257915e 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 48dfb2108c..fc9f88b072 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 109/141] 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 70fb482d60..0d8d88ca73 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 659cde8d2f..317759ac5b 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 cde3ca25c7..787e11a91e 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 79c0f720be..a8bb9e14dc 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 e6f52cccd7..bb5094ec40 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 6acd8d20dd..da15818d5f 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 443fe85fac..04c07379ab 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 110/141] 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 47f735d6ad..0d84c6aab8 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 a1dcf67d4f..d88acbd565 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 7369e951c0..335aad1bb5 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 bc2aa9665e..4067efdcc2 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 641344b3f6..6dbf7f7f68 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 8eeac36fa9..8fbab59d36 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 2b79e07cc2..5dddfe6088 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 c8817d0e45..df63aa98ec 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 b796a557b8..eca8f382d6 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 fc19e3ddb3..8b7786469a 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 6c94e03209..003647376d 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 f978265643..52d2b9a719 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 d3c2726c36..1bbfee33c7 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 678f2212c4..274a498184 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 eb7081e519..22448f8d34 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 617a8acfc7..36e38d8ab1 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 b4434e31e2..9c4a76d6a4 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 f83a9c0125..83d32850f7 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 9b59b80f61..44cf07e665 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 7443e1fc15..13e7ffc12b 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 849d2c31d7..04de0761ea 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 a88e105c89..f334289888 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 eb62c726d0..63cf5257f2 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 ff1dbab571..bb82228557 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 f7290daa27..d0d9d099c9 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 fe6f0419fa..a905abaf69 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 b81d783d07..4ae8fda1c4 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 b5aa623cb1..2515fcea42 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 b85656844f..326aa366ec 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 6036fa0c18..68ff52d1ad 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 cfd84d3b49..784baa8c1f 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 96353f6df2..093a1df687 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 1b70578077..1aec9b6fdf 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 000b8b96ae..0880a926f4 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 749fc60cd4..55ec46943f 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 d02b039fcf..e742141085 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 f5b1a59469..b7d77008e5 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 c383c780b7..7175839918 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 77693eb533..b9710199bd 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 2e52beae0a..5708f1ce34 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 866b103a4b..25601f30d6 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 0e4987dd12..40916ce42d 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 cde461f901..5b8ffc76f5 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 e2b3e90b60..2d63fadda6 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 2da2d89716..9712e86c5c 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 0000000000..2090d63abf --- /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 2170b91261..4861cdb4c2 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 0000000000..2090d63abf --- /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 9a9674b97d..7c5514603f 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 0000000000..2090d63abf --- /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 6a6b3a703c..e9b507f551 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 0000000000..2090d63abf --- /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 7615592d7b..308ac6b42e 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 b4bc4e41c2..8ad1b29058 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 dd0ad05ca0..a4e2a89de0 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 79f2b1a0e3..f71e983bcd 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 9e17927e39..cd9b77cbcc 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 a15916ceac..beb200a334 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 566257915e..f6ea99e54f 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 0000000000..2090d63abf --- /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 09b643b65d..4d33d5ec37 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 0000000000..2090d63abf --- /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 fc9f88b072..fad49074b5 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 111/141] 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 d88acbd565..22c9fd72b0 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 dc7e3de3d7..a9e5bcaf9b 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 59eb233a85..d80b8c2626 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 ea3526b29b..31fb1555ac 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 873865a0dc..11a94ffc7c 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 112/141] 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 0d84c6aab8..4c48f21a6e 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 22c9fd72b0..cba48a4149 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 335aad1bb5..2b677d2451 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 4067efdcc2..046ab7fe0a 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 6dbf7f7f68..9a3bcb2de4 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 8fbab59d36..3653c96ff5 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 5dddfe6088..4a8abc9e17 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 df63aa98ec..5091af0836 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 eca8f382d6..42ee34020d 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 8b7786469a..5e7509407c 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 003647376d..2c8c2f8e7f 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 52d2b9a719..03ff3e05b1 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 1bbfee33c7..d8615a6b74 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 274a498184..9a7beb79e1 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 22448f8d34..c93878d909 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 36e38d8ab1..18806178ce 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 9c4a76d6a4..442b003c73 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 83d32850f7..04ed15daf3 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 44cf07e665..742db91b54 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 13e7ffc12b..8267c2da21 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 04de0761ea..16a64b9c9f 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 f334289888..5bc540da39 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 63cf5257f2..8a96ab3a76 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 bb82228557..a6adb42c93 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 d0d9d099c9..2fc757eb1c 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 a905abaf69..fa2c674cea 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 4ae8fda1c4..5b55ececd8 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 2515fcea42..009aea1240 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 326aa366ec..2845904d95 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 68ff52d1ad..91ce71b634 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 784baa8c1f..1dc318d326 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 093a1df687..99a6d83016 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 1aec9b6fdf..40b3ac0201 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 0880a926f4..9e47068c28 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 55ec46943f..963fbe9fa4 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 e742141085..5ba695faee 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 b7d77008e5..9e138a5cd2 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 7175839918..fc388cad02 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 b9710199bd..e1390bb446 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 5708f1ce34..e54a18825c 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 25601f30d6..181fc92dce 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 40916ce42d..477cf0d75d 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 5b8ffc76f5..d716738c52 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 2d63fadda6..bb1e010b22 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 9712e86c5c..9e94b5f268 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 4861cdb4c2..942a9ee6f5 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 7c5514603f..353c87b20f 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 e9b507f551..8d7a70c84b 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 308ac6b42e..311ea9d90b 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 8ad1b29058..77e7a64c28 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 a4e2a89de0..9d7dfbbc9c 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 f71e983bcd..a1c9939a0b 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 cd9b77cbcc..0cc05eb2dd 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 beb200a334..f328e7fce4 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 f6ea99e54f..dd7963f1c8 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 4d33d5ec37..b7836e5409 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 fad49074b5..a05172df31 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 113/141] =?UTF-8?q?chore(exporter-logs-otlp-proto):=20rena?= =?UTF-8?q?me=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 42ee34020d..aaff8d4389 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 3a00476c32..30f1e8bb34 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 9fde4be45b..dd74bc70be 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 185d5094f1..fff28d4e77 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 e6968b3466..abaa4216f1 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 851ff9a015..86a29a341c 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 88d97e21d3..53191c0625 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 4797b30651..2472e4a796 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 382a132c3e..6a76ed24a0 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 994a2f0ea4..0810109e81 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 114/141] 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 317759ac5b..f67b78fe0e 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 115/141] 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 aaff8d4389..0c3598e32f 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 2e09308958..b5086b8668 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 40b3ac0201..70a423c79a 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 116/141] 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 7fbe787972..c07b4e5924 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 117/141] 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 0c3598e32f..e03d24e8d3 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 e1390bb446..2e24690be8 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 0000000000..04d4a06738 --- /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 498c73e5e7..e4eaf47a2d 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 f5e8164e3c..c276b99e53 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 5df2f6c315..8889608ec3 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 0000000000..bc136d0ed2 --- /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 deb2509fa7..e0045fe7d9 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 0000000000..15b9cc1a6b --- /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 0000000000..289fbefd0c --- /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 9a7f90cda0..6aacd5e951 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 91cebb5ad5..145dd31760 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 118/141] 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 442b003c73..3f08acb370 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 04ed15daf3..57f0aeed83 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 742db91b54..25de11cf26 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 8267c2da21..bcfcd3ae94 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 16a64b9c9f..d5a1713205 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 5bc540da39..9214b7f84c 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 8a96ab3a76..67330ddca3 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 a6adb42c93..74985a4766 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 2fc757eb1c..46e60ea29e 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 fa2c674cea..92c799b26b 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 009aea1240..4c155d752b 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 2845904d95..fbf07ae716 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 91ce71b634..aebe37781d 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 1dc318d326..41c42d1fdc 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 99a6d83016..589aa1039e 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 70a423c79a..8517a07617 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 9e47068c28..9bfde78d9d 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 963fbe9fa4..81c8c4c30f 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 5ba695faee..5335765695 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 fc388cad02..8d783b481b 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 477cf0d75d..addc0bc388 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 d716738c52..b61d91650e 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 942a9ee6f5..f5b6218603 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 9d7dfbbc9c..0bdcc4a090 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 a1c9939a0b..7d467a09b4 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 dd7963f1c8..d61505660a 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 a05172df31..31456eb93a 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 119/141] 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 3f08acb370..82146ce439 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 57f0aeed83..05b217da2d 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 25de11cf26..4aa74b7eb2 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 bcfcd3ae94..80c2ea3a0c 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 d5a1713205..cfc2522a53 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 9214b7f84c..935b79963f 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 67330ddca3..d983979a06 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 74985a4766..3c316d301f 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 46e60ea29e..8db6655f59 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 92c799b26b..700e4ccb20 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 4c155d752b..948b357d5a 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 41c42d1fdc..511f4fe3e0 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 589aa1039e..ca9e9df4e8 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 9bfde78d9d..7981365842 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 81c8c4c30f..cfa48c56e8 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 5335765695..d350c263f6 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 8d783b481b..f35a643c07 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 addc0bc388..0a673ab480 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 b61d91650e..76adff9578 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 f5b6218603..681d997e34 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 7d467a09b4..ebbf2a4025 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 d61505660a..3d4f5b299e 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 31456eb93a..9592f050de 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 120/141] 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 c1b6fc0280..fb734e564d 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 121/141] 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 e03d24e8d3..24f36df117 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 700e4ccb20..52ce8df0a2 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 0000000000..b657f54211 --- /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 0000000000..31e46faeda --- /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 2fec210b9a..29491b46ef 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 c5970c9c5c..031a2e5609 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 122/141] 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 0738d67d89..6d95a91356 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 z!-dHG?`k6UB8j2-hj?|-8b*{Ld~S(6tid#zEF|oFYrBb3>GUD~j7qLD4e*iVCd`bK zkv{P_@Mes!l>77%0B0((?^@?(i4T05j9FXUip>6p;IAf_b$k=#Wyckp@LT^{v%KOWw~OUuUtsJ-Fn?JY{T5u# zT@Ajm!HM!9ieW}452|m5R3vqkQPi>i2n4y~lG+1d<7Kp0hR6u!BS?Mx@R^lz=N%fZ zH)jXKeZ-eeQm=3)XStSzup;y9IBG5b)C<%Vw~cUO9T8`#QaoXuzyBz8zttz;*1(S< zD~&YyqFd6kUBAyV)ZvBqnTl36HG7=~H>k(tsctOCDQ%Lggb^u(V1mBg-t842EYcxx zoziaXN1bZHfLv+Lj#pO^z-TKjLc)NI{Y)b+>%GbgmzqzT0oA2Bs%KM~eiUWTC(?t6o_d1293#a-<0`SVyc~ru&FVwxh&4_HP7?Q!oOuE*;6TG)%pJ^ZOYViyxujfS( zoMsrG8g$z>PP4D-i67>^C|oCOMkab2F)ERGO1F^<29fjf0q9*d+wH1^ItuFKNoOoG zEw_|+z6p3Z&Oi^{p4G1DJ){Zp*umnn}9kYorKP zkT6SNlxxkaM&h|I;$~?sRh@`XTD6XdkNoapDm2VPe)LEEN7*Otsnr?Yi8+3TLV_BC~pGH`u<94Yvp7+Xy3F-lS^&EY3$yIeW~iY z)g2|dL|i(_!RA-2ib?Fkabj#g@ZJkF&w!hos;lhoILN)Jh}SGXS_v&_>1k*H2TZjv zt5;)Lgbad@`qvdnl-#!E{g+AHZ>=}R`*B-@y1&2lw)3qYkWE`0jJ|Y1{98a#x+LRd z)*et3eK)s2ekvPb>fF?!w@yBZqW^jrug zD1r0_`^1?m5IwXKpx z*Xl9(@=fwe%5|{FEPi@IHNH-+*VwqzI^~q&WILK$QfMJK`csbmqc!b`S+-2{;7!o@ zqQN)XTP$y5l%E6M)#T;doT4Aj+(`rphgFf&e;lf z$)~iu_Z-G-jX%e(i_d-{NwGg&Q8q&N(n@+4TNI+MPIv>3eguTwUSm!jO9>6fAf|J_ zUN6^4Qu?$vIVEvY?F|et``AK)x72!N-uglsi3F;Q7@`EzW!_^N?YGu(pY{2$<3(6l zy7gAL4v+)AuLD4wLSsDT8OT>Yf>!yHRrK3I8Rwv8r>@(#5_+wpKP&k~4ZqZH(7WTn z`JZS;JM_Sy^Fx{|VPK8Mf;h_)*9h-2*&(k^r#Bz-Tri3;$^%P35Evd)b0eDakK&}) z`DzyqVMh-5iKpZW(z} zJq~!WSs!o9mIrU6|3xxc2gV-RG&7vWACX|*0a?(MWS|H+SSB?6a!8)C#*~i8uRsfh zu*;7NCyfL|lCBUSj}II;e1(LUI&}STvW4@jFzrHExQ)I^QydMYuy~~tXJqp@;_fsv z3{I@iu&({ZNvRjso3E0IH#y&MVBP;bmbUpL6_^h zs`v_31{dNDr%^Cj@(0Z^mnTlRCf1wp+HJx#GrUi7)tYT{XYldk$svMB{nxj3Jy39(t!Ne!xw!b`#H{jf# z6-wU5pH(jsXZ155&VeCq)K)260Pp;0?m%f#36u^;I@zPWoemto4@SI)Z+?+W@o2mMH~)m3hmq4qey#vz1Sn3reXd=T3mJwS$Jmz<(QpfX^yY8``>?P7D06+@td33}8L z;ZOm*1*nca{!Sqk6PhayWsDvXRw;tdQdn76aAMZNUqK$5z)JpNTiWzAllRzJR^i6 z-mzro4|yI;jy5v<q$ zf~bB=mK?!gmNEJf0lgoyCbIu0y4~&-3z=3Ie7M<~k3#l~Z!? zvk1A=QR4SM+xeZnY^GBHCE*Zmw$W*^8o*)ReXXf}p#v`5JFzH_r8uyyS-_0s zwfvfGlf6O;5pE_3o+`M%2yj$dwC1(?IWqtc*QdMX`BKmE8ftfm)~=I+HO5TvPZ#

    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 d8615a6b74..bd97c726c1 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 98ddcf5b60..00893bafe9 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 37206971e7..99bf8bf8b4 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 e79cfc0f43..66e4d6e3d7 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 123/141] 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 4c48f21a6e..53987c4169 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 fb734e564d..6d5460207d 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 77e7a64c28..600caa4294 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 0000000000..83558ea01f --- /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 0000000000..ac978a6140 --- /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(); From f2fc0d8787a82f33b1ce7e315759ddc61caf4f52 Mon Sep 17 00:00:00 2001 From: Aaron Abbott Date: Thu, 21 Sep 2023 04:02:50 -0400 Subject: [PATCH 124/141] fix(sdk-metrics): allow instrument names to contain '/' (#4155) --- CHANGELOG.md | 2 ++ packages/sdk-metrics/src/InstrumentDescriptor.ts | 2 +- packages/sdk-metrics/test/util.ts | 10 +++++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53987c4169..ad5c780983 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) +* fix(sdk-metrics): allow instrument names to contain '/' [#4155](https://github.com/open-telemetry/opentelemetry-js/pull/4155) + ### :books: (Refine Doc) ### :house: (Internal) diff --git a/packages/sdk-metrics/src/InstrumentDescriptor.ts b/packages/sdk-metrics/src/InstrumentDescriptor.ts index ac742fc0ee..f0053f9c39 100644 --- a/packages/sdk-metrics/src/InstrumentDescriptor.ts +++ b/packages/sdk-metrics/src/InstrumentDescriptor.ts @@ -88,7 +88,7 @@ export function isDescriptorCompatibleWith( // 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; +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/test/util.ts b/packages/sdk-metrics/test/util.ts index ef081cf67a..338a2f3978 100644 --- a/packages/sdk-metrics/test/util.ts +++ b/packages/sdk-metrics/test/util.ts @@ -67,7 +67,15 @@ export const defaultInstrumentationScope: InstrumentationScope = { }; 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 validNames = [ + 'a', + 'a'.repeat(255), + 'a1', + 'a-1', + 'a.1', + 'a_1', + 'a/1', +]; export const commonValues: number[] = [1, -1, 1.0, Infinity, -Infinity, NaN]; export const commonAttributes: MetricAttributes[] = [ From 2b9832ecb5bbd07217e5199fcd5d7814773ad64d Mon Sep 17 00:00:00 2001 From: Chengzhong Wu Date: Tue, 26 Sep 2023 09:13:58 +0800 Subject: [PATCH 125/141] fix(sdk-logs): hide internal methods with internal shared state (#3865) Co-authored-by: Marc Pichler --- experimental/CHANGELOG.md | 1 + .../packages/sdk-logs/src/LogRecord.ts | 23 +-- experimental/packages/sdk-logs/src/Logger.ts | 44 ++---- .../packages/sdk-logs/src/LoggerProvider.ts | 67 +++------ .../sdk-logs/src/MultiLogRecordProcessor.ts | 8 +- experimental/packages/sdk-logs/src/config.ts | 67 +++------ .../src/export/NoopLogRecordProcessor.ts | 3 +- experimental/packages/sdk-logs/src/index.ts | 2 - .../src/internal/LoggerProviderSharedState.ts | 35 +++++ experimental/packages/sdk-logs/src/types.ts | 5 - .../sdk-logs/test/common/LogRecord.test.ts | 26 ++-- .../sdk-logs/test/common/Logger.test.ts | 36 +++-- .../test/common/LoggerProvider.test.ts | 133 +++++++++--------- .../export/BatchLogRecordProcessor.test.ts | 19 ++- .../export/SimpleLogRecordProcessor.test.ts | 51 +++---- 15 files changed, 246 insertions(+), 274 deletions(-) create mode 100644 experimental/packages/sdk-logs/src/internal/LoggerProviderSharedState.ts diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 24f36df117..11e98847da 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -12,6 +12,7 @@ All notable changes to experimental packages in this project will be documented * 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) +* fix(sdk-logs): hide internal methods with internal shared state [#3865](https://github.com/open-telemetry/opentelemetry-js/pull/3865) @legendecas ### :rocket: (Enhancement) diff --git a/experimental/packages/sdk-logs/src/LogRecord.ts b/experimental/packages/sdk-logs/src/LogRecord.ts index d184004e6b..ed76d5eb07 100644 --- a/experimental/packages/sdk-logs/src/LogRecord.ts +++ b/experimental/packages/sdk-logs/src/LogRecord.ts @@ -26,8 +26,8 @@ import type { IResource } from '@opentelemetry/resources'; import type { ReadableLogRecord } from './export/ReadableLogRecord'; import type { LogRecordLimits } from './types'; -import { Logger } from './Logger'; import { LogAttributes } from '@opentelemetry/api-logs'; +import { LoggerProviderSharedState } from './internal/LoggerProviderSharedState'; export class LogRecord implements ReadableLogRecord { readonly hrTime: api.HrTime; @@ -41,7 +41,7 @@ export class LogRecord implements ReadableLogRecord { private _body?: string; private _isReadonly: boolean = false; - private readonly _logRecordLimits: LogRecordLimits; + private readonly _logRecordLimits: Required; set severityText(severityText: string | undefined) { if (this._isLogRecordReadonly()) { @@ -73,7 +73,11 @@ export class LogRecord implements ReadableLogRecord { return this._body; } - constructor(logger: Logger, logRecord: logsAPI.LogRecord) { + constructor( + _sharedState: LoggerProviderSharedState, + instrumentationScope: InstrumentationScope, + logRecord: logsAPI.LogRecord + ) { const { timestamp, observedTimestamp, @@ -97,9 +101,9 @@ export class LogRecord implements ReadableLogRecord { this.severityNumber = severityNumber; this.severityText = severityText; this.body = body; - this.resource = logger.resource; - this.instrumentationScope = logger.instrumentationScope; - this._logRecordLimits = logger.getLogRecordLimits(); + this.resource = _sharedState.resource; + this.instrumentationScope = instrumentationScope; + this._logRecordLimits = _sharedState.logRecordLimits; this.setAttributes(attributes); } @@ -127,7 +131,7 @@ export class LogRecord implements ReadableLogRecord { } if ( Object.keys(this.attributes).length >= - this._logRecordLimits.attributeCountLimit! && + this._logRecordLimits.attributeCountLimit && !Object.prototype.hasOwnProperty.call(this.attributes, key) ) { return this; @@ -159,15 +163,16 @@ export class LogRecord implements ReadableLogRecord { } /** + * @internal * A LogRecordProcessor may freely modify logRecord for the duration of the OnEmit call. * If logRecord is needed after OnEmit returns (i.e. for asynchronous processing) only reads are permitted. */ - public makeReadonly() { + _makeReadonly() { this._isReadonly = true; } private _truncateToSize(value: AttributeValue): AttributeValue { - const limit = this._logRecordLimits.attributeValueLengthLimit || 0; + const limit = this._logRecordLimits.attributeValueLengthLimit; // Check limit if (limit <= 0) { // Negative values are invalid, so do not truncate diff --git a/experimental/packages/sdk-logs/src/Logger.ts b/experimental/packages/sdk-logs/src/Logger.ts index 5ea4e8f28f..7694955e62 100644 --- a/experimental/packages/sdk-logs/src/Logger.ts +++ b/experimental/packages/sdk-logs/src/Logger.ts @@ -15,28 +15,17 @@ */ import type * as logsAPI from '@opentelemetry/api-logs'; -import type { IResource } from '@opentelemetry/resources'; import type { InstrumentationScope } from '@opentelemetry/core'; import { context } from '@opentelemetry/api'; -import type { LoggerConfig, LogRecordLimits } from './types'; import { LogRecord } from './LogRecord'; -import { LoggerProvider } from './LoggerProvider'; -import { mergeConfig } from './config'; -import { LogRecordProcessor } from './LogRecordProcessor'; +import { LoggerProviderSharedState } from './internal/LoggerProviderSharedState'; export class Logger implements logsAPI.Logger { - public readonly resource: IResource; - private readonly _loggerConfig: Required; - constructor( public readonly instrumentationScope: InstrumentationScope, - config: LoggerConfig, - private _loggerProvider: LoggerProvider - ) { - this._loggerConfig = mergeConfig(config); - this.resource = _loggerProvider.resource; - } + private _sharedState: LoggerProviderSharedState + ) {} public emit(logRecord: logsAPI.LogRecord): void { const currentContext = logRecord.context || context.active(); @@ -45,30 +34,23 @@ export class Logger implements logsAPI.Logger { * the LogRecords it emits MUST automatically include the Trace Context from the active Context, * if Context has not been explicitly set. */ - const logRecordInstance = new LogRecord(this, { - context: currentContext, - ...logRecord, - }); + const logRecordInstance = new LogRecord( + this._sharedState, + this.instrumentationScope, + { + context: currentContext, + ...logRecord, + } + ); /** * the explicitly passed Context, * the current Context, or an empty Context if the Logger was obtained with include_trace_context=false */ - this.getActiveLogRecordProcessor().onEmit( - logRecordInstance, - currentContext - ); + this._sharedState.activeProcessor.onEmit(logRecordInstance, currentContext); /** * A LogRecordProcessor may freely modify logRecord for the duration of the OnEmit call. * If logRecord is needed after OnEmit returns (i.e. for asynchronous processing) only reads are permitted. */ - logRecordInstance.makeReadonly(); - } - - public getLogRecordLimits(): LogRecordLimits { - return this._loggerConfig.logRecordLimits; - } - - public getActiveLogRecordProcessor(): LogRecordProcessor { - return this._loggerProvider.getActiveLogRecordProcessor(); + logRecordInstance._makeReadonly(); } } diff --git a/experimental/packages/sdk-logs/src/LoggerProvider.ts b/experimental/packages/sdk-logs/src/LoggerProvider.ts index 81515dab86..b8fd9851f8 100644 --- a/experimental/packages/sdk-logs/src/LoggerProvider.ts +++ b/experimental/packages/sdk-logs/src/LoggerProvider.ts @@ -16,7 +16,7 @@ import { diag } from '@opentelemetry/api'; import type * as logsAPI from '@opentelemetry/api-logs'; import { NOOP_LOGGER } from '@opentelemetry/api-logs'; -import { IResource, Resource } from '@opentelemetry/resources'; +import { Resource } from '@opentelemetry/resources'; import { BindOnceFuture, merge } from '@opentelemetry/core'; import type { LoggerProviderConfig } from './types'; @@ -24,39 +24,26 @@ import type { LogRecordProcessor } from './LogRecordProcessor'; import { Logger } from './Logger'; import { loadDefaultConfig, reconfigureLimits } from './config'; import { MultiLogRecordProcessor } from './MultiLogRecordProcessor'; -import { NoopLogRecordProcessor } from './export/NoopLogRecordProcessor'; +import { LoggerProviderSharedState } from './internal/LoggerProviderSharedState'; export const DEFAULT_LOGGER_NAME = 'unknown'; export class LoggerProvider implements logsAPI.LoggerProvider { - public readonly resource: IResource; - - private readonly _loggers: Map = new Map(); - private _activeProcessor: MultiLogRecordProcessor; - private readonly _registeredLogRecordProcessors: LogRecordProcessor[] = []; - private readonly _config: LoggerProviderConfig; private _shutdownOnce: BindOnceFuture; + private readonly _sharedState: LoggerProviderSharedState; constructor(config: LoggerProviderConfig = {}) { const { - resource = Resource.empty(), + resource = Resource.default(), logRecordLimits, forceFlushTimeoutMillis, - } = merge({}, loadDefaultConfig(), reconfigureLimits(config)); - this.resource = Resource.default().merge(resource); - this._config = { - logRecordLimits, - resource: this.resource, + } = merge({}, loadDefaultConfig(), config); + this._sharedState = new LoggerProviderSharedState( + resource, forceFlushTimeoutMillis, - }; - - this._shutdownOnce = new BindOnceFuture(this._shutdown, this); - - // add a default processor: NoopLogRecordProcessor - this._activeProcessor = new MultiLogRecordProcessor( - [new NoopLogRecordProcessor()], - forceFlushTimeoutMillis + reconfigureLimits(logRecordLimits) ); + this._shutdownOnce = new BindOnceFuture(this._shutdown, this); } /** @@ -77,19 +64,17 @@ export class LoggerProvider implements logsAPI.LoggerProvider { } const loggerName = name || DEFAULT_LOGGER_NAME; const key = `${loggerName}@${version || ''}:${options?.schemaUrl || ''}`; - if (!this._loggers.has(key)) { - this._loggers.set( + if (!this._sharedState.loggers.has(key)) { + this._sharedState.loggers.set( key, new Logger( { name: loggerName, version, schemaUrl: options?.schemaUrl }, - { - logRecordLimits: this._config.logRecordLimits, - }, - this + this._sharedState ) ); } - return this._loggers.get(key)!; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return this._sharedState.loggers.get(key)!; } /** @@ -97,10 +82,10 @@ export class LoggerProvider implements logsAPI.LoggerProvider { * @param processor the new LogRecordProcessor to be added. */ public addLogRecordProcessor(processor: LogRecordProcessor) { - if (this._registeredLogRecordProcessors.length === 0) { + if (this._sharedState.registeredLogRecordProcessors.length === 0) { // since we might have enabled by default a batchProcessor, we disable it // before adding the new one - this._activeProcessor + this._sharedState.activeProcessor .shutdown() .catch(err => diag.error( @@ -109,10 +94,10 @@ export class LoggerProvider implements logsAPI.LoggerProvider { ) ); } - this._registeredLogRecordProcessors.push(processor); - this._activeProcessor = new MultiLogRecordProcessor( - this._registeredLogRecordProcessors, - this._config.forceFlushTimeoutMillis! + this._sharedState.registeredLogRecordProcessors.push(processor); + this._sharedState.activeProcessor = new MultiLogRecordProcessor( + this._sharedState.registeredLogRecordProcessors, + this._sharedState.forceFlushTimeoutMillis ); } @@ -127,7 +112,7 @@ export class LoggerProvider implements logsAPI.LoggerProvider { diag.warn('invalid attempt to force flush after LoggerProvider shutdown'); return this._shutdownOnce.promise; } - return this._activeProcessor.forceFlush(); + return this._sharedState.activeProcessor.forceFlush(); } /** @@ -144,15 +129,7 @@ export class LoggerProvider implements logsAPI.LoggerProvider { return this._shutdownOnce.call(); } - public getActiveLogRecordProcessor(): MultiLogRecordProcessor { - return this._activeProcessor; - } - - public getActiveLoggers(): Map { - return this._loggers; - } - private _shutdown(): Promise { - return this._activeProcessor.shutdown(); + return this._sharedState.activeProcessor.shutdown(); } } diff --git a/experimental/packages/sdk-logs/src/MultiLogRecordProcessor.ts b/experimental/packages/sdk-logs/src/MultiLogRecordProcessor.ts index c4e5031261..353caefe0f 100644 --- a/experimental/packages/sdk-logs/src/MultiLogRecordProcessor.ts +++ b/experimental/packages/sdk-logs/src/MultiLogRecordProcessor.ts @@ -15,7 +15,7 @@ */ import { callWithTimeout } from '@opentelemetry/core'; - +import type { Context } from '@opentelemetry/api'; import type { LogRecordProcessor } from './LogRecordProcessor'; import type { LogRecord } from './LogRecord'; @@ -38,8 +38,10 @@ export class MultiLogRecordProcessor implements LogRecordProcessor { ); } - public onEmit(logRecord: LogRecord): void { - this.processors.forEach(processors => processors.onEmit(logRecord)); + public onEmit(logRecord: LogRecord, context?: Context): void { + this.processors.forEach(processors => + processors.onEmit(logRecord, context) + ); } public async shutdown(): Promise { diff --git a/experimental/packages/sdk-logs/src/config.ts b/experimental/packages/sdk-logs/src/config.ts index af908f1650..91b2c3e488 100644 --- a/experimental/packages/sdk-logs/src/config.ts +++ b/experimental/packages/sdk-logs/src/config.ts @@ -20,7 +20,7 @@ import { getEnv, getEnvWithoutDefaults, } from '@opentelemetry/core'; -import { LoggerConfig } from './types'; +import { LogRecordLimits } from './types'; export function loadDefaultConfig() { return { @@ -37,50 +37,29 @@ export function loadDefaultConfig() { /** * When general limits are provided and model specific limits are not, * configures the model specific limits by using the values from the general ones. - * @param userConfig User provided tracer configuration + * @param logRecordLimits User provided limits configuration */ -export function reconfigureLimits(userConfig: LoggerConfig): LoggerConfig { - const logRecordLimits = Object.assign({}, userConfig.logRecordLimits); - +export function reconfigureLimits( + logRecordLimits: LogRecordLimits +): Required { const parsedEnvConfig = getEnvWithoutDefaults(); - /** - * Reassign log record attribute count limit to use first non null value defined by user or use default value - */ - logRecordLimits.attributeCountLimit = - userConfig.logRecordLimits?.attributeCountLimit ?? - parsedEnvConfig.OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT ?? - parsedEnvConfig.OTEL_ATTRIBUTE_COUNT_LIMIT ?? - DEFAULT_ATTRIBUTE_COUNT_LIMIT; - - /** - * Reassign log record attribute value length limit to use first non null value defined by user or use default value - */ - logRecordLimits.attributeValueLengthLimit = - userConfig.logRecordLimits?.attributeValueLengthLimit ?? - parsedEnvConfig.OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT ?? - parsedEnvConfig.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT ?? - DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT; - - return Object.assign({}, userConfig, { logRecordLimits }); -} - -/** - * Function to merge Default configuration (as specified in './config') with - * user provided configurations. - */ -export function mergeConfig(userConfig: LoggerConfig): Required { - const DEFAULT_CONFIG = loadDefaultConfig(); - - const target = Object.assign({}, DEFAULT_CONFIG, userConfig); - - target.logRecordLimits = Object.assign( - {}, - DEFAULT_CONFIG.logRecordLimits, - userConfig.logRecordLimits || {} - ); - - return target; + return { + /** + * Reassign log record attribute count limit to use first non null value defined by user or use default value + */ + attributeCountLimit: + logRecordLimits.attributeCountLimit ?? + parsedEnvConfig.OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT ?? + parsedEnvConfig.OTEL_ATTRIBUTE_COUNT_LIMIT ?? + DEFAULT_ATTRIBUTE_COUNT_LIMIT, + /** + * Reassign log record attribute value length limit to use first non null value defined by user or use default value + */ + attributeValueLengthLimit: + logRecordLimits.attributeValueLengthLimit ?? + parsedEnvConfig.OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT ?? + parsedEnvConfig.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT ?? + DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT, + }; } - -export const DEFAULT_EVENT_DOMAIN = 'default'; diff --git a/experimental/packages/sdk-logs/src/export/NoopLogRecordProcessor.ts b/experimental/packages/sdk-logs/src/export/NoopLogRecordProcessor.ts index 91f277e8ab..c1f62ed8ca 100644 --- a/experimental/packages/sdk-logs/src/export/NoopLogRecordProcessor.ts +++ b/experimental/packages/sdk-logs/src/export/NoopLogRecordProcessor.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { Context } from '@opentelemetry/api'; import { LogRecordProcessor } from '../LogRecordProcessor'; import { ReadableLogRecord } from './ReadableLogRecord'; @@ -22,7 +23,7 @@ export class NoopLogRecordProcessor implements LogRecordProcessor { return Promise.resolve(); } - onEmit(_logRecord: ReadableLogRecord): void {} + onEmit(_logRecord: ReadableLogRecord, _context: Context): void {} shutdown(): Promise { return Promise.resolve(); diff --git a/experimental/packages/sdk-logs/src/index.ts b/experimental/packages/sdk-logs/src/index.ts index e718ae069e..b7347a2845 100644 --- a/experimental/packages/sdk-logs/src/index.ts +++ b/experimental/packages/sdk-logs/src/index.ts @@ -15,14 +15,12 @@ */ export { - LoggerConfig, LoggerProviderConfig, LogRecordLimits, BufferConfig, BatchLogRecordProcessorBrowserConfig, } from './types'; export { LoggerProvider } from './LoggerProvider'; -export { Logger } from './Logger'; export { LogRecord } from './LogRecord'; export { LogRecordProcessor } from './LogRecordProcessor'; export { ReadableLogRecord } from './export/ReadableLogRecord'; diff --git a/experimental/packages/sdk-logs/src/internal/LoggerProviderSharedState.ts b/experimental/packages/sdk-logs/src/internal/LoggerProviderSharedState.ts new file mode 100644 index 0000000000..16b208f72c --- /dev/null +++ b/experimental/packages/sdk-logs/src/internal/LoggerProviderSharedState.ts @@ -0,0 +1,35 @@ +/* + * 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 { Logger } from '@opentelemetry/api-logs'; +import { IResource } from '@opentelemetry/resources'; +import { LogRecordProcessor } from '../LogRecordProcessor'; +import { LogRecordLimits } from '../types'; +import { NoopLogRecordProcessor } from '../export/NoopLogRecordProcessor'; + +export class LoggerProviderSharedState { + readonly loggers: Map = new Map(); + activeProcessor: LogRecordProcessor; + readonly registeredLogRecordProcessors: LogRecordProcessor[] = []; + + constructor( + readonly resource: IResource, + readonly forceFlushTimeoutMillis: number, + readonly logRecordLimits: Required + ) { + this.activeProcessor = new NoopLogRecordProcessor(); + } +} diff --git a/experimental/packages/sdk-logs/src/types.ts b/experimental/packages/sdk-logs/src/types.ts index 026843dc15..27aefa540f 100644 --- a/experimental/packages/sdk-logs/src/types.ts +++ b/experimental/packages/sdk-logs/src/types.ts @@ -30,11 +30,6 @@ export interface LoggerProviderConfig { logRecordLimits?: LogRecordLimits; } -export interface LoggerConfig { - /** Log Record Limits*/ - logRecordLimits?: LogRecordLimits; -} - export interface LogRecordLimits { /** attributeValueLengthLimit is maximum allowed attribute value size */ attributeValueLengthLimit?: number; diff --git a/experimental/packages/sdk-logs/test/common/LogRecord.test.ts b/experimental/packages/sdk-logs/test/common/LogRecord.test.ts index cc7ce8bafd..e32ab39838 100644 --- a/experimental/packages/sdk-logs/test/common/LogRecord.test.ts +++ b/experimental/packages/sdk-logs/test/common/LogRecord.test.ts @@ -33,30 +33,32 @@ import { LogRecordLimits, LogRecordProcessor, LogRecord, - Logger, LoggerProvider, } from './../../src'; import { invalidAttributes, validAttributes } from './utils'; +import { LoggerProviderSharedState } from '../../src/internal/LoggerProviderSharedState'; +import { reconfigureLimits } from '../../src/config'; const performanceTimeOrigin: HrTime = [1, 1]; -const setup = (limits?: LogRecordLimits, data?: logsAPI.LogRecord) => { +const setup = (logRecordLimits?: LogRecordLimits, data?: logsAPI.LogRecord) => { const instrumentationScope = { name: 'test name', version: 'test version', schemaUrl: 'test schema url', }; const resource = Resource.default(); - const loggerProvider = new LoggerProvider({ resource }); - const logger = new Logger( + const sharedState = new LoggerProviderSharedState( + resource, + Infinity, + reconfigureLimits(logRecordLimits ?? {}) + ); + const logRecord = new LogRecord( + sharedState, instrumentationScope, - { - logRecordLimits: limits, - }, - loggerProvider + data ?? {} ); - const logRecord = new LogRecord(logger, data || {}); - return { logger, logRecord, instrumentationScope, resource }; + return { logRecord, instrumentationScope, resource }; }; describe('LogRecord', () => { @@ -320,7 +322,7 @@ describe('LogRecord', () => { it('should not rewrite directly through the property method', () => { const warnStub = sinon.spy(diag, 'warn'); const { logRecord } = setup(undefined, logRecordData); - logRecord.makeReadonly(); + logRecord._makeReadonly(); logRecord.body = newBody; logRecord.severityNumber = newSeverityNumber; @@ -346,7 +348,7 @@ describe('LogRecord', () => { it('should not rewrite using the set method', () => { const warnStub = sinon.spy(diag, 'warn'); const { logRecord } = setup(undefined, logRecordData); - logRecord.makeReadonly(); + logRecord._makeReadonly(); logRecord.setBody(newBody); logRecord.setSeverityNumber(newSeverityNumber); diff --git a/experimental/packages/sdk-logs/test/common/Logger.test.ts b/experimental/packages/sdk-logs/test/common/Logger.test.ts index a5f690a4b7..f78bda2d5e 100644 --- a/experimental/packages/sdk-logs/test/common/Logger.test.ts +++ b/experimental/packages/sdk-logs/test/common/Logger.test.ts @@ -17,21 +17,19 @@ import * as assert from 'assert'; import * as sinon from 'sinon'; -import { LogRecord, Logger, LoggerConfig, LoggerProvider } from '../../src'; +import { LogRecord, LoggerProvider, NoopLogRecordProcessor } from '../../src'; import { ROOT_CONTEXT, TraceFlags, context, trace } from '@opentelemetry/api'; import { LogRecord as ApiLogRecord } from '@opentelemetry/api-logs'; +import { Logger } from '../../src/Logger'; -const setup = (loggerConfig: LoggerConfig = {}) => { - const logger = new Logger( - { - name: 'test name', - version: 'test version', - schemaUrl: 'test schema url', - }, - loggerConfig, - new LoggerProvider() - ); - return { logger }; +const setup = () => { + const loggerProvider = new LoggerProvider(); + const logProcessor = new NoopLogRecordProcessor(); + loggerProvider.addLogRecordProcessor(logProcessor); + const logger = loggerProvider.getLogger('test name', 'test version', { + schemaUrl: 'test schema url', + }) as Logger; + return { logger, logProcessor }; }; describe('Logger', () => { @@ -44,8 +42,8 @@ describe('Logger', () => { describe('emit', () => { it('should emit a logRecord instance', () => { - const { logger } = setup(); - const callSpy = sinon.spy(logger.getActiveLogRecordProcessor(), 'onEmit'); + const { logger, logProcessor } = setup(); + const callSpy = sinon.spy(logProcessor, 'onEmit'); logger.emit({ body: 'test log body', }); @@ -54,7 +52,7 @@ describe('Logger', () => { it('should make log record instance readonly after emit it', () => { const { logger } = setup(); - const makeOnlySpy = sinon.spy(LogRecord.prototype, 'makeReadonly'); + const makeOnlySpy = sinon.spy(LogRecord.prototype, '_makeReadonly'); logger.emit({ body: 'test log body', }); @@ -62,8 +60,8 @@ describe('Logger', () => { }); it('should emit with current Context', () => { - const { logger } = setup({}); - const callSpy = sinon.spy(logger.getActiveLogRecordProcessor(), 'onEmit'); + const { logger, logProcessor } = setup(); + const callSpy = sinon.spy(logProcessor, 'onEmit'); logger.emit({ body: 'test log body', }); @@ -71,7 +69,7 @@ describe('Logger', () => { }); it('should emit with Context specified in LogRecord', () => { - const { logger } = setup({}); + const { logger, logProcessor } = setup(); const spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', @@ -82,7 +80,7 @@ describe('Logger', () => { context: activeContext, }; - const callSpy = sinon.spy(logger.getActiveLogRecordProcessor(), 'onEmit'); + const callSpy = sinon.spy(logProcessor, 'onEmit'); logger.emit(logRecordData); assert.ok(callSpy.calledWith(sinon.match.any, activeContext)); }); diff --git a/experimental/packages/sdk-logs/test/common/LoggerProvider.test.ts b/experimental/packages/sdk-logs/test/common/LoggerProvider.test.ts index d6032515a7..e4d80265c6 100644 --- a/experimental/packages/sdk-logs/test/common/LoggerProvider.test.ts +++ b/experimental/packages/sdk-logs/test/common/LoggerProvider.test.ts @@ -19,9 +19,11 @@ import { Resource } from '@opentelemetry/resources'; import * as assert from 'assert'; import * as sinon from 'sinon'; -import { Logger, LoggerProvider, NoopLogRecordProcessor } from '../../src'; +import { LoggerProvider, NoopLogRecordProcessor } from '../../src'; import { loadDefaultConfig } from '../../src/config'; import { DEFAULT_LOGGER_NAME } from './../../src/LoggerProvider'; +import { MultiLogRecordProcessor } from '../../src/MultiLogRecordProcessor'; +import { Logger } from '../../src/Logger'; describe('LoggerProvider', () => { let envSource: Record; @@ -48,45 +50,35 @@ describe('LoggerProvider', () => { assert.ok(provider instanceof LoggerProvider); }); - it('should use noop log record processor by default and no diag error', () => { - const errorStub = sinon.spy(diag, 'error'); + it('should use noop log record processor by default', () => { const provider = new LoggerProvider(); - const processors = provider.getActiveLogRecordProcessor().processors; - assert.ok(processors.length === 1); - assert.ok(processors[0] instanceof NoopLogRecordProcessor); - sinon.assert.notCalled(errorStub); + const sharedState = provider['_sharedState']; + const processor = sharedState.activeProcessor; + assert.ok(processor instanceof NoopLogRecordProcessor); }); it('should have default resource if not pass', () => { const provider = new LoggerProvider(); - const { resource } = provider; + const { resource } = provider['_sharedState']; assert.deepStrictEqual(resource, Resource.default()); }); it('should have default forceFlushTimeoutMillis if not pass', () => { const provider = new LoggerProvider(); - const activeProcessor = provider.getActiveLogRecordProcessor(); + const sharedState = provider['_sharedState']; assert.ok( - activeProcessor.forceFlushTimeoutMillis === + sharedState.forceFlushTimeoutMillis === loadDefaultConfig().forceFlushTimeoutMillis ); }); }); - describe('when user sets unavailable exporter', () => { - it('should use noop log record processor by default', () => { - const provider = new LoggerProvider(); - const processors = provider.getActiveLogRecordProcessor().processors; - assert.ok(processors.length === 1); - assert.ok(processors[0] instanceof NoopLogRecordProcessor); - }); - }); - describe('logRecordLimits', () => { describe('when not defined default values', () => { it('should have logger with default values', () => { - const logger = new LoggerProvider({}).getLogger('default') as Logger; - assert.deepStrictEqual(logger.getLogRecordLimits(), { + const loggerProvider = new LoggerProvider(); + const sharedState = loggerProvider['_sharedState']; + assert.deepStrictEqual(sharedState.logRecordLimits, { attributeValueLengthLimit: Infinity, attributeCountLimit: 128, }); @@ -95,34 +87,37 @@ describe('LoggerProvider', () => { describe('when "attributeCountLimit" is defined', () => { it('should have logger with defined value', () => { - const logger = new LoggerProvider({ + const loggerProvider = new LoggerProvider({ logRecordLimits: { attributeCountLimit: 100, }, - }).getLogger('default') as Logger; - const logRecordLimits = logger.getLogRecordLimits(); + }); + const logRecordLimits = + loggerProvider['_sharedState'].logRecordLimits; assert.strictEqual(logRecordLimits.attributeCountLimit, 100); }); }); describe('when "attributeValueLengthLimit" is defined', () => { it('should have logger with defined value', () => { - const logger = new LoggerProvider({ + const loggerProvider = new LoggerProvider({ logRecordLimits: { attributeValueLengthLimit: 10, }, - }).getLogger('default') as Logger; - const logRecordLimits = logger.getLogRecordLimits(); + }); + const logRecordLimits = + loggerProvider['_sharedState'].logRecordLimits; assert.strictEqual(logRecordLimits.attributeValueLengthLimit, 10); }); it('should have logger with negative "attributeValueLengthLimit" value', () => { - const logger = new LoggerProvider({ + const loggerProvider = new LoggerProvider({ logRecordLimits: { attributeValueLengthLimit: -10, }, - }).getLogger('default') as Logger; - const logRecordLimits = logger.getLogRecordLimits(); + }); + const logRecordLimits = + loggerProvider['_sharedState'].logRecordLimits; assert.strictEqual(logRecordLimits.attributeValueLengthLimit, -10); }); }); @@ -130,8 +125,9 @@ describe('LoggerProvider', () => { describe('when attribute value length limit is defined via env', () => { it('should have attribute value length limit as default of Infinity', () => { envSource.OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT = 'Infinity'; - const logger = new LoggerProvider().getLogger('default') as Logger; - const logRecordLimits = logger.getLogRecordLimits(); + const loggerProvider = new LoggerProvider(); + const logRecordLimits = + loggerProvider['_sharedState'].logRecordLimits; assert.strictEqual( logRecordLimits.attributeValueLengthLimit, Infinity @@ -142,8 +138,9 @@ describe('LoggerProvider', () => { describe('when attribute value length limit is not defined via env', () => { it('should use default value of Infinity', () => { - const logger = new LoggerProvider().getLogger('default') as Logger; - const logRecordLimits = logger.getLogRecordLimits(); + const loggerProvider = new LoggerProvider(); + const logRecordLimits = + loggerProvider['_sharedState'].logRecordLimits; assert.strictEqual( logRecordLimits.attributeValueLengthLimit, Infinity @@ -154,15 +151,17 @@ describe('LoggerProvider', () => { describe('when attribute count limit is defined via env', () => { it('should have attribute count limits as defined in env', () => { envSource.OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT = '35'; - const logger = new LoggerProvider().getLogger('default') as Logger; - const logRecordLimits = logger.getLogRecordLimits(); + const loggerProvider = new LoggerProvider(); + const logRecordLimits = + loggerProvider['_sharedState'].logRecordLimits; assert.strictEqual(logRecordLimits.attributeCountLimit, 35); delete envSource.OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT; }); it('should have attribute count limit as default of 128', () => { envSource.OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT = '128'; - const logger = new LoggerProvider().getLogger('default') as Logger; - const logRecordLimits = logger.getLogRecordLimits(); + const loggerProvider = new LoggerProvider(); + const logRecordLimits = + loggerProvider['_sharedState'].logRecordLimits; assert.strictEqual(logRecordLimits.attributeCountLimit, 128); delete envSource.OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT; }); @@ -170,8 +169,9 @@ describe('LoggerProvider', () => { describe('when attribute count limit is not defined via env', () => { it('should use default value of 128', () => { - const logger = new LoggerProvider().getLogger('default') as Logger; - const logRecordLimits = logger.getLogRecordLimits(); + const loggerProvider = new LoggerProvider(); + const logRecordLimits = + loggerProvider['_sharedState'].logRecordLimits; assert.strictEqual(logRecordLimits.attributeCountLimit, 128); }); }); @@ -186,55 +186,61 @@ describe('LoggerProvider', () => { it('should create a logger instance with default name if the name is invalid ', () => { const provider = new LoggerProvider(); const logger = provider.getLogger('') as Logger; - assert.ok(logger.instrumentationScope.name === DEFAULT_LOGGER_NAME); + assert.strictEqual(logger.instrumentationScope.name, DEFAULT_LOGGER_NAME); }); it("should create a logger instance if the name doesn't exist", () => { const provider = new LoggerProvider(); - assert.ok(provider.getActiveLoggers().size === 0); + const sharedState = provider['_sharedState']; + assert.strictEqual(sharedState.loggers.size, 0); provider.getLogger(testName); - assert.ok(provider.getActiveLoggers().size === 1); + assert.strictEqual(sharedState.loggers.size, 1); }); it('should create A new object if the name & version & schemaUrl are not unique', () => { const provider = new LoggerProvider(); - assert.ok(provider.getActiveLoggers().size === 0); + const sharedState = provider['_sharedState']; + assert.strictEqual(sharedState.loggers.size, 0); provider.getLogger(testName); - assert.ok(provider.getActiveLoggers().size === 1); + assert.strictEqual(sharedState.loggers.size, 1); provider.getLogger(testName, testVersion); - assert.ok(provider.getActiveLoggers().size === 2); + assert.strictEqual(sharedState.loggers.size, 2); provider.getLogger(testName, testVersion, { schemaUrl: testSchemaURL }); - assert.ok(provider.getActiveLoggers().size === 3); + assert.strictEqual(sharedState.loggers.size, 3); }); it('should not create A new object if the name & version & schemaUrl are unique', () => { const provider = new LoggerProvider(); + const sharedState = provider['_sharedState']; - assert.ok(provider.getActiveLoggers().size === 0); + assert.strictEqual(sharedState.loggers.size, 0); provider.getLogger(testName); - assert.ok(provider.getActiveLoggers().size === 1); + assert.strictEqual(sharedState.loggers.size, 1); const logger1 = provider.getLogger(testName, testVersion, { schemaUrl: testSchemaURL, }); - assert.ok(provider.getActiveLoggers().size === 2); + assert.strictEqual(sharedState.loggers.size, 2); const logger2 = provider.getLogger(testName, testVersion, { schemaUrl: testSchemaURL, }); - assert.ok(provider.getActiveLoggers().size === 2); + assert.strictEqual(sharedState.loggers.size, 2); assert.ok(logger2 instanceof Logger); - assert.ok(logger1 === logger2); + assert.strictEqual(logger1, logger2); }); }); describe('addLogRecordProcessor', () => { it('should add logRecord processor', () => { - const logRecordProcessor = new NoopLogRecordProcessor(); const provider = new LoggerProvider(); + const sharedState = provider['_sharedState']; + const logRecordProcessor = new NoopLogRecordProcessor(); provider.addLogRecordProcessor(logRecordProcessor); + assert.ok(sharedState.activeProcessor instanceof MultiLogRecordProcessor); + assert.strictEqual(sharedState.activeProcessor.processors.length, 1); assert.strictEqual( - provider.getActiveLogRecordProcessor().processors.length, - 1 + sharedState.activeProcessor.processors[0], + logRecordProcessor ); }); }); @@ -301,10 +307,9 @@ describe('LoggerProvider', () => { describe('.shutdown()', () => { it('should trigger shutdown when manually invoked', () => { const provider = new LoggerProvider(); - const shutdownStub = sinon.stub( - provider.getActiveLogRecordProcessor(), - 'shutdown' - ); + const processor = new NoopLogRecordProcessor(); + provider.addLogRecordProcessor(processor); + const shutdownStub = sinon.stub(processor, 'shutdown'); provider.shutdown(); sinon.assert.calledOnce(shutdownStub); }); @@ -321,10 +326,7 @@ describe('LoggerProvider', () => { const provider = new LoggerProvider(); const logRecordProcessor = new NoopLogRecordProcessor(); provider.addLogRecordProcessor(logRecordProcessor); - const forceFlushStub = sinon.stub( - provider.getActiveLogRecordProcessor(), - 'forceFlush' - ); + const forceFlushStub = sinon.stub(logRecordProcessor, 'forceFlush'); const warnStub = sinon.spy(diag, 'warn'); provider.shutdown(); provider.forceFlush(); @@ -336,10 +338,7 @@ describe('LoggerProvider', () => { const provider = new LoggerProvider(); const logRecordProcessor = new NoopLogRecordProcessor(); provider.addLogRecordProcessor(logRecordProcessor); - const shutdownStub = sinon.stub( - provider.getActiveLogRecordProcessor(), - 'shutdown' - ); + const shutdownStub = sinon.stub(logRecordProcessor, 'shutdown'); const warnStub = sinon.spy(diag, 'warn'); provider.shutdown(); provider.shutdown(); diff --git a/experimental/packages/sdk-logs/test/common/export/BatchLogRecordProcessor.test.ts b/experimental/packages/sdk-logs/test/common/export/BatchLogRecordProcessor.test.ts index 2d0fab7a2c..70859a314c 100644 --- a/experimental/packages/sdk-logs/test/common/export/BatchLogRecordProcessor.test.ts +++ b/experimental/packages/sdk-logs/test/common/export/BatchLogRecordProcessor.test.ts @@ -28,10 +28,11 @@ import { LogRecordLimits, LogRecord, InMemoryLogRecordExporter, - LoggerProvider, - Logger, } from '../../../src'; import { BatchLogRecordProcessorBase } from '../../../src/export/BatchLogRecordProcessorBase'; +import { reconfigureLimits } from '../../../src/config'; +import { LoggerProviderSharedState } from '../../../src/internal/LoggerProviderSharedState'; +import { Resource } from '@opentelemetry/resources'; class BatchLogRecordProcessor extends BatchLogRecordProcessorBase { onInit() {} @@ -39,18 +40,22 @@ class BatchLogRecordProcessor extends BatchLogRecordProcessorBase } const createLogRecord = (limits?: LogRecordLimits): LogRecord => { - const logger = new Logger( + const sharedState = new LoggerProviderSharedState( + Resource.default(), + Infinity, + reconfigureLimits(limits ?? {}) + ); + const logRecord = new LogRecord( + sharedState, { name: 'test name', version: 'test version', schemaUrl: 'test schema url', }, { - logRecordLimits: limits, - }, - new LoggerProvider() + body: 'body', + } ); - const logRecord = new LogRecord(logger, { body: 'body' }); return logRecord; }; diff --git a/experimental/packages/sdk-logs/test/common/export/SimpleLogRecordProcessor.test.ts b/experimental/packages/sdk-logs/test/common/export/SimpleLogRecordProcessor.test.ts index 202554dde9..27eacc9195 100644 --- a/experimental/packages/sdk-logs/test/common/export/SimpleLogRecordProcessor.test.ts +++ b/experimental/packages/sdk-logs/test/common/export/SimpleLogRecordProcessor.test.ts @@ -27,13 +27,30 @@ import { LogRecordExporter, SimpleLogRecordProcessor, LogRecord, - LoggerProvider, - Logger, } from './../../../src'; +import { LoggerProviderSharedState } from '../../../src/internal/LoggerProviderSharedState'; +import { Resource } from '@opentelemetry/resources'; +import { reconfigureLimits } from '../../../src/config'; const setup = (exporter: LogRecordExporter) => { + const sharedState = new LoggerProviderSharedState( + Resource.default(), + Infinity, + reconfigureLimits({}) + ); + const logRecord = new LogRecord( + sharedState, + { + name: 'test name', + version: 'test version', + schemaUrl: 'test schema url', + }, + { + body: 'body', + } + ); const processor = new SimpleLogRecordProcessor(exporter); - return { exporter, processor }; + return { exporter, processor, logRecord }; }; describe('SimpleLogRecordProcessor', () => { @@ -49,21 +66,9 @@ describe('SimpleLogRecordProcessor', () => { describe('onEmit', () => { it('should handle onEmit', async () => { const exporter = new InMemoryLogRecordExporter(); - const { processor } = setup(exporter); + const { processor, logRecord } = setup(exporter); assert.strictEqual(exporter.getFinishedLogRecords().length, 0); - const logger = new Logger( - { - name: 'test name', - version: 'test version', - schemaUrl: 'test schema url', - }, - {}, - new LoggerProvider() - ); - const logRecord = new LogRecord(logger, { - body: 'body', - }); processor.onEmit(logRecord); assert.strictEqual(exporter.getFinishedLogRecords().length, 1); @@ -82,20 +87,8 @@ describe('SimpleLogRecordProcessor', () => { ), shutdown: () => Promise.resolve(), }; - const { processor } = setup(exporter); + const { processor, logRecord } = setup(exporter); - const logger = new Logger( - { - name: 'test name', - version: 'test version', - schemaUrl: 'test schema url', - }, - {}, - new LoggerProvider() - ); - const logRecord = new LogRecord(logger, { - body: 'body', - }); const errorHandlerSpy = sinon.spy(); setGlobalErrorHandler(errorHandlerSpy); processor.onEmit(logRecord); From 24997089daf6d422494d112cf5531fe115eaa201 Mon Sep 17 00:00:00 2001 From: cristianmadularu <124408005+cristianmadularu@users.noreply.github.com> Date: Tue, 26 Sep 2023 08:58:07 -0400 Subject: [PATCH 126/141] fix(otlp-exporter-base): replaced usage of window with _globalThis (#4157) Co-authored-by: Marc Pichler --- experimental/CHANGELOG.md | 2 ++ .../src/platform/browser/OTLPExporterBrowserBase.ts | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 11e98847da..bc0fb011da 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -21,6 +21,8 @@ All notable changes to experimental packages in this project will be documented ### :bug: (Bug Fix) +* fix(otlp-exporter-base): replaced usage of window with _globalThis [#4157](https://github.com/open-telemetry/opentelemetry-js/pull/4157) @cristianmadularu + ### :books: (Refine Doc) ### :house: (Internal) 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 2888e317df..dbe02b222d 100644 --- a/experimental/packages/otlp-exporter-base/src/platform/browser/OTLPExporterBrowserBase.ts +++ b/experimental/packages/otlp-exporter-base/src/platform/browser/OTLPExporterBrowserBase.ts @@ -20,7 +20,7 @@ import * as otlpTypes from '../../types'; import { parseHeaders } from '../../util'; import { sendWithBeacon, sendWithXhr } from './util'; import { diag } from '@opentelemetry/api'; -import { getEnv, baggageUtils } from '@opentelemetry/core'; +import { getEnv, baggageUtils, _globalThis } from '@opentelemetry/core'; /** * Collector Metric Exporter abstract base class @@ -53,11 +53,11 @@ export abstract class OTLPExporterBrowserBase< } onInit(): void { - window.addEventListener('unload', this.shutdown); + _globalThis.addEventListener('unload', this.shutdown); } onShutdown(): void { - window.removeEventListener('unload', this.shutdown); + _globalThis.removeEventListener('unload', this.shutdown); } send( From 6bf1b78653d27ca3db63615591398d12aa8b51b6 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 28 Sep 2023 09:07:34 +0200 Subject: [PATCH 127/141] chore(deps): update all patch versions (#4161) --- api/package.json | 6 +++--- 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 | 6 +++--- .../opentelemetry-instrumentation-http/package.json | 12 ++++++------ .../package.json | 4 ++-- .../opentelemetry-instrumentation/package.json | 6 +++--- .../packages/opentelemetry-sdk-node/package.json | 6 +++--- .../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 ++-- .../propagation-validation-server/package.json | 2 +- .../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 +- .../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 | 6 +++--- packages/opentelemetry-sdk-trace-web/package.json | 6 +++--- .../opentelemetry-semantic-conventions/package.json | 4 ++-- packages/opentelemetry-shim-opentracing/package.json | 2 +- packages/sdk-metrics/package.json | 4 ++-- 42 files changed, 87 insertions(+), 87 deletions(-) diff --git a/api/package.json b/api/package.json index 2b677d2451..8ce9138b9c 100644 --- a/api/package.json +++ b/api/package.json @@ -61,10 +61,10 @@ "access": "public" }, "devDependencies": { - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", - "@types/webpack": "4.41.33", + "@types/sinon": "10.0.17", + "@types/webpack": "4.41.34", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index c93878d909..f430f3d31b 100644 --- a/experimental/packages/api-events/package.json +++ b/experimental/packages/api-events/package.json @@ -64,7 +64,7 @@ "@opentelemetry/api": "^1.0.0" }, "devDependencies": { - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/api-logs/package.json b/experimental/packages/api-logs/package.json index 18806178ce..4dc86c99f2 100644 --- a/experimental/packages/api-logs/package.json +++ b/experimental/packages/api-logs/package.json @@ -64,7 +64,7 @@ "@opentelemetry/api": "^1.0.0" }, "devDependencies": { - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index 82146ce439..eb79af2875 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -54,9 +54,9 @@ "@opentelemetry/api-logs": "0.43.0", "@opentelemetry/otlp-exporter-base": "0.43.0", "@opentelemetry/resources": "1.17.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index 05b217da2d..e662e7c4b2 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -74,9 +74,9 @@ "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@opentelemetry/resources": "1.17.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 4aa74b7eb2..5c673851f0 100644 --- a/experimental/packages/exporter-logs-otlp-proto/package.json +++ b/experimental/packages/exporter-logs-otlp-proto/package.json @@ -65,9 +65,9 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cpx": "1.5.0", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 80c2ea3a0c..4fb4e0ae15 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -51,9 +51,9 @@ "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.6.0", "@opentelemetry/otlp-exporter-base": "0.43.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index cfc2522a53..2a88326e10 100644 --- a/experimental/packages/exporter-trace-otlp-http/package.json +++ b/experimental/packages/exporter-trace-otlp-http/package.json @@ -65,9 +65,9 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index 935b79963f..2dc9e6d6b6 100644 --- a/experimental/packages/exporter-trace-otlp-proto/package.json +++ b/experimental/packages/exporter-trace-otlp-proto/package.json @@ -64,9 +64,9 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cpx": "1.5.0", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index d983979a06..32f4d8be83 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -55,9 +55,9 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 3c316d301f..1a6550dc6a 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -50,9 +50,9 @@ "@babel/core": "7.22.20", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.6.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 8db6655f59..77673dca59 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json @@ -65,9 +65,9 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 52ce8df0a2..12defa7e8c 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -57,9 +57,9 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index 5b55ececd8..f445d8bd12 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -45,9 +45,9 @@ "devDependencies": { "@opentelemetry/api": "1.6.0", "@opentelemetry/semantic-conventions": "1.17.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 948b357d5a..767b9bbe70 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/package.json +++ b/experimental/packages/opentelemetry-instrumentation-fetch/package.json @@ -59,9 +59,9 @@ "@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/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index fbf07ae716..1b3e5c47de 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -57,10 +57,10 @@ "@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/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/semver": "7.5.2", - "@types/sinon": "10.0.16", + "@types/semver": "7.5.3", + "@types/sinon": "10.0.17", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index aebe37781d..c18ac517d3 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -50,13 +50,13 @@ "@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/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/request-promise-native": "1.0.18", - "@types/semver": "7.5.2", - "@types/sinon": "10.0.16", - "@types/superagent": "4.1.18", - "axios": "1.5.0", + "@types/request-promise-native": "1.0.19", + "@types/semver": "7.5.3", + "@types/sinon": "10.0.17", + "@types/superagent": "4.1.19", + "axios": "1.5.1", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 511f4fe3e0..93bf3c9655 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json @@ -59,9 +59,9 @@ "@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/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index ca9e9df4e8..9f6c031bef 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -84,10 +84,10 @@ "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", "@opentelemetry/sdk-metrics": "1.17.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/semver": "7.5.2", - "@types/sinon": "10.0.16", + "@types/semver": "7.5.3", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 8517a07617..0f94bc4380 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -67,10 +67,10 @@ "@opentelemetry/api": "1.6.0", "@opentelemetry/context-async-hooks": "1.17.0", "@opentelemetry/exporter-jaeger": "1.17.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/semver": "7.5.2", - "@types/sinon": "10.0.16", + "@types/semver": "7.5.3", + "@types/sinon": "10.0.17", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 7981365842..9701b1bfc4 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -66,9 +66,9 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index cfa48c56e8..dbf84414ce 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -53,9 +53,9 @@ "@opentelemetry/otlp-transformer": "0.43.0", "@opentelemetry/resources": "1.17.0", "@opentelemetry/sdk-trace-base": "1.17.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index d350c263f6..5dde83bfa2 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -61,9 +61,9 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/experimental/packages/otlp-transformer/package.json b/experimental/packages/otlp-transformer/package.json index 9e138a5cd2..4efa0b84d0 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -58,7 +58,7 @@ }, "devDependencies": { "@opentelemetry/api": "1.6.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index f35a643c07..1a353f9ebd 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -75,9 +75,9 @@ "@babel/core": "7.22.20", "@opentelemetry/api": ">=1.4.0 <1.7.0", "@opentelemetry/api-logs": "0.43.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index 2e24690be8..3ec28d7aea 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -52,9 +52,9 @@ "@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/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "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 e54a18825c..2b5fcd3404 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.17.0", "@opentelemetry/core": "1.17.0", "@opentelemetry/sdk-trace-base": "1.17.0", - "axios": "1.5.0", + "axios": "1.5.1", "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 181fc92dce..ea0da0acbe 100644 --- a/packages/opentelemetry-context-async-hooks/package.json +++ b/packages/opentelemetry-context-async-hooks/package.json @@ -45,7 +45,7 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.7.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index 0a673ab480..a428e499b9 100644 --- a/packages/opentelemetry-context-zone-peer-dep/package.json +++ b/packages/opentelemetry-context-zone-peer-dep/package.json @@ -55,9 +55,9 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": ">=1.0.0 <1.7.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "@types/zone.js": "0.5.12", "babel-loader": "8.3.0", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 76adff9578..74d3e4f23d 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -51,9 +51,9 @@ }, "devDependencies": { "@babel/core": "7.22.20", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "codecov": "3.8.3", diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index bb1e010b22..6806540667 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -65,9 +65,9 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.7.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 9e94b5f268..3fba91d4f3 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -46,9 +46,9 @@ "devDependencies": { "@opentelemetry/api": "^1.0.0", "@opentelemetry/resources": "1.17.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 681d997e34..7f978b5543 100644 --- a/packages/opentelemetry-exporter-zipkin/package.json +++ b/packages/opentelemetry-exporter-zipkin/package.json @@ -62,9 +62,9 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": "^1.0.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/packages/opentelemetry-propagator-b3/package.json b/packages/opentelemetry-propagator-b3/package.json index 353c87b20f..34f044c541 100644 --- a/packages/opentelemetry-propagator-b3/package.json +++ b/packages/opentelemetry-propagator-b3/package.json @@ -58,7 +58,7 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.7.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index 8d7a70c84b..7735971bf7 100644 --- a/packages/opentelemetry-propagator-jaeger/package.json +++ b/packages/opentelemetry-propagator-jaeger/package.json @@ -55,9 +55,9 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.7.0", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 311ea9d90b..9951d8ee4a 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -63,9 +63,9 @@ "devDependencies": { "@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/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 600caa4294..97d034bfef 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -67,9 +67,9 @@ "devDependencies": { "@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/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index 0bdcc4a090..d18133ec75 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -48,10 +48,10 @@ "@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/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/semver": "7.5.2", - "@types/sinon": "10.0.16", + "@types/semver": "7.5.3", + "@types/sinon": "10.0.17", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index ebbf2a4025..47a459e0d7 100644 --- a/packages/opentelemetry-sdk-trace-web/package.json +++ b/packages/opentelemetry-sdk-trace-web/package.json @@ -60,10 +60,10 @@ "@opentelemetry/context-zone": "1.17.0", "@opentelemetry/propagator-b3": "1.17.0", "@opentelemetry/resources": "1.17.0", - "@types/jquery": "3.5.19", - "@types/mocha": "10.0.1", + "@types/jquery": "3.5.20", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index 0cc05eb2dd..0d0860cd22 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -49,9 +49,9 @@ "access": "public" }, "devDependencies": { - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/packages/opentelemetry-shim-opentracing/package.json b/packages/opentelemetry-shim-opentracing/package.json index f328e7fce4..78381872e2 100644 --- a/packages/opentelemetry-shim-opentracing/package.json +++ b/packages/opentelemetry-shim-opentracing/package.json @@ -46,7 +46,7 @@ "@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/mocha": "10.0.2", "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index 3d4f5b299e..b16f4531a9 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -57,9 +57,9 @@ "@babel/core": "7.22.20", "@opentelemetry/api": ">=1.3.0 <1.7.0", "@types/lodash.merge": "4.6.7", - "@types/mocha": "10.0.1", + "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.16", + "@types/sinon": "10.0.17", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", From 513d0679a5581281cfbac82ba8aa3b4a4d0a0406 Mon Sep 17 00:00:00 2001 From: Siim Kallas Date: Thu, 28 Sep 2023 14:44:17 +0300 Subject: [PATCH 128/141] fix(otlp-transformer): avoid precision loss when converting HrTime to unix nanoseconds (#4062) Co-authored-by: Marc Pichler --- experimental/CHANGELOG.md | 1 + .../test/logsHelper.ts | 2 +- .../exporter-logs-otlp-http/test/logHelper.ts | 14 +- .../test/logHelper.ts | 4 +- .../test/traceHelper.ts | 20 +-- .../test/node/CollectorTraceExporter.test.ts | 1 - .../test/traceHelper.ts | 30 ++-- .../test/traceHelper.ts | 20 +-- .../test/OTLPMetricExporter.test.ts | 17 +- .../test/metricsHelper.ts | 162 +++++++++-------- .../browser/CollectorMetricExporter.test.ts | 72 +++----- .../test/metricsHelper.ts | 163 ++++++------------ .../test/node/CollectorMetricExporter.test.ts | 32 +--- .../test/OTLPMetricExporter.test.ts | 18 +- .../test/metricsHelper.ts | 126 ++++++++------ .../otlp-transformer/src/common/index.ts | 29 ++++ .../otlp-transformer/src/common/types.ts | 5 + .../src/common/unsigned_long.ts | 122 +++++++++++++ .../packages/otlp-transformer/src/index.ts | 1 + .../otlp-transformer/src/logs/index.ts | 7 +- .../otlp-transformer/src/logs/types.ts | 5 +- .../otlp-transformer/src/metrics/internal.ts | 14 +- .../otlp-transformer/src/metrics/types.ts | 14 +- .../otlp-transformer/src/trace/internal.ts | 8 +- .../otlp-transformer/src/trace/types.ts | 8 +- .../otlp-transformer/test/logs.test.ts | 7 +- .../otlp-transformer/test/metrics.test.ts | 39 +++-- .../otlp-transformer/test/trace.test.ts | 9 +- 28 files changed, 530 insertions(+), 420 deletions(-) create mode 100644 experimental/packages/otlp-transformer/src/common/index.ts create mode 100644 experimental/packages/otlp-transformer/src/common/unsigned_long.ts diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index bc0fb011da..72f0289574 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -56,6 +56,7 @@ All notable changes to experimental packages in this project will be documented ### :bug: (Bug Fix) +* fix(otlp-transformer): Avoid precision loss when converting from HrTime to unix nanoseconds. [#4062](https://github.com/open-telemetry/opentelemetry-js/pull/4062) * fix(exporter-logs-otlp-http): add @opentelemetry/api-logs as dependency ## 0.41.2 diff --git a/experimental/packages/exporter-logs-otlp-grpc/test/logsHelper.ts b/experimental/packages/exporter-logs-otlp-grpc/test/logsHelper.ts index 1dfd82675a..633d1a7833 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/test/logsHelper.ts +++ b/experimental/packages/exporter-logs-otlp-grpc/test/logsHelper.ts @@ -88,7 +88,7 @@ export function ensureExportedLogRecordIsCorrect(logRecord: ILogRecord) { ensureExportedAttributesAreCorrect(logRecord.attributes); assert.strictEqual( logRecord.timeUnixNano, - '1680253513123241728', + '1680253513123241635', 'timeUnixNano is wrong' ); assert.strictEqual( diff --git a/experimental/packages/exporter-logs-otlp-http/test/logHelper.ts b/experimental/packages/exporter-logs-otlp-http/test/logHelper.ts index 1d9461f873..b5832f7cd4 100644 --- a/experimental/packages/exporter-logs-otlp-http/test/logHelper.ts +++ b/experimental/packages/exporter-logs-otlp-http/test/logHelper.ts @@ -20,6 +20,7 @@ import { Resource } from '@opentelemetry/resources'; import * as assert from 'assert'; import { VERSION } from '@opentelemetry/core'; import { + hrTimeToFixed64Nanos, IAnyValue, IExportLogsServiceRequest, IKeyValue, @@ -76,17 +77,22 @@ export function ensureExportedBodyIsCorrect(body?: IAnyValue) { ); } +function hrTimeToFixed64(hrTime: HrTime) { + const { low, high } = hrTimeToFixed64Nanos(hrTime); + return { low, high }; +} + export function ensureExportedLogRecordIsCorrect(logRecord: ILogRecord) { ensureExportedBodyIsCorrect(logRecord.body); ensureExportedAttributesAreCorrect(logRecord.attributes); - assert.strictEqual( + assert.deepStrictEqual( logRecord.timeUnixNano, - 1680253513123241700, + hrTimeToFixed64(mockedReadableLogRecord.hrTime), 'timeUnixNano is wrong' ); - assert.strictEqual( + assert.deepStrictEqual( logRecord.observedTimeUnixNano, - 1680253513123241700, + hrTimeToFixed64(mockedReadableLogRecord.hrTimeObserved), 'observedTimeUnixNano is wrong' ); assert.strictEqual( diff --git a/experimental/packages/exporter-logs-otlp-proto/test/logHelper.ts b/experimental/packages/exporter-logs-otlp-proto/test/logHelper.ts index 54a752af1e..ae72deae33 100644 --- a/experimental/packages/exporter-logs-otlp-proto/test/logHelper.ts +++ b/experimental/packages/exporter-logs-otlp-proto/test/logHelper.ts @@ -82,12 +82,12 @@ export function ensureExportedLogRecordIsCorrect(logRecord: ILogRecord) { ensureExportedAttributesAreCorrect(logRecord.attributes); assert.strictEqual( logRecord.timeUnixNano, - '1680253513123241728', + '1680253513123241635', 'timeUnixNano is wrong' ); assert.strictEqual( logRecord.observedTimeUnixNano, - '1680253513123241728', + '1680253513123241635', 'observedTimeUnixNano is wrong' ); assert.strictEqual( diff --git a/experimental/packages/exporter-trace-otlp-grpc/test/traceHelper.ts b/experimental/packages/exporter-trace-otlp-grpc/test/traceHelper.ts index 6ce80bf2c2..62157741a8 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/test/traceHelper.ts +++ b/experimental/packages/exporter-trace-otlp-grpc/test/traceHelper.ts @@ -114,49 +114,49 @@ export function ensureExportedEventsAreCorrect(events: IEvent[]) { [ { attributes: [], - timeUnixNano: '1574120165429803008', + timeUnixNano: '1574120165429803070', name: 'fetchStart', droppedAttributesCount: 0, }, { attributes: [], - timeUnixNano: '1574120165429803008', + timeUnixNano: '1574120165429803070', name: 'domainLookupStart', droppedAttributesCount: 0, }, { attributes: [], - timeUnixNano: '1574120165429803008', + timeUnixNano: '1574120165429803070', name: 'domainLookupEnd', droppedAttributesCount: 0, }, { attributes: [], - timeUnixNano: '1574120165429803008', + timeUnixNano: '1574120165429803070', name: 'connectStart', droppedAttributesCount: 0, }, { attributes: [], - timeUnixNano: '1574120165429803008', + timeUnixNano: '1574120165429803070', name: 'connectEnd', droppedAttributesCount: 0, }, { attributes: [], - timeUnixNano: '1574120165435513088', + timeUnixNano: '1574120165435513070', name: 'requestStart', droppedAttributesCount: 0, }, { attributes: [], - timeUnixNano: '1574120165436923136', + timeUnixNano: '1574120165436923070', name: 'responseStart', droppedAttributesCount: 0, }, { attributes: [], - timeUnixNano: '1574120165438688000', + timeUnixNano: '1574120165438688070', name: 'responseEnd', droppedAttributesCount: 0, }, @@ -235,12 +235,12 @@ export function ensureExportedSpanIsCorrect(span: ISpan) { assert.strictEqual(span.kind, 'SPAN_KIND_INTERNAL', 'kind is wrong'); assert.strictEqual( span.startTimeUnixNano, - '1574120165429803008', + '1574120165429803070', 'startTimeUnixNano is wrong' ); assert.strictEqual( span.endTimeUnixNano, - '1574120165438688000', + '1574120165438688070', 'endTimeUnixNano is wrong' ); assert.strictEqual( diff --git a/experimental/packages/exporter-trace-otlp-http/test/node/CollectorTraceExporter.test.ts b/experimental/packages/exporter-trace-otlp-http/test/node/CollectorTraceExporter.test.ts index 9238260d30..3de60027dc 100644 --- a/experimental/packages/exporter-trace-otlp-http/test/node/CollectorTraceExporter.test.ts +++ b/experimental/packages/exporter-trace-otlp-http/test/node/CollectorTraceExporter.test.ts @@ -316,7 +316,6 @@ describe('OTLPTraceExporter - node with json over http', () => { fakeRequest.on('end', () => { const responseBody = buff.toString(); - const json = JSON.parse(responseBody) as IExportTraceServiceRequest; const span1 = json.resourceSpans?.[0].scopeSpans?.[0].spans?.[0]; assert.ok(typeof span1 !== 'undefined', "span doesn't exist"); diff --git a/experimental/packages/exporter-trace-otlp-http/test/traceHelper.ts b/experimental/packages/exporter-trace-otlp-http/test/traceHelper.ts index 06e256d253..6726b49017 100644 --- a/experimental/packages/exporter-trace-otlp-http/test/traceHelper.ts +++ b/experimental/packages/exporter-trace-otlp-http/test/traceHelper.ts @@ -31,6 +31,7 @@ import { ILink, IResource, ISpan, + UnsignedLong, } from '@opentelemetry/otlp-transformer'; if (typeof Buffer === 'undefined') { @@ -243,54 +244,59 @@ export const multiInstrumentationLibraryTrace: ReadableSpan[] = [ }, ]; +function fixed64FromString(str: string) { + const { low, high } = UnsignedLong.fromString(str); + return { low, high }; +} + export function ensureEventsAreCorrect(events: IEvent[]) { assert.deepStrictEqual( events, [ { - timeUnixNano: 1574120165429803000, + timeUnixNano: fixed64FromString('1574120165429803070'), name: 'fetchStart', attributes: [], droppedAttributesCount: 0, }, { - timeUnixNano: 1574120165429803000, + timeUnixNano: fixed64FromString('1574120165429803070'), name: 'domainLookupStart', attributes: [], droppedAttributesCount: 0, }, { - timeUnixNano: 1574120165429803000, + timeUnixNano: fixed64FromString('1574120165429803070'), name: 'domainLookupEnd', attributes: [], droppedAttributesCount: 0, }, { - timeUnixNano: 1574120165429803000, + timeUnixNano: fixed64FromString('1574120165429803070'), name: 'connectStart', attributes: [], droppedAttributesCount: 0, }, { - timeUnixNano: 1574120165429803000, + timeUnixNano: fixed64FromString('1574120165429803070'), name: 'connectEnd', attributes: [], droppedAttributesCount: 0, }, { - timeUnixNano: 1574120165435513000, + timeUnixNano: fixed64FromString('1574120165435513070'), name: 'requestStart', attributes: [], droppedAttributesCount: 0, }, { - timeUnixNano: 1574120165436923100, + timeUnixNano: fixed64FromString('1574120165436923070'), name: 'responseStart', attributes: [], droppedAttributesCount: 0, }, { - timeUnixNano: 1574120165438688000, + timeUnixNano: fixed64FromString('1574120165438688070'), name: 'responseEnd', attributes: [], droppedAttributesCount: 0, @@ -364,14 +370,14 @@ export function ensureSpanIsCorrect(span: ISpan, useHex = true) { ); assert.strictEqual(span.name, 'documentFetch', 'name is wrong'); assert.strictEqual(span.kind, ESpanKind.SPAN_KIND_INTERNAL, 'kind is wrong'); - assert.strictEqual( + assert.deepStrictEqual( span.startTimeUnixNano, - 1574120165429803008, + fixed64FromString('1574120165429803070'), 'startTimeUnixNano is wrong' ); - assert.strictEqual( + assert.deepStrictEqual( span.endTimeUnixNano, - 1574120165438688000, + fixed64FromString('1574120165438688070'), 'endTimeUnixNano is wrong' ); assert.strictEqual( diff --git a/experimental/packages/exporter-trace-otlp-proto/test/traceHelper.ts b/experimental/packages/exporter-trace-otlp-proto/test/traceHelper.ts index ff6a9c7b85..3a21d9b79d 100644 --- a/experimental/packages/exporter-trace-otlp-proto/test/traceHelper.ts +++ b/experimental/packages/exporter-trace-otlp-proto/test/traceHelper.ts @@ -109,42 +109,42 @@ export function ensureProtoEventsAreCorrect(events: IEvent[]) { events, [ { - timeUnixNano: '1574120165429803008', + timeUnixNano: '1574120165429803070', name: 'fetchStart', droppedAttributesCount: 0, }, { - timeUnixNano: '1574120165429803008', + timeUnixNano: '1574120165429803070', name: 'domainLookupStart', droppedAttributesCount: 0, }, { - timeUnixNano: '1574120165429803008', + timeUnixNano: '1574120165429803070', name: 'domainLookupEnd', droppedAttributesCount: 0, }, { - timeUnixNano: '1574120165429803008', + timeUnixNano: '1574120165429803070', name: 'connectStart', droppedAttributesCount: 0, }, { - timeUnixNano: '1574120165429803008', + timeUnixNano: '1574120165429803070', name: 'connectEnd', droppedAttributesCount: 0, }, { - timeUnixNano: '1574120165435513088', + timeUnixNano: '1574120165435513070', name: 'requestStart', droppedAttributesCount: 0, }, { - timeUnixNano: '1574120165436923136', + timeUnixNano: '1574120165436923070', name: 'responseStart', droppedAttributesCount: 0, }, { - timeUnixNano: '1574120165438688000', + timeUnixNano: '1574120165438688070', name: 'responseEnd', droppedAttributesCount: 0, }, @@ -219,12 +219,12 @@ export function ensureProtoSpanIsCorrect(span: ISpan) { assert.strictEqual(span.kind, 'SPAN_KIND_INTERNAL', 'kind is wrong'); assert.strictEqual( span.startTimeUnixNano, - '1574120165429803008', + '1574120165429803070', 'startTimeUnixNano is wrong' ); assert.strictEqual( span.endTimeUnixNano, - '1574120165438688000', + '1574120165438688070', 'endTimeUnixNano is wrong' ); assert.strictEqual( diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts index a85d2f342e..1df8e0cc12 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts @@ -253,18 +253,23 @@ const testOTLPMetricExporter = (params: TestParams) => { exportedData[0].scopeMetrics[0].metrics[histogramIndex]; ensureExportedCounterIsCorrect( counter, - counter.sum?.dataPoints[0].timeUnixNano, - counter.sum?.dataPoints[0].startTimeUnixNano + metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0].endTime, + metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0] + .startTime ); ensureExportedObservableGaugeIsCorrect( observableGauge, - observableGauge.gauge?.dataPoints[0].timeUnixNano, - observableGauge.gauge?.dataPoints[0].startTimeUnixNano + metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] + .endTime, + metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] + .startTime ); ensureExportedHistogramIsCorrect( histogram, - histogram.histogram?.dataPoints[0].timeUnixNano, - histogram.histogram?.dataPoints[0].startTimeUnixNano, + metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] + .endTime, + metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] + .startTime, [0, 100], ['0', '2', '0'] ); diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/metricsHelper.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/metricsHelper.ts index 4713e7aa3f..e6332ff36f 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/metricsHelper.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/metricsHelper.ts @@ -17,6 +17,7 @@ import { Counter, Histogram, + HrTime, ObservableGauge, ObservableResult, ValueType, @@ -31,7 +32,13 @@ import { MetricReader, View, } from '@opentelemetry/sdk-metrics'; -import { IKeyValue, IMetric, IResource } from '@opentelemetry/otlp-transformer'; +import { + hrTimeToFixed64Nanos, + IKeyValue, + IMetric, + IResource, + UnsignedLong, +} from '@opentelemetry/otlp-transformer'; class TestMetricReader extends MetricReader { protected onForceFlush(): Promise { @@ -125,92 +132,99 @@ export function ensureExportedAttributesAreCorrect(attributes: IKeyValue[]) { export function ensureExportedCounterIsCorrect( metric: IMetric, - time?: number, - startTime?: number + time: HrTime, + startTime: HrTime ) { - assert.deepStrictEqual(metric, { - name: 'int-counter', - description: 'sample counter description', - unit: '', - data: 'sum', - sum: { - dataPoints: [ - { - attributes: [], - exemplars: [], - value: 'asInt', - asInt: '1', - flags: 0, - startTimeUnixNano: String(startTime), - timeUnixNano: String(time), - }, - ], - isMonotonic: true, - aggregationTemporality: 'AGGREGATION_TEMPORALITY_CUMULATIVE', - }, - }); + assert.strictEqual(metric.name, 'int-counter'); + assert.strictEqual(metric.description, 'sample counter description'); + assert.strictEqual(metric.unit, ''); + assert.strictEqual(metric.sum?.dataPoints.length, 1); + assert.strictEqual( + metric.sum?.aggregationTemporality, + 'AGGREGATION_TEMPORALITY_CUMULATIVE' + ); + assert.strictEqual(metric.sum?.isMonotonic, true); + + const [dp] = metric.sum.dataPoints; + + assert.deepStrictEqual(dp.attributes, []); + assert.deepStrictEqual(dp.exemplars, []); + assert.strictEqual(dp.asInt, '1'); + assert.strictEqual(dp.flags, 0); + + assert.deepStrictEqual( + UnsignedLong.fromString(dp.startTimeUnixNano as string), + hrTimeToFixed64Nanos(startTime) + ); + assert.deepStrictEqual( + UnsignedLong.fromString(dp.timeUnixNano as string), + hrTimeToFixed64Nanos(time) + ); } export function ensureExportedObservableGaugeIsCorrect( metric: IMetric, - time?: number, - startTime?: number + time: HrTime, + startTime: HrTime ) { - assert.deepStrictEqual(metric, { - name: 'double-observable-gauge', - description: 'sample observable gauge description', - unit: '', - data: 'gauge', - gauge: { - dataPoints: [ - { - attributes: [], - exemplars: [], - value: 'asDouble', - asDouble: 6, - flags: 0, - startTimeUnixNano: String(startTime), - timeUnixNano: String(time), - }, - ], - }, - }); + assert.strictEqual(metric.name, 'double-observable-gauge'); + assert.strictEqual(metric.description, 'sample observable gauge description'); + assert.strictEqual(metric.unit, ''); + assert.strictEqual(metric.gauge?.dataPoints.length, 1); + + const [dp] = metric.gauge.dataPoints; + + assert.deepStrictEqual(dp.attributes, []); + assert.deepStrictEqual(dp.exemplars, []); + assert.strictEqual(dp.asDouble, 6); + assert.strictEqual(dp.flags, 0); + + assert.deepStrictEqual( + UnsignedLong.fromString(dp.startTimeUnixNano as string), + hrTimeToFixed64Nanos(startTime) + ); + assert.deepStrictEqual( + UnsignedLong.fromString(dp.timeUnixNano as string), + hrTimeToFixed64Nanos(time) + ); } export function ensureExportedHistogramIsCorrect( metric: IMetric, - time?: number, - startTime?: number, + time: HrTime, + startTime: HrTime, explicitBounds: number[] = [Infinity], bucketCounts: string[] = ['2', '0'] ) { - assert.deepStrictEqual(metric, { - name: 'int-histogram', - description: 'sample histogram description', - unit: '', - data: 'histogram', - histogram: { - dataPoints: [ - { - attributes: [], - exemplars: [], - flags: 0, - _sum: 'sum', - _min: 'min', - _max: 'max', - sum: 21, - count: '2', - min: 7, - max: 14, - startTimeUnixNano: String(startTime), - timeUnixNano: String(time), - bucketCounts, - explicitBounds, - }, - ], - aggregationTemporality: 'AGGREGATION_TEMPORALITY_CUMULATIVE', - }, - }); + assert.strictEqual(metric.name, 'int-histogram'); + assert.strictEqual(metric.description, 'sample histogram description'); + assert.strictEqual(metric.unit, ''); + assert.strictEqual(metric.histogram?.dataPoints.length, 1); + assert.strictEqual( + metric.histogram?.aggregationTemporality, + 'AGGREGATION_TEMPORALITY_CUMULATIVE' + ); + + const [dp] = metric.histogram.dataPoints; + + assert.deepStrictEqual(dp.attributes, []); + assert.deepStrictEqual(dp.exemplars, []); + assert.strictEqual(dp.flags, 0); + assert.strictEqual(dp.sum, 21); + assert.strictEqual(dp.count, '2'); + assert.strictEqual(dp.min, 7); + assert.strictEqual(dp.max, 14); + + assert.deepStrictEqual( + UnsignedLong.fromString(dp.startTimeUnixNano as string), + hrTimeToFixed64Nanos(startTime) + ); + assert.deepStrictEqual( + UnsignedLong.fromString(dp.timeUnixNano as string), + hrTimeToFixed64Nanos(time) + ); + assert.deepStrictEqual(dp.bucketCounts, bucketCounts); + assert.deepStrictEqual(dp.explicitBounds, explicitBounds); } export function ensureResourceIsCorrect(resource: IResource) { diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/browser/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/browser/CollectorMetricExporter.test.ts index 053376b032..cc112a9b55 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/browser/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/browser/CollectorMetricExporter.test.ts @@ -21,7 +21,7 @@ import { Counter, Histogram, } from '@opentelemetry/api'; -import { ExportResultCode, hrTimeToNanoseconds } from '@opentelemetry/core'; +import { ExportResultCode } from '@opentelemetry/core'; import { ResourceMetrics } from '@opentelemetry/sdk-metrics'; import * as assert from 'assert'; import * as sinon from 'sinon'; @@ -138,14 +138,9 @@ describe('OTLPMetricExporter - web', () => { ensureCounterIsCorrect( metric1, - hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0] - .endTime - ), - hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0] - .startTime - ) + metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0].endTime, + metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0] + .startTime ); assert.ok( @@ -154,14 +149,10 @@ describe('OTLPMetricExporter - web', () => { ); ensureObservableGaugeIsCorrect( metric2, - hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] - .endTime - ), - hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] - .startTime - ), + metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] + .endTime, + metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] + .startTime, 6, 'double-observable-gauge2' ); @@ -172,14 +163,10 @@ describe('OTLPMetricExporter - web', () => { ); ensureHistogramIsCorrect( metric3, - hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] - .endTime - ), - hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] - .startTime - ), + metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] + .endTime, + metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] + .startTime, [0, 100], [0, 2, 0] ); @@ -273,14 +260,9 @@ describe('OTLPMetricExporter - web', () => { assert.ok(typeof metric1 !== 'undefined', "metric doesn't exist"); ensureCounterIsCorrect( metric1, - hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0] - .endTime - ), - hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0] - .startTime - ) + metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0].endTime, + metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0] + .startTime ); assert.ok( @@ -289,14 +271,10 @@ describe('OTLPMetricExporter - web', () => { ); ensureObservableGaugeIsCorrect( metric2, - hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] - .endTime - ), - hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] - .startTime - ), + metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] + .endTime, + metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] + .startTime, 6, 'double-observable-gauge2' ); @@ -307,14 +285,10 @@ describe('OTLPMetricExporter - web', () => { ); ensureHistogramIsCorrect( metric3, - hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] - .endTime - ), - hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] - .startTime - ), + metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] + .endTime, + metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] + .startTime, [0, 100], [0, 2, 0] ); diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/metricsHelper.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/metricsHelper.ts index 6796c155f0..9bbeee652f 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/metricsHelper.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/metricsHelper.ts @@ -22,6 +22,7 @@ import { ObservableCounter, ObservableGauge, ObservableUpDownCounter, + HrTime, } from '@opentelemetry/api'; import { Resource } from '@opentelemetry/resources'; import * as assert from 'assert'; @@ -33,6 +34,7 @@ import { View, } from '@opentelemetry/sdk-metrics'; import { + hrTimeToFixed64Nanos, IExportMetricsServiceRequest, IKeyValue, IMetric, @@ -205,28 +207,29 @@ export function ensureWebResourceIsCorrect(resource: IResource) { assert.strictEqual(resource.droppedAttributesCount, 0); } +function hrTimeToFixed64(hrTime: HrTime) { + const { low, high } = hrTimeToFixed64Nanos(hrTime); + return { low, high }; +} + export function ensureCounterIsCorrect( metric: IMetric, - time?: number, - startTime?: number + time: HrTime, + startTime: HrTime ) { - assert.deepStrictEqual(metric, { - name: 'int-counter', - description: 'sample counter description', - unit: '', - sum: { - dataPoints: [ - { - attributes: [], - asInt: 1, - startTimeUnixNano: startTime, - timeUnixNano: time, - }, - ], - isMonotonic: true, - aggregationTemporality: 2, - }, - }); + assert.strictEqual(metric.name, 'int-counter'); + assert.strictEqual(metric.description, 'sample counter description'); + assert.strictEqual(metric.unit, ''); + assert.strictEqual(metric.sum?.dataPoints.length, 1); + assert.strictEqual(metric.sum?.isMonotonic, true); + assert.strictEqual(metric.sum?.aggregationTemporality, 2); + + const [dp] = metric.sum.dataPoints; + + assert.deepStrictEqual(dp.attributes, []); + assert.strictEqual(dp.asInt, 1); + assert.deepStrictEqual(dp.startTimeUnixNano, hrTimeToFixed64(startTime)); + assert.deepStrictEqual(dp.timeUnixNano, hrTimeToFixed64(time)); } export function ensureDoubleCounterIsCorrect( @@ -255,108 +258,50 @@ export function ensureDoubleCounterIsCorrect( export function ensureObservableGaugeIsCorrect( metric: IMetric, - time: number, - startTime: number, + time: HrTime, + startTime: HrTime, value: number, name = 'double-observable-gauge' ) { - assert.deepStrictEqual(metric, { - name, - description: 'sample observable gauge description', - unit: '', - gauge: { - dataPoints: [ - { - attributes: [], - asDouble: value, - startTimeUnixNano: startTime, - timeUnixNano: time, - }, - ], - }, - }); -} + assert.strictEqual(metric.name, name); + assert.strictEqual(metric.description, 'sample observable gauge description'); + assert.strictEqual(metric.unit, ''); + assert.strictEqual(metric.gauge?.dataPoints.length, 1); -export function ensureObservableCounterIsCorrect( - metric: IMetric, - time: number, - startTime: number, - value: number, - name = 'double-observable-counter' -) { - assert.deepStrictEqual(metric, { - name, - description: 'sample observable counter description', - unit: '', - doubleSum: { - isMonotonic: true, - dataPoints: [ - { - attributes: [], - value, - startTimeUnixNano: startTime, - timeUnixNano: time, - }, - ], - aggregationTemporality: 2, - }, - }); -} + const [dp] = metric.gauge.dataPoints; -export function ensureObservableUpDownCounterIsCorrect( - metric: IMetric, - time: number, - startTime: number, - value: number, - name = 'double-up-down-observable-counter' -) { - assert.deepStrictEqual(metric, { - name, - description: 'sample observable up down counter description', - unit: '', - doubleSum: { - isMonotonic: false, - dataPoints: [ - { - labels: [], - value, - startTimeUnixNano: startTime, - timeUnixNano: time, - }, - ], - aggregationTemporality: 2, - }, - }); + assert.deepStrictEqual(dp.attributes, []); + assert.strictEqual(dp.asDouble, value); + + assert.deepStrictEqual(dp.startTimeUnixNano, hrTimeToFixed64(startTime)); + assert.deepStrictEqual(dp.timeUnixNano, hrTimeToFixed64(time)); } export function ensureHistogramIsCorrect( metric: IMetric, - time: number, - startTime: number, + time: HrTime, + startTime: HrTime, explicitBounds: (number | null)[] = [Infinity], bucketCounts: number[] = [2, 0] ) { - assert.deepStrictEqual(metric, { - name: 'int-histogram', - description: 'sample histogram description', - unit: '', - histogram: { - dataPoints: [ - { - attributes: [], - sum: 21, - count: 2, - min: 7, - max: 14, - startTimeUnixNano: startTime, - timeUnixNano: time, - bucketCounts, - explicitBounds, - }, - ], - aggregationTemporality: 2, - }, - }); + assert.strictEqual(metric.name, 'int-histogram'); + assert.strictEqual(metric.description, 'sample histogram description'); + assert.strictEqual(metric.unit, ''); + assert.strictEqual(metric.histogram?.dataPoints.length, 1); + assert.strictEqual(metric.histogram?.aggregationTemporality, 2); + + const [dp] = metric.histogram.dataPoints; + + assert.deepStrictEqual(dp.attributes, []); + assert.strictEqual(dp.sum, 21); + assert.strictEqual(dp.count, 2); + assert.strictEqual(dp.min, 7); + assert.strictEqual(dp.max, 14); + assert.deepStrictEqual(dp.bucketCounts, bucketCounts); + assert.deepStrictEqual(dp.explicitBounds, explicitBounds); + + assert.deepStrictEqual(dp.startTimeUnixNano, hrTimeToFixed64(startTime)); + assert.deepStrictEqual(dp.timeUnixNano, hrTimeToFixed64(time)); } export function ensureExportMetricsServiceRequestIsSet( diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts index 0844e5a9f2..2f809e6251 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts @@ -491,13 +491,8 @@ describe('OTLPMetricExporter - node with json over http', () => { assert.ok(typeof metric1 !== 'undefined', "counter doesn't exist"); ensureCounterIsCorrect( metric1, - core.hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0].endTime - ), - core.hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0] - .startTime - ) + metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0].endTime, + metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0].startTime ); assert.ok( typeof metric2 !== 'undefined', @@ -505,28 +500,19 @@ describe('OTLPMetricExporter - node with json over http', () => { ); ensureObservableGaugeIsCorrect( metric2, - core.hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] - .endTime - ), - core.hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] - .startTime - ), + metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] + .endTime, + metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] + .startTime, 6, 'double-observable-gauge2' ); assert.ok(typeof metric3 !== 'undefined', "histogram doesn't exist"); ensureHistogramIsCorrect( metric3, - core.hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] - .endTime - ), - core.hrTimeToNanoseconds( - metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] - .startTime - ), + metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0].endTime, + metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] + .startTime, [0, 100], [0, 2, 0] ); diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts index 4d4856481d..80902daeaa 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts @@ -45,7 +45,6 @@ import { } from '@opentelemetry/exporter-metrics-otlp-http'; import { Stream, PassThrough } from 'stream'; import { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base'; -import { IExportMetricsServiceRequest } from '@opentelemetry/otlp-transformer'; import { VERSION } from '../src/version'; let fakeRequest: PassThrough; @@ -260,7 +259,7 @@ describe('OTLPMetricExporter - node with proto over http', () => { ServiceClientType.METRICS ); const data = ExportTraceServiceRequestProto.decode(buff); - const json = data?.toJSON() as IExportMetricsServiceRequest; + const json = data?.toJSON() as any; // The order of the metrics is not guaranteed. const counterIndex = metrics.scopeMetrics[0].metrics.findIndex( @@ -283,8 +282,8 @@ describe('OTLPMetricExporter - node with proto over http', () => { assert.ok(typeof metric1 !== 'undefined', "counter doesn't exist"); ensureExportedCounterIsCorrect( metric1, - metric1.sum?.dataPoints[0].timeUnixNano, - metric1.sum?.dataPoints[0].startTimeUnixNano + metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0].endTime, + metrics.scopeMetrics[0].metrics[counterIndex].dataPoints[0].startTime ); assert.ok( typeof metric2 !== 'undefined', @@ -292,8 +291,10 @@ describe('OTLPMetricExporter - node with proto over http', () => { ); ensureExportedObservableGaugeIsCorrect( metric2, - metric2.gauge?.dataPoints[0].timeUnixNano, - metric2.gauge?.dataPoints[0].startTimeUnixNano + metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] + .endTime, + metrics.scopeMetrics[0].metrics[observableIndex].dataPoints[0] + .startTime ); assert.ok( typeof metric3 !== 'undefined', @@ -301,8 +302,9 @@ describe('OTLPMetricExporter - node with proto over http', () => { ); ensureExportedHistogramIsCorrect( metric3, - metric3.histogram?.dataPoints[0].timeUnixNano, - metric3.histogram?.dataPoints[0].startTimeUnixNano, + metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0].endTime, + metrics.scopeMetrics[0].metrics[histogramIndex].dataPoints[0] + .startTime, [0, 100], ['0', '2', '0'] ); 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 27b816fe10..6a47a9a8f6 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/metricsHelper.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/metricsHelper.ts @@ -20,6 +20,7 @@ import { Histogram, ValueType, ObservableGauge, + HrTime, } from '@opentelemetry/api'; import { Resource } from '@opentelemetry/resources'; import * as assert from 'assert'; @@ -30,9 +31,11 @@ import { View, } from '@opentelemetry/sdk-metrics'; import { + hrTimeToFixed64Nanos, IExportMetricsServiceRequest, IKeyValue, IMetric, + UnsignedLong, } from '@opentelemetry/otlp-transformer'; import { Stream } from 'stream'; @@ -129,75 +132,86 @@ export function ensureProtoAttributesAreCorrect(attributes: IKeyValue[]) { export function ensureExportedCounterIsCorrect( metric: IMetric, - time?: number, - startTime?: number + time: HrTime, + startTime: HrTime ) { - assert.deepStrictEqual(metric, { - name: 'int-counter', - description: 'sample counter description', - unit: '', - sum: { - dataPoints: [ - { - asInt: '1', - startTimeUnixNano: String(startTime), - timeUnixNano: String(time), - }, - ], - isMonotonic: true, - aggregationTemporality: 'AGGREGATION_TEMPORALITY_CUMULATIVE', - }, - }); + assert.strictEqual(metric.name, 'int-counter'); + assert.strictEqual(metric.description, 'sample counter description'); + assert.strictEqual(metric.unit, ''); + assert.strictEqual(metric.sum?.dataPoints.length, 1); + assert.strictEqual(metric.sum?.isMonotonic, true); + assert.strictEqual( + metric.sum?.aggregationTemporality, + 'AGGREGATION_TEMPORALITY_CUMULATIVE' + ); + + const [dp] = metric.sum.dataPoints; + assert.strictEqual(dp.asInt, '1'); + assert.deepStrictEqual( + UnsignedLong.fromString(dp.startTimeUnixNano as string), + hrTimeToFixed64Nanos(startTime) + ); + assert.deepStrictEqual( + UnsignedLong.fromString(dp.timeUnixNano as string), + hrTimeToFixed64Nanos(time) + ); } export function ensureExportedObservableGaugeIsCorrect( metric: IMetric, - time?: number, - startTime?: number + time: HrTime, + startTime: HrTime ) { - assert.deepStrictEqual(metric, { - name: 'double-observable-gauge', - description: 'sample observable gauge description', - unit: '', - gauge: { - dataPoints: [ - { - asDouble: 6, - startTimeUnixNano: String(startTime), - timeUnixNano: String(time), - }, - ], - }, - }); + assert.strictEqual(metric.name, 'double-observable-gauge'); + assert.strictEqual(metric.description, 'sample observable gauge description'); + assert.strictEqual(metric.unit, ''); + assert.strictEqual(metric.gauge?.dataPoints.length, 1); + + const [dp] = metric.gauge.dataPoints; + assert.strictEqual(dp.asDouble, 6); + assert.deepStrictEqual( + UnsignedLong.fromString(dp.startTimeUnixNano as string), + hrTimeToFixed64Nanos(startTime) + ); + assert.deepStrictEqual( + UnsignedLong.fromString(dp.timeUnixNano as string), + hrTimeToFixed64Nanos(time) + ); } export function ensureExportedHistogramIsCorrect( metric: IMetric, - time?: number, - startTime?: number, + time: HrTime, + startTime: HrTime, explicitBounds: number[] = [Infinity], bucketCounts: string[] = ['2', '0'] ) { - assert.deepStrictEqual(metric, { - name: 'int-histogram', - description: 'sample histogram description', - unit: '', - histogram: { - dataPoints: [ - { - sum: 21, - count: '2', - min: 7, - max: 14, - startTimeUnixNano: String(startTime), - timeUnixNano: String(time), - bucketCounts, - explicitBounds, - }, - ], - aggregationTemporality: 'AGGREGATION_TEMPORALITY_CUMULATIVE', - }, - }); + assert.strictEqual(metric.name, 'int-histogram'); + assert.strictEqual(metric.description, 'sample histogram description'); + assert.strictEqual(metric.unit, ''); + + assert.strictEqual(metric.histogram?.dataPoints.length, 1); + assert.strictEqual( + metric.histogram.aggregationTemporality, + 'AGGREGATION_TEMPORALITY_CUMULATIVE' + ); + + const [dp] = metric.histogram.dataPoints; + + assert.strictEqual(dp.sum, 21); + assert.strictEqual(dp.count, '2'); + assert.strictEqual(dp.min, 7); + assert.strictEqual(dp.max, 14); + assert.deepStrictEqual(dp.explicitBounds, explicitBounds); + assert.deepStrictEqual(dp.bucketCounts, bucketCounts); + assert.deepStrictEqual( + UnsignedLong.fromString(dp.startTimeUnixNano as string), + hrTimeToFixed64Nanos(startTime) + ); + assert.deepStrictEqual( + UnsignedLong.fromString(dp.timeUnixNano as string), + hrTimeToFixed64Nanos(time) + ); } export function ensureExportMetricsServiceRequestIsSet( diff --git a/experimental/packages/otlp-transformer/src/common/index.ts b/experimental/packages/otlp-transformer/src/common/index.ts new file mode 100644 index 0000000000..19587be3ae --- /dev/null +++ b/experimental/packages/otlp-transformer/src/common/index.ts @@ -0,0 +1,29 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { IFixed64 } from './types'; +import { HrTime } from '@opentelemetry/api'; +import { UnsignedLong } from './unsigned_long'; + +export * from './unsigned_long'; + +const NANOSECONDS = UnsignedLong.fromU32(1_000_000_000); + +export function hrTimeToFixed64Nanos(hrTime: HrTime): IFixed64 { + return UnsignedLong.fromU32(hrTime[0]) + .multiply(NANOSECONDS) + .add(UnsignedLong.fromU32(hrTime[1])); +} diff --git a/experimental/packages/otlp-transformer/src/common/types.ts b/experimental/packages/otlp-transformer/src/common/types.ts index 159a595ba9..6236da4ce6 100644 --- a/experimental/packages/otlp-transformer/src/common/types.ts +++ b/experimental/packages/otlp-transformer/src/common/types.ts @@ -73,3 +73,8 @@ export interface IKeyValueList { /** KeyValueList values */ values: IKeyValue[]; } + +export interface IFixed64 { + low: number; + high: number; +} diff --git a/experimental/packages/otlp-transformer/src/common/unsigned_long.ts b/experimental/packages/otlp-transformer/src/common/unsigned_long.ts new file mode 100644 index 0000000000..d2802e3ba8 --- /dev/null +++ b/experimental/packages/otlp-transformer/src/common/unsigned_long.ts @@ -0,0 +1,122 @@ +/* + * Copyright 2009 The Closure Library Authors + * Copyright 2020 Daniel Wirtz / The long.js 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. + */ + +// Original version by long.js: https://github.com/dcodeIO/long.js/ + +const TWO_PWR_32 = (1 << 16) * (1 << 16); + +export class UnsignedLong { + low: number; + high: number; + + constructor(low: number, high: number) { + this.low = low; + this.high = high; + } + + static fromU32(value: number): UnsignedLong { + return new UnsignedLong(value % TWO_PWR_32 | 0, 0); + } + + multiply(value: UnsignedLong): UnsignedLong { + const a48 = this.high >>> 16; + const a32 = this.high & 0xffff; + const a16 = this.low >>> 16; + const a00 = this.low & 0xffff; + + const b48 = value.high >>> 16; + const b32 = value.high & 0xffff; + const b16 = value.low >>> 16; + const b00 = value.low & 0xffff; + + let c48 = 0; + let c32 = 0; + let c16 = 0; + let c00 = 0; + c00 += a00 * b00; + c16 += c00 >>> 16; + c00 &= 0xffff; + c16 += a16 * b00; + c32 += c16 >>> 16; + c16 &= 0xffff; + c16 += a00 * b16; + c32 += c16 >>> 16; + c16 &= 0xffff; + c32 += a32 * b00; + c48 += c32 >>> 16; + c32 &= 0xffff; + c32 += a16 * b16; + c48 += c32 >>> 16; + c32 &= 0xffff; + c32 += a00 * b32; + c48 += c32 >>> 16; + c32 &= 0xffff; + c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48; + c48 &= 0xffff; + + return new UnsignedLong((c16 << 16) | c00, (c48 << 16) | c32); + } + + add(value: UnsignedLong): UnsignedLong { + const a48 = this.high >>> 16; + const a32 = this.high & 0xffff; + const a16 = this.low >>> 16; + const a00 = this.low & 0xffff; + + const b48 = value.high >>> 16; + const b32 = value.high & 0xffff; + const b16 = value.low >>> 16; + const b00 = value.low & 0xffff; + + let c48 = 0; + let c32 = 0; + let c16 = 0; + let c00 = 0; + c00 += a00 + b00; + c16 += c00 >>> 16; + c00 &= 0xffff; + c16 += a16 + b16; + c32 += c16 >>> 16; + c16 &= 0xffff; + c32 += a32 + b32; + c48 += c32 >>> 16; + c32 &= 0xffff; + c48 += a48 + b48; + c48 &= 0xffff; + + return new UnsignedLong((c16 << 16) | c00, (c48 << 16) | c32); + } + + static fromString(str: string): UnsignedLong { + let result = UnsignedLong.fromU32(0); + + for (let i = 0; i < str.length; i += 8) { + const size = Math.min(8, str.length - i); + const value = parseInt(str.substring(i, i + size)); + if (size < 8) { + const power = UnsignedLong.fromU32(Math.pow(10, size)); + result = result.multiply(power).add(UnsignedLong.fromU32(value)); + } else { + result = result.multiply(UnsignedLong.fromU32(100_000_000)); + result = result.add(UnsignedLong.fromU32(value)); + } + } + + return result; + } +} diff --git a/experimental/packages/otlp-transformer/src/index.ts b/experimental/packages/otlp-transformer/src/index.ts index a8e388e33a..9c325644dc 100644 --- a/experimental/packages/otlp-transformer/src/index.ts +++ b/experimental/packages/otlp-transformer/src/index.ts @@ -15,6 +15,7 @@ */ export * from './common/types'; +export * from './common'; export * from './metrics/types'; export * from './resource/types'; export * from './trace/types'; diff --git a/experimental/packages/otlp-transformer/src/logs/index.ts b/experimental/packages/otlp-transformer/src/logs/index.ts index c499476498..bffb7966dd 100644 --- a/experimental/packages/otlp-transformer/src/logs/index.ts +++ b/experimental/packages/otlp-transformer/src/logs/index.ts @@ -22,8 +22,9 @@ import { IResourceLogs, } from './types'; import { IResource } from '@opentelemetry/resources'; +import { hrTimeToFixed64Nanos } from '../common'; import { toAnyValue, toAttributes, toKeyValue } from '../common/internal'; -import { hexToBase64, hrTimeToNanoseconds } from '@opentelemetry/core'; +import { hexToBase64 } from '@opentelemetry/core'; import { SeverityNumber } from '@opentelemetry/api-logs'; import { IKeyValue } from '../common/types'; import { LogAttributes } from '@opentelemetry/api-logs'; @@ -94,8 +95,8 @@ function logRecordsToResourceLogs( function toLogRecord(log: ReadableLogRecord, useHex?: boolean): ILogRecord { return { - timeUnixNano: hrTimeToNanoseconds(log.hrTime), - observedTimeUnixNano: hrTimeToNanoseconds(log.hrTimeObserved), + timeUnixNano: hrTimeToFixed64Nanos(log.hrTime), + observedTimeUnixNano: hrTimeToFixed64Nanos(log.hrTimeObserved), severityNumber: toSeverityNumber(log.severityNumber), severityText: log.severityText, body: toAnyValue(log.body), diff --git a/experimental/packages/otlp-transformer/src/logs/types.ts b/experimental/packages/otlp-transformer/src/logs/types.ts index 05709af6f5..7704c37083 100644 --- a/experimental/packages/otlp-transformer/src/logs/types.ts +++ b/experimental/packages/otlp-transformer/src/logs/types.ts @@ -16,6 +16,7 @@ import type { IAnyValue, + IFixed64, IInstrumentationScope, IKeyValue, } from '../common/types'; @@ -67,10 +68,10 @@ export interface IScopeLogs { /** Properties of a LogRecord. */ export interface ILogRecord { /** LogRecord timeUnixNano */ - timeUnixNano: number; + timeUnixNano: IFixed64; /** LogRecord observedTimeUnixNano */ - observedTimeUnixNano: number; + observedTimeUnixNano: IFixed64; /** LogRecord severityNumber */ severityNumber?: ESeverityNumber; diff --git a/experimental/packages/otlp-transformer/src/metrics/internal.ts b/experimental/packages/otlp-transformer/src/metrics/internal.ts index b73696b0ab..670741eb30 100644 --- a/experimental/packages/otlp-transformer/src/metrics/internal.ts +++ b/experimental/packages/otlp-transformer/src/metrics/internal.ts @@ -14,7 +14,6 @@ * limitations under the License. */ import { ValueType } from '@opentelemetry/api'; -import { hrTimeToNanoseconds } from '@opentelemetry/core'; import { AggregationTemporality, DataPoint, @@ -25,6 +24,7 @@ import { ResourceMetrics, ScopeMetrics, } from '@opentelemetry/sdk-metrics'; +import { hrTimeToFixed64Nanos } from '../common'; import { toAttributes } from '../common/internal'; import { EAggregationTemporality, @@ -112,8 +112,8 @@ function toSingularDataPoint( ) { const out: INumberDataPoint = { attributes: toAttributes(dataPoint.attributes), - startTimeUnixNano: hrTimeToNanoseconds(dataPoint.startTime), - timeUnixNano: hrTimeToNanoseconds(dataPoint.endTime), + startTimeUnixNano: hrTimeToFixed64Nanos(dataPoint.startTime), + timeUnixNano: hrTimeToFixed64Nanos(dataPoint.endTime), }; switch (valueType) { @@ -145,8 +145,8 @@ function toHistogramDataPoints(metricData: MetricData): IHistogramDataPoint[] { sum: histogram.sum, min: histogram.min, max: histogram.max, - startTimeUnixNano: hrTimeToNanoseconds(dataPoint.startTime), - timeUnixNano: hrTimeToNanoseconds(dataPoint.endTime), + startTimeUnixNano: hrTimeToFixed64Nanos(dataPoint.startTime), + timeUnixNano: hrTimeToFixed64Nanos(dataPoint.endTime), }; }); } @@ -172,8 +172,8 @@ function toExponentialHistogramDataPoints( }, scale: histogram.scale, zeroCount: histogram.zeroCount, - startTimeUnixNano: hrTimeToNanoseconds(dataPoint.startTime), - timeUnixNano: hrTimeToNanoseconds(dataPoint.endTime), + startTimeUnixNano: hrTimeToFixed64Nanos(dataPoint.startTime), + timeUnixNano: hrTimeToFixed64Nanos(dataPoint.endTime), }; }); } diff --git a/experimental/packages/otlp-transformer/src/metrics/types.ts b/experimental/packages/otlp-transformer/src/metrics/types.ts index 2728ab1aba..65a2348516 100644 --- a/experimental/packages/otlp-transformer/src/metrics/types.ts +++ b/experimental/packages/otlp-transformer/src/metrics/types.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { IInstrumentationScope, IKeyValue } from '../common/types'; +import { IFixed64, IInstrumentationScope, IKeyValue } from '../common/types'; import { IResource } from '../resource/types'; /** Properties of an ExportMetricsServiceRequest. */ @@ -134,10 +134,10 @@ export interface INumberDataPoint { attributes: IKeyValue[]; /** NumberDataPoint startTimeUnixNano */ - startTimeUnixNano?: number; + startTimeUnixNano?: IFixed64 | string; /** NumberDataPoint timeUnixNano */ - timeUnixNano?: number; + timeUnixNano?: IFixed64 | string; /** NumberDataPoint asDouble */ asDouble?: number | null; @@ -158,10 +158,10 @@ export interface IHistogramDataPoint { attributes?: IKeyValue[]; /** HistogramDataPoint startTimeUnixNano */ - startTimeUnixNano?: number; + startTimeUnixNano?: IFixed64 | string; /** HistogramDataPoint timeUnixNano */ - timeUnixNano?: number; + timeUnixNano?: IFixed64 | string; /** HistogramDataPoint count */ count?: number; @@ -194,10 +194,10 @@ export interface IExponentialHistogramDataPoint { attributes?: IKeyValue[]; /** ExponentialHistogramDataPoint startTimeUnixNano */ - startTimeUnixNano?: number; + startTimeUnixNano?: IFixed64 | string; /** ExponentialHistogramDataPoint timeUnixNano */ - timeUnixNano?: number; + timeUnixNano?: IFixed64 | string; /** ExponentialHistogramDataPoint count */ count?: number; diff --git a/experimental/packages/otlp-transformer/src/trace/internal.ts b/experimental/packages/otlp-transformer/src/trace/internal.ts index 6811a8182f..d9c17855ce 100644 --- a/experimental/packages/otlp-transformer/src/trace/internal.ts +++ b/experimental/packages/otlp-transformer/src/trace/internal.ts @@ -14,8 +14,8 @@ * limitations under the License. */ import type { Link } from '@opentelemetry/api'; -import { hrTimeToNanoseconds } from '@opentelemetry/core'; import type { ReadableSpan, TimedEvent } from '@opentelemetry/sdk-trace-base'; +import { hrTimeToFixed64Nanos } from '../common'; import { toAttributes } from '../common/internal'; import { EStatusCode, IEvent, ILink, ISpan } from './types'; import * as core from '@opentelemetry/core'; @@ -36,8 +36,8 @@ export function sdkSpanToOtlpSpan(span: ReadableSpan, useHex?: boolean): ISpan { name: span.name, // Span kind is offset by 1 because the API does not define a value for unset kind: span.kind == null ? 0 : span.kind + 1, - startTimeUnixNano: hrTimeToNanoseconds(span.startTime), - endTimeUnixNano: hrTimeToNanoseconds(span.endTime), + startTimeUnixNano: hrTimeToFixed64Nanos(span.startTime), + endTimeUnixNano: hrTimeToFixed64Nanos(span.endTime), attributes: toAttributes(span.attributes), droppedAttributesCount: span.droppedAttributesCount, events: span.events.map(toOtlpSpanEvent), @@ -72,7 +72,7 @@ export function toOtlpSpanEvent(timedEvent: TimedEvent): IEvent { ? toAttributes(timedEvent.attributes) : [], name: timedEvent.name, - timeUnixNano: hrTimeToNanoseconds(timedEvent.time), + timeUnixNano: hrTimeToFixed64Nanos(timedEvent.time), droppedAttributesCount: timedEvent.droppedAttributesCount || 0, }; } diff --git a/experimental/packages/otlp-transformer/src/trace/types.ts b/experimental/packages/otlp-transformer/src/trace/types.ts index a6cfb82ad7..294f45652f 100644 --- a/experimental/packages/otlp-transformer/src/trace/types.ts +++ b/experimental/packages/otlp-transformer/src/trace/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { IInstrumentationScope, IKeyValue } from '../common/types'; +import { IFixed64, IInstrumentationScope, IKeyValue } from '../common/types'; import { IResource } from '../resource/types'; /** Properties of an ExportTraceServiceRequest. */ @@ -81,10 +81,10 @@ export interface ISpan { kind: ESpanKind; /** Span startTimeUnixNano */ - startTimeUnixNano: number; + startTimeUnixNano: IFixed64; /** Span endTimeUnixNano */ - endTimeUnixNano: number; + endTimeUnixNano: IFixed64; /** Span attributes */ attributes: IKeyValue[]; @@ -166,7 +166,7 @@ export const enum EStatusCode { /** Properties of an Event. */ export interface IEvent { /** Event timeUnixNano */ - timeUnixNano: number; + timeUnixNano: IFixed64; /** Event name */ name: string; diff --git a/experimental/packages/otlp-transformer/test/logs.test.ts b/experimental/packages/otlp-transformer/test/logs.test.ts index ef0a4cf9d7..0937c7d152 100644 --- a/experimental/packages/otlp-transformer/test/logs.test.ts +++ b/experimental/packages/otlp-transformer/test/logs.test.ts @@ -21,6 +21,7 @@ import { createExportLogsServiceRequest, ESeverityNumber, IExportLogsServiceRequest, + UnsignedLong, } from '../src'; import { ReadableLogRecord } from '@opentelemetry/sdk-logs'; import { SeverityNumber } from '@opentelemetry/api-logs'; @@ -49,10 +50,8 @@ function createExpectedLogJson(useHex: boolean): IExportLogsServiceRequest { scope: { name: 'scope_name_1', version: '0.1.0' }, logRecords: [ { - // eslint-disable-next-line @typescript-eslint/no-loss-of-precision - timeUnixNano: 1680253513123241635, - // eslint-disable-next-line @typescript-eslint/no-loss-of-precision - observedTimeUnixNano: 1683526948965142784, + timeUnixNano: new UnsignedLong(-162521437, 391214506), + observedTimeUnixNano: new UnsignedLong(584929536, 391976663), severityNumber: ESeverityNumber.SEVERITY_NUMBER_ERROR, severityText: 'error', body: { stringValue: 'some_log_body' }, diff --git a/experimental/packages/otlp-transformer/test/metrics.test.ts b/experimental/packages/otlp-transformer/test/metrics.test.ts index 748ef75889..15fd7d0531 100644 --- a/experimental/packages/otlp-transformer/test/metrics.test.ts +++ b/experimental/packages/otlp-transformer/test/metrics.test.ts @@ -25,7 +25,8 @@ import { import * as assert from 'assert'; import { createExportMetricsServiceRequest } from '../src/metrics'; import { EAggregationTemporality } from '../src/metrics/types'; -import { hrTime, hrTimeToNanoseconds } from '@opentelemetry/core'; +import { hrTime } from '@opentelemetry/core'; +import { hrTimeToFixed64Nanos } from '../src/common'; const START_TIME = hrTime(); const END_TIME = hrTime(); @@ -350,8 +351,8 @@ describe('Metrics', () => { dataPoints: [ { attributes: expectedAttributes, - startTimeUnixNano: hrTimeToNanoseconds(START_TIME), - timeUnixNano: hrTimeToNanoseconds(END_TIME), + startTimeUnixNano: hrTimeToFixed64Nanos(START_TIME), + timeUnixNano: hrTimeToFixed64Nanos(END_TIME), asInt: 10, }, ], @@ -393,8 +394,8 @@ describe('Metrics', () => { dataPoints: [ { attributes: expectedAttributes, - startTimeUnixNano: hrTimeToNanoseconds(START_TIME), - timeUnixNano: hrTimeToNanoseconds(END_TIME), + startTimeUnixNano: hrTimeToFixed64Nanos(START_TIME), + timeUnixNano: hrTimeToFixed64Nanos(END_TIME), asInt: 10, }, ], @@ -437,8 +438,8 @@ describe('Metrics', () => { dataPoints: [ { attributes: expectedAttributes, - startTimeUnixNano: hrTimeToNanoseconds(START_TIME), - timeUnixNano: hrTimeToNanoseconds(END_TIME), + startTimeUnixNano: hrTimeToFixed64Nanos(START_TIME), + timeUnixNano: hrTimeToFixed64Nanos(END_TIME), asInt: 10, }, ], @@ -481,8 +482,8 @@ describe('Metrics', () => { dataPoints: [ { attributes: expectedAttributes, - startTimeUnixNano: hrTimeToNanoseconds(START_TIME), - timeUnixNano: hrTimeToNanoseconds(END_TIME), + startTimeUnixNano: hrTimeToFixed64Nanos(START_TIME), + timeUnixNano: hrTimeToFixed64Nanos(END_TIME), asInt: 10, }, ], @@ -523,8 +524,8 @@ describe('Metrics', () => { dataPoints: [ { attributes: expectedAttributes, - startTimeUnixNano: hrTimeToNanoseconds(START_TIME), - timeUnixNano: hrTimeToNanoseconds(END_TIME), + startTimeUnixNano: hrTimeToFixed64Nanos(START_TIME), + timeUnixNano: hrTimeToFixed64Nanos(END_TIME), asDouble: 10.5, }, ], @@ -581,8 +582,8 @@ describe('Metrics', () => { sum: 9, min: 1, max: 8, - startTimeUnixNano: hrTimeToNanoseconds(START_TIME), - timeUnixNano: hrTimeToNanoseconds(END_TIME), + startTimeUnixNano: hrTimeToFixed64Nanos(START_TIME), + timeUnixNano: hrTimeToFixed64Nanos(END_TIME), }, ], }, @@ -635,8 +636,8 @@ describe('Metrics', () => { sum: 9, min: undefined, max: undefined, - startTimeUnixNano: hrTimeToNanoseconds(START_TIME), - timeUnixNano: hrTimeToNanoseconds(END_TIME), + startTimeUnixNano: hrTimeToFixed64Nanos(START_TIME), + timeUnixNano: hrTimeToFixed64Nanos(END_TIME), }, ], }, @@ -701,8 +702,8 @@ describe('Metrics', () => { bucketCounts: [1, 0, 0, 0, 1, 0, 1, 0], }, negative: { offset: 0, bucketCounts: [0] }, - startTimeUnixNano: hrTimeToNanoseconds(START_TIME), - timeUnixNano: hrTimeToNanoseconds(END_TIME), + startTimeUnixNano: hrTimeToFixed64Nanos(START_TIME), + timeUnixNano: hrTimeToFixed64Nanos(END_TIME), }, ], }, @@ -763,8 +764,8 @@ describe('Metrics', () => { bucketCounts: [1, 0, 0, 0, 1, 0, 1, 0], }, negative: { offset: 0, bucketCounts: [0] }, - startTimeUnixNano: hrTimeToNanoseconds(START_TIME), - timeUnixNano: hrTimeToNanoseconds(END_TIME), + startTimeUnixNano: hrTimeToFixed64Nanos(START_TIME), + timeUnixNano: hrTimeToFixed64Nanos(END_TIME), }, ], }, diff --git a/experimental/packages/otlp-transformer/test/trace.test.ts b/experimental/packages/otlp-transformer/test/trace.test.ts index 9fb0e3cbfb..380c9065c2 100644 --- a/experimental/packages/otlp-transformer/test/trace.test.ts +++ b/experimental/packages/otlp-transformer/test/trace.test.ts @@ -22,6 +22,7 @@ import { createExportTraceServiceRequest, ESpanKind, EStatusCode, + UnsignedLong, } from '../src'; function createExpectedSpanJson(useHex: boolean) { @@ -79,10 +80,8 @@ function createExpectedSpanJson(useHex: boolean) { ], }, ], - // eslint-disable-next-line @typescript-eslint/no-loss-of-precision - startTimeUnixNano: 1640715557342725388, - // eslint-disable-next-line @typescript-eslint/no-loss-of-precision - endTimeUnixNano: 1640715558642725388, + startTimeUnixNano: new UnsignedLong(1155450124, 382008859), + endTimeUnixNano: new UnsignedLong(-1839517172, 382008859), events: [ { droppedAttributesCount: 0, @@ -95,7 +94,7 @@ function createExpectedSpanJson(useHex: boolean) { }, ], name: 'some event', - timeUnixNano: 1640715558542725400, + timeUnixNano: new UnsignedLong(-1939517172, 382008859), }, ], attributes: [ From f0ceabc57cfbf35b411b583be80d4b05484076e3 Mon Sep 17 00:00:00 2001 From: FelipeEmerim Date: Thu, 28 Sep 2023 09:15:48 -0300 Subject: [PATCH 129/141] fix(exporter-zipkin): round timestamp to nearest integer in zipkin annotations (#4167) Co-authored-by: Marc Pichler --- CHANGELOG.md | 1 + packages/opentelemetry-exporter-zipkin/src/transform.ts | 2 +- .../test/common/transform.test.ts | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad5c780983..ee112f73dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) * fix(sdk-metrics): allow instrument names to contain '/' [#4155](https://github.com/open-telemetry/opentelemetry-js/pull/4155) +* fix(exporter-zipkin): round duration to the nearest int in annotations to be compliant with zipkin protocol [#4167](https://github.com/open-telemetry/opentelemetry-js/pull/4167) @FelipeEmerim ### :books: (Refine Doc) diff --git a/packages/opentelemetry-exporter-zipkin/src/transform.ts b/packages/opentelemetry-exporter-zipkin/src/transform.ts index 54392321f8..06fbe5973a 100644 --- a/packages/opentelemetry-exporter-zipkin/src/transform.ts +++ b/packages/opentelemetry-exporter-zipkin/src/transform.ts @@ -111,7 +111,7 @@ export function _toZipkinAnnotations( events: TimedEvent[] ): zipkinTypes.Annotation[] { return events.map(event => ({ - timestamp: hrTimeToMicroseconds(event.time), + timestamp: Math.round(hrTimeToMicroseconds(event.time)), value: event.name, })); } diff --git a/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts b/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts index 810b9e32f9..4df7f73f6c 100644 --- a/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts +++ b/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts @@ -82,7 +82,7 @@ describe('transform', () => { annotations: [ { value: 'my-event', - timestamp: hrTimeToMicroseconds(span.events[0].time), + timestamp: Math.round(hrTimeToMicroseconds(span.events[0].time)), }, ], duration: Math.round( @@ -329,11 +329,11 @@ describe('transform', () => { assert.deepStrictEqual(annotations, [ { value: 'my-event1', - timestamp: hrTimeToMicroseconds(span.events[0].time), + timestamp: Math.round(hrTimeToMicroseconds(span.events[0].time)), }, { value: 'my-event2', - timestamp: hrTimeToMicroseconds(span.events[1].time), + timestamp: Math.round(hrTimeToMicroseconds(span.events[1].time)), }, ]); }); From 52f428a9f17cf37e6cef01d8a5ae2155f1902bfe Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Thu, 28 Sep 2023 14:17:06 +0200 Subject: [PATCH 130/141] fix(sdk-metrics): do not report empty scopes and metrics (#4135) --- CHANGELOG.md | 3 ++ .../sdk-metrics/src/state/MeterSharedState.ts | 22 +++++--- .../sdk-metrics/src/state/MetricCollector.ts | 32 ++++++++--- .../src/state/TemporalMetricProcessor.ts | 9 +++- packages/sdk-metrics/test/Instruments.test.ts | 16 +++--- .../sdk-metrics/test/MeterProvider.test.ts | 32 ++++++----- .../test/state/AsyncMetricStorage.test.ts | 3 +- .../test/state/MetricCollector.test.ts | 54 +++++-------------- .../test/state/SyncMetricStorage.test.ts | 3 +- .../state/TemporalMetricProcessor.test.ts | 9 +--- 10 files changed, 95 insertions(+), 88 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee112f73dd..d65dae2bdc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) * fix(sdk-metrics): allow instrument names to contain '/' [#4155](https://github.com/open-telemetry/opentelemetry-js/pull/4155) +* fix(sdk-metrics): do not report empty scopes and metrics [#4135](https://github.com/open-telemetry/opentelemetry-js/pull/4135) @pichlermarc + * Instruments that were created, but did not have measurements will not be exported anymore + * Meters (Scopes) that were created, but did not have any instruments with measurements under them will not be exported anymore. * fix(exporter-zipkin): round duration to the nearest int in annotations to be compliant with zipkin protocol [#4167](https://github.com/open-telemetry/opentelemetry-js/pull/4167) @FelipeEmerim ### :books: (Refine Doc) diff --git a/packages/sdk-metrics/src/state/MeterSharedState.ts b/packages/sdk-metrics/src/state/MeterSharedState.ts index 099a21c0d7..4189d6bb6c 100644 --- a/packages/sdk-metrics/src/state/MeterSharedState.ts +++ b/packages/sdk-metrics/src/state/MeterSharedState.ts @@ -78,7 +78,7 @@ export class MeterSharedState { collector: MetricCollectorHandle, collectionTime: HrTime, options?: MetricCollectOptions - ): Promise { + ): Promise { /** * 1. Call all observable callbacks first. * 2. Collect metric result for the collector. @@ -87,9 +87,14 @@ export class MeterSharedState { collectionTime, options?.timeoutMillis ); - const metricDataList = Array.from( - this.metricStorageRegistry.getStorages(collector) - ) + const storages = this.metricStorageRegistry.getStorages(collector); + + // prevent more allocations if there are no storages. + if (storages.length === 0) { + return null; + } + + const metricDataList = storages .map(metricStorage => { return metricStorage.collect( collector, @@ -99,10 +104,15 @@ export class MeterSharedState { }) .filter(isNotNullish); + // skip this scope if no data was collected (storage created, but no data observed) + if (metricDataList.length === 0) { + return { errors }; + } + return { scopeMetrics: { scope: this._instrumentationScope, - metrics: metricDataList.filter(isNotNullish), + metrics: metricDataList, }, errors, }; @@ -173,7 +183,7 @@ export class MeterSharedState { } interface ScopeMetricsResult { - scopeMetrics: ScopeMetrics; + scopeMetrics?: ScopeMetrics; errors: unknown[]; } diff --git a/packages/sdk-metrics/src/state/MetricCollector.ts b/packages/sdk-metrics/src/state/MetricCollector.ts index 3f17a0d5b9..f1f1dacdb1 100644 --- a/packages/sdk-metrics/src/state/MetricCollector.ts +++ b/packages/sdk-metrics/src/state/MetricCollector.ts @@ -16,12 +16,11 @@ import { millisToHrTime } from '@opentelemetry/core'; import { AggregationTemporalitySelector } from '../export/AggregationSelector'; -import { CollectionResult } from '../export/MetricData'; +import { CollectionResult, ScopeMetrics } from '../export/MetricData'; import { MetricProducer, MetricCollectOptions } from '../export/MetricProducer'; import { MetricReader } from '../export/MetricReader'; import { InstrumentType } from '../InstrumentDescriptor'; import { ForceFlushOptions, ShutdownOptions } from '../types'; -import { FlatMap } from '../utils'; import { MeterProviderSharedState } from './MeterProviderSharedState'; /** @@ -37,19 +36,36 @@ export class MetricCollector implements MetricProducer { async collect(options?: MetricCollectOptions): Promise { const collectionTime = millisToHrTime(Date.now()); + const scopeMetrics: ScopeMetrics[] = []; + const errors: unknown[] = []; + const meterCollectionPromises = Array.from( this._sharedState.meterSharedStates.values() - ).map(meterSharedState => - meterSharedState.collect(this, collectionTime, options) - ); - const result = await Promise.all(meterCollectionPromises); + ).map(async meterSharedState => { + const current = await meterSharedState.collect( + this, + collectionTime, + options + ); + + // only add scope metrics if available + if (current?.scopeMetrics != null) { + scopeMetrics.push(current.scopeMetrics); + } + + // only add errors if available + if (current?.errors != null) { + errors.push(...current.errors); + } + }); + await Promise.all(meterCollectionPromises); return { resourceMetrics: { resource: this._sharedState.resource, - scopeMetrics: result.map(it => it.scopeMetrics), + scopeMetrics: scopeMetrics, }, - errors: FlatMap(result, it => it.errors), + errors: errors, }; } diff --git a/packages/sdk-metrics/src/state/TemporalMetricProcessor.ts b/packages/sdk-metrics/src/state/TemporalMetricProcessor.ts index 2b9c5dbbaa..bb5559e70e 100644 --- a/packages/sdk-metrics/src/state/TemporalMetricProcessor.ts +++ b/packages/sdk-metrics/src/state/TemporalMetricProcessor.ts @@ -133,10 +133,17 @@ export class TemporalMetricProcessor> { aggregationTemporality, }); + const accumulationRecords = AttributesMapToAccumulationRecords(result); + + // do not convert to metric data if there is nothing to convert. + if (accumulationRecords.length === 0) { + return undefined; + } + return this._aggregator.toMetricData( instrumentDescriptor, aggregationTemporality, - AttributesMapToAccumulationRecords(result), + accumulationRecords, /* endTime */ collectionTime ); } diff --git a/packages/sdk-metrics/test/Instruments.test.ts b/packages/sdk-metrics/test/Instruments.test.ts index 80f834f30c..cfb6255039 100644 --- a/packages/sdk-metrics/test/Instruments.test.ts +++ b/packages/sdk-metrics/test/Instruments.test.ts @@ -434,10 +434,10 @@ describe('Instruments', () => { }); histogram.record(-1, { foo: 'bar' }); - await validateExport(deltaReader, { - dataPointType: DataPointType.HISTOGRAM, - dataPoints: [], - }); + const result = await deltaReader.collect(); + + // nothing observed + assert.equal(result.resourceMetrics.scopeMetrics.length, 0); }); it('should record DOUBLE values', async () => { @@ -499,10 +499,10 @@ describe('Instruments', () => { }); histogram.record(-0.5, { foo: 'bar' }); - await validateExport(deltaReader, { - dataPointType: DataPointType.HISTOGRAM, - dataPoints: [], - }); + const result = await deltaReader.collect(); + + // nothing observed + assert.equal(result.resourceMetrics.scopeMetrics.length, 0); }); }); diff --git a/packages/sdk-metrics/test/MeterProvider.test.ts b/packages/sdk-metrics/test/MeterProvider.test.ts index a9f8361b81..be075f0fa6 100644 --- a/packages/sdk-metrics/test/MeterProvider.test.ts +++ b/packages/sdk-metrics/test/MeterProvider.test.ts @@ -77,23 +77,29 @@ describe('MeterProvider', () => { const reader = new TestMetricReader(); meterProvider.addMetricReader(reader); - // Create meter and instrument. + // Create meter and instrument, needs observation on instrument, otherwise the scope will not be reported. // name+version pair 1 - meterProvider.getMeter('meter1', 'v1.0.0'); - meterProvider.getMeter('meter1', 'v1.0.0'); + meterProvider.getMeter('meter1', 'v1.0.0').createCounter('test').add(1); + meterProvider.getMeter('meter1', 'v1.0.0').createCounter('test').add(1); // name+version pair 2 - meterProvider.getMeter('meter2', 'v1.0.0'); - meterProvider.getMeter('meter2', 'v1.0.0'); + meterProvider.getMeter('meter2', 'v1.0.0').createCounter('test').add(1); + meterProvider.getMeter('meter2', 'v1.0.0').createCounter('test').add(1); // name+version pair 3 - meterProvider.getMeter('meter1', 'v1.0.1'); - meterProvider.getMeter('meter1', 'v1.0.1'); + meterProvider.getMeter('meter1', 'v1.0.1').createCounter('test').add(1); + meterProvider.getMeter('meter1', 'v1.0.1').createCounter('test').add(1); // name+version+schemaUrl pair 4 - meterProvider.getMeter('meter1', 'v1.0.1', { - schemaUrl: 'https://opentelemetry.io/schemas/1.4.0', - }); - meterProvider.getMeter('meter1', 'v1.0.1', { - schemaUrl: 'https://opentelemetry.io/schemas/1.4.0', - }); + meterProvider + .getMeter('meter1', 'v1.0.1', { + schemaUrl: 'https://opentelemetry.io/schemas/1.4.0', + }) + .createCounter('test') + .add(1); + meterProvider + .getMeter('meter1', 'v1.0.1', { + schemaUrl: 'https://opentelemetry.io/schemas/1.4.0', + }) + .createCounter('test') + .add(1); // Perform collection. const { resourceMetrics, errors } = await reader.collect(); diff --git a/packages/sdk-metrics/test/state/AsyncMetricStorage.test.ts b/packages/sdk-metrics/test/state/AsyncMetricStorage.test.ts index 9fe742ca02..03eca24236 100644 --- a/packages/sdk-metrics/test/state/AsyncMetricStorage.test.ts +++ b/packages/sdk-metrics/test/state/AsyncMetricStorage.test.ts @@ -110,8 +110,7 @@ describe('AsyncMetricStorage', () => { collectionTime ); - assertMetricData(metric, DataPointType.SUM); - assert.strictEqual(metric.dataPoints.length, 0); + assert.equal(metric, undefined); } delegate.setDelegate(observableResult => { diff --git a/packages/sdk-metrics/test/state/MetricCollector.test.ts b/packages/sdk-metrics/test/state/MetricCollector.test.ts index 3c70b35759..8466a5a95c 100644 --- a/packages/sdk-metrics/test/state/MetricCollector.test.ts +++ b/packages/sdk-metrics/test/state/MetricCollector.test.ts @@ -141,7 +141,8 @@ describe('MetricCollector', () => { assert.strictEqual(errors.length, 0); const { scopeMetrics } = resourceMetrics; const { metrics } = scopeMetrics[0]; - assert.strictEqual(metrics.length, 3); + // Should not export observableCounter3, as it was never observed + assert.strictEqual(metrics.length, 2); /** checking batch[0] */ const metricData1 = metrics[0]; @@ -160,13 +161,6 @@ describe('MetricCollector', () => { assert.strictEqual(metricData2.dataPoints.length, 2); assertDataPoint(metricData2.dataPoints[0], {}, 3); assertDataPoint(metricData2.dataPoints[1], { foo: 'bar' }, 4); - - /** checking batch[2] */ - const metricData3 = metrics[2]; - assertMetricData(metricData3, DataPointType.SUM, { - name: 'observable3', - }); - assert.strictEqual(metricData3.dataPoints.length, 0); }); it('should collect observer metrics with timeout', async () => { @@ -205,19 +199,15 @@ describe('MetricCollector', () => { assert(errors[0] instanceof TimeoutError); const { scopeMetrics } = resourceMetrics; const { metrics } = scopeMetrics[0]; - assert.strictEqual(metrics.length, 2); - /** observer1 */ - assertMetricData(metrics[0], DataPointType.SUM, { - name: 'observer1', - }); - assert.strictEqual(metrics[0].dataPoints.length, 0); + // Only observer2 is exported, observer1 never reported a measurement + assert.strictEqual(metrics.length, 1); /** observer2 */ - assertMetricData(metrics[1], DataPointType.SUM, { + assertMetricData(metrics[0], DataPointType.SUM, { name: 'observer2', }); - assert.strictEqual(metrics[1].dataPoints.length, 1); + assert.strictEqual(metrics[0].dataPoints.length, 1); } /** now the observer1 is back to normal */ @@ -272,19 +262,13 @@ describe('MetricCollector', () => { assert.strictEqual(`${errors[0]}`, 'Error: foobar'); const { scopeMetrics } = resourceMetrics; const { metrics } = scopeMetrics[0]; - assert.strictEqual(metrics.length, 2); - /** counter1 data points are collected */ + /** only counter1 data points are collected */ + assert.strictEqual(metrics.length, 1); assertMetricData(metrics[0], DataPointType.SUM, { name: 'counter1', }); assert.strictEqual(metrics[0].dataPoints.length, 1); - - /** observer1 data points are not collected */ - assertMetricData(metrics[1], DataPointType.SUM, { - name: 'observer1', - }); - assert.strictEqual(metrics[1].dataPoints.length, 0); }); it('should collect batch observer metrics with timeout', async () => { @@ -327,19 +311,13 @@ describe('MetricCollector', () => { assert(errors[0] instanceof TimeoutError); const { scopeMetrics } = resourceMetrics; const { metrics } = scopeMetrics[0]; - assert.strictEqual(metrics.length, 2); - /** observer1 */ + /** only observer2 is present; observer1's promise never settled*/ + assert.strictEqual(metrics.length, 1); assertMetricData(metrics[0], DataPointType.SUM, { - name: 'observer1', - }); - assert.strictEqual(metrics[0].dataPoints.length, 0); - - /** observer2 */ - assertMetricData(metrics[1], DataPointType.SUM, { name: 'observer2', }); - assert.strictEqual(metrics[1].dataPoints.length, 1); + assert.strictEqual(metrics[0].dataPoints.length, 1); } /** now the observer1 is back to normal */ @@ -398,19 +376,13 @@ describe('MetricCollector', () => { assert.strictEqual(`${errors[0]}`, 'Error: foobar'); const { scopeMetrics } = resourceMetrics; const { metrics } = scopeMetrics[0]; - assert.strictEqual(metrics.length, 2); - /** counter1 data points are collected */ + /** counter1 data points are collected; observer1's callback did throw, so data points are not collected */ + assert.strictEqual(metrics.length, 1); assertMetricData(metrics[0], DataPointType.SUM, { name: 'counter1', }); assert.strictEqual(metrics[0].dataPoints.length, 1); - - /** observer1 data points are not collected */ - assertMetricData(metrics[1], DataPointType.SUM, { - name: 'observer1', - }); - assert.strictEqual(metrics[1].dataPoints.length, 0); }); }); }); diff --git a/packages/sdk-metrics/test/state/SyncMetricStorage.test.ts b/packages/sdk-metrics/test/state/SyncMetricStorage.test.ts index 8e568be19e..072cc9d16d 100644 --- a/packages/sdk-metrics/test/state/SyncMetricStorage.test.ts +++ b/packages/sdk-metrics/test/state/SyncMetricStorage.test.ts @@ -88,8 +88,7 @@ describe('SyncMetricStorage', () => { [4, 4] ); - assertMetricData(metric, DataPointType.SUM); - assert.strictEqual(metric.dataPoints.length, 0); + assert.strictEqual(metric, undefined); } metricStorage.record(1, {}, api.context.active(), [5, 5]); diff --git a/packages/sdk-metrics/test/state/TemporalMetricProcessor.test.ts b/packages/sdk-metrics/test/state/TemporalMetricProcessor.test.ts index 8d0f165cd0..26a10aea57 100644 --- a/packages/sdk-metrics/test/state/TemporalMetricProcessor.test.ts +++ b/packages/sdk-metrics/test/state/TemporalMetricProcessor.test.ts @@ -107,13 +107,8 @@ describe('TemporalMetricProcessor', () => { [5, 5] ); - assertMetricData( - metric, - DataPointType.SUM, - defaultInstrumentDescriptor, - AggregationTemporality.DELTA - ); - assert.strictEqual(metric.dataPoints.length, 0); + // nothing recorded -> nothing collected + assert.equal(metric, undefined); } // selectAggregationTemporality should be called only once. From c84698d4a13be9c9417a797d15f0108aba278ccc Mon Sep 17 00:00:00 2001 From: Martin Kuba Date: Thu, 28 Sep 2023 21:45:56 -0700 Subject: [PATCH 131/141] Benchmark tests workflow (#4144) Co-authored-by: Marc Pichler --- .github/workflows/benchmark.yml | 63 +++++++++++++++++++++++++++++++++ CHANGELOG.md | 1 + 2 files changed, 64 insertions(+) create mode 100644 .github/workflows/benchmark.yml diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml new file mode 100644 index 0000000000..ea05c89e73 --- /dev/null +++ b/.github/workflows/benchmark.yml @@ -0,0 +1,63 @@ +name: Benchmark Tests + +on: + push: + branches: [ main ] + +jobs: + benchmark-tests: + strategy: + fail-fast: false + matrix: + node_version: + - "18" + runs-on: self-hosted + timeout-minutes: 10 + env: + NPM_CONFIG_UNSAFE_PERM: true + steps: + - name: Checkout + uses: actions/checkout@v3 + + - uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node_version }} + + - run: npm install -g npm@latest + + - name: restore lerna + id: cache + uses: actions/cache@v3 + with: + path: | + node_modules + package-lock.json + packages/*/node_modules + packages/*/package-lock.json + experimental/packages/*/node_modules + experimental/packages/*/package-lock.json + key: node-tests-${{ runner.os }}-${{ matrix.node_version }}-${{ hashFiles('package.json', 'packages/*/package.json', 'experimental/packages/*/package.json') }}-04292022 + + - name: Bootstrap + run: | + npm install --ignore-scripts + npx lerna bootstrap --no-ci --hoist --nohoist='zone.js' --ignore @opentelemetry/selenium-tests + + - name: Build 🔧 + run: | + npm run compile + + - name: Benchmark tests + run: | + npm run test:bench + find . -name benchmarks.txt -exec cat {} + > combined_benchmarks.txt + + - name: Store benchmark results + uses: benchmark-action/github-action-benchmark@v1 + with: + tool: 'benchmarkjs' + output-file-path: combined_benchmarks.txt + gh-pages-branch: gh-pages + github-token: ${{ secrets.GITHUB_TOKEN }} + benchmark-data-dir-path: "benchmarks" + auto-push: true diff --git a/CHANGELOG.md b/CHANGELOG.md index d65dae2bdc..f8a0051fab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ 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) +* test: added a workflow to run performance benchmark tests automatically [#4144](https://github.com/open-telemetry/opentelemetry-js/pull/4144) ## 1.17.0 From 868f75e448c7c3a0efd75d72c448269f1375a996 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Sun, 1 Oct 2023 22:00:15 +0200 Subject: [PATCH 132/141] fix(benchmark): write benchmark results to file (#4172) --- .github/workflows/benchmark.yml | 2 +- .gitignore | 3 +++ packages/opentelemetry-sdk-trace-base/package.json | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index ea05c89e73..04961b83df 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -50,7 +50,7 @@ jobs: - name: Benchmark tests run: | npm run test:bench - find . -name benchmarks.txt -exec cat {} + > combined_benchmarks.txt + find . -name .benchmark-results.txt -exec cat {} + > combined_benchmarks.txt - name: Store benchmark results uses: benchmark-action/github-action-benchmark@v1 diff --git a/.gitignore b/.gitignore index 90ef9bd3f2..59141394bb 100644 --- a/.gitignore +++ b/.gitignore @@ -89,3 +89,6 @@ package.json.lerna_backup #IDEA .idea *.iml + +# non-aggregated benchmark results +.benchmark-results.txt diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 97d034bfef..10aa4f830e 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -20,7 +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", + "test:bench": "node test/performance/benchmark/index.js | tee .benchmark-results.txt", "tdd": "npm run tdd:node", "tdd:node": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", From 5af865386ad40d85daf94c45926521ffc6df7a18 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 3 Oct 2023 15:59:56 +0200 Subject: [PATCH 133/141] chore(deps): update dependency @types/sinon to v10.0.18 (#4179) --- api/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 +- 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-exporter-prometheus/package.json | 2 +- .../packages/opentelemetry-instrumentation-fetch/package.json | 2 +- .../packages/opentelemetry-instrumentation-grpc/package.json | 2 +- .../packages/opentelemetry-instrumentation-http/package.json | 2 +- .../opentelemetry-instrumentation-xml-http-request/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 | 2 +- experimental/packages/otlp-proto-exporter-base/package.json | 2 +- experimental/packages/sdk-logs/package.json | 2 +- experimental/packages/shim-opencensus/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 | 2 +- packages/opentelemetry-exporter-zipkin/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 | 2 +- packages/opentelemetry-semantic-conventions/package.json | 2 +- packages/sdk-metrics/package.json | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/api/package.json b/api/package.json index 8ce9138b9c..e06c2f28de 100644 --- a/api/package.json +++ b/api/package.json @@ -63,7 +63,7 @@ "devDependencies": { "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack": "4.41.34", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index eb79af2875..bdbe715614 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -56,7 +56,7 @@ "@opentelemetry/resources": "1.17.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/exporter-logs-otlp-http/package.json b/experimental/packages/exporter-logs-otlp-http/package.json index e662e7c4b2..37f96f859f 100644 --- a/experimental/packages/exporter-logs-otlp-http/package.json +++ b/experimental/packages/exporter-logs-otlp-http/package.json @@ -76,7 +76,7 @@ "@opentelemetry/resources": "1.17.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 5c673851f0..7ddc7aaa0d 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.6.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cpx": "1.5.0", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 4fb4e0ae15..5c517b67c9 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -53,7 +53,7 @@ "@opentelemetry/otlp-exporter-base": "0.43.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/exporter-trace-otlp-http/package.json b/experimental/packages/exporter-trace-otlp-http/package.json index 2a88326e10..83efbdf06f 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.6.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/exporter-trace-otlp-proto/package.json b/experimental/packages/exporter-trace-otlp-proto/package.json index 2dc9e6d6b6..8b65b2be7c 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.6.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cpx": "1.5.0", diff --git a/experimental/packages/opentelemetry-browser-detector/package.json b/experimental/packages/opentelemetry-browser-detector/package.json index 32f4d8be83..af6f3365c6 100644 --- a/experimental/packages/opentelemetry-browser-detector/package.json +++ b/experimental/packages/opentelemetry-browser-detector/package.json @@ -57,7 +57,7 @@ "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 1a6550dc6a..270b77580c 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -52,7 +52,7 @@ "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/package.json index 77673dca59..08141b1b26 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.6.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 12defa7e8c..a3e379fe8e 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -59,7 +59,7 @@ "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/opentelemetry-exporter-prometheus/package.json b/experimental/packages/opentelemetry-exporter-prometheus/package.json index f445d8bd12..a16ec9a833 100644 --- a/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -47,7 +47,7 @@ "@opentelemetry/semantic-conventions": "1.17.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/package.json b/experimental/packages/opentelemetry-instrumentation-fetch/package.json index 767b9bbe70..3690e77b64 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.17.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index 1b3e5c47de..a341ceabd7 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -60,7 +60,7 @@ "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/semver": "7.5.3", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/experimental/packages/opentelemetry-instrumentation-http/package.json b/experimental/packages/opentelemetry-instrumentation-http/package.json index c18ac517d3..f4cc3b40e7 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -54,7 +54,7 @@ "@types/node": "18.6.5", "@types/request-promise-native": "1.0.19", "@types/semver": "7.5.3", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/superagent": "4.1.19", "axios": "1.5.1", "codecov": "3.8.3", diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json b/experimental/packages/opentelemetry-instrumentation-xml-http-request/package.json index 93bf3c9655..9be7a18eac 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.17.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/opentelemetry-instrumentation/package.json b/experimental/packages/opentelemetry-instrumentation/package.json index 9f6c031bef..1e6fc40e48 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -87,7 +87,7 @@ "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/semver": "7.5.3", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 0f94bc4380..6385adc7a4 100644 --- a/experimental/packages/opentelemetry-sdk-node/package.json +++ b/experimental/packages/opentelemetry-sdk-node/package.json @@ -70,7 +70,7 @@ "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/semver": "7.5.3", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index 9701b1bfc4..cf59828ef0 100644 --- a/experimental/packages/otlp-exporter-base/package.json +++ b/experimental/packages/otlp-exporter-base/package.json @@ -68,7 +68,7 @@ "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index dbf84414ce..4ee3d0b422 100644 --- a/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/experimental/packages/otlp-grpc-exporter-base/package.json @@ -55,7 +55,7 @@ "@opentelemetry/sdk-trace-base": "1.17.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", diff --git a/experimental/packages/otlp-proto-exporter-base/package.json b/experimental/packages/otlp-proto-exporter-base/package.json index 5dde83bfa2..6f8e2ae768 100644 --- a/experimental/packages/otlp-proto-exporter-base/package.json +++ b/experimental/packages/otlp-proto-exporter-base/package.json @@ -63,7 +63,7 @@ "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/experimental/packages/sdk-logs/package.json b/experimental/packages/sdk-logs/package.json index 1a353f9ebd..ef33445de3 100644 --- a/experimental/packages/sdk-logs/package.json +++ b/experimental/packages/sdk-logs/package.json @@ -77,7 +77,7 @@ "@opentelemetry/api-logs": "0.43.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index 3ec28d7aea..3b96de24d4 100644 --- a/experimental/packages/shim-opencensus/package.json +++ b/experimental/packages/shim-opencensus/package.json @@ -54,7 +54,7 @@ "@opentelemetry/sdk-trace-base": "1.17.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/packages/opentelemetry-context-zone-peer-dep/package.json b/packages/opentelemetry-context-zone-peer-dep/package.json index a428e499b9..6076ad618c 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.7.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "@types/zone.js": "0.5.12", "babel-loader": "8.3.0", diff --git a/packages/opentelemetry-context-zone/package.json b/packages/opentelemetry-context-zone/package.json index 74d3e4f23d..905822e59a 100644 --- a/packages/opentelemetry-context-zone/package.json +++ b/packages/opentelemetry-context-zone/package.json @@ -53,7 +53,7 @@ "@babel/core": "7.22.20", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "codecov": "3.8.3", diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index 6806540667..e7214524a9 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -67,7 +67,7 @@ "@opentelemetry/api": ">=1.0.0 <1.7.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", diff --git a/packages/opentelemetry-exporter-jaeger/package.json b/packages/opentelemetry-exporter-jaeger/package.json index 3fba91d4f3..64c1a33b4c 100644 --- a/packages/opentelemetry-exporter-jaeger/package.json +++ b/packages/opentelemetry-exporter-jaeger/package.json @@ -48,7 +48,7 @@ "@opentelemetry/resources": "1.17.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/packages/opentelemetry-exporter-zipkin/package.json b/packages/opentelemetry-exporter-zipkin/package.json index 7f978b5543..aac154eb6e 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.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index 7735971bf7..13acdb1e49 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.7.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", diff --git a/packages/opentelemetry-resources/package.json b/packages/opentelemetry-resources/package.json index 9951d8ee4a..ec7b306e30 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.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "codecov": "3.8.3", "cross-var": "1.1.0", diff --git a/packages/opentelemetry-sdk-trace-base/package.json b/packages/opentelemetry-sdk-trace-base/package.json index 10aa4f830e..1f92308f58 100644 --- a/packages/opentelemetry-sdk-trace-base/package.json +++ b/packages/opentelemetry-sdk-trace-base/package.json @@ -69,7 +69,7 @@ "@opentelemetry/resources_1.9.0": "npm:@opentelemetry/resources@1.9.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", diff --git a/packages/opentelemetry-sdk-trace-node/package.json b/packages/opentelemetry-sdk-trace-node/package.json index d18133ec75..495cda0fde 100644 --- a/packages/opentelemetry-sdk-trace-node/package.json +++ b/packages/opentelemetry-sdk-trace-node/package.json @@ -51,7 +51,7 @@ "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/semver": "7.5.3", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 47a459e0d7..2e13b13586 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.20", "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "@types/webpack-env": "1.16.3", "babel-loader": "8.3.0", "babel-plugin-istanbul": "6.1.1", diff --git a/packages/opentelemetry-semantic-conventions/package.json b/packages/opentelemetry-semantic-conventions/package.json index 0d0860cd22..e930e1d04e 100644 --- a/packages/opentelemetry-semantic-conventions/package.json +++ b/packages/opentelemetry-semantic-conventions/package.json @@ -51,7 +51,7 @@ "devDependencies": { "@types/mocha": "10.0.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "codecov": "3.8.3", "cross-var": "1.1.0", "lerna": "7.1.5", diff --git a/packages/sdk-metrics/package.json b/packages/sdk-metrics/package.json index b16f4531a9..9d6c7d4e8f 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.2", "@types/node": "18.6.5", - "@types/sinon": "10.0.17", + "@types/sinon": "10.0.18", "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", From 5ce32c0fe53dc3c1c49e88961ee7cc223255ad70 Mon Sep 17 00:00:00 2001 From: Martin Kuba Date: Wed, 4 Oct 2023 00:02:25 -0700 Subject: [PATCH 134/141] Added performance benchmarking doc (#4169) Co-authored-by: Tyler Benson Co-authored-by: Marc Pichler --- CHANGELOG.md | 2 ++ doc/contributing/benchmark-tests.md | 53 +++++++++++++++++++++++++++++ doc/metrics.md | 4 +-- doc/tracing.md | 4 +-- 4 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 doc/contributing/benchmark-tests.md diff --git a/CHANGELOG.md b/CHANGELOG.md index f8a0051fab..5a330b09e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :books: (Refine Doc) +* docs(contributing): added guidelines for adding benchmark tests [#4169](https://github.com/open-telemetry/opentelemetry-js/pull/4169) + ### :house: (Internal) * test: added a performance benchmark test for span creation [#4105](https://github.com/open-telemetry/opentelemetry-js/pull/4105) diff --git a/doc/contributing/benchmark-tests.md b/doc/contributing/benchmark-tests.md new file mode 100644 index 0000000000..e97b1659b8 --- /dev/null +++ b/doc/contributing/benchmark-tests.md @@ -0,0 +1,53 @@ + +# Performance Benchmark Testing Guide + +Benchmark tests are intended to measure performance of small units of code. + +It is recommended that operations that have a high impact on the performance of the SDK (or potential for) are accompanied by a benchmark test. This helps end-users understand the performance trend over time, and it also helps maintainers catch performance regressions. + +Benchmark tests are run automatically with every merge to main, and the results are available at . + +## Running benchmark tests + +Performance benchmark tests can be run from the root for all modules or from a single module directory only for that module: + +``` bash +# benchmark all modules +npm run test:bench + +# benchmark a single module +cd packages/opentelemetry-sdk-trace-base +npm run test:bench +``` + +## Adding a benchmark test + +Unlike unit tests, benchmark tests should be written in plain JavaScript (not Typescript). + +Add a new test file in folder `test/performance/benchmark` using the following as a template: + +``` javascript +const Benchmark = require('benchmark'); + +const suite = new Benchmark.Suite(); + +suite.on('cycle', event => { + console.log(String(event.target)); +}); + +suite.add('new benchmark test', function() { + // write code to test ... +}); + +suite.run(); +``` + +## Automatically running benchmark tests + +If you want your test to run automatically with every merge to main (to track trend over time), register the new test file by requiring it in `test/performance/benchmark/index.js`. + +Add the `test:bench` script in package.json, if the module does not contain it already. + +``` json +"test:bench": "node test/performance/benchmark/index.js | tee .benchmark-results.txt" +``` diff --git a/doc/metrics.md b/doc/metrics.md index e2f2b5a147..314fcbaf39 100644 --- a/doc/metrics.md +++ b/doc/metrics.md @@ -286,7 +286,7 @@ await myTask() ## Describing a instrument measurement -Using attributes, kind, and the related [semantic conventions](https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/metrics/semantic_conventions), we can more accurately describe the measurement in a way our metrics backend will more easily understand. The following example uses these mechanisms, which are described below, for recording a measurement +Using attributes, kind, and the related [semantic conventions](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/general/metrics.md), we can more accurately describe the measurement in a way our metrics backend will more easily understand. The following example uses these mechanisms, which are described below, for recording a measurement of a HTTP request. Each metric instruments allows to associate a description, unit of measure, and the value type. @@ -343,7 +343,7 @@ One problem with metrics names and attributes is recognizing, categorizing, and The use of semantic conventions is always recommended where applicable, but they are merely conventions. For example, you may find that some name other than the name suggested by the semantic conventions more accurately describes your metric, you may decide not to include a metric attribute which is suggested by semantic conventions for privacy reasons, or you may wish to add a custom attribute which isn't covered by semantic conventions. All of these cases are fine, but please keep in mind that if you stray from the semantic conventions, the categorization of metrics in your metrics backend may be affected. -_See the current metrics semantic conventions in the OpenTelemetry Specification repository: _ +_See the current metrics semantic conventions in the OpenTelemetry Specification repository: _ [spec-overview]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/overview.md diff --git a/doc/tracing.md b/doc/tracing.md index fb3371d4fa..77787549bc 100644 --- a/doc/tracing.md +++ b/doc/tracing.md @@ -76,7 +76,7 @@ server.on("GET", "/user/:id", onGet); ## Describing a Span -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. +Using span relationships, attributes, kind, and the related [semantic conventions](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/general/trace.md), 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'; @@ -209,6 +209,6 @@ Consumer spans represent the processing of a job created by a producer and may s One problem with span names and attributes is recognizing, categorizing, and analyzing them in your tracing backend. Between different applications, libraries, and tracing backends there might be different names and expected values for various attributes. For example, your application may use `http.status` to describe the HTTP status code, but a library you use may use `http.status_code`. In order to solve this problem, OpenTelemetry uses a library of semantic conventions which describe the name and attributes which should be used for specific types of spans. The use of semantic conventions is always recommended where applicable, but they are merely conventions. For example, you may find that some name other than the name suggested by the semantic conventions more accurately describes your span, you may decide not to include a span attribute which is suggested by semantic conventions for privacy reasons, or you may wish to add a custom attribute which isn't covered by semantic conventions. All of these cases are fine, but please keep in mind that if you stray from the semantic conventions, the categorization of spans in your tracing backend may be affected. -_See the current trace semantic conventions in the OpenTelemetry Specification repository: _ +_See the current trace semantic conventions in the OpenTelemetry Specification repository: _ [spec-overview]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/overview.md From 912256184c07e9f510f4166e41d8b6e131e9446a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Einar=20Nor=C3=B0fj=C3=B6r=C3=B0?= Date: Fri, 6 Oct 2023 10:27:47 -0400 Subject: [PATCH 135/141] fix: BatchExporter should export continuously when batch size is reached (#3958) * fix: BathExporter should export continuously when batch size is reached * fix: add tests * lintfix * add changelog * add test for concurrency * Update CHANGELOG.md * Apply suggestions from code review * Lint and fix browser tests * fix: lint --------- Co-authored-by: Daniel Dyla Co-authored-by: Marc Pichler --- CHANGELOG.md | 1 + .../src/export/BatchSpanProcessorBase.ts | 16 +++- .../export/BatchSpanProcessorBase.test.ts | 85 +++++++++++++------ 3 files changed, 71 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a330b09e7..edf81233a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) +* fix(sdk-trace-base): BatchSpanProcessor flushes when `maxExportBatchSize` is reached [#3958](https://github.com/open-telemetry/opentelemetry-js/pull/3958) @nordfjord * fix(sdk-metrics): allow instrument names to contain '/' [#4155](https://github.com/open-telemetry/opentelemetry-js/pull/4155) * fix(sdk-metrics): do not report empty scopes and metrics [#4135](https://github.com/open-telemetry/opentelemetry-js/pull/4135) @pichlermarc * Instruments that were created, but did not have measurements will not be exported anymore diff --git a/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts b/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts index 7d84e0c734..fef5c80dc0 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts @@ -41,6 +41,7 @@ export abstract class BatchSpanProcessorBase private readonly _scheduledDelayMillis: number; private readonly _exportTimeoutMillis: number; + private _isExporting = false; private _finishedSpans: ReadableSpan[] = []; private _timer: NodeJS.Timeout | undefined; private _shutdownOnce: BindOnceFuture; @@ -216,19 +217,28 @@ export abstract class BatchSpanProcessorBase } private _maybeStartTimer() { - if (this._timer !== undefined) return; - this._timer = setTimeout(() => { + if (this._isExporting) return; + const flush = () => { + this._isExporting = true; this._flushOneBatch() .then(() => { + this._isExporting = false; if (this._finishedSpans.length > 0) { this._clearTimer(); this._maybeStartTimer(); } }) .catch(e => { + this._isExporting = false; globalErrorHandler(e); }); - }, this._scheduledDelayMillis); + }; + // we only wait if the queue doesn't have enough elements yet + if (this._finishedSpans.length >= this._maxExportBatchSize) { + return flush(); + } + if (this._timer !== undefined) return; + this._timer = setTimeout(() => flush(), this._scheduledDelayMillis); unrefTimer(this._timer); } diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/BatchSpanProcessorBase.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/BatchSpanProcessorBase.test.ts index 069287fc59..83fb3ebe44 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/BatchSpanProcessorBase.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/BatchSpanProcessorBase.test.ts @@ -16,6 +16,7 @@ import { diag, ROOT_CONTEXT } from '@opentelemetry/api'; import { + ExportResult, ExportResultCode, loggingErrorHandler, setGlobalErrorHandler, @@ -27,7 +28,9 @@ import { BasicTracerProvider, BufferConfig, InMemorySpanExporter, + ReadableSpan, Span, + SpanExporter, } from '../../../src'; import { context } from '@opentelemetry/api'; import { TestRecordOnlySampler } from './TestRecordOnlySampler'; @@ -175,43 +178,35 @@ describe('BatchSpanProcessorBase', () => { assert.strictEqual(spy.args.length, 0); }); - it('should export the sampled spans with buffer size reached', done => { - const clock = sinon.useFakeTimers(); + it('should export the sampled spans with buffer size reached', async () => { const processor = new BatchSpanProcessor(exporter, defaultBufferConfig); - for (let i = 0; i < defaultBufferConfig.maxExportBatchSize; i++) { - const span = createSampledSpan(`${name}_${i}`); + const span = createSampledSpan(name); + for (let i = 1; i < defaultBufferConfig.maxExportBatchSize; i++) { processor.onStart(span, ROOT_CONTEXT); assert.strictEqual(exporter.getFinishedSpans().length, 0); processor.onEnd(span); assert.strictEqual(exporter.getFinishedSpans().length, 0); } - const span = createSampledSpan(`${name}_6`); processor.onStart(span, ROOT_CONTEXT); processor.onEnd(span); - - setTimeout(async () => { - assert.strictEqual(exporter.getFinishedSpans().length, 5); - await processor.shutdown(); - assert.strictEqual(exporter.getFinishedSpans().length, 0); - done(); - }, defaultBufferConfig.scheduledDelayMillis + 1000); - clock.tick(defaultBufferConfig.scheduledDelayMillis + 1000); - clock.restore(); + assert.strictEqual(exporter.getFinishedSpans().length, 5); + await processor.shutdown(); + assert.strictEqual(exporter.getFinishedSpans().length, 0); }); it('should force flush when timeout exceeded', done => { const clock = sinon.useFakeTimers(); const processor = new BatchSpanProcessor(exporter, defaultBufferConfig); - for (let i = 0; i < defaultBufferConfig.maxExportBatchSize; i++) { - const span = createSampledSpan(`${name}_${i}`); + const span = createSampledSpan(name); + for (let i = 1; i < defaultBufferConfig.maxExportBatchSize; i++) { processor.onStart(span, ROOT_CONTEXT); processor.onEnd(span); assert.strictEqual(exporter.getFinishedSpans().length, 0); } setTimeout(() => { - assert.strictEqual(exporter.getFinishedSpans().length, 5); + assert.strictEqual(exporter.getFinishedSpans().length, 4); done(); }, defaultBufferConfig.scheduledDelayMillis + 1000); @@ -222,14 +217,14 @@ describe('BatchSpanProcessorBase', () => { it('should force flush on demand', () => { const processor = new BatchSpanProcessor(exporter, defaultBufferConfig); - for (let i = 0; i < defaultBufferConfig.maxExportBatchSize; i++) { - const span = createSampledSpan(`${name}_${i}`); + const span = createSampledSpan(name); + for (let i = 1; i < defaultBufferConfig.maxExportBatchSize; i++) { processor.onStart(span, ROOT_CONTEXT); processor.onEnd(span); } assert.strictEqual(exporter.getFinishedSpans().length, 0); processor.forceFlush(); - assert.strictEqual(exporter.getFinishedSpans().length, 5); + assert.strictEqual(exporter.getFinishedSpans().length, 4); }); it('should not export empty span lists', done => { @@ -466,17 +461,10 @@ describe('BatchSpanProcessorBase', () => { const debugStub = sinon.spy(diag, 'debug'); const warnStub = sinon.spy(diag, 'warn'); const span = createSampledSpan('test'); - for (let i = 0, j = 6; i < j; i++) { + for (let i = 0, j = 12; i < j; i++) { processor.onStart(span, ROOT_CONTEXT); processor.onEnd(span); } - assert.equal(processor['_finishedSpans'].length, 6); - assert.equal(processor['_droppedSpansCount'], 0); - sinon.assert.notCalled(debugStub); - - processor.onStart(span, ROOT_CONTEXT); - processor.onEnd(span); - assert.equal(processor['_finishedSpans'].length, 6); assert.equal(processor['_droppedSpansCount'], 1); sinon.assert.calledOnce(debugStub); @@ -517,4 +505,45 @@ describe('BatchSpanProcessorBase', () => { }); }); }); + + describe('Concurrency', () => { + it('should only send a single batch at a time', async () => { + const callbacks: ((result: ExportResult) => void)[] = []; + const spans: ReadableSpan[] = []; + const exporter: SpanExporter = { + export: async ( + exportedSpans: ReadableSpan[], + resultCallback: (result: ExportResult) => void + ) => { + callbacks.push(resultCallback); + spans.push(...exportedSpans); + }, + shutdown: async () => {}, + }; + const processor = new BatchSpanProcessor(exporter, { + maxExportBatchSize: 5, + maxQueueSize: 6, + }); + const totalSpans = 50; + for (let i = 0; i < totalSpans; i++) { + const span = createSampledSpan(`${name}_${i}`); + processor.onStart(span, ROOT_CONTEXT); + processor.onEnd(span); + } + assert.equal(callbacks.length, 1); + assert.equal(spans.length, 5); + callbacks[0]({ code: ExportResultCode.SUCCESS }); + await new Promise(resolve => setTimeout(resolve, 0)); + // After the first batch completes we will have dropped a number + // of spans and the next batch will be smaller + assert.equal(callbacks.length, 2); + assert.equal(spans.length, 10); + callbacks[1]({ code: ExportResultCode.SUCCESS }); + + // We expect that all the other spans have been dropped + await new Promise(resolve => setTimeout(resolve, 0)); + assert.equal(callbacks.length, 2); + assert.equal(spans.length, 10); + }); + }); }); From 84861cd82722d507906a64016ef59b35bf7770ed Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 6 Oct 2023 16:30:35 +0200 Subject: [PATCH 136/141] chore(deps): update dependency @types/jquery to v3.5.21 (#4187) Co-authored-by: Daniel Dyla --- packages/opentelemetry-sdk-trace-web/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opentelemetry-sdk-trace-web/package.json b/packages/opentelemetry-sdk-trace-web/package.json index 2e13b13586..afa8e31c5b 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.17.0", "@opentelemetry/propagator-b3": "1.17.0", "@opentelemetry/resources": "1.17.0", - "@types/jquery": "3.5.20", + "@types/jquery": "3.5.21", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/sinon": "10.0.18", From 5fd3737aa3c4f27fd68bb06bfb435d8badae63f0 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Sat, 7 Oct 2023 11:40:54 +0200 Subject: [PATCH 137/141] chore: remove outdated and empty docs (#4181) --- doc/library-author.md | 3 - doc/metrics.md | 2 +- doc/processor-api.md | 147 ------------------------------------------ doc/tracing.md | 2 +- 4 files changed, 2 insertions(+), 152 deletions(-) delete mode 100644 doc/library-author.md delete mode 100644 doc/processor-api.md diff --git a/doc/library-author.md b/doc/library-author.md deleted file mode 100644 index 44e5f1e97e..0000000000 --- a/doc/library-author.md +++ /dev/null @@ -1,3 +0,0 @@ -# OpenTelemetry for Library Authors - -TODO diff --git a/doc/metrics.md b/doc/metrics.md index 314fcbaf39..3f48775e49 100644 --- a/doc/metrics.md +++ b/doc/metrics.md @@ -1,6 +1,6 @@ # Metrics -This quick start is for end users of OpenTelemetry who wish to manually measure their applications. If you are a library author, please see the [Library Authors Guide](library-author.md). If you wish to automatically instrument your application, see the automatic instrumentation documentation for the SDK you wish to use. +This quick start is for end users of OpenTelemetry who wish to manually measure their applications. If you wish to automatically instrument your application, see the automatic instrumentation documentation for the SDK you wish to use. For a high-level overview of OpenTelemetry metrics in general and definitions of some common terms, you can refer to the [OpenTelemetry Specification Overview][spec-overview] diff --git a/doc/processor-api.md b/doc/processor-api.md deleted file mode 100644 index 58d7916e57..0000000000 --- a/doc/processor-api.md +++ /dev/null @@ -1,147 +0,0 @@ -# Processor API Guide - - - -The processor has two responsibilities: choosing which aggregator to choose for a metric instrument and store the last record for each metric ready to be exported. - -## Selecting a specific aggregator for metrics - -Sometimes you may want to use a specific aggregator for one of your metric, export an average of the last X values instead of just the last one. - -Here is what an aggregator that does that would look like: - -```ts -import { Aggregator } from '@opentelemetry/sdk-metrics'; -import { hrTime } from '@opentelemetry/core'; - -export class AverageAggregator implements Aggregator { - - private _values: number[] = []; - private _limit: number; - - constructor (limit?: number) { - this._limit = limit ?? 10; - } - - update (value: number) { - this._values.push(value); - if (this._values.length >= this._limit) { - this._values = this._values.slice(0, 10); - } - } - - toPoint() { - const sum =this._values.reduce((agg, value) => { - agg += value; - return agg; - }, 0); - return { - value: this._values.length > 0 ? sum / this._values.length : 0, - timestamp: hrTime(), - } - } -} -``` - -Now we will need to implement our own processor to configure the sdk to use our new aggregator. To simplify even more, we will just extend the `UngroupedProcessor` (which is the default) to avoid re-implementing the whole `Aggregator` interface. - -Here the result: - -```ts -import { - UngroupedProcessor, - MetricDescriptor, - CounterSumAggregator, - ObserverAggregator, - MeasureExactAggregator, -} from '@opentelemetry/sdk-metrics'; - -export class CustomProcessor extends UngroupedProcessor { - aggregatorFor (metricDescriptor: MetricDescriptor) { - if (metricDescriptor.name === 'requests') { - return new AverageAggregator(10); - } - // this is exactly what the "UngroupedProcessor" does, we will re-use it - // to fallback on the default behavior - switch (metricDescriptor.metricKind) { - case MetricKind.COUNTER: - return new CounterSumAggregator(); - case MetricKind.OBSERVER: - return new ObserverAggregator(); - default: - return new MeasureExactAggregator(); - } - } -} -``` - -Finally, we need to specify to the `MeterProvider` to use our `CustomProcessor` when creating new meter: - -```ts -import { - UngroupedProcessor, - MetricDescriptor, - CounterSumAggregator, - ObserverAggregator, - MeasureExactAggregator, - MeterProvider, - Aggregator, -} from '@opentelemetry/sdk-metrics'; -import { hrTime } from '@opentelemetry/core'; - -export class AverageAggregator implements Aggregator { - - private _values: number[] = []; - private _limit: number; - - constructor (limit?: number) { - this._limit = limit ?? 10; - } - - update (value: number) { - this._values.push(value); - if (this._values.length >= this._limit) { - this._values = this._values.slice(0, 10); - } - } - - toPoint() { - const sum =this._values.reduce((agg, value) => { - agg += value; - return agg; - }, 0); - return { - value: this._values.length > 0 ? sum / this._values.length : 0, - timestamp: hrTime(), - } - } -} - -export class CustomProcessor extends UngroupedProcessor { - aggregatorFor (metricDescriptor: MetricDescriptor) { - if (metricDescriptor.name === 'requests') { - return new AverageAggregator(10); - } - // this is exactly what the "UngroupedProcessor" does, we will re-use it - // to fallback on the default behavior - switch (metricDescriptor.metricKind) { - case MetricKind.COUNTER: - return new CounterSumAggregator(); - case MetricKind.OBSERVER: - return new ObserverAggregator(); - default: - return new MeasureExactAggregator(); - } - } -} - -const meter = new MeterProvider({ - processor: new CustomProcessor(), - interval: 1000, -}).getMeter('example-custom-processor'); - -const requestsLatency = meter.createHistogram('requests', { - monotonic: true, - description: 'Average latency' -}); -``` diff --git a/doc/tracing.md b/doc/tracing.md index 77787549bc..392ca95736 100644 --- a/doc/tracing.md +++ b/doc/tracing.md @@ -1,6 +1,6 @@ # Tracing -This quick start is for end users of OpenTelemetry who wish to manually trace their applications. If you are a library author, please see the [Library Authors Guide](library-author.md). If you wish to automatically instrument your application, see the automatic instrumentation documentation for the SDK you wish to use. +This quick start is for end users of OpenTelemetry who wish to manually trace their applications. If you wish to automatically instrument your application, see the automatic instrumentation documentation for the SDK you wish to use. For a high-level overview of OpenTelemetry tracing in general and definitions of some common terms, you can refer to the [OpenTelemetry Specification Overview][spec-overview] From c320c981c5b8cd9c42d65183c2c2c5b737a0b2a1 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Sat, 7 Oct 2023 05:53:41 -0400 Subject: [PATCH 138/141] deps: update proto-loader (#4192) --- experimental/packages/exporter-logs-otlp-grpc/package.json | 2 +- experimental/packages/exporter-trace-otlp-grpc/package.json | 2 +- .../opentelemetry-exporter-metrics-otlp-grpc/package.json | 2 +- .../packages/opentelemetry-instrumentation-grpc/package.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-grpc/package.json b/experimental/packages/exporter-logs-otlp-grpc/package.json index bdbe715614..c7e8978fdf 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -49,7 +49,7 @@ }, "devDependencies": { "@babel/core": "7.22.20", - "@grpc/proto-loader": "^0.7.3", + "@grpc/proto-loader": "^0.7.10", "@opentelemetry/api": "1.6.0", "@opentelemetry/api-logs": "0.43.0", "@opentelemetry/otlp-exporter-base": "0.43.0", diff --git a/experimental/packages/exporter-trace-otlp-grpc/package.json b/experimental/packages/exporter-trace-otlp-grpc/package.json index 5c517b67c9..207880858b 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -48,7 +48,7 @@ }, "devDependencies": { "@babel/core": "7.22.20", - "@grpc/proto-loader": "^0.7.3", + "@grpc/proto-loader": "^0.7.10", "@opentelemetry/api": "1.6.0", "@opentelemetry/otlp-exporter-base": "0.43.0", "@types/mocha": "10.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 270b77580c..9a158ffe39 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -48,7 +48,7 @@ }, "devDependencies": { "@babel/core": "7.22.20", - "@grpc/proto-loader": "^0.7.3", + "@grpc/proto-loader": "^0.7.10", "@opentelemetry/api": "1.6.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/experimental/packages/opentelemetry-instrumentation-grpc/package.json index a341ceabd7..b2248c30a1 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -48,7 +48,7 @@ "devDependencies": { "@bufbuild/buf": "1.21.0-1", "@grpc/grpc-js": "^1.7.1", - "@grpc/proto-loader": "^0.7.3", + "@grpc/proto-loader": "^0.7.10", "@opentelemetry/api": "1.6.0", "@opentelemetry/context-async-hooks": "1.17.0", "@opentelemetry/core": "1.17.0", From 4eb10f7c9dbdc1075d2705bb7c305c063b86a2f9 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 10 Oct 2023 15:27:12 +0200 Subject: [PATCH 139/141] fix(sdk-metrics): prevent per-reader storages from keeping unreported accumulations in memory (#4163) --- CHANGELOG.md | 2 + .../src/state/AsyncMetricStorage.ts | 10 ++- .../sdk-metrics/src/state/MeterSharedState.ts | 15 ++-- .../sdk-metrics/src/state/MetricStorage.ts | 1 - .../src/state/SyncMetricStorage.ts | 10 ++- .../src/state/TemporalMetricProcessor.ts | 26 +++--- .../test/state/AsyncMetricStorage.test.ts | 89 ++++++------------- .../test/state/MetricStorageRegistry.test.ts | 1 - .../test/state/SyncMetricStorage.test.ts | 48 +++------- .../state/TemporalMetricProcessor.test.ts | 35 +++----- 10 files changed, 90 insertions(+), 147 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index edf81233a1..b783d89012 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ * fix(sdk-trace-base): BatchSpanProcessor flushes when `maxExportBatchSize` is reached [#3958](https://github.com/open-telemetry/opentelemetry-js/pull/3958) @nordfjord * fix(sdk-metrics): allow instrument names to contain '/' [#4155](https://github.com/open-telemetry/opentelemetry-js/pull/4155) +* fix(sdk-metrics): prevent per-reader storages from keeping unreported accumulations in memory [#4163](https://github.com/open-telemetry/opentelemetry-js/pull/4163) @pichlermarc + * fixes a memory leak which occurred when two or more `MetricReader` instances are registered to a `MeterProvider` * fix(sdk-metrics): do not report empty scopes and metrics [#4135](https://github.com/open-telemetry/opentelemetry-js/pull/4135) @pichlermarc * Instruments that were created, but did not have measurements will not be exported anymore * Meters (Scopes) that were created, but did not have any instruments with measurements under them will not be exported anymore. diff --git a/packages/sdk-metrics/src/state/AsyncMetricStorage.ts b/packages/sdk-metrics/src/state/AsyncMetricStorage.ts index 286874987c..6bebafdc1f 100644 --- a/packages/sdk-metrics/src/state/AsyncMetricStorage.ts +++ b/packages/sdk-metrics/src/state/AsyncMetricStorage.ts @@ -42,11 +42,15 @@ export class AsyncMetricStorage> constructor( _instrumentDescriptor: InstrumentDescriptor, aggregator: Aggregator, - private _attributesProcessor: AttributesProcessor + private _attributesProcessor: AttributesProcessor, + collectorHandles: MetricCollectorHandle[] ) { super(_instrumentDescriptor); this._deltaMetricStorage = new DeltaMetricProcessor(aggregator); - this._temporalMetricStorage = new TemporalMetricProcessor(aggregator); + this._temporalMetricStorage = new TemporalMetricProcessor( + aggregator, + collectorHandles + ); } record(measurements: AttributeHashMap, observationTime: HrTime) { @@ -66,14 +70,12 @@ export class AsyncMetricStorage> */ collect( collector: MetricCollectorHandle, - collectors: MetricCollectorHandle[], collectionTime: HrTime ): Maybe { const accumulations = this._deltaMetricStorage.collect(); return this._temporalMetricStorage.buildMetrics( collector, - collectors, this._instrumentDescriptor, accumulations, collectionTime diff --git a/packages/sdk-metrics/src/state/MeterSharedState.ts b/packages/sdk-metrics/src/state/MeterSharedState.ts index 4189d6bb6c..2c0c1a5105 100644 --- a/packages/sdk-metrics/src/state/MeterSharedState.ts +++ b/packages/sdk-metrics/src/state/MeterSharedState.ts @@ -96,11 +96,7 @@ export class MeterSharedState { const metricDataList = storages .map(metricStorage => { - return metricStorage.collect( - collector, - this._meterProviderSharedState.metricCollectors, - collectionTime - ); + return metricStorage.collect(collector, collectionTime); }) .filter(isNotNullish); @@ -145,7 +141,8 @@ export class MeterSharedState { const viewStorage = new MetricStorageType( viewDescriptor, aggregator, - view.attributesProcessor + view.attributesProcessor, + this._meterProviderSharedState.metricCollectors ) as R; this.metricStorageRegistry.register(viewStorage); return viewStorage; @@ -169,7 +166,8 @@ export class MeterSharedState { const storage = new MetricStorageType( descriptor, aggregator, - AttributesProcessor.Noop() + AttributesProcessor.Noop(), + [collector] ) as R; this.metricStorageRegistry.registerForCollector(collector, storage); return storage; @@ -191,6 +189,7 @@ interface MetricStorageConstructor { new ( instrumentDescriptor: InstrumentDescriptor, aggregator: Aggregator>, - attributesProcessor: AttributesProcessor + attributesProcessor: AttributesProcessor, + collectors: MetricCollectorHandle[] ): MetricStorage; } diff --git a/packages/sdk-metrics/src/state/MetricStorage.ts b/packages/sdk-metrics/src/state/MetricStorage.ts index 5d02437f58..32a48391da 100644 --- a/packages/sdk-metrics/src/state/MetricStorage.ts +++ b/packages/sdk-metrics/src/state/MetricStorage.ts @@ -39,7 +39,6 @@ export abstract class MetricStorage { */ abstract collect( collector: MetricCollectorHandle, - collectors: MetricCollectorHandle[], collectionTime: HrTime ): Maybe; diff --git a/packages/sdk-metrics/src/state/SyncMetricStorage.ts b/packages/sdk-metrics/src/state/SyncMetricStorage.ts index 0648b12728..bb546e1271 100644 --- a/packages/sdk-metrics/src/state/SyncMetricStorage.ts +++ b/packages/sdk-metrics/src/state/SyncMetricStorage.ts @@ -41,11 +41,15 @@ export class SyncMetricStorage> constructor( instrumentDescriptor: InstrumentDescriptor, aggregator: Aggregator, - private _attributesProcessor: AttributesProcessor + private _attributesProcessor: AttributesProcessor, + collectorHandles: MetricCollectorHandle[] ) { super(instrumentDescriptor); this._deltaMetricStorage = new DeltaMetricProcessor(aggregator); - this._temporalMetricStorage = new TemporalMetricProcessor(aggregator); + this._temporalMetricStorage = new TemporalMetricProcessor( + aggregator, + collectorHandles + ); } record( @@ -66,14 +70,12 @@ export class SyncMetricStorage> */ collect( collector: MetricCollectorHandle, - collectors: MetricCollectorHandle[], collectionTime: HrTime ): Maybe { const accumulations = this._deltaMetricStorage.collect(); return this._temporalMetricStorage.buildMetrics( collector, - collectors, this._instrumentDescriptor, accumulations, collectionTime diff --git a/packages/sdk-metrics/src/state/TemporalMetricProcessor.ts b/packages/sdk-metrics/src/state/TemporalMetricProcessor.ts index bb5559e70e..967b6f8181 100644 --- a/packages/sdk-metrics/src/state/TemporalMetricProcessor.ts +++ b/packages/sdk-metrics/src/state/TemporalMetricProcessor.ts @@ -61,7 +61,14 @@ export class TemporalMetricProcessor> { LastReportedHistory >(); - constructor(private _aggregator: Aggregator) {} + constructor( + private _aggregator: Aggregator, + collectorHandles: MetricCollectorHandle[] + ) { + collectorHandles.forEach(handle => { + this._unreportedAccumulations.set(handle, []); + }); + } /** * Builds the {@link MetricData} streams to report against a specific MetricCollector. @@ -74,12 +81,11 @@ export class TemporalMetricProcessor> { */ buildMetrics( collector: MetricCollectorHandle, - collectors: MetricCollectorHandle[], instrumentDescriptor: InstrumentDescriptor, currentAccumulations: AttributeHashMap, collectionTime: HrTime ): Maybe { - this._stashAccumulations(collectors, currentAccumulations); + this._stashAccumulations(currentAccumulations); const unreportedAccumulations = this._getMergedUnreportedAccumulations(collector); @@ -148,18 +154,16 @@ export class TemporalMetricProcessor> { ); } - private _stashAccumulations( - collectors: MetricCollectorHandle[], - currentAccumulation: AttributeHashMap - ) { - collectors.forEach(it => { - let stash = this._unreportedAccumulations.get(it); + private _stashAccumulations(currentAccumulation: AttributeHashMap) { + const registeredCollectors = this._unreportedAccumulations.keys(); + for (const collector of registeredCollectors) { + let stash = this._unreportedAccumulations.get(collector); if (stash === undefined) { stash = []; - this._unreportedAccumulations.set(it, stash); + this._unreportedAccumulations.set(collector, stash); } stash.push(currentAccumulation); - }); + } } private _getMergedUnreportedAccumulations(collector: MetricCollectorHandle) { diff --git a/packages/sdk-metrics/test/state/AsyncMetricStorage.test.ts b/packages/sdk-metrics/test/state/AsyncMetricStorage.test.ts index 03eca24236..b4a5df1923 100644 --- a/packages/sdk-metrics/test/state/AsyncMetricStorage.test.ts +++ b/packages/sdk-metrics/test/state/AsyncMetricStorage.test.ts @@ -43,15 +43,16 @@ const cumulativeCollector: MetricCollectorHandle = { describe('AsyncMetricStorage', () => { describe('collect', () => { describe('Delta Collector', () => { - const collectors = [deltaCollector]; it('should collect and reset memos', async () => { const delegate = new ObservableCallbackDelegate(); const observableRegistry = new ObservableRegistry(); const metricStorage = new AsyncMetricStorage( defaultInstrumentDescriptor, new SumAggregator(true), - new NoopAttributesProcessor() + new NoopAttributesProcessor(), + [deltaCollector] ); + const observable = new ObservableInstrument( defaultInstrumentDescriptor, [metricStorage], @@ -68,11 +69,7 @@ describe('AsyncMetricStorage', () => { { const collectionTime: HrTime = [0, 0]; await observableRegistry.observe(collectionTime); - const metric = metricStorage.collect( - deltaCollector, - collectors, - collectionTime - ); + const metric = metricStorage.collect(deltaCollector, collectionTime); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 3); @@ -104,11 +101,7 @@ describe('AsyncMetricStorage', () => { { const collectionTime: HrTime = [1, 1]; await observableRegistry.observe(collectionTime); - const metric = metricStorage.collect( - deltaCollector, - collectors, - collectionTime - ); + const metric = metricStorage.collect(deltaCollector, collectionTime); assert.equal(metric, undefined); } @@ -121,11 +114,7 @@ describe('AsyncMetricStorage', () => { { const collectionTime: HrTime = [2, 2]; await observableRegistry.observe(collectionTime); - const metric = metricStorage.collect( - deltaCollector, - collectors, - collectionTime - ); + const metric = metricStorage.collect(deltaCollector, collectionTime); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 3); @@ -160,8 +149,10 @@ describe('AsyncMetricStorage', () => { const metricStorage = new AsyncMetricStorage( defaultInstrumentDescriptor, new SumAggregator(true), - new NoopAttributesProcessor() + new NoopAttributesProcessor(), + [deltaCollector] ); + const observable = new ObservableInstrument( defaultInstrumentDescriptor, [metricStorage], @@ -178,11 +169,7 @@ describe('AsyncMetricStorage', () => { { const collectionTime: HrTime = [0, 0]; await observableRegistry.observe(collectionTime); - const metric = metricStorage.collect( - deltaCollector, - collectors, - collectionTime - ); + const metric = metricStorage.collect(deltaCollector, collectionTime); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 1); @@ -204,11 +191,7 @@ describe('AsyncMetricStorage', () => { { const collectionTime: HrTime = [1, 1]; await observableRegistry.observe(collectionTime); - const metric = metricStorage.collect( - deltaCollector, - collectors, - collectionTime - ); + const metric = metricStorage.collect(deltaCollector, collectionTime); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 1); @@ -230,11 +213,7 @@ describe('AsyncMetricStorage', () => { { const collectionTime: HrTime = [2, 2]; await observableRegistry.observe(collectionTime); - const metric = metricStorage.collect( - deltaCollector, - collectors, - collectionTime - ); + const metric = metricStorage.collect(deltaCollector, collectionTime); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 1); @@ -254,8 +233,10 @@ describe('AsyncMetricStorage', () => { const metricStorage = new AsyncMetricStorage( defaultInstrumentDescriptor, new SumAggregator(false), - new NoopAttributesProcessor() + new NoopAttributesProcessor(), + [deltaCollector] ); + const observable = new ObservableInstrument( defaultInstrumentDescriptor, [metricStorage], @@ -272,11 +253,7 @@ describe('AsyncMetricStorage', () => { { const collectionTime: HrTime = [0, 0]; await observableRegistry.observe(collectionTime); - const metric = metricStorage.collect( - deltaCollector, - collectors, - collectionTime - ); + const metric = metricStorage.collect(deltaCollector, collectionTime); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 1); @@ -298,11 +275,7 @@ describe('AsyncMetricStorage', () => { { const collectionTime: HrTime = [0, 0]; await observableRegistry.observe(collectionTime); - const metric = metricStorage.collect( - deltaCollector, - collectors, - collectionTime - ); + const metric = metricStorage.collect(deltaCollector, collectionTime); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 1); @@ -324,11 +297,7 @@ describe('AsyncMetricStorage', () => { { const collectionTime: HrTime = [2, 2]; await observableRegistry.observe(collectionTime); - const metric = metricStorage.collect( - deltaCollector, - collectors, - collectionTime - ); + const metric = metricStorage.collect(deltaCollector, collectionTime); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 1); @@ -344,15 +313,16 @@ describe('AsyncMetricStorage', () => { }); describe('Cumulative Collector', () => { - const collectors = [cumulativeCollector]; it('should collect cumulative metrics', async () => { const delegate = new ObservableCallbackDelegate(); const observableRegistry = new ObservableRegistry(); const metricStorage = new AsyncMetricStorage( defaultInstrumentDescriptor, new SumAggregator(true), - new NoopAttributesProcessor() + new NoopAttributesProcessor(), + [cumulativeCollector] ); + const observable = new ObservableInstrument( defaultInstrumentDescriptor, [metricStorage], @@ -372,7 +342,6 @@ describe('AsyncMetricStorage', () => { await observableRegistry.observe(collectionTime); const metric = metricStorage.collect( cumulativeCollector, - collectors, collectionTime ); @@ -409,7 +378,6 @@ describe('AsyncMetricStorage', () => { await observableRegistry.observe(collectionTime); const metric = metricStorage.collect( cumulativeCollector, - collectors, collectionTime ); @@ -448,7 +416,6 @@ describe('AsyncMetricStorage', () => { await observableRegistry.observe(collectionTime); const metric = metricStorage.collect( cumulativeCollector, - collectors, collectionTime ); @@ -484,8 +451,10 @@ describe('AsyncMetricStorage', () => { const metricStorage = new AsyncMetricStorage( defaultInstrumentDescriptor, new SumAggregator(true), - new NoopAttributesProcessor() + new NoopAttributesProcessor(), + [cumulativeCollector] ); + const observable = new ObservableInstrument( defaultInstrumentDescriptor, [metricStorage], @@ -504,7 +473,6 @@ describe('AsyncMetricStorage', () => { await observableRegistry.observe(collectionTime); const metric = metricStorage.collect( cumulativeCollector, - collectors, collectionTime ); @@ -530,7 +498,6 @@ describe('AsyncMetricStorage', () => { await observableRegistry.observe(collectionTime); const metric = metricStorage.collect( cumulativeCollector, - collectors, collectionTime ); @@ -557,7 +524,6 @@ describe('AsyncMetricStorage', () => { await observableRegistry.observe(collectionTime); const metric = metricStorage.collect( cumulativeCollector, - collectors, collectionTime ); @@ -579,8 +545,10 @@ describe('AsyncMetricStorage', () => { const metricStorage = new AsyncMetricStorage( defaultInstrumentDescriptor, new SumAggregator(false), - new NoopAttributesProcessor() + new NoopAttributesProcessor(), + [cumulativeCollector] ); + const observable = new ObservableInstrument( defaultInstrumentDescriptor, [metricStorage], @@ -599,7 +567,6 @@ describe('AsyncMetricStorage', () => { await observableRegistry.observe(collectionTime); const metric = metricStorage.collect( cumulativeCollector, - collectors, collectionTime ); @@ -625,7 +592,6 @@ describe('AsyncMetricStorage', () => { await observableRegistry.observe(collectionTime); const metric = metricStorage.collect( cumulativeCollector, - collectors, collectionTime ); @@ -651,7 +617,6 @@ describe('AsyncMetricStorage', () => { await observableRegistry.observe(collectionTime); const metric = metricStorage.collect( cumulativeCollector, - collectors, collectionTime ); diff --git a/packages/sdk-metrics/test/state/MetricStorageRegistry.test.ts b/packages/sdk-metrics/test/state/MetricStorageRegistry.test.ts index 26a48a0ba3..55ef806511 100644 --- a/packages/sdk-metrics/test/state/MetricStorageRegistry.test.ts +++ b/packages/sdk-metrics/test/state/MetricStorageRegistry.test.ts @@ -33,7 +33,6 @@ import { class TestMetricStorage extends MetricStorage { collect( collector: MetricCollectorHandle, - collectors: MetricCollectorHandle[], collectionTime: HrTime ): Maybe { return undefined; diff --git a/packages/sdk-metrics/test/state/SyncMetricStorage.test.ts b/packages/sdk-metrics/test/state/SyncMetricStorage.test.ts index 072cc9d16d..e2e0378a45 100644 --- a/packages/sdk-metrics/test/state/SyncMetricStorage.test.ts +++ b/packages/sdk-metrics/test/state/SyncMetricStorage.test.ts @@ -45,7 +45,8 @@ describe('SyncMetricStorage', () => { const metricStorage = new SyncMetricStorage( defaultInstrumentDescriptor, new SumAggregator(true), - new NoopAttributesProcessor() + new NoopAttributesProcessor(), + [] ); for (const value of commonValues) { @@ -58,22 +59,19 @@ describe('SyncMetricStorage', () => { describe('collect', () => { describe('Delta Collector', () => { - const collectors = [deltaCollector]; it('should collect and reset memos', async () => { const metricStorage = new SyncMetricStorage( defaultInstrumentDescriptor, new SumAggregator(true), - new NoopAttributesProcessor() + new NoopAttributesProcessor(), + [deltaCollector] ); + metricStorage.record(1, {}, api.context.active(), [0, 0]); metricStorage.record(2, {}, api.context.active(), [1, 1]); metricStorage.record(3, {}, api.context.active(), [2, 2]); { - const metric = metricStorage.collect( - deltaCollector, - collectors, - [3, 3] - ); + const metric = metricStorage.collect(deltaCollector, [3, 3]); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 1); @@ -82,22 +80,14 @@ describe('SyncMetricStorage', () => { // The attributes should not be memorized. { - const metric = metricStorage.collect( - deltaCollector, - collectors, - [4, 4] - ); + const metric = metricStorage.collect(deltaCollector, [4, 4]); assert.strictEqual(metric, undefined); } metricStorage.record(1, {}, api.context.active(), [5, 5]); { - const metric = metricStorage.collect( - deltaCollector, - [deltaCollector], - [6, 6] - ); + const metric = metricStorage.collect(deltaCollector, [6, 6]); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 1); @@ -107,22 +97,18 @@ describe('SyncMetricStorage', () => { }); describe('Cumulative Collector', () => { - const collectors = [cumulativeCollector]; it('should collect cumulative metrics', async () => { const metricStorage = new SyncMetricStorage( defaultInstrumentDescriptor, new SumAggregator(true), - new NoopAttributesProcessor() + new NoopAttributesProcessor(), + [cumulativeCollector] ); metricStorage.record(1, {}, api.context.active(), [0, 0]); metricStorage.record(2, {}, api.context.active(), [1, 1]); metricStorage.record(3, {}, api.context.active(), [2, 2]); { - const metric = metricStorage.collect( - cumulativeCollector, - collectors, - [3, 3] - ); + const metric = metricStorage.collect(cumulativeCollector, [3, 3]); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 1); @@ -131,11 +117,7 @@ describe('SyncMetricStorage', () => { // The attributes should be memorized. { - const metric = metricStorage.collect( - cumulativeCollector, - collectors, - [4, 4] - ); + const metric = metricStorage.collect(cumulativeCollector, [4, 4]); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 1); @@ -144,11 +126,7 @@ describe('SyncMetricStorage', () => { metricStorage.record(1, {}, api.context.active(), [5, 5]); { - const metric = metricStorage.collect( - cumulativeCollector, - collectors, - [6, 6] - ); + const metric = metricStorage.collect(cumulativeCollector, [6, 6]); assertMetricData(metric, DataPointType.SUM); assert.strictEqual(metric.dataPoints.length, 1); diff --git a/packages/sdk-metrics/test/state/TemporalMetricProcessor.test.ts b/packages/sdk-metrics/test/state/TemporalMetricProcessor.test.ts index 26a10aea57..77edc36b17 100644 --- a/packages/sdk-metrics/test/state/TemporalMetricProcessor.test.ts +++ b/packages/sdk-metrics/test/state/TemporalMetricProcessor.test.ts @@ -48,20 +48,18 @@ describe('TemporalMetricProcessor', () => { describe('buildMetrics', () => { describe('single delta collector', () => { - const collectors = [deltaCollector1]; - it('should build delta recording metrics', () => { const spy = sinon.spy(deltaCollector1, 'selectAggregationTemporality'); const aggregator = new SumAggregator(true); const deltaMetricStorage = new DeltaMetricProcessor(aggregator); - const temporalMetricStorage = new TemporalMetricProcessor(aggregator); - + const temporalMetricStorage = new TemporalMetricProcessor(aggregator, [ + deltaCollector1, + ]); deltaMetricStorage.record(1, {}, api.context.active(), [1, 1]); { const metric = temporalMetricStorage.buildMetrics( deltaCollector1, - collectors, defaultInstrumentDescriptor, deltaMetricStorage.collect(), [2, 2] @@ -81,7 +79,6 @@ describe('TemporalMetricProcessor', () => { { const metric = temporalMetricStorage.buildMetrics( deltaCollector1, - collectors, defaultInstrumentDescriptor, deltaMetricStorage.collect(), [4, 4] @@ -101,7 +98,6 @@ describe('TemporalMetricProcessor', () => { { const metric = temporalMetricStorage.buildMetrics( deltaCollector1, - collectors, defaultInstrumentDescriptor, deltaMetricStorage.collect(), [5, 5] @@ -117,18 +113,18 @@ describe('TemporalMetricProcessor', () => { }); describe('two delta collector', () => { - const collectors = [deltaCollector1, deltaCollector2]; - it('should build delta recording metrics', () => { const aggregator = new SumAggregator(true); const deltaMetricStorage = new DeltaMetricProcessor(aggregator); - const temporalMetricStorage = new TemporalMetricProcessor(aggregator); + const temporalMetricStorage = new TemporalMetricProcessor(aggregator, [ + deltaCollector1, + deltaCollector2, + ]); deltaMetricStorage.record(1, {}, api.context.active(), [1, 1]); { const metric = temporalMetricStorage.buildMetrics( deltaCollector1, - collectors, defaultInstrumentDescriptor, deltaMetricStorage.collect(), [2, 2] @@ -147,7 +143,6 @@ describe('TemporalMetricProcessor', () => { { const metric = temporalMetricStorage.buildMetrics( deltaCollector2, - collectors, defaultInstrumentDescriptor, deltaMetricStorage.collect(), [3, 3] @@ -166,7 +161,6 @@ describe('TemporalMetricProcessor', () => { }); describe('single cumulative collector', () => { - const collectors = [cumulativeCollector1]; it('should build delta recording metrics', () => { const spy = sinon.spy( cumulativeCollector1, @@ -175,13 +169,14 @@ describe('TemporalMetricProcessor', () => { const aggregator = new SumAggregator(true); const deltaMetricStorage = new DeltaMetricProcessor(aggregator); - const temporalMetricStorage = new TemporalMetricProcessor(aggregator); + const temporalMetricStorage = new TemporalMetricProcessor(aggregator, [ + cumulativeCollector1, + ]); deltaMetricStorage.record(1, {}, api.context.active(), [1, 1]); { const metric = temporalMetricStorage.buildMetrics( cumulativeCollector1, - collectors, defaultInstrumentDescriptor, deltaMetricStorage.collect(), [2, 2] @@ -201,7 +196,6 @@ describe('TemporalMetricProcessor', () => { { const metric = temporalMetricStorage.buildMetrics( cumulativeCollector1, - collectors, defaultInstrumentDescriptor, deltaMetricStorage.collect(), [4, 4] @@ -223,17 +217,18 @@ describe('TemporalMetricProcessor', () => { }); describe('cumulative collector with delta collector', () => { - const collectors = [deltaCollector1, cumulativeCollector1]; it('should build delta recording metrics', () => { const aggregator = new SumAggregator(true); const deltaMetricStorage = new DeltaMetricProcessor(aggregator); - const temporalMetricStorage = new TemporalMetricProcessor(aggregator); + const temporalMetricStorage = new TemporalMetricProcessor(aggregator, [ + cumulativeCollector1, + deltaCollector1, + ]); deltaMetricStorage.record(1, {}, api.context.active(), [1, 1]); { const metric = temporalMetricStorage.buildMetrics( cumulativeCollector1, - collectors, defaultInstrumentDescriptor, deltaMetricStorage.collect(), [2, 2] @@ -253,7 +248,6 @@ describe('TemporalMetricProcessor', () => { { const metric = temporalMetricStorage.buildMetrics( deltaCollector1, - collectors, defaultInstrumentDescriptor, deltaMetricStorage.collect(), [4, 4] @@ -271,7 +265,6 @@ describe('TemporalMetricProcessor', () => { { const metric = temporalMetricStorage.buildMetrics( cumulativeCollector1, - collectors, defaultInstrumentDescriptor, deltaMetricStorage.collect(), [5, 5] From f8e187b473274cc2011e7385992f07d319d667dc Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 10 Oct 2023 15:46:49 +0200 Subject: [PATCH 140/141] chore: release SDK 1.17.1/Experimental 0.44.0 (#4183) --- CHANGELOG.md | 8 +++++ 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 | 16 ++++++--- .../node14/package.json | 6 ++-- .../node16/package.json | 6 ++-- experimental/examples/logs/package.json | 2 +- .../examples/opencensus-shim/package.json | 16 ++++----- 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 | 35 +++++++++---------- .../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 | 12 +++---- .../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, 311 insertions(+), 298 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b783d89012..ecfcd835a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,14 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) +### :books: (Refine Doc) + +### :house: (Internal) + +## 1.17.1 + +### :bug: (Bug Fix) + * fix(sdk-trace-base): BatchSpanProcessor flushes when `maxExportBatchSize` is reached [#3958](https://github.com/open-telemetry/opentelemetry-js/pull/3958) @nordfjord * fix(sdk-metrics): allow instrument names to contain '/' [#4155](https://github.com/open-telemetry/opentelemetry-js/pull/4155) * fix(sdk-metrics): prevent per-reader storages from keeping unreported accumulations in memory [#4163](https://github.com/open-telemetry/opentelemetry-js/pull/4163) @pichlermarc diff --git a/examples/esm-http-ts/package.json b/examples/esm-http-ts/package.json index 046ab7fe0a..8920f11670 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.43.0", + "version": "0.44.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.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" + "@opentelemetry/exporter-trace-otlp-proto": "0.44.0", + "@opentelemetry/instrumentation": "0.44.0", + "@opentelemetry/instrumentation-http": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", + "@opentelemetry/sdk-trace-node": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.1" } } diff --git a/examples/http/package.json b/examples/http/package.json index 9a3bcb2de4..4ea1cafe3f 100644 --- a/examples/http/package.json +++ b/examples/http/package.json @@ -1,7 +1,7 @@ { "name": "http-example", "private": true, - "version": "0.43.0", + "version": "0.44.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.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" + "@opentelemetry/exporter-jaeger": "1.17.1", + "@opentelemetry/exporter-zipkin": "1.17.1", + "@opentelemetry/instrumentation": "0.44.0", + "@opentelemetry/instrumentation-http": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", + "@opentelemetry/sdk-trace-node": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 3653c96ff5..13434d9151 100644 --- a/examples/https/package.json +++ b/examples/https/package.json @@ -1,7 +1,7 @@ { "name": "https-example", "private": true, - "version": "0.43.0", + "version": "0.44.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.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" + "@opentelemetry/exporter-jaeger": "1.17.1", + "@opentelemetry/exporter-zipkin": "1.17.1", + "@opentelemetry/instrumentation": "0.44.0", + "@opentelemetry/instrumentation-http": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", + "@opentelemetry/sdk-trace-node": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 4a8abc9e17..0e3d5febad 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.43.0", + "version": "0.44.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.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" + "@opentelemetry/context-zone": "1.17.1", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.44.0", + "@opentelemetry/exporter-trace-otlp-http": "0.44.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.44.0", + "@opentelemetry/exporter-zipkin": "1.17.1", + "@opentelemetry/instrumentation": "0.44.0", + "@opentelemetry/instrumentation-fetch": "0.44.0", + "@opentelemetry/instrumentation-xml-http-request": "0.44.0", + "@opentelemetry/propagator-b3": "1.17.1", + "@opentelemetry/sdk-metrics": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", + "@opentelemetry/sdk-trace-web": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 5091af0836..871a2a423a 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.43.0", + "version": "0.44.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.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" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.44.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.44.0", + "@opentelemetry/exporter-metrics-otlp-proto": "0.44.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.44.0", + "@opentelemetry/exporter-trace-otlp-http": "0.44.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-metrics": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 72f0289574..cfb4d189bb 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -4,8 +4,18 @@ All notable changes to experimental packages in this project will be documented ## Unreleased +### :boom: Breaking Change + +### :rocket: (Enhancement) + +### :bug: (Bug Fix) + ### :books: (Refine Doc) +### :house: (Internal) + +## 0.44.0 + ### :boom: Breaking Change * fix(exporter-logs-otlp-proto): change OTLPLogExporter to OTLPLogExporter [#4140](https://github.com/open-telemetry/opentelemetry-js/pull/4140) @Vunovati @@ -22,10 +32,7 @@ All notable changes to experimental packages in this project will be documented ### :bug: (Bug Fix) * fix(otlp-exporter-base): replaced usage of window with _globalThis [#4157](https://github.com/open-telemetry/opentelemetry-js/pull/4157) @cristianmadularu - -### :books: (Refine Doc) - -### :house: (Internal) +* fix(otlp-transformer): Avoid precision loss when converting from HrTime to unix nanoseconds. [#4062](https://github.com/open-telemetry/opentelemetry-js/pull/4062) ## 0.43.0 @@ -56,7 +63,6 @@ All notable changes to experimental packages in this project will be documented ### :bug: (Bug Fix) -* fix(otlp-transformer): Avoid precision loss when converting from HrTime to unix nanoseconds. [#4062](https://github.com/open-telemetry/opentelemetry-js/pull/4062) * fix(exporter-logs-otlp-http): add @opentelemetry/api-logs as dependency ## 0.41.2 diff --git a/experimental/backwards-compatibility/node14/package.json b/experimental/backwards-compatibility/node14/package.json index 5e7509407c..41ac4219ee 100644 --- a/experimental/backwards-compatibility/node14/package.json +++ b/experimental/backwards-compatibility/node14/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node14", - "version": "0.43.0", + "version": "0.44.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.43.0", - "@opentelemetry/sdk-trace-base": "1.17.0" + "@opentelemetry/sdk-node": "0.44.0", + "@opentelemetry/sdk-trace-base": "1.17.1" }, "devDependencies": { "@types/node": "14.18.25", diff --git a/experimental/backwards-compatibility/node16/package.json b/experimental/backwards-compatibility/node16/package.json index 2c8c2f8e7f..a489071678 100644 --- a/experimental/backwards-compatibility/node16/package.json +++ b/experimental/backwards-compatibility/node16/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node16", - "version": "0.43.0", + "version": "0.44.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.43.0", - "@opentelemetry/sdk-trace-base": "1.17.0" + "@opentelemetry/sdk-node": "0.44.0", + "@opentelemetry/sdk-trace-base": "1.17.1" }, "devDependencies": { "@types/node": "16.11.52", diff --git a/experimental/examples/logs/package.json b/experimental/examples/logs/package.json index 03ff3e05b1..b39d19b959 100644 --- a/experimental/examples/logs/package.json +++ b/experimental/examples/logs/package.json @@ -1,6 +1,6 @@ { "name": "logs-example", - "version": "0.43.0", + "version": "0.44.0", "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 bd97c726c1..1890708445 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.43.0", + "version": "0.44.0", "description": "Example of using @opentelemetry/shim-opencensus in Node.js", "main": "index.js", "scripts": { @@ -31,13 +31,13 @@ "@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" + "@opentelemetry/exporter-prometheus": "0.44.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-metrics": "1.17.1", + "@opentelemetry/sdk-trace-node": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.1", + "@opentelemetry/shim-opencensus": "0.44.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 9a7beb79e1..7c7f8f5713 100644 --- a/experimental/examples/prometheus/package.json +++ b/experimental/examples/prometheus/package.json @@ -1,6 +1,6 @@ { "name": "prometheus-example", - "version": "0.43.0", + "version": "0.44.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.43.0", - "@opentelemetry/sdk-metrics": "1.17.0" + "@opentelemetry/exporter-prometheus": "0.44.0", + "@opentelemetry/sdk-metrics": "1.17.1" } } diff --git a/experimental/packages/api-events/package.json b/experimental/packages/api-events/package.json index f430f3d31b..fc3537d6d3 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.43.0", + "version": "0.44.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 4dc86c99f2..84605e3306 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.43.0", + "version": "0.44.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 c7e8978fdf..6be018babb 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.43.0", + "version": "0.44.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.20", "@grpc/proto-loader": "^0.7.10", "@opentelemetry/api": "1.6.0", - "@opentelemetry/api-logs": "0.43.0", - "@opentelemetry/otlp-exporter-base": "0.43.0", - "@opentelemetry/resources": "1.17.0", + "@opentelemetry/api-logs": "0.44.0", + "@opentelemetry/otlp-exporter-base": "0.44.0", + "@opentelemetry/resources": "1.17.1", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/sinon": "10.0.18", @@ -73,10 +73,10 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@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" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.44.0", + "@opentelemetry/otlp-transformer": "0.44.0", + "@opentelemetry/sdk-logs": "0.44.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 37f96f859f..a3b53e05bc 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.43.0", + "version": "0.44.0", "publishConfig": { "access": "public" }, @@ -73,7 +73,7 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", - "@opentelemetry/resources": "1.17.0", + "@opentelemetry/resources": "1.17.1", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/sinon": "10.0.18", @@ -104,10 +104,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@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" + "@opentelemetry/api-logs": "0.44.0", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/otlp-exporter-base": "0.44.0", + "@opentelemetry/otlp-transformer": "0.44.0", + "@opentelemetry/sdk-logs": "0.44.0" } } diff --git a/experimental/packages/exporter-logs-otlp-proto/package.json b/experimental/packages/exporter-logs-otlp-proto/package.json index 7ddc7aaa0d..5ad2664217 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.43.0", + "version": "0.44.0", "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.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" + "@opentelemetry/api-logs": "0.44.0", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/otlp-exporter-base": "0.44.0", + "@opentelemetry/otlp-proto-exporter-base": "0.44.0", + "@opentelemetry/otlp-transformer": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-logs": "0.44.0", + "@opentelemetry/sdk-trace-base": "1.17.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 207880858b..bc14408e58 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.43.0", + "version": "0.44.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.20", "@grpc/proto-loader": "^0.7.10", "@opentelemetry/api": "1.6.0", - "@opentelemetry/otlp-exporter-base": "0.43.0", + "@opentelemetry/otlp-exporter-base": "0.44.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/sinon": "10.0.18", @@ -70,11 +70,11 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@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" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.44.0", + "@opentelemetry/otlp-transformer": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.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 83efbdf06f..46d2f81c30 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.43.0", + "version": "0.44.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.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" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/otlp-exporter-base": "0.44.0", + "@opentelemetry/otlp-transformer": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.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 8b65b2be7c..d50cd51eaa 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.43.0", + "version": "0.44.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", @@ -92,12 +92,12 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@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" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/otlp-exporter-base": "0.44.0", + "@opentelemetry/otlp-proto-exporter-base": "0.44.0", + "@opentelemetry/otlp-transformer": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.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 af6f3365c6..a82c73f60f 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.43.0", + "version": "0.44.0", "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.17.0", - "@opentelemetry/semantic-conventions": "1.17.0" + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 9a158ffe39..7c612bf036 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.43.0", + "version": "0.44.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.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" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.44.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.44.0", + "@opentelemetry/otlp-transformer": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-metrics": "1.17.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 08141b1b26..7ab50d0ea8 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.43.0", + "version": "0.44.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.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" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/otlp-exporter-base": "0.44.0", + "@opentelemetry/otlp-transformer": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-metrics": "1.17.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 a3e379fe8e..f9ddf74a6e 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.43.0", + "version": "0.44.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", @@ -75,13 +75,13 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@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" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.44.0", + "@opentelemetry/otlp-exporter-base": "0.44.0", + "@opentelemetry/otlp-proto-exporter-base": "0.44.0", + "@opentelemetry/otlp-transformer": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-metrics": "1.17.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 a16ec9a833..15cdcffe9a 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.43.0", + "version": "0.44.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.6.0", - "@opentelemetry/semantic-conventions": "1.17.0", + "@opentelemetry/semantic-conventions": "1.17.1", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/sinon": "10.0.18", @@ -61,9 +61,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0", - "@opentelemetry/resources": "1.17.0", - "@opentelemetry/sdk-metrics": "1.17.0" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-metrics": "1.17.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 3690e77b64..f83b054bd0 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.43.0", + "version": "0.44.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.20", "@opentelemetry/api": "1.6.0", - "@opentelemetry/context-zone": "1.17.0", - "@opentelemetry/propagator-b3": "1.17.0", - "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/context-zone": "1.17.1", + "@opentelemetry/propagator-b3": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/sinon": "10.0.18", @@ -88,10 +88,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0", - "@opentelemetry/instrumentation": "0.43.0", - "@opentelemetry/sdk-trace-web": "1.17.0", - "@opentelemetry/semantic-conventions": "1.17.0" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/instrumentation": "0.44.0", + "@opentelemetry/sdk-trace-web": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 b2248c30a1..72dc5034b8 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.43.0", + "version": "0.44.0", "description": "OpenTelemetry grpc automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,10 +50,10 @@ "@grpc/grpc-js": "^1.7.1", "@grpc/proto-loader": "^0.7.10", "@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", + "@opentelemetry/context-async-hooks": "1.17.1", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", + "@opentelemetry/sdk-trace-node": "1.17.1", "@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.43.0", - "@opentelemetry/semantic-conventions": "1.17.0" + "@opentelemetry/instrumentation": "0.44.0", + "@opentelemetry/semantic-conventions": "1.17.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 f4cc3b40e7..1c1d524e8b 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.43.0", + "version": "0.44.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.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", + "@opentelemetry/context-async-hooks": "1.17.1", + "@opentelemetry/sdk-metrics": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", + "@opentelemetry/sdk-trace-node": "1.17.1", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/request-promise-native": "1.0.19", @@ -74,9 +74,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0", - "@opentelemetry/instrumentation": "0.43.0", - "@opentelemetry/semantic-conventions": "1.17.0", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/instrumentation": "0.44.0", + "@opentelemetry/semantic-conventions": "1.17.1", "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 9be7a18eac..0e4a8583ed 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.43.0", + "version": "0.44.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.20", "@opentelemetry/api": "1.6.0", - "@opentelemetry/context-zone": "1.17.0", - "@opentelemetry/propagator-b3": "1.17.0", - "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/context-zone": "1.17.1", + "@opentelemetry/propagator-b3": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/sinon": "10.0.18", @@ -88,10 +88,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0", - "@opentelemetry/instrumentation": "0.43.0", - "@opentelemetry/sdk-trace-web": "1.17.0", - "@opentelemetry/semantic-conventions": "1.17.0" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/instrumentation": "0.44.0", + "@opentelemetry/sdk-trace-web": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 1e6fc40e48..5cf7554397 100644 --- a/experimental/packages/opentelemetry-instrumentation/package.json +++ b/experimental/packages/opentelemetry-instrumentation/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation", - "version": "0.43.0", + "version": "0.44.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", @@ -83,7 +83,7 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": "1.6.0", - "@opentelemetry/sdk-metrics": "1.17.0", + "@opentelemetry/sdk-metrics": "1.17.1", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/semver": "7.5.3", diff --git a/experimental/packages/opentelemetry-sdk-node/package.json b/experimental/packages/opentelemetry-sdk-node/package.json index 6385adc7a4..6a5261623a 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.43.0", + "version": "0.44.0", "description": "OpenTelemetry SDK for Node.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -17,8 +17,7 @@ "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", - "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)\\\");\"" + "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "keywords": [ "opentelemetry", @@ -45,27 +44,27 @@ "access": "public" }, "dependencies": { - "@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" + "@opentelemetry/api-logs": "0.44.0", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/exporter-jaeger": "1.17.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.44.0", + "@opentelemetry/exporter-trace-otlp-http": "0.44.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.44.0", + "@opentelemetry/exporter-zipkin": "1.17.1", + "@opentelemetry/instrumentation": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-logs": "0.44.0", + "@opentelemetry/sdk-metrics": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", + "@opentelemetry/sdk-trace-node": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.7.0" }, "devDependencies": { "@opentelemetry/api": "1.6.0", - "@opentelemetry/context-async-hooks": "1.17.0", + "@opentelemetry/context-async-hooks": "1.17.1", "@opentelemetry/exporter-jaeger": "1.17.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", diff --git a/experimental/packages/otlp-exporter-base/package.json b/experimental/packages/otlp-exporter-base/package.json index cf59828ef0..be4008cbd9 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.43.0", + "version": "0.44.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.17.0" + "@opentelemetry/core": "1.17.1" }, "devDependencies": { "@babel/core": "7.22.20", diff --git a/experimental/packages/otlp-grpc-exporter-base/package.json b/experimental/packages/otlp-grpc-exporter-base/package.json index 4ee3d0b422..4be5e7d7b5 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.43.0", + "version": "0.44.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.20", "@opentelemetry/api": "1.6.0", - "@opentelemetry/otlp-transformer": "0.43.0", - "@opentelemetry/resources": "1.17.0", - "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/otlp-transformer": "0.44.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/sinon": "10.0.18", @@ -73,8 +73,8 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.17.0", - "@opentelemetry/otlp-exporter-base": "0.43.0", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/otlp-exporter-base": "0.44.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 6f8e2ae768..602bbd9a5b 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.43.0", + "version": "0.44.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.17.0", - "@opentelemetry/otlp-exporter-base": "0.43.0", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/otlp-exporter-base": "0.44.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 4efa0b84d0..de2ef27e53 100644 --- a/experimental/packages/otlp-transformer/package.json +++ b/experimental/packages/otlp-transformer/package.json @@ -4,7 +4,7 @@ "publishConfig": { "access": "public" }, - "version": "0.43.0", + "version": "0.44.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.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" + "@opentelemetry/api-logs": "0.44.0", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-logs": "0.44.0", + "@opentelemetry/sdk-metrics": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.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 ef33445de3..2bff60bbdd 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.43.0", + "version": "0.44.0", "publishConfig": { "access": "public" }, @@ -74,7 +74,7 @@ "devDependencies": { "@babel/core": "7.22.20", "@opentelemetry/api": ">=1.4.0 <1.7.0", - "@opentelemetry/api-logs": "0.43.0", + "@opentelemetry/api-logs": "0.44.0", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/sinon": "10.0.18", @@ -99,7 +99,7 @@ "webpack-merge": "5.9.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0", - "@opentelemetry/resources": "1.17.0" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/resources": "1.17.1" } } diff --git a/experimental/packages/shim-opencensus/package.json b/experimental/packages/shim-opencensus/package.json index 3b96de24d4..12fcba77e8 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.43.0", + "version": "0.44.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.6.0", - "@opentelemetry/context-async-hooks": "1.17.0", - "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/context-async-hooks": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/sinon": "10.0.18", @@ -69,9 +69,9 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0", - "@opentelemetry/resources": "1.17.0", - "@opentelemetry/sdk-metrics": "1.17.0", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-metrics": "1.17.1", "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 2b5fcd3404..927d8057a3 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.17.0", + "version": "1.18.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.17.0", - "@opentelemetry/core": "1.17.0", - "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/context-async-hooks": "1.17.1", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", "axios": "1.5.1", "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 ea0da0acbe..063ca2ed63 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.17.0", + "version": "1.17.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 6076ad618c..6654fe9e03 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.17.0", + "version": "1.17.1", "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 905822e59a..38703eb66b 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.17.0", + "version": "1.17.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.17.0", + "@opentelemetry/context-zone-peer-dep": "1.17.1", "zone.js": "^0.11.0" }, "sideEffects": true, diff --git a/packages/opentelemetry-core/package.json b/packages/opentelemetry-core/package.json index e7214524a9..6ab47de028 100644 --- a/packages/opentelemetry-core/package.json +++ b/packages/opentelemetry-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/core", - "version": "1.17.0", + "version": "1.17.1", "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.7.0" }, "dependencies": { - "@opentelemetry/semantic-conventions": "1.17.0" + "@opentelemetry/semantic-conventions": "1.17.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 64c1a33b4c..b412ade129 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.17.0", + "version": "1.17.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.17.0", + "@opentelemetry/resources": "1.17.1", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/sinon": "10.0.18", @@ -63,9 +63,9 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0", - "@opentelemetry/sdk-trace-base": "1.17.0", - "@opentelemetry/semantic-conventions": "1.17.0", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 aac154eb6e..b7e10f8ebc 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.17.0", + "version": "1.17.1", "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.17.0", - "@opentelemetry/resources": "1.17.0", - "@opentelemetry/sdk-trace-base": "1.17.0", - "@opentelemetry/semantic-conventions": "1.17.0" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 34f044c541..d1f04a4453 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.17.0", + "version": "1.17.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.17.0" + "@opentelemetry/core": "1.17.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.7.0" diff --git a/packages/opentelemetry-propagator-jaeger/package.json b/packages/opentelemetry-propagator-jaeger/package.json index 13acdb1e49..ee8455ef1a 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.17.0", + "version": "1.17.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", @@ -81,7 +81,7 @@ "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0" + "@opentelemetry/core": "1.17.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 ec7b306e30..f4cc67c22a 100644 --- a/packages/opentelemetry-resources/package.json +++ b/packages/opentelemetry-resources/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resources", - "version": "1.17.0", + "version": "1.17.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.7.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0", - "@opentelemetry/semantic-conventions": "1.17.0" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 1f92308f58..eca577109a 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.17.0", + "version": "1.17.1", "description": "OpenTelemetry Tracing", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -94,9 +94,9 @@ "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0", - "@opentelemetry/resources": "1.17.0", - "@opentelemetry/semantic-conventions": "1.17.0" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 495cda0fde..666fb058e0 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.17.0", + "version": "1.17.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.7.0", - "@opentelemetry/resources": "1.17.0", - "@opentelemetry/semantic-conventions": "1.17.0", + "@opentelemetry/resources": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.1", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "@types/semver": "7.5.3", @@ -65,11 +65,11 @@ "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "dependencies": { - "@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", + "@opentelemetry/context-async-hooks": "1.17.1", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/propagator-b3": "1.17.1", + "@opentelemetry/propagator-jaeger": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", "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 afa8e31c5b..cc91460b6a 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.17.0", + "version": "1.17.1", "description": "OpenTelemetry Web Tracer", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -57,9 +57,9 @@ "devDependencies": { "@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", + "@opentelemetry/context-zone": "1.17.1", + "@opentelemetry/propagator-b3": "1.17.1", + "@opentelemetry/resources": "1.17.1", "@types/jquery": "3.5.21", "@types/mocha": "10.0.2", "@types/node": "18.6.5", @@ -92,9 +92,9 @@ "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0", - "@opentelemetry/sdk-trace-base": "1.17.0", - "@opentelemetry/semantic-conventions": "1.17.0" + "@opentelemetry/core": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 e930e1d04e..893356b104 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.17.0", + "version": "1.17.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 78381872e2..3e6fa8101c 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.17.0", + "version": "1.17.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.7.0", - "@opentelemetry/propagator-b3": "1.17.0", - "@opentelemetry/propagator-jaeger": "1.17.0", - "@opentelemetry/sdk-trace-base": "1.17.0", + "@opentelemetry/propagator-b3": "1.17.1", + "@opentelemetry/propagator-jaeger": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", "@types/mocha": "10.0.2", "@types/node": "18.6.5", "codecov": "3.8.3", @@ -60,8 +60,8 @@ "@opentelemetry/api": ">=1.0.0 <1.7.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0", - "@opentelemetry/semantic-conventions": "1.17.0", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/semantic-conventions": "1.17.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 9d6c7d4e8f..ee69a4d485 100644 --- a/packages/sdk-metrics/package.json +++ b/packages/sdk-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-metrics", - "version": "1.17.0", + "version": "1.17.1", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -84,8 +84,8 @@ "@opentelemetry/api": ">=1.3.0 <1.7.0" }, "dependencies": { - "@opentelemetry/core": "1.17.0", - "@opentelemetry/resources": "1.17.0", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/resources": "1.17.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 b7836e5409..a5f1e971b0 100644 --- a/packages/template/package.json +++ b/packages/template/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/template", - "version": "1.17.0", + "version": "1.17.1", "private": true, "publishConfig": { "access": "restricted" diff --git a/selenium-tests/package.json b/selenium-tests/package.json index 9592f050de..4ddf94829e 100644 --- a/selenium-tests/package.json +++ b/selenium-tests/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/selenium-tests", - "version": "1.17.0", + "version": "1.18.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.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", + "@opentelemetry/context-zone-peer-dep": "1.17.1", + "@opentelemetry/core": "1.17.1", + "@opentelemetry/exporter-trace-otlp-http": "0.44.0", + "@opentelemetry/exporter-zipkin": "1.17.1", + "@opentelemetry/instrumentation": "0.44.0", + "@opentelemetry/instrumentation-fetch": "0.44.0", + "@opentelemetry/instrumentation-xml-http-request": "0.44.0", + "@opentelemetry/sdk-metrics": "1.17.1", + "@opentelemetry/sdk-trace-base": "1.17.1", + "@opentelemetry/sdk-trace-web": "1.17.1", "zone.js": "0.11.4" } } From b6e532bf52c9553e51aa6d3375e85f0dd9bd67c1 Mon Sep 17 00:00:00 2001 From: Chengzhong Wu Date: Wed, 11 Oct 2023 16:05:03 +0800 Subject: [PATCH 141/141] feat(metrics): prototype experimental advice support (#3876) Co-authored-by: Marc Pichler --- CHANGELOG.md | 2 + api/CHANGELOG.md | 4 ++ api/src/index.ts | 1 + api/src/metrics/Metric.ts | 18 ++++++ .../sdk-metrics/src/InstrumentDescriptor.ts | 18 +++++- packages/sdk-metrics/src/ObservableResult.ts | 15 +++-- packages/sdk-metrics/src/aggregator/Drop.ts | 5 +- .../src/aggregator/ExponentialHistogram.ts | 5 +- .../sdk-metrics/src/aggregator/Histogram.ts | 10 +++- .../sdk-metrics/src/aggregator/LastValue.ts | 9 ++- packages/sdk-metrics/src/aggregator/Sum.ts | 9 ++- packages/sdk-metrics/src/aggregator/types.ts | 7 +-- packages/sdk-metrics/src/export/MetricData.ts | 18 +++++- packages/sdk-metrics/src/index.ts | 9 ++- .../sdk-metrics/src/state/MetricStorage.ts | 1 + .../src/state/ObservableRegistry.ts | 5 +- packages/sdk-metrics/src/view/Aggregation.ts | 5 ++ .../test/InstrumentDescriptor.test.ts | 54 +++++++++++++++++ packages/sdk-metrics/test/Instruments.test.ts | 58 ++++++++++++++++++- .../sdk-metrics/test/ObservableResult.test.ts | 28 ++++----- .../test/state/MetricStorageRegistry.test.ts | 19 +++++- packages/sdk-metrics/test/util.ts | 8 ++- 22 files changed, 252 insertions(+), 56 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ecfcd835a1..40b17374f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :rocket: (Enhancement) +* feat(metrics): prototype experimental advice support [#3876](https://github.com/open-telemetry/opentelemetry-js/pull/3876) @legendecas + ### :bug: (Bug Fix) ### :books: (Refine Doc) diff --git a/api/CHANGELOG.md b/api/CHANGELOG.md index cba48a4149..4738e1449e 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(metrics): prototype experimental advice support [#3876](https://github.com/open-telemetry/opentelemetry-js/pull/3876) @legendecas + ## 1.6.0 ### :bug: (Bug Fix) diff --git a/api/src/index.ts b/api/src/index.ts index 6992005874..c5dbe1685b 100644 --- a/api/src/index.ts +++ b/api/src/index.ts @@ -51,6 +51,7 @@ export { ObservableUpDownCounter, UpDownCounter, BatchObservableCallback, + MetricAdvice, MetricAttributes, MetricAttributeValue, ObservableCallback, diff --git a/api/src/metrics/Metric.ts b/api/src/metrics/Metric.ts index 533aa264b1..e8abca3b1d 100644 --- a/api/src/metrics/Metric.ts +++ b/api/src/metrics/Metric.ts @@ -18,6 +18,18 @@ import { Attributes, AttributeValue } from '../common/Attributes'; import { Context } from '../context/types'; import { BatchObservableResult, ObservableResult } from './ObservableResult'; +/** + * Advisory options influencing aggregation configuration parameters. + * @experimental + */ +export interface MetricAdvice { + /** + * Hint the explicit bucket boundaries for SDK if the metric is been + * aggregated with a HistogramAggregator. + */ + explicitBucketBoundaries?: number[]; +} + /** * Options needed for metric creation */ @@ -39,6 +51,12 @@ export interface MetricOptions { * @default {@link ValueType.DOUBLE} */ valueType?: ValueType; + + /** + * The advice influencing aggregation configuration parameters. + * @experimental + */ + advice?: MetricAdvice; } /** The Type of value. It describes how the data is reported. */ diff --git a/packages/sdk-metrics/src/InstrumentDescriptor.ts b/packages/sdk-metrics/src/InstrumentDescriptor.ts index f0053f9c39..ed036eb4db 100644 --- a/packages/sdk-metrics/src/InstrumentDescriptor.ts +++ b/packages/sdk-metrics/src/InstrumentDescriptor.ts @@ -14,7 +14,12 @@ * limitations under the License. */ -import { MetricOptions, ValueType, diag } from '@opentelemetry/api'; +import { + MetricAdvice, + MetricOptions, + ValueType, + diag, +} from '@opentelemetry/api'; import { View } from './view/View'; import { equalsCaseInsensitive } from './utils'; @@ -31,7 +36,10 @@ export enum InstrumentType { } /** - * An interface describing the instrument. + * An internal interface describing the instrument. + * + * This is intentionally distinguished from the public MetricDescriptor (a.k.a. InstrumentDescriptor) + * which may not contains internal fields like metric advice. */ export interface InstrumentDescriptor { readonly name: string; @@ -39,6 +47,10 @@ export interface InstrumentDescriptor { readonly unit: string; readonly type: InstrumentType; readonly valueType: ValueType; + /** + * @experimental + */ + readonly advice: MetricAdvice; } export function createInstrumentDescriptor( @@ -57,6 +69,7 @@ export function createInstrumentDescriptor( description: options?.description ?? '', unit: options?.unit ?? '', valueType: options?.valueType ?? ValueType.DOUBLE, + advice: options?.advice ?? {}, }; } @@ -70,6 +83,7 @@ export function createInstrumentDescriptorWithView( type: instrument.type, unit: instrument.unit, valueType: instrument.valueType, + advice: instrument.advice, }; } diff --git a/packages/sdk-metrics/src/ObservableResult.ts b/packages/sdk-metrics/src/ObservableResult.ts index 9298a46d93..c9a7b202ea 100644 --- a/packages/sdk-metrics/src/ObservableResult.ts +++ b/packages/sdk-metrics/src/ObservableResult.ts @@ -24,7 +24,6 @@ import { } from '@opentelemetry/api'; import { AttributeHashMap } from './state/HashMap'; import { isObservableInstrument, ObservableInstrument } from './Instruments'; -import { InstrumentDescriptor } from '.'; /** * The class implements {@link ObservableResult} interface. @@ -35,7 +34,10 @@ export class ObservableResultImpl implements ObservableResult { */ _buffer = new AttributeHashMap(); - constructor(private _descriptor: InstrumentDescriptor) {} + constructor( + private _instrumentName: string, + private _valueType: ValueType + ) {} /** * Observe a measurement of the value associated with the given attributes. @@ -43,16 +45,13 @@ export class ObservableResultImpl implements ObservableResult { observe(value: number, attributes: MetricAttributes = {}): void { if (typeof value !== 'number') { diag.warn( - `non-number value provided to metric ${this._descriptor.name}: ${value}` + `non-number value provided to metric ${this._instrumentName}: ${value}` ); return; } - if ( - this._descriptor.valueType === ValueType.INT && - !Number.isInteger(value) - ) { + if (this._valueType === ValueType.INT && !Number.isInteger(value)) { diag.warn( - `INT value type cannot accept a floating-point value for ${this._descriptor.name}, ignoring the fractional digits.` + `INT value type cannot accept a floating-point value for ${this._instrumentName}, ignoring the fractional digits.` ); value = Math.trunc(value); // ignore non-finite values. diff --git a/packages/sdk-metrics/src/aggregator/Drop.ts b/packages/sdk-metrics/src/aggregator/Drop.ts index 343c90357c..f968bdf4d6 100644 --- a/packages/sdk-metrics/src/aggregator/Drop.ts +++ b/packages/sdk-metrics/src/aggregator/Drop.ts @@ -16,8 +16,7 @@ import { HrTime } from '@opentelemetry/api'; import { AggregationTemporality } from '../export/AggregationTemporality'; -import { MetricData } from '../export/MetricData'; -import { InstrumentDescriptor } from '../InstrumentDescriptor'; +import { MetricData, MetricDescriptor } from '../export/MetricData'; import { Maybe } from '../utils'; import { AggregatorKind, Aggregator, AccumulationRecord } from './types'; @@ -38,7 +37,7 @@ export class DropAggregator implements Aggregator { } toMetricData( - _descriptor: InstrumentDescriptor, + _descriptor: MetricDescriptor, _aggregationTemporality: AggregationTemporality, _accumulationByAttributes: AccumulationRecord[], _endTime: HrTime diff --git a/packages/sdk-metrics/src/aggregator/ExponentialHistogram.ts b/packages/sdk-metrics/src/aggregator/ExponentialHistogram.ts index bceb86b8ec..9356580205 100644 --- a/packages/sdk-metrics/src/aggregator/ExponentialHistogram.ts +++ b/packages/sdk-metrics/src/aggregator/ExponentialHistogram.ts @@ -24,9 +24,10 @@ import { import { DataPointType, ExponentialHistogramMetricData, + MetricDescriptor, } from '../export/MetricData'; import { diag, HrTime } from '@opentelemetry/api'; -import { InstrumentDescriptor, InstrumentType } from '../InstrumentDescriptor'; +import { InstrumentType } from '../InstrumentDescriptor'; import { Maybe } from '../utils'; import { AggregationTemporality } from '../export/AggregationTemporality'; import { Buckets } from './exponential-histogram/Buckets'; @@ -555,7 +556,7 @@ export class ExponentialHistogramAggregator } toMetricData( - descriptor: InstrumentDescriptor, + descriptor: MetricDescriptor, aggregationTemporality: AggregationTemporality, accumulationByAttributes: AccumulationRecord[], endTime: HrTime diff --git a/packages/sdk-metrics/src/aggregator/Histogram.ts b/packages/sdk-metrics/src/aggregator/Histogram.ts index f20784b054..60e5e8df05 100644 --- a/packages/sdk-metrics/src/aggregator/Histogram.ts +++ b/packages/sdk-metrics/src/aggregator/Histogram.ts @@ -20,9 +20,13 @@ import { Aggregator, AggregatorKind, } from './types'; -import { DataPointType, HistogramMetricData } from '../export/MetricData'; +import { + DataPointType, + HistogramMetricData, + MetricDescriptor, +} from '../export/MetricData'; import { HrTime } from '@opentelemetry/api'; -import { InstrumentDescriptor, InstrumentType } from '../InstrumentDescriptor'; +import { InstrumentType } from '../InstrumentDescriptor'; import { binarySearchLB, Maybe } from '../utils'; import { AggregationTemporality } from '../export/AggregationTemporality'; @@ -207,7 +211,7 @@ export class HistogramAggregator implements Aggregator { } toMetricData( - descriptor: InstrumentDescriptor, + descriptor: MetricDescriptor, aggregationTemporality: AggregationTemporality, accumulationByAttributes: AccumulationRecord[], endTime: HrTime diff --git a/packages/sdk-metrics/src/aggregator/LastValue.ts b/packages/sdk-metrics/src/aggregator/LastValue.ts index 9c627130f6..905e45f1de 100644 --- a/packages/sdk-metrics/src/aggregator/LastValue.ts +++ b/packages/sdk-metrics/src/aggregator/LastValue.ts @@ -23,8 +23,11 @@ import { } from './types'; import { HrTime } from '@opentelemetry/api'; import { millisToHrTime, hrTimeToMicroseconds } from '@opentelemetry/core'; -import { DataPointType, GaugeMetricData } from '../export/MetricData'; -import { InstrumentDescriptor } from '../InstrumentDescriptor'; +import { + DataPointType, + GaugeMetricData, + MetricDescriptor, +} from '../export/MetricData'; import { Maybe } from '../utils'; import { AggregationTemporality } from '../export/AggregationTemporality'; @@ -103,7 +106,7 @@ export class LastValueAggregator implements Aggregator { } toMetricData( - descriptor: InstrumentDescriptor, + descriptor: MetricDescriptor, aggregationTemporality: AggregationTemporality, accumulationByAttributes: AccumulationRecord[], endTime: HrTime diff --git a/packages/sdk-metrics/src/aggregator/Sum.ts b/packages/sdk-metrics/src/aggregator/Sum.ts index ba53c389ee..a851e5b9f2 100644 --- a/packages/sdk-metrics/src/aggregator/Sum.ts +++ b/packages/sdk-metrics/src/aggregator/Sum.ts @@ -22,8 +22,11 @@ import { AccumulationRecord, } from './types'; import { HrTime } from '@opentelemetry/api'; -import { DataPointType, SumMetricData } from '../export/MetricData'; -import { InstrumentDescriptor } from '../InstrumentDescriptor'; +import { + DataPointType, + MetricDescriptor, + SumMetricData, +} from '../export/MetricData'; import { Maybe } from '../utils'; import { AggregationTemporality } from '../export/AggregationTemporality'; @@ -109,7 +112,7 @@ export class SumAggregator implements Aggregator { } toMetricData( - descriptor: InstrumentDescriptor, + descriptor: MetricDescriptor, aggregationTemporality: AggregationTemporality, accumulationByAttributes: AccumulationRecord[], endTime: HrTime diff --git a/packages/sdk-metrics/src/aggregator/types.ts b/packages/sdk-metrics/src/aggregator/types.ts index 16888256b2..9be5247702 100644 --- a/packages/sdk-metrics/src/aggregator/types.ts +++ b/packages/sdk-metrics/src/aggregator/types.ts @@ -16,8 +16,7 @@ import { HrTime, MetricAttributes } from '@opentelemetry/api'; import { AggregationTemporality } from '../export/AggregationTemporality'; -import { MetricData } from '../export/MetricData'; -import { InstrumentDescriptor } from '../InstrumentDescriptor'; +import { MetricData, MetricDescriptor } from '../export/MetricData'; import { Maybe } from '../utils'; /** The kind of aggregator. */ @@ -128,14 +127,14 @@ export interface Aggregator { /** * Returns the {@link MetricData} that this {@link Aggregator} will produce. * - * @param descriptor the metric instrument descriptor. + * @param descriptor the metric descriptor. * @param aggregationTemporality the temporality of the resulting {@link MetricData} * @param accumulationByAttributes the array of attributes and accumulation pairs. * @param endTime the end time of the metric data. * @return the {@link MetricData} that this {@link Aggregator} will produce. */ toMetricData( - descriptor: InstrumentDescriptor, + descriptor: MetricDescriptor, aggregationTemporality: AggregationTemporality, accumulationByAttributes: AccumulationRecord[], endTime: HrTime diff --git a/packages/sdk-metrics/src/export/MetricData.ts b/packages/sdk-metrics/src/export/MetricData.ts index 19868dbc62..d4ad0c7ad2 100644 --- a/packages/sdk-metrics/src/export/MetricData.ts +++ b/packages/sdk-metrics/src/export/MetricData.ts @@ -14,18 +14,30 @@ * limitations under the License. */ -import { HrTime, MetricAttributes } from '@opentelemetry/api'; +import { HrTime, MetricAttributes, ValueType } from '@opentelemetry/api'; import { InstrumentationScope } from '@opentelemetry/core'; import { IResource } from '@opentelemetry/resources'; -import { InstrumentDescriptor } from '../InstrumentDescriptor'; +import { InstrumentType } from '../InstrumentDescriptor'; import { AggregationTemporality } from './AggregationTemporality'; import { Histogram, ExponentialHistogram } from '../aggregator/types'; +export interface MetricDescriptor { + readonly name: string; + readonly description: string; + readonly unit: string; + /** + * @deprecated exporter should avoid depending on the type of the instrument + * as their resulting aggregator can be re-mapped with views. + */ + readonly type: InstrumentType; + readonly valueType: ValueType; +} + /** * Basic metric data fields. */ interface BaseMetricData { - readonly descriptor: InstrumentDescriptor; + readonly descriptor: MetricDescriptor; readonly aggregationTemporality: AggregationTemporality; /** * DataPointType of the metric instrument. diff --git a/packages/sdk-metrics/src/index.ts b/packages/sdk-metrics/src/index.ts index c9623707f2..414766c099 100644 --- a/packages/sdk-metrics/src/index.ts +++ b/packages/sdk-metrics/src/index.ts @@ -14,6 +14,8 @@ * limitations under the License. */ +import { MetricDescriptor } from './export/MetricData'; + export { Sum, LastValue, @@ -38,6 +40,7 @@ export { ResourceMetrics, ScopeMetrics, MetricData, + MetricDescriptor, CollectionResult, } from './export/MetricData'; @@ -56,7 +59,11 @@ export { ConsoleMetricExporter } from './export/ConsoleMetricExporter'; export { MetricCollectOptions, MetricProducer } from './export/MetricProducer'; -export { InstrumentDescriptor, InstrumentType } from './InstrumentDescriptor'; +export { InstrumentType } from './InstrumentDescriptor'; +/** + * @deprecated Use {@link MetricDescriptor} instead. + */ +export type InstrumentDescriptor = MetricDescriptor; export { MeterProvider, MeterProviderOptions } from './MeterProvider'; diff --git a/packages/sdk-metrics/src/state/MetricStorage.ts b/packages/sdk-metrics/src/state/MetricStorage.ts index 32a48391da..e959ea0329 100644 --- a/packages/sdk-metrics/src/state/MetricStorage.ts +++ b/packages/sdk-metrics/src/state/MetricStorage.ts @@ -54,6 +54,7 @@ export abstract class MetricStorage { description: description, valueType: this._instrumentDescriptor.valueType, unit: this._instrumentDescriptor.unit, + advice: this._instrumentDescriptor.advice, } ); } diff --git a/packages/sdk-metrics/src/state/ObservableRegistry.ts b/packages/sdk-metrics/src/state/ObservableRegistry.ts index 444395bca7..5e25686c6a 100644 --- a/packages/sdk-metrics/src/state/ObservableRegistry.ts +++ b/packages/sdk-metrics/src/state/ObservableRegistry.ts @@ -144,7 +144,10 @@ export class ObservableRegistry { private _observeCallbacks(observationTime: HrTime, timeoutMillis?: number) { return this._callbacks.map(async ({ callback, instrument }) => { - const observableResult = new ObservableResultImpl(instrument._descriptor); + const observableResult = new ObservableResultImpl( + instrument._descriptor.name, + instrument._descriptor.valueType + ); let callPromise: Promise = Promise.resolve( callback(observableResult) ); diff --git a/packages/sdk-metrics/src/view/Aggregation.ts b/packages/sdk-metrics/src/view/Aggregation.ts index 821b55ec2f..6edf50c495 100644 --- a/packages/sdk-metrics/src/view/Aggregation.ts +++ b/packages/sdk-metrics/src/view/Aggregation.ts @@ -184,6 +184,11 @@ export class DefaultAggregation extends Aggregation { return LAST_VALUE_AGGREGATION; } case InstrumentType.HISTOGRAM: { + if (instrument.advice.explicitBucketBoundaries) { + return new ExplicitBucketHistogramAggregation( + instrument.advice.explicitBucketBoundaries + ); + } return HISTOGRAM_AGGREGATION; } } diff --git a/packages/sdk-metrics/test/InstrumentDescriptor.test.ts b/packages/sdk-metrics/test/InstrumentDescriptor.test.ts index 5bf3196693..b33a3e8f3a 100644 --- a/packages/sdk-metrics/test/InstrumentDescriptor.test.ts +++ b/packages/sdk-metrics/test/InstrumentDescriptor.test.ts @@ -57,6 +57,7 @@ describe('InstrumentDescriptor', () => { unit: 'kB', type: InstrumentType.COUNTER, valueType: ValueType.DOUBLE, + advice: {}, }, { name: 'foo', @@ -64,6 +65,7 @@ describe('InstrumentDescriptor', () => { unit: 'kB', type: InstrumentType.COUNTER, valueType: ValueType.DOUBLE, + advice: {}, }, ], [ @@ -75,6 +77,7 @@ describe('InstrumentDescriptor', () => { unit: '', type: InstrumentType.COUNTER, valueType: ValueType.DOUBLE, + advice: {}, }, { name: 'FoO', @@ -82,6 +85,53 @@ describe('InstrumentDescriptor', () => { unit: '', type: InstrumentType.COUNTER, valueType: ValueType.DOUBLE, + advice: {}, + }, + ], + [ + 'Compatible with different advice options', + true, + { + name: 'foo', + description: '', + unit: '', + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + advice: { + explicitBucketBoundaries: [4, 5, 6], + }, + }, + { + name: 'FoO', + description: '', + unit: '', + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + advice: { + explicitBucketBoundaries: [1, 2, 3], + }, + }, + ], + [ + 'Compatible with empty advice options', + true, + { + name: 'foo', + description: '', + unit: '', + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + advice: {}, + }, + { + name: 'FoO', + description: '', + unit: '', + type: InstrumentType.COUNTER, + valueType: ValueType.DOUBLE, + advice: { + explicitBucketBoundaries: [1, 2, 3], + }, }, ], [ @@ -93,6 +143,7 @@ describe('InstrumentDescriptor', () => { unit: '', type: InstrumentType.COUNTER, valueType: ValueType.DOUBLE, + advice: {}, }, { name: 'foobar', @@ -100,6 +151,7 @@ describe('InstrumentDescriptor', () => { unit: '', type: InstrumentType.COUNTER, valueType: ValueType.DOUBLE, + advice: {}, }, ], [ @@ -111,6 +163,7 @@ describe('InstrumentDescriptor', () => { unit: 'kB', type: InstrumentType.COUNTER, valueType: ValueType.DOUBLE, + advice: {}, }, { name: 'foo', @@ -118,6 +171,7 @@ describe('InstrumentDescriptor', () => { unit: 'kb', type: InstrumentType.COUNTER, valueType: ValueType.DOUBLE, + advice: {}, }, ], ]; diff --git a/packages/sdk-metrics/test/Instruments.test.ts b/packages/sdk-metrics/test/Instruments.test.ts index cfb6255039..56ecf03af6 100644 --- a/packages/sdk-metrics/test/Instruments.test.ts +++ b/packages/sdk-metrics/test/Instruments.test.ts @@ -19,13 +19,13 @@ import * as sinon from 'sinon'; import { InstrumentationScope } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; import { - InstrumentDescriptor, InstrumentType, MeterProvider, MetricReader, DataPoint, DataPointType, Histogram, + MetricDescriptor, } from '../src'; import { TestDeltaMetricReader, @@ -352,6 +352,60 @@ describe('Instruments', () => { }); }); + it('should recognize metric advice', async () => { + const { meter, deltaReader } = setup(); + const histogram = meter.createHistogram('test', { + valueType: ValueType.INT, + advice: { + // Set explicit boundaries that are different from the default one. + explicitBucketBoundaries: [1, 9, 100], + }, + }); + + histogram.record(10); + histogram.record(0); + histogram.record(100, { foo: 'bar' }); + histogram.record(0, { foo: 'bar' }); + await validateExport(deltaReader, { + descriptor: { + name: 'test', + description: '', + unit: '', + type: InstrumentType.HISTOGRAM, + valueType: ValueType.INT, + }, + dataPointType: DataPointType.HISTOGRAM, + dataPoints: [ + { + attributes: {}, + value: { + buckets: { + boundaries: [1, 9, 100], + counts: [1, 0, 1, 0], + }, + count: 2, + sum: 10, + max: 10, + min: 0, + }, + }, + { + attributes: { foo: 'bar' }, + value: { + buckets: { + boundaries: [1, 9, 100], + counts: [1, 0, 0, 1], + }, + count: 2, + sum: 100, + max: 100, + min: 0, + }, + }, + ], + }); + }); + it('should collect min and max', async () => { const { meter, deltaReader, cumulativeReader } = setup(); const histogram = meter.createHistogram('test', { @@ -721,7 +775,7 @@ function setup() { interface ValidateMetricData { resource?: Resource; instrumentationScope?: InstrumentationScope; - descriptor?: InstrumentDescriptor; + descriptor?: MetricDescriptor; dataPointType?: DataPointType; dataPoints?: Partial>>[]; isMonotonic?: boolean; diff --git a/packages/sdk-metrics/test/ObservableResult.test.ts b/packages/sdk-metrics/test/ObservableResult.test.ts index 9aacc46066..2dd7be5cad 100644 --- a/packages/sdk-metrics/test/ObservableResult.test.ts +++ b/packages/sdk-metrics/test/ObservableResult.test.ts @@ -33,7 +33,8 @@ describe('ObservableResultImpl', () => { describe('observe', () => { it('should observe common values', () => { const observableResult = new ObservableResultImpl( - defaultInstrumentDescriptor + 'instrument_name', + ValueType.DOUBLE ); for (const value of commonValues) { for (const attributes of commonAttributes) { @@ -44,7 +45,8 @@ describe('ObservableResultImpl', () => { it('should deduplicate observations', () => { const observableResult = new ObservableResultImpl( - defaultInstrumentDescriptor + 'instrument_name', + ValueType.DOUBLE ); observableResult.observe(1, {}); observableResult.observe(2, {}); @@ -55,13 +57,10 @@ describe('ObservableResultImpl', () => { }); it('should trunc value if ValueType is INT', () => { - const observableResult = new ObservableResultImpl({ - name: 'test', - description: '', - type: InstrumentType.COUNTER, - unit: '', - valueType: ValueType.INT, - }); + const observableResult = new ObservableResultImpl( + 'instrument_name', + ValueType.INT + ); observableResult.observe(1.1, {}); // should ignore non-finite/non-number values. observableResult.observe(Infinity, {}); @@ -72,14 +71,7 @@ describe('ObservableResultImpl', () => { }); it('should ignore non-number values', () => { - const observableResult = new ObservableResultImpl({ - name: 'test', - description: '', - type: InstrumentType.COUNTER, - unit: '', - valueType: ValueType.INT, - }); - + const observableResult = new ObservableResultImpl('test', ValueType.INT); observableResult.observe('1' as any, {}); assert.strictEqual(observableResult._buffer.get({}), undefined); @@ -139,6 +131,7 @@ describe('BatchObservableResultImpl', () => { type: InstrumentType.COUNTER, unit: '', valueType: ValueType.INT, + advice: {}, }, [], new ObservableRegistry() @@ -161,6 +154,7 @@ describe('BatchObservableResultImpl', () => { type: InstrumentType.COUNTER, unit: '', valueType: ValueType.INT, + advice: {}, }, [], new ObservableRegistry() diff --git a/packages/sdk-metrics/test/state/MetricStorageRegistry.test.ts b/packages/sdk-metrics/test/state/MetricStorageRegistry.test.ts index 55ef806511..8a1513e351 100644 --- a/packages/sdk-metrics/test/state/MetricStorageRegistry.test.ts +++ b/packages/sdk-metrics/test/state/MetricStorageRegistry.test.ts @@ -19,7 +19,7 @@ import { diag, ValueType } from '@opentelemetry/api'; import { MetricStorage } from '../../src/state/MetricStorage'; import { HrTime } from '@opentelemetry/api'; import { MetricCollectorHandle } from '../../src/state/MetricCollector'; -import { MetricData, InstrumentDescriptor, InstrumentType } from '../../src'; +import { MetricData, InstrumentType } from '../../src'; import { Maybe } from '../../src/utils'; import * as assert from 'assert'; import * as sinon from 'sinon'; @@ -29,6 +29,7 @@ import { getUnitConflictResolutionRecipe, getValueTypeConflictResolutionRecipe, } from '../../src/view/RegistrationConflicts'; +import { InstrumentDescriptor } from '../../src/InstrumentDescriptor'; class TestMetricStorage extends MetricStorage { collect( @@ -73,6 +74,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }); registry.register(storage); @@ -92,6 +94,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }); const storage2 = new TestMetricStorage({ name: 'instrument2', @@ -99,6 +102,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }); registry.registerForCollector(collectorHandle, storage); @@ -152,6 +156,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }; const otherDescriptor = { @@ -160,6 +165,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }; testConflictingRegistration( @@ -176,6 +182,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }; const otherDescriptor = { @@ -184,6 +191,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.INT, + advice: {}, }; testConflictingRegistration( @@ -203,6 +211,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }; const otherDescriptor = { @@ -211,6 +220,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: 'ms', valueType: ValueType.DOUBLE, + advice: {}, }; testConflictingRegistration( @@ -227,6 +237,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }; const otherDescriptor = { @@ -235,6 +246,7 @@ describe('MetricStorageRegistry', () => { description: 'longer description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }; const registry = new MetricStorageRegistry(); @@ -275,6 +287,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }; const storage = new TestMetricStorage(descriptor); @@ -294,6 +307,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }; const storage = new TestMetricStorage(descriptor); @@ -329,6 +343,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }; const otherDescriptor = { @@ -337,6 +352,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }; const registry = new MetricStorageRegistry(); @@ -375,6 +391,7 @@ describe('MetricStorageRegistry', () => { description: 'description', unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }; const registry = new MetricStorageRegistry(); diff --git a/packages/sdk-metrics/test/util.ts b/packages/sdk-metrics/test/util.ts index 338a2f3978..75d7e66f03 100644 --- a/packages/sdk-metrics/test/util.ts +++ b/packages/sdk-metrics/test/util.ts @@ -33,6 +33,7 @@ import { DataPoint, DataPointType, ScopeMetrics, + MetricDescriptor, } from '../src/export/MetricData'; import { isNotNullish } from '../src/utils'; import { HrTime } from '@opentelemetry/api'; @@ -58,6 +59,7 @@ export const defaultInstrumentDescriptor: InstrumentDescriptor = { type: InstrumentType.COUNTER, unit: '1', valueType: ValueType.DOUBLE, + advice: {}, }; export const defaultInstrumentationScope: InstrumentationScope = { @@ -104,12 +106,12 @@ export function assertScopeMetrics( export function assertMetricData( actual: unknown, dataPointType?: DataPointType, - instrumentDescriptor: Partial | null = defaultInstrumentDescriptor, + metricDescriptor: Partial | null = defaultInstrumentDescriptor, aggregationTemporality?: AggregationTemporality ): asserts actual is MetricData { const it = actual as MetricData; - if (instrumentDescriptor != null) { - assertPartialDeepStrictEqual(it.descriptor, instrumentDescriptor); + if (metricDescriptor != null) { + assertPartialDeepStrictEqual(it.descriptor, metricDescriptor); } if (isNotNullish(dataPointType)) { assert.strictEqual(it.dataPointType, dataPointType);

    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