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 01/58] 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 02/58] 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 03/58] 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 04/58] 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 05/58] 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 06/58] 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 07/58] 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 08/58] 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 09/58] 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 10/58] 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 11/58] 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 12/58] 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 13/58] 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 14/58] 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 15/58] 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 16/58] 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 17/58] 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 18/58] 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 19/58] 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 20/58] 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 21/58] 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 22/58] 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 23/58] 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 24/58] 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 25/58] 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 26/58] 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 27/58] 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 28/58] 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 29/58] 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 30/58] 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 31/58] 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 32/58] 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 33/58] 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 34/58] 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 35/58] 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 36/58] 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 37/58] 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 38/58] 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 39/58] 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 40/58] 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 41/58] 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 42/58] 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 43/58] 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 44/58] 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 45/58] =?UTF-8?q?chore(exporter-logs-otlp-proto):=20rename?= =?UTF-8?q?=20OTLPLogsExporter=20to=20OTLPLogEx=E2=80=A6=20(#4140)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- experimental/CHANGELOG.md | 2 + .../exporter-logs-otlp-proto/README.md | 10 ++--- .../exporter-logs-otlp-proto/src/index.ts | 2 +- ...OTLPLogsExporter.ts => OTLPLogExporter.ts} | 2 +- .../src/platform/browser/index.ts | 2 +- .../src/platform/index.ts | 2 +- ...OTLPLogsExporter.ts => OTLPLogExporter.ts} | 2 +- .../src/platform/node/index.ts | 2 +- ...porter.test.ts => OTLPLogExporter.test.ts} | 10 ++--- ...porter.test.ts => OTLPLogExporter.test.ts} | 40 +++++++++---------- 10 files changed, 38 insertions(+), 36 deletions(-) rename experimental/packages/exporter-logs-otlp-proto/src/platform/browser/{OTLPLogsExporter.ts => OTLPLogExporter.ts} (98%) rename experimental/packages/exporter-logs-otlp-proto/src/platform/node/{OTLPLogsExporter.ts => OTLPLogExporter.ts} (98%) rename experimental/packages/exporter-logs-otlp-proto/test/browser/{OTLPLogsExporter.test.ts => OTLPLogExporter.test.ts} (81%) rename experimental/packages/exporter-logs-otlp-proto/test/node/{OTLPLogsExporter.test.ts => OTLPLogExporter.test.ts} (92%) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 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 46/58] 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 47/58] 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 48/58] 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 49/58] 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 50/58] 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 51/58] 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 52/58] 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 53/58] 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 54/58] 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 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

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

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

    7?*2q;L0~l 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%0DWhbExo5OsptLow;a7$L&Ot+V} znUQVy&nXnQh!~qYd>NCS;eF{ULP`Vp%BZ_K%c-ewJZnq7vGsV2TV%eJxHPTqnR?&d zhGE;?aK{IoPA{mSb7%=MhvGm3hRTBCR z+KtnMyhO)Lp(-nTEI9|m=ePTuX%;rC7y}FGGLqU7sZ3E@hNPNjDxa3YG?nRU|Ee9g zb0TLal^?~BrYVEz07t!8^`4Xhf-St2!}7fc&d**0ZQA(q=?2`ol*DZP_1<@}<=$2r z`|be!?Nf9s7Yebi;{=Odgi9Q+w&4M4iV_aLqZ(#5q`MO=6Y)>a%MNHI3V$MmEH*Y1 z_ylSyD|uinM;^U^5u+R!6V=uAehE9NZIV`v<}F~1e(2TeUXFwzqe`pOYrTXtC5X%c zGK$-x(igHpcps|K7{+Dz8itH2Q*zwB;v%=6K9|iDQoT~b59YnWDD*X;Q+qaim~!2G z=>38=1viMCEmEJ)vg%Kg&`Z3yP7gfvLDmoHEq_vZ*T-(YcjI5sRD}Ctqs!7w=+fwyy}> zxZ;M$swBN_+Jg?M^r@c&c`Z5U+yvfZp?hxl}=#4s%LL+jGknI#PKy zM48y4?xKlo4?Y^b0{#cwuu&JsuY8xvNvH7~4%rn_~JkT^}h!At@cj`>tfeT7Q!yLG+Dz>w4T>cB>Z#&HdX z%yoR~r>n!tHtzGBOO15at?o zbRj2y#{u%O5U^G=nw4MrLw&29rY=w)(9$(m*^py!P89N*fJ2ZDY+Vipcz@hjACy^8 z1Pt*=7MUi3Stap+L~*9>v`eS4Lnx3BTJmM^MW*;`ZTJW4B=~oFO=S#IbxfCVDy_Tn z62#{iQu42)Le9up_r3WKh0Vy;(k5>LgidCsbv2na9aJ7W1wf&zB%i#3DK4LMs;UBtnQdleN@FF0-XtInI~Je?IxU6ULRUk@Noja zJ#aG2bqOmZ7` z%RldG_c2p}TJ9lqC2VJxdn%&}zmv?K&+B(%G8X#33>-8!(uBA-QqHoopm* z{|HiNFoINs_N#zclhZRED$f*Gs5WyZ?3Qp7B9#jxNa@X?2t^)rPDI5Ke!+M=dU1>4 zk#78++FhxaCm=O)FcrJ8{MJ*vzVjiIyGy{KR7wR4o}%jp(UE2o(aPWA62n4quA?&0 zDcv(fI{<~!$xA}FZYiw$^+p-g_VEFd0Bd4!)uYD<{np&9XyqvIy&ZmHU7|Er!D;fE zM_(o#wPqVp075E6>a*-YAH_2vd7;%beAW`~wtG<-Dr~m;L<>HS9g*W~iyt+c|7tbM zd8r-!uf=%&Ca{6=jgR*_WOU;W$ccN3ip1MFODcxii1bO_J`vhFECj{JED-g*B&y=s ze7uP+ieqY2!N2Df>=svpk=5hu$(O^$#I6lYP?vXu%-_I!^g0YuuV_soO_Z{sBR{f%r3oXE@wGz1O1Q01=p*Z@{P5_Y#dfapfAX3|dGJ%lICmD+f zA(anf18LR}@6a2h>!;tp$`iLQ^$N{8s~3HhXM$$hYi3Fe8xW7$wiRiBjRdywJU0)Z zf$)5BA4=o02sp%oQKaS!#_%kAShDxNubrR)~xmfpNNsLQ-QD zOAjXBA-9QpL366i4Ht@0D*VR8FkY`0t7J2-lL8&+pwfqoe^+N*SST12`jx=fyE!|d zK4;QQugOcQXEvxrV5M(Af=XcGA1R&M!?JN3)Il8B>V_d3?tFXHr;1ty<*`+HP#U%p zKS_%cCkrmjxLXVM$C91(kpQ9IN)F62m%S{VB6KDdbdsG>9jCO-aiN2URfCTNEj06H zG)eSv|AR=eh5m&|75#%qSufpMq>1PCqkLtGt4uveL7gDUP+KE0(Z!BFx(&f+55dN` z!oe~w3n#g1C1lZdA0-cu3}CZ=v;d-Ek4L%0Gq}yxk`}nT1}aDcM$a_`>O0v!Z*j)N z>W7&!+}A6Or12KlC3BBex8AT+i=i-@*vo>ysIN;HaQKFVL@g{=$#3^(-^tS9#y^l0 zHw+~8wC(oz3V@_i0Z6L&ODVF-9Rg*~VId`j+BfC<>`fH$>N4n*z$NKz-zC}&QL%Ey z(R^Ow4IKQF!nTn#$}H4_C>Acke;6rT6)OuEMvAx9l1tSmm@W*^RA*AaHOa&$&hpoDQ?IchBLIeI(5~g1ecc@+H7YJ ziav0=w$a2rB3%?oqgBiVTNzDOYFs7aSAxg0nUUs-*Sph(>h_3M;UJm#36 zJiVuOaERfS6*`SC{9(71ZPT9bS8prNHl)8TF#n@Vf8 z=A>VQ&|Byw9=~VAzKNP$a-iXJwK;6o5=HZX-EVAXy2%pi+d!m?jrJ>+I>-(CS|FDc zZrYbr9THiBPH{J06~<+asGCP%(_$+C>AUau z{m+3QHVPUiU2n9eu@Vs*Fq~c!1_+nz3bQ7@H;U?w2o9CitludpI|{ zp{%rQ!MT-bZx`!K@QGR+}u8<$|K=I~_JnU|&_= zYIomVAJZF}capkJrjJ%y#Jn`FfZOm4?!y zZ>Q|ep6?Jh_c4vV8Uc9{dCFniSXW@SFpf-x7u9sKe&{% z82u=etv&6XFjB&e{gnI5r}PuG(+)bbvy~;fYG(1&lBFQ0`p~c9y~AQnU>13kS^5h| z>9sVMxMRrT2!IlzeCaQWZJpJruQtA)ar1J_;qosPJ6LBv<*hU?JuhoJ$@@+vSJ=XO zt8ptH_KofA@61mbCG@7!=qjj~oAQetTN%&mb4qiz+p;335eMYT=kFIDD>VOd> zgSC%%Zch zE|ZYW4i3KI{m$Hr+D#jX7=z3G5(r^ByC_Q3aY&LY4-zslkXgC1_Y)@W{;{P}tICG2 z#(Sw)&r1XYa4VIMI|yafk4+ehsveQ=d}aBdp+$Lw^+`|&2wPl^P@_>Tq!3nGZRY(F z9gTwg-*K7mHnwdPDXfU24=;-|epOBjh5xtleBJ0{0~RF=;Ult7Jv5^!wG_T01Zb zWayc*(9%>l_w$vrm5#~>TV zCav=-;(*IGMPgXCocLSqFv?+gDY}9{EMex+B2-!?cdL*0L}aVnGx-@DbZ`++Ge(i_ z05*34_6a3^SNBRL3iysC3WQKv&BMDxAE^rRD!V9Ydf&d?ChBoEzO*76q8g*p$yopm<+Pe^W+(%_zSN z5kUH6oYQYo%0X>2m~VQMH_*~#+qNT~a=b5y=BSr?)V3uKg%0j3((=-nFJ*{q7cXIIGoiq5wRPzdcIa30CDS1z1Ih_tLl?!!>d# zj`>3(n^JI*OiQtQ!#u08U$Z9^7Mm&mf&r#p$yPAyHmiuN@Pe~aogBuUL3_geXqD@2 zEqi^yL8VokqN&P2VAMO^gMv9?6W=Cx*HD0nA?1iC^p<7MNFQ|WQQolr39(&6zw}>> zA9GT(V0}W7Us8&YYt=c0BfL=KaqkRj)zQ1s<>O5;o4!+y`*ehC6DzLJF5L>>QfP#I znfMj{N0s2A&xJESP*Cf3x z+5_BAKUs8~5F`9JLd#_XfRDeobwwT_T^-IsNhgaYQ zC|l0(MOcwu=u(jMGw800&6ntL%Z<|L?=J!I)Sn|u`NnFN$Lrq6zTbJ1n)qy&_l0oF z$RM1asoBXU_KQfY&z4sv^{pBnF&6xopURkH#+m1vWu;5>q4W*e>5|n zKVI7CX^2umGZ1ivJ1ySg@Q!n#Y^&ryYUf|w+tT(iwK?y}hF?%dMT^DtL7C~v@xgyx zGy9-!3l@&~qMqAL|EWI7;NTH;aK`+kvWLi0s42d2mFdKPcWmzor+K8hboHmCIBPH| z%p$%K^mcapIq!n1>3h)<5yU@nb{fVzOfMC3in~9`S4frZH?lXy`Y@F|YAjnT$L8>^ z4Le~ELeXH4!E}?_*TeR#z9NC4Afh=?)aH{c*AqJcn}Q53hm2lT#mlDHQKR@(gdJlS zBBL4Jo3z@W_emP`&7|*4C&^e6?z8wF2-MTDBfl0P z59(_ygHtN4^ytHci)_7J=af%BU$wH<#`z&Pmu$*)3t3CCJ9pW*zBuLzjRx;{axBWZl&~3uJStfQiOTSb>#g#F)!-68VTE$k(DFyM3OB) zT+_BFIqbE%#P3ZP7OgfCz4lnrc?%VL`L$CfO#pmo0=JoMgceR~EwvC^@<_03d1ahw zJhqe4NrTC=6OvRP15}$)Q5R}TODhNY6`a>SmT{ZN>Vh{1P-w_8E)`%+3DwW=_A86a zI1c}j*me6`N`}d^A_DYCL%)}I8vcli;g>7T?MR`y#PnyjAdT~|1$M=KZ7(_}Oj2uU zI&^-=PeP^8AJV=fA8wf3B6lXj3WQ%(Qu=y#(1% z1kE#3l3a=xNm`@Gk!QFL8ThebB}IjF%8qBeN~Phe9#pK2Tjku#;20uo;ZJHP*XjSr zs*mTTiP!m_z`FX6r0pdG;(4EJMHe>;!iM3Ys>*g22)BD#rd2;(rFDl*h6KM`Zs3M9 z+5MKLo;~7){6t5P7Zj#m1A29V^)6|oK9)!C@td?nISFHhLBjUOU&0Pct5jNqi7^x6 z;mlFDWY0ro_?5me3k7UGUW%`0t`9h~BxJr>q23xWO&Y#_m%pp`6{CaKL@l-@G=_l5 z)#z%dZeTI`CZ35}-`{KFfXMhmxEV;pAG|gs)Q?BYH>vyd-YDp9|Mx5 z^j3AH(M-oy#=YJ1#?@*XQv2^RX3AZD)Re9dxU z%j&5xQ=ACcWgZDbIh*=GJhRb|ZI68FMl{9VSi|#@mcAIPTtSE!D)qZh3dMs9!=Abz zQ)+2tKWgFNQ!OFG@abMCzxqjK_*n;2X4n0Tfa193Q5C&2>ZKDOhWuAzfRBb$=~4r% z_1eW6HLYEPB`yg;uhX|s$GLm(5{{z!(jG2^J4$^D@5Ph~xWM-H8v= z?FG=N;@jBvMv;iZJY*}qNGWgKlv&bVc&$~1L504P=n)FDVv>@8POh%|~T#kG_iTSfynO2=n1y~95 z3CblVZRjxr;x8No#+@=LTrT~`o${61{267!@61^Ce&``a8liY4uK6fQ(N$eYk%KKc z7`!%g&T>z80C;M@ewBydg=`{EJ={8V#N#1J-6;VIGSrw3p>gEH(?GXUs~gPnLlpvx zm^70I```II2+yM4`cUhuZ@g8I>(OaFPV#8$rLE6X+0e-z$;lR?Fdr#gAQt~RK;vD~ z_{GyqIt{L3dtUtTY4W!P7;EYpEq%|d?e5-JTJdy^&PRaBiDGtOi~Q%8-AGpU&-dbC zowKdsa0E-Uu^5v;BlpHJO{YFYul|mrg4%&1*tCN%F@T8%r8CTgbf|P=ysE4!G_oJr z_7Fq6!xl*EZyna22Yemou77K!b!HZ~eA8kS)a%T;r|vMytZgrwn#Ah7%Rus&P(XKJm8Y-Tt)*28|A zffmm=F}=-9Ew?`P_@T~r0X&JzQu9_;^>Na%sVlRSbq_P`!Wv0OFjv&;*1Miry=@+}b)OBHH;sYApLQn^-PT?0MZ^Tih^Po znB@vjCqiZ&Z`RQl*k0^P`gK)=y%a^Do@3X!5%hFLM7(5P5J3mb zAaG0OjlJV_5i`jBAq&5hF4mXd0i2v$qd7Jy1Bi`kp1KoD5_@uM2yStCqCUlS?4G;y z@|A*Z(FWXX%o>KQ)UgX!ndV)-ipZU4plCR#LVA8_c-&-nc{`O^17h40j_ z9y-21ktc5gMaZ>6%6Jg-m@1#OtqpoPz;|@yah)QIckvLZ^em3)CMJ}I!Z5Y@MAIO5O1@50gA|co&N1jG<1=7!j(SO+ zrGcnp9K^R-rKu|B^71U&=O!wUFvXuyE68OKsKP>X!xigBncqwuRQ>D)vi>c2DO!X^ zcY0U7<^KApyj<3Kr%xUwAM2KZ7&U2G6~>-=3S&*DC*_kp35@_Q5OMlX2BhEG z?ynon8gXaqzLwHq@F1V7lzQVPm+aT6YR|H0km7eL#V!4VPmvN@grD}V`1B2&AdDDu zu@6$sPhN^DWN$YI%HTBT*;;1n7EOZ#ea9F4i{GDEK;o>}b=P2a6vG#fS)D$TCV8t{ z-KUH4hIOVLbYSZ_E#;D>#nqhc7(EDkUjHd}3eDHnG2qLl&aVZ{U&0Xh3F3MN;aDRA zJ|M&BQ~g#jj=)lo4uU7Cgfkh%si(^_`I^s);-~q$&ejyx`p)lnr8J$5W;L7OZl9p0 zRtKtwfDA=Y``h`)^qww@WL_WHADkBM?HH#HItbmqiWv539U+*NN1i3F^mL=tNA_my zS#;1^<8g+6MM}^N0q&36ee1OgGj)r$S_t)y%rwO_P2h2eHeiKG7UJKflq#u75c&vC zKc(#f4y<@?jwz1or}S_fx88iU52#P-2H8yP5#?+H64P-SUksTq6=cpdwQkF)!yr_t z>{_SZ2@sr1Gc8c1%?O&KJRcl~o~E>Qeui0v$i6YYI#mXzgO72+v<`u`H|pjxGQwH) zGV-FxCui3{+$2pMU6Wvnay7eki#R%_r2jt1#`oZZg!my-d)eE9XS!b|Zt|#>3jOoO zVmXpdLGnBApTVrd5k5>LP#ECk^sIIH#5G#CaJZFxcLp7R+{R@+Q54}ll7j+V{=-m# zoB>rmZ5t2^ua>e)n_n=Y+HeMx0iE{+DCIO)B-+T{agW@H@igca8h zAZ>iX_`P8=1x^z`KLrZaYo;R$wC0fUUYgqS#7)_07gkv(9Hduj-Wly^+3t)zw^yuh zyRb}AZm&?G82`kY*xgEDZ3L3A8LfJkfbsP>yTBVOsl{1$t z+3|~N|BIiZEkr9n?A@(GBXJ=PaC_9H8`9Z=bq5fIBV4zJz^^*qr-`g{h|5EXS07Ln zc-6I~WQlkmtv+D&(>S_f%5>eud)Yo??ZIq~cO((wfT1efR+c@&ts`&4EfFE&+|% z2&qXWd6etxUPYpc@e2P>yy(ZyH-KrJSex_7ge?+2wLm=TA zUNr~$BoPZ@eS4_`O`FWcbAQlyF|(-Cq#bowy*`PtV#;zih1p4ES11a-xwk%kIa#7X zvzoK;eJ%Oqco ziJw<4ytVkppVE0EF_F#hp~Wf`;nRs6hc9R)O1o3F?ENdg)FlyC31UF!$*cA1Y}7|U zzDml2V6ULjZF=t{XOyo+Bql+B<15BBREhd|yN7%`4Uc2goS^Tnh=J3X5~+R%$$U2l z;izIyzSmid&;G^IpMU~J1nQ8PUjvhWEP_)51ur-<`jKhfB|2X8r`W`~c@^C0A}a5P z_hV&w{RL3X>@*Di2cTN+-}ntvs@8&AjY%@lh$Dg4cW`zukS!v>v$F@v#&KS4`2J~W zKq%v%T}G#S;QF1HfkUP_)qKJ##i_>B<&(atIt|&kA9(i5?&?h0FGw4g^G(~<5AR2= zxSDU{ z$t200=fpP)YzM9=5@dGXZ?aPfB@GeH^!iF~&s3;Lu)=FOop_E%PxfHO zO;X|+E>Eh$my?XguW8Q*Z1tSDs<^ByPI&9YmwL zRM}o_I+UG|zS#Du-gjcTke&afszHXY_B&_Tzka4On_JRD{$t{VtkgS`U`9B;Z7tVQ z5l-dkQJ1!fQ6~gj+_xdWE7&!kLTI#tsHFTmX+A)%`T`0t^O46tnjfuSojx;S8GUs^rl0OM!jry>G=6i?zk6lh-*;OVD|S9(4g8No z4+NTmH$v-aqrl8edN2uiRI<%It@0H}<{h*Mv^Z}~Zi-mpwbDgdlPK0JO}+Y$7Wjta zzo}HT+R-PiItqr0Z*gF-m+>yI@QN!Quz(S%D$hPx0j9@d zvd%vu6>g2g{Y+isMoyY=eV+2aE*-6_fB7iB~izlb?7Eq~(4v7>+*Vy8d|J;c!m*fAVQoW5cSGF1Yp?rSNwRG0O zfKbzZ(`RKPSkew=!?IARW~9C{PDMA>pHuz!xj6(FFFnKDQyE48;((RQ*V|JCc@v%9jPyEDDYWj2AzBPQQ#wyw&b#4+|Yx_<3eaq$XB5##kTXXyJXk^0R zUiGMW%Nm+?$Hyfs8JbOC%Mr&`x@6Fm4rUxc*MyEX_KE*Sy;oNIN%Ji1+tMo= zolKA{X}&s2t5o*WS2nj_qiHnc3nk0bW&M=;Y#Ps#PA9-4U~?s*?9ViLshGA}d*gS1zkML{F#TJ~&af%Q{u zh7hi%A4#tuj1GPf_W$1AmF}{N2J-MGYxf{4{=-p4!EjW(bYo1zVS2$f5^co`#3o~t zfE}Bj`>cd+!=K#&mLgTsr3xEU)~ai`s7X-D*e$iWFnckgcI249pg#Iamtn4}leqYF zbs1C;?K_e+w=U`)*203JjOyF_n4}lB;DUj>5UbqS`(p#LP#F6U5Nu|8Kft=$^JOnm zYDzBC4GHW5+2g$e*&SumtnGC#NZG+2f@JN#7Q(+vtd}TX*gsDT-1Vb-l&aJSC$`H| zI6Qa0)Kc(U6s6f?#6AygDmmPLI`jNgtcL!1Smv z43^uKF=}ra7ryTYj}<1q9T@4oj!Ds^HaUM6eWczgM1(NI82gezz6S{eruAJ^iQty0 z5;iwZCI>P~$#Htl4jtQSX|tMrcd~lQTW|@Dka8!uQ}8$_kF;Cd)L5dFSLVpin{EQy z8w%D-fTl`5tBAq(BHxT1nFmJLAL0LI4czCd!K(E8)EkGS^TquJ8Sj$+p{a`gp{b(d z;Jp~#mMym^gx>=wW{*hr;e&;nJGm!#4%vJ^%JNJFQw*@m5522>syC*<^g5VN|Em>6 zVzQ@N1fx6$Z4pdi*DTt~))a#JxD}gho=J;otp4Th#tEagb_bH@Pdeb-${NETfv}E7 zSJ%*?FC{)hLw7$$D4oxDXM?{IiV%I&t;Wxxx5D-~{-uzr3TaBUow54-4PSqydhHdA zOeF}&RAeY6S(s6d~=KLys19Jev?1lL2%|t0#1M>%5S3}fEp-3 zn)mBVf8$>pv8s`GnAxN8y$2fs0k9Fsm4FQ)9TFOIGG2dsiuJu-bNV{8$1C+O@Pe29 zGb3FB*fa+ET_y5VwG7usWL=q9NyblAZ zhhZMsO=a2>V-b|IZtY4J2i8n5Z0~1Zo2rR2- zH0T4sQgu3!JmLWx3H|y$8q;psfQ#r(^v5qndA@$irF$~>SY!h&pIu8UnnoK`zx7s5 zl1uy32-z%rNon7x{!7oR^^{RwEIY5xFQdVc_hgl=TtD4qOo8^`!&Ft612-&5;$zxQ z7xv9I+Z{>O{LEw^$mXN@^VP|Z^g|C%u&#u*Fh+M zS~k#(z@Sun^4F>rVVkp4I+wy|go*E=7}`RM1^kR$b{iFF66^Xo5$Ia-v&6|K=J$eT zrjLEfup!SVZcq#V}~Y-3Ayp@;c>|z+wPXV*6AEj4R#Q} z%~acDEKa#@L(%5HyZRU-&>Z5MQe7RWL5@Eur?(@pBYfoVwA6b(T z4oOc-WSa!d|Fi(@Z2m%?B-uyIbCHOPAxN=@5I-->@3rg-KQsySafQ=5Ww^a^w=SM@ z5$~kYaL~KQ2$_VMaiWz&8^+utPKYlWxn^pWsghpCM2s|y(!EJ~%<0wk6j}KoOtDBC zf^3H&J!NL#4a@srTN}5dNCKkw^ke4U%;TlZYcBB{%x#C^t61Q$bv~IW!{C@8X8Y2?><2iTkq5Q zy#Cz6Qr5r`i$U*|X?fz&eJ%i~5(i0^SDAA=-y05Sy7H%aBL1{%>>__K1GSFpP#E`g zIr;Ims_(UC)?`uCe+5qv3{>3W`&C7;zi*{_qlMxfV>=y2=XK&3d@j4FRsIm^?Zmf5 zbq47k`jj%;BR?wzosAOZH| zZyuc@^hUoT+h{c%s5$Zu%OpAI`}_Kbd@cOTY*sesG4aWc$*&#o8j`i6ICkd2o~Cv* z(!_Z7KmZ8UM%Nnc=@Sg-M7Q{$Nef)0s0nMO*hmFw)ZCMsS3cq8gK zzvG`I{!X< zsh*Pu092I>-RtEP)D3UCUG)SrC^SL-!IV_FA;=^adL86~9>e3t0TrQneTH=EnmHh}VjwtzM%CwUsady@c)5Ttyab4 zrR}OQBbNDE5I#l`Hc^R6eY4Rul__vP&#OOJ|0pN!Vz##hzd>xsUH!DmF!e(K1`4#o zI$D&N6>-j#pLx2W-}voOcjL1%`Ri%;9Kx{*rvoGPBCEpLL|Q z{b(Lvw*otob;%u(|DZBvmi`cbs*?1gY(zKwI+eR4%W6?7xufd>Q+##Wm;3|gS*xT} z1nn69PI3+Ma$p@#vAJZ$6=x?_;FDi8yFzWmri3qM$eDF!MqQYPBP%lmaWp-Adl&SC3V^C;eShC+S^Wp9LU^d(ujm00@A_|4k_IrE#2k+9@bjV@7d4)-9C=J zU+m*~<&rmRj`8NY&+EF*^ZQxg`51D$(jvhDKvfzqJ`iolvVM)ZRc)ZZDD3+is>&QC zd@T8%C5QJbi662WNSM_V(y^KV)XWDSIjG_Tj?wIRW?=t(+!|Ii8aVVPtTm^fM}JaZ z{8kJlo}oI{L}p)Rbyo7lN(*Y+!7hvQJyiAMlld9~s>*2&*J-VG2&8OtaiAVZVnVJ& z2OoqC2AGTPo60QZs{5gtHwPbZ9OL}y-AdX}kvmFd+a;&T{l&ga6=M#}c$$A=WAV}! z@JE0snc#{#$A_spZws;4b8You4j_S<9Fts{W)ny-SG!|t?NGW6n2anVDPV+ldJygW z5a&S)&{*V!F-;3yEI@KuPy;4u7Mri4M_IXy2@F{Dn-+_Z}LT1e`Kg4 z<(Q>P{T{^LNaRfyHXKaIu#R=KGH)xGKNR^3s)GIvRkbfVC7>rTDaR)f zG^dDs!hRfz6(Bi2unseYb`F2aII4Nulg|LVM!H(hxAwL=i-<0 z7XqLDeD}73(p5>o`<GI>-X1cyG9cveyxV(nW2FKZmbnRxPebwlc#$x(6&8PNq$D*5w2cbs#V{x zWuSI7O(`tio+3O2#Jjyhcj!MZiMIOkU^vW=t+J>4i-7lVA9bM%e}VHCT%U~$y;|Iz z61CUei`CB@UpT$))cw{v2V6eOo!aIGPN?}n6vB3;sLF1ld_v>6TBO5#m08AKaP;Gd zE>SuT@KmdLqzN`leUoMnVA^G}*)A=N>z^#!iWt#1t21dKL6SKTjf+@V52zv|g9tx> zH*hOCd7S(%ZtV4#eoO%LmAUWj&yB=rQ3Se=}lM}fbtV_G47vrz>LX$T-+h=O;K74j765$MsT&7-(ntl;A!To#o zsw-^eH_4eDRm5}Q1K|^L=d( zw%(@WXGYW8g{w}Da>kU<2(;cW|qFreY;u2XcPwO@58si_Y5R ziI!b1mS0U**fg{dL#HincYqBwfY}Cqsj0p9OVw*WNdU=X=Tq_#uZxLN(UOdFG+B6pyul#uNSS_LjCI&HM2=s)_9CFg}dQa zznGG91Ow7Ut=jPEB^j+#rrjdiWs$@BYYjqwdoqD9_?&OK`g8^B_E!X=Y<1k+>HKN0 zi3ESS{Gow;iW%(qAs&oE2Y;XAIJ%63|4@&pJ{D+Mjy3Hkksh z@4E4I_P6LgRJ6eA?fA4=O%qabZ$d;sQKw@3;Y-=EazQ$zWN&>)-k>-1;~Z5*EiYa3 z5(pyn^~K?Ed8;fSfK zQsOtc4cJfkT=K?#n39CSteS6_`@(wq?7X%atpf@g9jCEig3!%dopc{V` z)vzwSJ4mczg5;g&t}W>Kcji=8OQQP%_fzIJ!Fi6296GiJlMgelfX`^NOko zYJib+hGsl}*zrI|<^WahqL%t04?JleJzQ-7;_zEjGdsqaJCNXevFu6VNqYhnE2uFc zpPBwxQ2}Chxd#;Pq;|Q7NtC1%QcUGjjob;z^$ml8P(kXI^q9DsXvf5wF4`8AGAX{v zsb7##T8*;>&+uhj0|;&)g(Xfev!A2UQJhIljaj$J{CDUG%qKQK1c@ZqGWcuyGn)w_ zI>q$qBtaI6p=!uT2Oox&$AIOm*=vNJYT$Vt;0&(#inrBwlH9*gT#R? zjBqbeZfTIfSWdO^A4%ILH-(2>1Z8RB>8N}^P(r!;lp;q1l^=BFHJqU;x!3aKv)^c8vXK>ih+%V8bK?9UlcmyMySb zDh9=^#EL4HyK>Z$b)3gk_@7W{mLC@YX%PeLcG*44ovfen*(H%oJxK!pcj%}rOTL1a z?=8dGcQ|XQYyBex<8CY>SFt*{eziTwW%3k|n?r4%(Iq+@GMzG2A(SEHo$2*7s$3z! z5kDxKf_9-K+DTqv^et_WM4&pD`PcPaGZ4PHb|Jn$`A{Qz&g)Y^oi@(2k$i(9={2ZGS`<$=vf5x4K@2G3d#JX|&B zY&tQhmR(@#o2SDc({nI$WRL^XUF_%m9CgS)h2RDaG3%S5<7pxI$*wL% zl37cxH~l*d0<=^H0VSHT7qM+@ZL8oYIHj52$i8c$ndAk%7&&T>POKKAL4+FQ&=$e zX(rdQ?TaODjRT)3=kP!$FsX?fS%=l@vG=;t#q*>1ew1r)Yc>%NPfG|=UAj^3UEl*8 zm^Sj$PJ7t=!1d$LqNFMlirXHFKHY{*aM7XGSh0*|DN0t1>UOaoFQpbfJ=cD83#1Nb zChl_6?{!=J-tV1IKW}!+jYgGw=bu~dK2z;>_ygD;=`5C9d#t(N1YFe+*1nhkgcn;N z>vUvqwIq~Xd)*t zTQP_Y>nYZ_fvZzx$!B_ayFt#jK*X@z=31ajGE>M`KZ;jfeck$zwwyAPg%Lf64<#vn zNou^FG35YLFmoX%Jj+6QcqMl!W2{qP@86EmMIJ^5tQvBT`W+fx31{1WUp56NP)AlF z=Zyhl;vpvpkrWryp%`^2qdT-hooJ)lIZv1;X zZ{jhUmE#5F2Az4)+D0iM#wa4a2^Xh>8-q5POe6zKkr_N?d~hywZ8i?Kzj}@Y(eLRS zkJoY&w@RSeXWotGsM5XQYyoX3TyWw5@o)+N^kw6$FA&eX=cH!{pcvi{d?6)Q+?f}A zzU>xX<0o+@EO&iV+qfoU4;Tlzo)`pkkh!;Y%w0?&Q}qoA3zrRVoi;y?p47A^viQfW5)wKnqE z_Zuf-qqRwZtkV<1ajN5skNj7UvpU*?n3o`JeK}bkw8TqAdJvE$YpJ^KtzAlkQu&4z zxyi#u_U|MGS2~Gx4<7kPiTFRu&y+nDn=WpF0TqrjecyWr=c(kHaELVU;XuUQ-f#`@(i+R5<#szm9J~VjCIAY`47soh%nb39=N`)fm0~see^xo z(SN8>tC#;$qiW{=x7Da)f~B1Ql2QL9qy9@q{g;gTFB$b;GU{)@=)YtXP?Y>1C!;9# zk`({x1^5rF>c4!{fBC5Yhxn*FDsKnm)*bEJKZ|V+3^F|qZxf(0Jxa1*jb&!(^$=;= zwR9nhx)tUEtX{_ib1+Q-788XOi!|AlP!Yi+pJXMAh*sCzPm_1XJ8uE$=KAsZt1C=f_~56`qJ&dM}LU^fPx!{?4NAnh(@?oz?WIYAEV~8LO8AFca+@I zC4@L_{@5_nUw<4fenaCuSn$&|CkTRbMh*G>Jb^@Q=0%ATI8}z+(=ASvCFmHCk|fG6+QGIhv0bpZoOyf@gd*?1@wzT6;?5L zj;Qdg+oU0z+QWDHC!?6`)e`&jK<7Uv$JdUNt+D4{(jGOBQgL`X64@D+og!;92m(w& z-RZ=uPo(K=)moM*7PggXtRYyvGq0@6iVX4|%21=Ej#pzQOx3X$CA~%OHZ@k_;#vg4 z!u@mXfcWRwV1@p;qCuCFWDNT$85x9G1xzW5%>rI$9RfD6%&f6eqBZFtW(ch9#d>i6 zm0<{uXD;F7U+5LgYOQ*;-Y zwz2;gTh(?D${BOdR!u|zUl0UYIsysf9V=S*eZ)Fqa3uy{tB#_bs0P6vOMt47Ign7c zHTs(OY?YQ)UxcG-ns+%*sj)tb^{s$+joGKm2NX=;c$HrE-o^;h#1=1 zz1sOib$pJ9NauL<0t1LQ4Td@$<%d7+p8)u?9+ergpAadVcDzkCWR;|E@2aLq|WZOxEU+50});5cqw=35c)enV{u-_{u9f2bLAu00@i zHubh7o2S;Tv&3z}-Xf_UkVH8Q`hBw4<6u7#-R$q;S7oY!aSKae4Adcmu}4HY7yYT= ze#>#tenX()FV%9=nFZ3G=B&ZEZ#KYpB8Ger70uBEJABA9f#dyM6)K46ibg}}%a0Sg zdee*Me;93il1D>sKW001U;zDQ1hBKs?nSgZ3m73*xsILad;gGC40$V7;@25jC4TBK zZo*gKTV+X>{WulN8KTu1KCD1f`MjMQ+WHug-Q%*}w5UHVdv2cw0F)VdBPK_FZokpr zZ3PQ?W`Gi7&~uXkelxI@<3RF@(T4J=u15s`;a+vueDTRpcpiLluTJtIyLS zBNJdD8-xQJ)*K4bYfs{@G1RXtgv#>Pzgz;Qkf=8z_*V4xWGvMDSD-e}6XyefI$0mR z&5M`f{E7M!AP4IJ$b%`M>O$%`g@qZr0DVGDWHci%eJ)jt-*V82`Hg4M?eJ=iNqkyM z=@#MRuytwAyZ;uwf4sveAHXk*(u|tYE<==*1yUsq(W?~tIKzC!n#IIw%?W&1ZEVwn z+0rqUT#{4KtrBHP^t)BmNP$t)_l2$J-}X-dvkG7c8Pdvp`cqgm-^7Ho&~+ zk_>(AlZ@QY<__7S7FODnd0$R?GrEh_mh%AKW#&S81OTEMXjjjTM;RhOk!KeR)uEM*gt9~KqszZRT zvamy}^3)PbkIs2Yqj;C|Xgz^Q&U4p&trFGWTf=U}Cdiylqt;R&vXv?DGW(Z7o&h4h zbAVSGL=}?)2s33q(@xO&BB)InDll?;4v<_tt~$2`UjSf`tdE8sU!s30D#fFhh{vvt zt9~DX92_Mvc`0j6=B2(-rrM@;m`iTo*dZ8>xeR^YE_#OycpPi#GTaCHuB)=d>?gkI z?#6zXmb%zc7$hJUaO$u4rgEZvvt;?9enTzcZ&Z%$4>;66L;z^jNw!cMZqUaHc;nH6 zViBoH><@q_|E4y=@c^tX$mnJBW1X{v;Q$N{A5Cf%Vf7ZJ>;dHeR5#yGdzCy!IwgCSB=fEwy(Wf|uuvOokaAiI_>X1%`NCrLE~2rL2m|qseiI z1T-a>5o1=rn^dN~?;qTlr^qR12>Y4xp&@3KLI!o;ISxRt()?SmLS*evAgf=* z4z#CE*dDamiP`2?0_h^K_Px4Qd;`h%wq+bOKv-+D-zF;6U49q{`oZrLB>oLpv)ui|)DrEo=n38WCS{kjgXyFQX_4e~yN2z6$aTdLY+|_C=lYJtkjZeH#R7hh4F0IY-&3W^;fg z%59waf)yw!{r7_P=6LKwTiHc?PVh#KH+;*N3dp!Hn&g{#Lr2QR3?J4`=q3}2e+-1~ z8!<4=bRQZZ@0A76clZk+6E0N+Gu*nP_biFAEHV*_`35<@+rW8#q!8i$-q3woN>9sF z_aYyJ>pC)#YNBVJsZd0k;1(_-_iO|(b-$idA~Te}r|lrMOnR+Z6e^(}QGYcO@As5W z0J)%P8jxHTZTxe6&-yq3NKfj`Ov2l;sz5PC)=wH8p-Vf5^yQ@SI*F+NKI} zhZb%+_3lzZWDK}A==G49a7&df z0ikLJJ%l|UQkeU0yX-MEhHwLRuWIs(r-x8u1wDZ=vf`v#JOr#>(ZVq)Z>DV5r0aRy zs^N~%6>3)OAL-n5Synk-bAKMYjcafamf@*BTv^K`{TE`DpZy;37(GKgMxvn4b?m80 zA6_n0)8=wi{-|e=T3PMYfp`i~PPeiaZ;C76n8c`)iJN#? zEyMC+M~OMoLjH8rLDyAtHdb(G1|{$~jg$!kaSgS=Xv5GgPFqPik%s}zRb0-?AWnp? zc^>rGJQje?sQyu`%19+hr4Q^PZlYKnyk}=?0YzL)hywj;=>cny#-f2$DpK1^Dr9GX|2X+;6vI%$iBmRiZ2e_7d<@$bO z5$Dm;CE968M02xMk_+cbPr`Nsh6-KpF)QEGp8#fM`5pzptg3)or^+9q$D(t7(1mNI zYv`tf$Q2*9%tgGoc|mh6tw*99nHFp&9C&b+=^oT9X2*48+v9$Y;GbdS_EWqq&Q8U+ zpPK>v_v;%6j&|mPz8LR*mXegJoOV6#qpF&oN2*)jV6@SV|0q^K5R*IpEO_TmHnJw+ zmjp$zh4LdStY46Z4dCK(A-7KqCPIo&hR4i=y|C1dn#+!fD|(`iAf>;?gqe5)7dy>g zx0q@sE?U(Lko8I3{{MoNpBCW9C9Ci`9jlVaD!JD=IN_9PvT_&Ez0@*CCYFaJTj;E_ zn;K&{z31X&#uNbjs+hn0s)u|mfL|4JoLrAa;x(<-j?9DsS5~<*q9)u*VbPisR6u`~ z(gvMpmRVcDZ8N*Q?k4jA?tsqWO6wNDpB_pmx$1Y0V%>0^Gm;I)B4t70Wv`SU7L|xG z-DNTJ+)g?-gkR50- zus1cpfc@9H*W2S|qN~4$!)pP zYTjFEyxFNsa_fC*ntKh(9m@#0S!}N5oH1f*x+TJ};-RhC)AO$+vk+Ow5{!4TygJzm zwTjx)Qu526G&TGhBN{xG4WZP_tyJkzdJkE12zr=U1fxaquatszK~xj!xINqN?J6kE z0bo~o5Vm+I#9kJii`mnsv!sr=$H zE`Dtb%M-$6vcl2Pr(e}w5J-$o?9kYAG0qo<HuvoXprqDOVks< zYg3JC%VLLA;H7?Z&CgM^RuFL2@ZWHifYXY>-*6S&fW|WbGJle8>B22n}o$f-)}24Z3CZw#)9VZu*h zm4ac%2TT;}QG1Cj)z5v`>)qr=)GlZs`SG;R8Q{1kvUv}zj0UH&`JE7QRr{*dP|p0T zl2uBB2Wpnt)cc$DPpo!;(ySJkaiI}>BBT61t8u z$mt!`9EWG~P%!qJl4W{&j2^*+Ts$`K{@FeXGEqyG;E2Z~xWt~=%lNM2O}wS!mAT)+ z*+G9?6Fmk5W+xm>9ZcHt#MiN2s}9Q}${$sZh(6_3c(`xR*WI15VQJ?*@G_nY(9je+ z9iNXq9#&_omC-OF$LX1YK>)K%a1WvTmsv%RFso+XmV9mRsO@f&XhZ%Zod&W4d{_7a zifOXc``=8VL2P=xQJ7dHw(h>!&=^sqdAjNP zMErz!L4JVy;xBnFbhTOd{7G7|P^x5YxT|c5v9;MFv6RurNtwoZC{i2IDp|)6a&&hW zTjRN{GRFj~ii7;OtaQmWl()PfTv@-PiuES|m8XhJ^Ug8nyBuraJFl@+XO2f4(Mvll z7q}bkz^-Z8^TnXO@|j=l1?I26ttzwgpM+{6+_S(QdX5+N4W`FE3TRct#3(*e9Ld6* zE(2HW1w>QCzI5OBS!@kY3R&6|xZmrM-;QFwnMd>OXsz0BZ}OjlC7}JX?U0L8kt6f~ z?W#*{7K351LcmVkBijt5_A&dgBA0bcVnYs{{^Go@n)$SEOW!vM!}TURzyi4^Hj@U} z+y6MI`-1(?Zr_hKfxZzrl&;9*y9wkGQd}MYuX_)7Q1;S`V~~Us7wlZ3(dZd}cuN($ zDv3t92DLZ_Gmwt-0h;BGK^*3lD8(p(bmV?0cbR?e#5xv|%&e-JW!Ip8aBKk9@Vn}4 z{=TjxVQ3~u0%_F) z@V7*=+7VpVOT&+8|6!|AhlD-ld6M5Uy;pw)NK!F7Xfk<0%zn~CEA4IoCKZ2)ZuxAZ zm+)V7_ZGNv3ex3c+pE`%UQWIDPkwPGJAE$s_es9q4zI(Om z*AYb90>C^|5D& zg*W$IzvUwB*k?5%6G=a5xsi^aM<^>!;^0{e4~FHH=`B4GyGGD1Un{ zwU58*Kqam#Xs%5GMnLBZ76{90Gm8al#0K3F#t=ULAejr6kQGOxNv2s{!{;Hp0ZHkG zN-mZZ{LNLdK;*>}4{w$*xZT5RwKo36Rq+*jTL&3tTvi+-tQX6LAJC=oeDo5ty;Rr{ zNcg%5>5O$Jj<+uN>0nEiaI`z<*y(4+g|FARKi_*vG1Na>wEGjQ4$s?A7u&-Utc)L= zBRKMsjj>x=rxYqZw6+;w2jU&yA?(O;5_wGQWk}d$zVM5q^G;@O=?;CFg4IX84F#7D zPiB!*`kFsfIhq5hD>^^M?fK_gAW=a68 zT1uAX6S$?^l|FEAEh`ucZ*wM<4wK;+4TQU0>77zi8U+4OO}Yu0kt7ZH#+X7u`)fYY z0l=!!zCZ44)Nh;XJ#vkGXRk2+o^&c*s)UF6ETL-aq+;(o>rhE`_~$;rs|wx!b!o?C zv}<(GKAe%HDR)Mhb=g2=ixxj7xx_=2zvLvU%d#F+kLkd^L$~yac+Yz3u^GTsEppy< z&2_ni9swT{t7Do;hw0?v*+k!BwUF#Z^TGJ^Mg)+ga65hW8G^RiUFc7?X;+T~(6Ho_zZ+?BjGt2}>gBq4I3N5DV$oA@zPqm(AxM?X;x}um)r^FzXl(jY&vJKjV%_b(Q z;Bddo42`l?68LmpT&?VBpy`)g{eCZiu2S%-9LU&qSk((Fs4Vqid1x5ZX@^fHrfz?A zlga%Zex6Q8?W_E~`R(&G-k+=TBpq)kHA!|hEQ|#Is4Mk?SBot4JC~LE>BDo*>pI-+ zj6c__n*HX}5U3kcze;03mc7ODFS`ugdyWB|kIo5Qr`f*qic120XjhYx)c5kNB~2)y zhI$<%+bsJYNHFiutyi||O_FRaVL+*!s9BnfsiPg+hE+dUn4Q;sG5^qACc{h;A;0d> zhrAw7SYiQ%9K&Pr`0@#U92u|!=TVQ2XJfJlSl|d7W#MIDc!Hf_sXg$eo?in zdyyC-^QbbT;B0u_kuQ9L(?k7C4nG%8F0A_44ZcJxa+$qkn>`nZbjd@kf}SVS8-PXp zPK>irYR&KoXXL_fAok1Mg*L>6;3C|jqGbuATvt&lpw^r+lt! zklqQsY@dxlxKm83HIp5@ulm@2&jNO0p@oBw<0jxKJ!efKq;|2)5^XFt5!(oDu%I1=YLr29-xXxK4>dSN&M>IxIetc zG$;AK;E{5Kf)6Q%fxW@7J0p)uLUIu46DCv3Fz@ABnZ}Y~XQ{LH`3uUPaR#=71E=b<@1KT1V66@~>nF;%;1v?rPdcV!A!SP8A?8 z7*Dds9z^YDu#?#Fa76XBq$hGQeY9^^j#3SzC%xD-(h6v$0jzlCOn zZOFoxTCftza7NV~QTsh&7<+IH%K|3A|6ID2C7RPJ;ln{TlCXqSGVH0`!G1BD$ zlkr($4yIRF9$guA*VQTUxe&Q$2KP@d#?w|4xa--o38H>&s8&0aS^(}8qu3;cvk{UD zxK)l}&UfwN7lv?@i3n}fWpc<|~SEEOwbJkQ$$@@Xc)JLk<6KU&6)A7ydl&SlAKE%^bOXOcC^(=x)k|{4bGmD z_Bk*J+#2niH2Bo+MOAwrk`ImNzqwV;J)8A88@s7d9{=N3CDtJ?d_=faR@6I@_0(k9 zu+s3s_UXt~f}e`6ctk~N8ksxg3cC()n_7yu<`mOMmtpQH``fLhF0aRZOCme<(H_?> zPJ5Ura}jx`U9Lijr-NK{2A-S3l)wvo6A1=bYrAd2(*T(74;$x>g&^}izZ%gxXg zSKvMKg8^Or81YuBr5}23to_17_H-Tl2CSiz9&6%#Z`g*4#0qDcJW8f2nqsv*G8VGH?y2URI~E zpfK!ZPsVp&otRu%9q;W*a=6qQ`&B_jms5!>XRvv)0KURCa0wKH$-G9nW=8YJM;at6np+9;8rD)GnuIf1%K`_42sv6&i}yVhlC?Uu~yI6 zL9D4?1ixZ^7fy{1_hq(pd}HK@S{tT46(HZv)`-a~PH&4JvqiY^a4NLce;rkKlRciM z^+m{l=UtAqv1^7$Fz3eOtJ8E8!6Wt!>Lz4ylQiChfWq1%_4!K*)CCn2$Te;@6t+I+ z(ddx3INJ2i^}((kG+CCE0r*ek8FYT)Kc;(4u;$ZDrH_l9VgYvY3a+vA{dp@-M52Y6 zd0IXdjx|}jicLv^1rq2{?g$_Yvikk_CRj>aTXHEF6}PmNfxcY%Ng~g^*?A8_zVw@?E6KEL(YMP zIAZ$GF4Z1ICXgZxpjAiziB?^N#^?)onFBXrku9AW2(*gs>IqzHSNqRJuXv9HU>O#h zdQvRHSMv{;YMwcTlTt?Pqft|;JR`l3apbg?(tPqwkz8f*6lK*ckoSo4tMt*I%^LI6 z>Qi5ywR^P6EE?9#xdWh8y0RX#M7a%%pKNxNzH>HJY4vqcJ&wLh=9RiGp*~Ld%u3>; zoF#NXB8rYKE&YM;`I-)@gLn2OaAXw!e0Fj2_v&OgE_A7MU*Sq{PYa|cvH5uW#pTw< zRMXuP%&N^REd4+KY9jbUtuEYXhB(Ci7hlzBr;ri35`$SK5J<~T4ZYNdO2O42KHQr& zz3M3nV#?F}FZI48OB_k9_qKn@JCg3UWk4(XK~GGwK@+=v8Xuk-%P40LdQExA%Cx z(pWyO;gG3b`Brb*idzP=eJ+T+Te*ORGHb8I4~)l<@xHSmLlNC+R?7G-lz!1cobNT} zLZbt|aWFNJpb6u7ko25t$fhgH54YEcl`Mo}q>rKjxO;8vby~wOd3&Z>`4?RkdQVps z{Y6(LS1yh6!+GIUg1S>*1ngE~7D<3ebO<%e?GyMeGy|ILmjE#jEXkwq2-E=M>qJCEN1Xfh;dRtyder`+0~?P#ysR0+SSv(F*VPl zk{aOI4)MQPX^)iTm#b9!-96~S%*tK8yvEs`?#RAz$v26}BPv7-|XxbFU!2oIt-iLX?atP)1Vw)WxT?fHqIaQ<7Er4A` zd9e-T;v(!SWvI@P5~t0^U9DwXR@L|6+aL*K3)kNkVeD?eu}oZ%u~{YW%C4z;J?{ObUN2~Yv38

    qaxUc*$E_$4Zp1Bx{@JiV*QNBOEH%zKX1NiaTFkn^Dl8OqV90~B-A})ApELn`5(UNZHNJDN5l9%s`a9hwW`pGtJ ze1f)e65oh@X%zkqq!|o1rBPxT>#R#$EPtVv;^%a>2@+BnN?_gJiRm)z!!s)SQ)6|z zgt6wc_QX!>fGsQ80Bg3ac-*6x?>_nMbGE>c6P^K>KJA#P8%=XZ`=);EnYY5E+ZD@M znLS;q=m%^+n%izplw9m2{)=~VIUTx4IV=dLs@>*k(fh==uXY-vcXy|>=}WoS(GsjV zHp#65jO!bBXC#MW=WBk@Tgm#;K&S+z_trNbDT0XVwhA34i1+Bz#ZM@+DPU@OtV1?} z7`MvI8Ra4s`z@Ol*BWm>f!m1MCTrY^))86pYo?WMBu5lYA}0*8eD=2-VmkCqn2A*j z?{$eqzQ2Uo1Pe#dYp&u*tbA-prs=*av@`rN@1FG>>k;h}x*}!1QN9U7`^6x(CK2HY z{=fRO9!Q(8Bi9GBaWyOth9RT(YGS=?g4W_bO`}VhlCt1C8Nj_(ee9)L49*0%Cb^NK zSy8lw0vNe&wm(gdRniIehvA)k;14*CcLL z`(f+=s!W^XV^|iZcsl+1MFl6Fj7D<(FcTJvfVX7LQEY4ClTR(rj-$+=5)=hvPBCB& zAVQGn@rpuhkVG|>Z`!VffO_DiXBxEXkwJ&ZQVVr|t;mKvS@Wlchq35hlAyc4t*VQ_w=}EqJ@;0X*}YZ8eH4ohnQ3Pu z87Huow~7K={z>w1eHfD<&EPA)#iq?@&S|5-(@C&Yh+==!devjaGk~{SSVx{_=wFsI zcFV-Zr5`WV?PDgrfoW&rFQs@=<;E{_2nXxp`KrC{hY z898m2J)T%+0-HS%0km-LL`ta+;+AMa27T#JSPxvk61`WVniQ?W4@Ts(*k+8k8@5YM zyD0h8m9Ye?YS^ZZIf58S)_H|YJn&E#F90r<90g{!OWZMSoAO4(XL{ zZHo`5i|6-RRe5;kGhxq%0HYYv^`&eq~Y9 zowI<;#d^>g1CJynx+t3d3*S!e%yK2XcZ{~!tzCv$HzhVLv%Mu{e$S7+XK=O*Px#Tr zy5Q6};rS+ifCSV#J+~vKlkK_C3ItY_+8VP_cb8!-*T$Q3`|-%mE;ul}>sT6I{qp^f z=V#Q5s!kp$4Vw3fYIxPm4?3ZfAdAb48&q6m&BQ|V#?*3vJewUaJILmkmfjqq-aM(; z?JKa-nvp*Fl6e%};@9;D+!@*!zFZk&DD#(AMHBxot*YQJt?Id~^;TAH%J@E@Rn`Ac zLe`fuAG-YioIBSTV}pvon@Tz``S~S6xe?sV~B?1 zzz(m=?by9`jCM}SHoG1}a69=5e{aenpel{y2Ybb!&~UIgXxB{rXUGe?GyjCy1|U^5 z2Pjnj>Tqf=rBP>V3<`LNb!9Noc(e2-)bv|~YbpwdD(JzRQMejs%R!J9?YivtW1vd{ zE~y2!l8+%~Mt5a24*8buq`OeWDFi@O5xKGo#*R`rHly$12&jt1iKT6_&z&jGKp-sH zS9!I7_>loMj6hRnMlz?Nk9IS;6}Du+^vmIP!*v=q_3ITHGBta_jr3NBWrTk^C-jzE zJ&pSeNVgu&*d!zGA&yBfsB|osmc-~0&?OeMAX&~iItMrpKf&SJY3ipFUc@Gvu`0s$ zczQDEy?9%PybZKyTUF$Q{Q?^r`m+6|#e*qio&3LA+tb;nRh-`Big-CMI|ouJ^lTK= zSeqm71e~g;!o~}EUBf6M+~hj+w!C=8mTwqkPV>|8<#HtPzxK0MH2!(gubCe^1XY7L z^g}ar4oi<(s)pOW5sg&Be@j&x!v4|sQkCbI7+D}Vg{@kZYg30oTp@U{$&aCmP*s42 zZdH^h$>ZXhdN;a!YTTxmT)u?v*NmzmzH!p?jt3Jow~ZsoFp& zRTDpLZ~j)Q-hY(V;qmcVA_h^^!jJo##_YkyJ+Ua2R2Kx9;fSR~m2C8HrAqN{rAmJk zF60$R_VO>KN(4}9tRva` zd4f4%;#a^Wf5)wcE7zSMB1q#k+ozUVauOZ^)d%W;dw0K*lw`YSRyd+9xAcmZGBZ<_ z_!4M=57z1Eq5dB0$lK8T?jr`yk``yOei zdpBz5?6KhRwngev;4Kw-_Y7dPt8 zn(+b+A=s?s{-;m{UG%!n`zHoJZ}UWJZ(jQhuT2dgTLd-~If8RsfHu^O9luUW^+kQX zIw2=j@FyZ3XW;ZP#pS_cdcR6(Sg>D!ceeX>OV>QvS7Ro-XokV@-`9K^hc)P@l7A6Z zOu3(jRE+?lYRr!z_=PC9L)`XM)65d7;ZLAO315hmAWwRmgr~D}F;bYYMpxWC+LQ^5 zH!x*tD=}3Cwj~d`i@?-A$Wd($-Cge+54@hYz?#_)`9tEHzqsBVNyrN)W|k!wWAuIe z-UB!=)O$VJWBT`jAqIFHql!A3iSz}>h5=t60mP+clKQbTjAk0qEt88Ez;IkAQkX5m zB|%;K3x7XZ@+G)eD8(hqwpKCBxduHH=%7Lso(}4JL_yoHbj(f!;7Jdd$aK)J5=I?l zZyEZjWOG{cT;BF@?FbW+)ED{7(*%uGtIb^WGYG$c69hL}(8QtYUcgJeZVSara^6{o z(Xz+^->mvwJ|qDv#LKrUKXC~HC3Hgq(wMbGUp;G-64qD~e0_D>6&XLku3e0wJa)LX z6eS`r&BF?`v?lGjbm19jFdkRHU#nZ<>kq9ssjF_R2`@JrNx zZ!Y4@#3j~|X6ck-+qr2-h`um{4mw#d6@F3+uH}rXeskqb8CvHgH94dW4qeoE*m} z{YsI{?F))4tn$Zkbf9T3iE62$e0q#5T-NCUY{P_LVfRc`Gdzd=KKVWm*yk;gM^d@! z@EE2t_n^$Ii1Qd<*|L{^e(^dkOH7Neu@hHjOimiT>J51_(3)7zi}6^3#E6;mZG^Zy zw1jq%cF4Rs>|_z$mPS(Q@zyORM%A#s1HgOmSiQ`4_mUS*>E?0TX7#AqzsL}Db3|1| z0a<~!woNQ8Lx(-&X&TL@yuRR6QPU)Db{$Rd9`SGRBh)0U@REi%BEC< zTo+e|VP^c~&0*)RMMKpsl=fm|lVp8P^jaM;W*xf zDhiAHZU`^-0gW|ZqYm#&qtbdg4tZp zf?3H5BW2Pgn0QX!FsNuy?c9g~bpRrzQjW1%WCn1?dn^p7uiZ6tLWEqX5$LI3#&)?c zaNd+U`Q9B!MZUD=yl1(5bj}$Fum8M=m@ov4@N$AJY!fe6g>BLr^_@%O&&qPUA4k@fDX@oI3%j$pUn^RM&z*7AuEh zjRn*uE_BwWo2y-mi15mAug5Ih&Ga^s zUBAMulR9^cIG0DH>Vl4w=829rXKw7A{$F8QQ!C;IOFysSWU6n2J|M;UL%B9FzVnk* zo;!L`NXiFq!OE-AS20yugjPPWi*#2hU953uGk)&7(>t|~{k_;uTY>7>#cNrj0Usr4 zc+rvj80;nI{I<6M?T)Oxa0(RcnV?`tQOHZT+XNDT(<=oam*3|t#Mz)h*x_QxmEM&o zLrPl^^Zl%oMm{=^!K1`WGG$w{BUC^zs&+ztF1oWc@m+>$xf%qbXK49+sK~z3E~!4X zND|45WqShz*TrRJstlHK&8v*4UyI*iqb_1`#-2iu4X<8iM}B5!Y+eHgavKzD7jF#h z@T?AmPG;;4{6_KCk-}irT9xG7i(4{}s=%>P7UErgC|g z+c%i>A+!agsVrDn|CI@oB3?;nJORn->1Mexy~IH7X~nuq>{)trG+cgpE z2|QS(vw3bW=+WW1^bN>5&g4xuez#rL$7P=Jb~y;Lqt-aXbD8o(d>G z2kzUcd#-08jP%?HO>nV8q3-M1MWa;QMUZRSx(cqQd*#^!_$DAosVP zs<%N$Zb7MjOBFptI&JdRr_Y^QB*SxKb~^F%VRe^T*zoZlI0zQDAhO=Br7bRL{yxB1 z8}6~xsBCj);V4&07RlZvF~;QQ{b2booeF(fJ7mOd5xmik=4PLlxZYcqHgW+T+glca z9TMclM@g9HGW){6YJ|Q%9dv|>ogWJaAyH?tq zx1!G8ZUNc83b*c)$U;8qr6UzeJ)KuxBj%}!KU@Wu<22!--`2(ii@vtOhC!jtn$`V6 z?llY!bC00HYJ?V3lw_Ghm+m@=Yt-qVzjl;1hTeBi%@V_CDA)doW_64@ieh z2;a6p{3{)LiS!CUBq^f%D+qKS=dRFwi?pGoFLc^(v5~LvOp9Gma{K;|79hqe&ARz) zz235I;*wx2x0E`+27Q@M4UC;NcvHWh#Cy`Kh(j*s|Y z6-zTOPe%yLZ*I@^$BpTxWOx<(JjW6GSvF7nO-LAfFHLf4fX|f=>xx&Zz|TLySaddK z60G}bW@;-sXn_J`%m--ZXuZVfZmfFhxjpBvg=_qperQMc)BtB(JyxD2OO6P)u$Pq* zORVE#@hH>OL3xei6!Y}QwcJz1Uhlts@bN#^wMbnyUNq@Di$G8m{+11kME-b2oQyWg zqB&Wx)c{I>#4DBfRkRtpVXO|?q(+kfJ~ZOY9JiQsvK)9Zpa2S#6rtB?u)AjdiABLh zx9&x5YW*y-gzDfmZzdt{ZnktKRIkoelEpeIfJh zobEK~x7=A;7bbWv)kc=~03bOeKS4YM9}llSaI z$eWhJSiUehO2<)so`pmjbmC+NZY5vwO{$9!ra^1J_Zwg?dd!7f$i+cq^)Ht#x7n4v7$uL zr;0K3d)(9M>TZMoLw&yu3b>CvZDGH|mBeYEKfd!V=F25#j{LDdquTpeWM*mL%FnWY zOT2p5D1R&nN}+~_W7^AOnO++GoJ4LS+LsNidQBnw+gac2Su9+GLX0U2Y>t26XbXIL z?|E-=F=C-UBAa3|IYIYD5?1ipaG)^w`%YBZ%CO4=d10kaMWxrwu@lItf)-Tf@4ou6 zSMcVs9K<|vST*={Zp)*EU7Vr%j7;Vx=|)6OfiiUPf|a5ztYlrzrUUrdueZS1c;^%- z!C5BRNu+KjAqeEfKQCk^wOxW9yR&=><7fIqr3!&lsR-$YyM{t^1FYibGcDf4EdR952*)uv>LV#{<>W2=6?R7U(G{W~onc_ImVC zjN~YLaMw>fOj}W5RnP)7scf+`D7y)NxKywHaH)Xf3U*-@^V?+jSSGbneI->0!y=XO zy>+w<*OTAK!H%h|Wv^^xDB*_(32b0LRx^TA${bNfU1cdEP((ZT8KvU9<@a3VJaO$7 z`=m<7Auv<;Sr**Krz^u>%x94_&Xkbd<{;)1YJJ2bp!lQwDL?h+I9V!syresEq?w1S zFkcJ6q?-4~#Syy?crB7}Bvs!ZBoz_T#0nW;wqRg;0fSHDmI|+_BGz0L#RGK6GhjoU zu?T02FCDKfUm??Qu#rjS3-iipaMqcOGEY->b*6Ywt7P$P$%EEdzKklt*3TLg6fkUe z8<~H0^^it17c@gIf(1N+j#=zTM3f;xCYSA@PzMdO6MbMVbN@nzx~8;Kr#vUvaC5M;2RV*wB^G-9(ojamo2#BeKl6g=>czlkpyLXB187ux;-fON+kie@djO}D zd?;js;7}B!O?;1U+}}|Olpqn|>21)P7LFEGC~2Ym^oGud|4enKzBKd~BsZiJelRqJHK zD;M3gYoq3>&vod(yN!1@i$A_8dH9M_sc7yBtvKJ^IZiC^y=DCy+>yGatT5Fz?*a+V zuVhedl1zR_HjnJb$9U&_@y?UXprKZ8NlNnUMln#*3CB#r-Zl!C*aRq?p%U{gp)*egb z#jIvjZ%~`ko}yOVn-m@b`#fnsg|t`+y#`%rJ+1(b%;pDk*Da3f7~rVD0{!wc*AD=w zAK-q4opYD_dGovqI{>ZkHa=RK!N5N;^bq?c@*Q3Bm#gR_Z{Xrj_3n4U-wbczp)HIw za$SyJ`axNZJAsRLE;4AOEab{AB)Owj8ep)*AA)dM0@}U#9Nomf{u0@HzEiEl(srhI z=IMe)+I}djF`=rtV-C~^=QY`y66$y{;!huwqXm4B-oLVAl+gLC=3h{FQDk{6R7Hffs zij7kF4*C^-*329*SFKECOq~X(r_U3dvwuBrlh4Ku1uCwwA~Srbs|`qqIDw2`P>=o4 zDFi$!f#(35v$p1Wj`X64xQB@DO1jh*xDSObtTUtOa^Bfif`*>&MM-W>TuuanIniVx z`dYI0^_l%+r7R8$PP9M@`H4Ive7voISf(W@^^ZM|nD)pwW6C998-_RM;}$I1wtn~~ zsf$>;S}4^$mpL;e0!d|t=HlPH{bUZ4I6as3yVg-Y-WPz%s5~lohu)teP-K_ZMv}jX z7_WYOwk(n)?xMuf5_N>2+HM=b2kUz<8EUHgBjrBWgbtmkFM_rPJBBZYwV{(8$Je=a_E4ItK^mlyI@eaDZFYF>a&A>E9{yLa{lLh9gn!e8R zM6lj*p0#WQ9$oNUWK4^xCX2QC52Y93UfnO@o2Y~PttehT7^{Q`FQ%T_@Aoh#_Ri$^ zj{?RDJ6Ffp%QY`aW1h4(;*~VblVmA+SlG&;E&P{-sK5++kQFlx0)8o*62~s6dczz3x~{~?N%>m6j0js zRA6`yt32y=EBch`G}WWsojoVO)&=-eY3dQe%ZRhT48-z@OrX-w3S^g(TH?8f!Uz=^UhVgno(y&E@Z?>WIcPCWw$PG_dacQXAG-+-r;Ik4 z85dZR8pVKg4QL+DFWNA{wo4lzkm|G$)d)XZBg{nqZ&M#P(QI##cB) zEomNO%Vdp^b_ZdGxY7X0oy1wy!GwX+*P=!4<15H+CF}QG5nPSxhmIRsd0&D%g-5h! zC-V0KabyUcl#Q5)UuS;?Mr>!fb$eji?>ok`A~c>s0ytcBWZhJk#ZVQmAgNGF_?F8+ zG1ziZ&YL?dQnbV!@l=c_@Wm5);eq3@tmDOgJM)b-p~B){f36(+a0{L) z+|@6g535?qTEB0(>G?jA-~p#J0i{Ea*!lt1Mf~pFjP!BRS@;RfLTYsJM#o%qK@DzK z_bM@nusuVwJmcn$uH?LQsP~eBdO^iiw0#@GMqE8V-5#SJ-t8-#qcKKJB5C%8HzZtS zaZDas@)&;Ufx}>%Z}Zn4sbx9}V!$x5dwQBIp)`)a(m@bYONDO-eAT{(!OVl~g@ywe}|VVyetiq^n;qyGxBD8uk6#sWO($-OPadbZkTY<1;El$==N5Wh7ygxx_(U3(1p zPafTM-#fk6QNtLx?y&rFtg`i7cyB?*9cDO&X|EiOfIvY&J7nLak#Sk|>6oF{kqbil z>_I6PGCPcbMW+be|E~MHqr4s+V}Hs69|Szfw3nU{2vd0Bgm?b3r)<+oyw#W_1Wd|; z)Ca>5qg!YIa#JZboCk$9jTu&4Ck>?u=X>k7n_lc!x<_=A8wMS7AmpcZ-_ z%_|9KPrYx2o_v-MRkI2VOjl{-R*N=48~s`bqO*5wtKjgd=(DKj!IJM^;qAj_F*Cy$ zwy@(uw^kv)EM#Jx)xP3I=t#qEA`}kTVN|D0T9xxNX6a`ZA{Q}ynt$L^(Qx=wPcqHk zUBleaa^hfSzwC3FXJ>44UrR}JeI7<)wUBiRe&LlY-Az|*NDp)Nr;jucV1&Zv+S*%n z$cax=MOD?%6n~U`ttG`^GoLa0z?~&IMIvL$dLZm83;X>Hhjv)Yj0r}Ne?R9heJa@l z(5Is8lZtNo8_k~mzCdoirB89NYhZZAC~}!L$8v@qsGE^@D)zjgAd^||A%oMW2x}7# z0{HN^^5<#4k_B^cT=+I0aGWXx>6sx=LkCID@e1wcm$1Ib9{-3-?5XQNFF41t;PACV zqJPDF|0hlv!R5V6k6A+dTl$ppzv)w2P0@eoQyHVxOmOf`iz^#vyqAFM&$p4}nVhmOy1;NNzy{xr3t4nL-~-i)kOV zpk%T$l4u#6Fr1oD3SsVVWIAO>Fvo)g4p}T0Eqi?>E2Nay{E{-dovGP237n=dXQqTKNQZDx38G0H{)Z zpQtua|GxlK!_ClhIDqON96*&pX>$N6iE>U{Fld^kC2CnZiG6sq% zm>%;5t0S91buiD0V5r(?FczXr~49JvIk3T1uiJ+gu*5El1u9c{Z}7 z{R6Zn89+xNIU2^tKl^{Iv!CMzbIFErd)u(O& zRDtu7NQt&LEhn;5Y$-nK%mq2#6FkGpOBTLqhAeTk&Db+0R_EFRu7kKm1DmRfdOC_; zBdS=N9+;Gb`*nudYdiDh-I{wkTS8M^h(`EkxgwO!=?(GrxRkU`&j}F2t}z?2s=hQ7 zjyQH|FH;tph8pR`8_%%K7dQrs28Dz+*^olo3l+|f$HH`5;+wBb4_&r|>0qcuaLf74lmf6=|8ar8p4zN^8tIktSx&C(9i zl{@MWDC7>#gAv7}aL)mbDhrOIiffgt=9Rz5dTDszB}W_9|0H-G*9%30qGzGQ)q-iR zt(8!WN#*6f=W)u-qccw8W_jAg^=~s`PD1SBNrzt%M0N$w-qD~#)R)k-gV6LDj9Iw* z;^!ir{N`t5i+7pV*(~-ADC7Vm#pTgHbD65r^P#I?nr0CK)JMPq86lweN~&~-vJJN+ zlSRaNuM=HaX|bOk2%RqAGA<3Zj?g@)9I`B)UZH zcetZ7X-y3e_K7ayY%7RRAt@g$F$YxNU0WkFCX5*PAC^NkkZdYCye zsiwUXsa3T(-4grO2>L-v#DX-VW2o>Su1~Ol^NVMC|jZxqOq=p()wr1uy)`=v{F>s8#sUG z)9@783Yyy~BYc9QMMCe2m}048T-|e4+X-yiHuUB;n_hK3j#JV9zM}s?m)@#jQ>T>e z0{a*0-e9&GGSihv8SZNt9pA`Gx&1pkbwauyZ{9R}aO`*Xdn%$1(2*~yYIUwRZKUd* z(3@?(uS{+8GITPCShe>uKWb>Qd4lgj@M*7T?gufcloh1ww4%dL<024U!FuEd1h(wY zU7dTa2^U%VmF#Aa)r=snkg3As>eq){Divk!5_9q=Q`gwC}X{WB?p+Xegr-)R)oNvgXY?U(Y z2x+au6wHn}yAMT2;1KFVvFA1KjpLOi5HDx6C(!)Mq*88V2ECOj3{A9xM zXeZg|WK2T=`j%&jqz(M^&I%*OT9 zD8AsO!0&F@Nyj}5zC*+FwMVSN@X#=OS7d0JC{QHQ<1og_rjvo4F;dzLV-2;kl3T4T zHXZ@lii0J}Qx=biOw(hD$n=D7jAWs8#*cmVrEc3PL(;lSuswG0({%A)mBF$2tpR2o zA*>8f=d@fi`b()jpwowBP}`(Cvg??>E_L zH%WxCaSqkCmwhAU`sYvxB9&ReXDOg3DvapyzDI`DZd2qZQDk+@ed&v3C5Ar}_8rP1 z@7LIS*?z!kJ|I|hLaWONl4cLqqBVYpgZKxQ@(PFh!I%ZZvL#3e0oS^By}E0fz9&~m zMiWAGI417U-xa~1%nRf2iHSH%xVDLGHM&sHDsOX@NtZ*Kq9xJb^t)qlMgEkQM3eJz z8Fb}{L>F&zu8Ts>tL$qllt*dZ+GdbYgo17d(fBia*xD-3R!J^;7CPBB)WR?y4xxf+ zW(uxiNmug+r)9lGD_!e%6Pd8yuhT-yVh7rah*)XF+(8^6*Ju@;>z#>B*Iv z)5_CZ2vtHahxWPNvFw?+fD){P^-Gv&<6&RE6f3xf30o z8Ylg)FCwILP|_oN5NG`J;{rLfrIGw-HiM@YVeOV__GDMdxy7Wh;hn2Dkt$*C?~E4O zy>ZAe8ma1tN9=8x7AWxS205p3cfw|-J^hA;oswE`2T2hx4-mQgj`IfXo1mDh&D0)* zud25_X#sL&cdV88{lf%dpe4>%qN@`fd#t-ELXUG=5Ax3;{E-mZ!SQ!m!YxSzu~mz0LQI%ruPj_sqQ zRV5cQ8j$2z&8D(`J1;v^NRHG(`?=3kxinbN(it8j9o@rU6<7^!e(PyKT1S43E-H7# zjR-RxJ=|HV*3-$2cdC1XyFf)7Z(mEzgUjn0Hdn&Od$U%5z!Iopt_BoSJS_0@m827Q zy<@yHAf)#-Ot2@+b4#B$7ihA7WSVL}_R5RoJNAYXkWs@Jkv;?-o*&|3*+}FPWZ*eL zcMPXaGPY}9mZ@koKVGEY`DVW3x^H#ZGeg{~#?gX!@!&POYcq$sW2WZv@>BWW7v+kD`*G0?8KKPvD`|HcK|2GlG4!&y z`7+DDa@~d(2_u2?`758nGR%Nx;yPNRyx@NOPBM#rZN~~sPpV&HAZD3nDDCLypQJzI zQ9OA9ecFuY87o=grlKDiZBbVCwK^pO_&u0$VJQ!2`?YP~95EAGFqSpq8AQ?D?@9ql zsRGNAhOD(-oEZNBp)%0UdSmo&2o+w1Pqtm^aj(~-V~S0`!ux+AR1S)}_-KByq)Uu? zl1crj=fVQ7AbB2lXV9crV|68_j5+6hy6QFV$4bzawEvDg=2h~iB#m4RY+e@$n3Y49 zkQP#8jSv=aTY?$n5WUUjzIsErj2@{dFkNyifSU}vizJQ5TjIo*hb&^>BctKjZ@R7Cvybbl2V zd1sKuL_*ebl3OIK;zsCJ;ZDxShzYZuV&c$qaliV$m_`m58_YJnpPt7kIs zQd7IrU&pTaI|_IbiFn zA7P&#l5e*0+D-hEy=a3PpHj&NsK&3kW+uFQeNSo6ZxUoF4lmEL4#ovLIcA>-m1ySwS(dIQl}b{ zj9}clLJsKC|kMU3J zgtW~**NrmW6inwyy5UkGiTjTe+>!JVMId%O21Sm;3X(O?mrNuc$CBsGS@aCLhz*EW z#@g=PG~E@BB_q2&=#jQ-n@Qn95QXnzajw*qaf6p)RPn-nhp`qLGn5BY#q{5uCaKz< zDm+C}5#T95w!xE?Yo{E?N%j6m3qasXMvh{Eu&SsYuS8uB&N$4+B}VL7w`mQkyGWkL zoVZVef$RhZa>Ky6jB{wyekZxLQlXI&Eq!)u(74^8y*1sWG_kN%^Ga5a8(EI?WHmgf zE`@NX0x3S>=r{U1!rBN4sudEwyFKWITJNkeg<-p;OX$zr8RqjaJ+oE)Tevj_u$u&s zrlTc%1Bw|i+7pxz|nAb?7m+Pg3LRros@2#CeOCHBOcrU?4pgc17 ze0=>K>NU_oP~}fQ`d1K^8yW+4asGJVO@sC?IG4(O4nBH)xoFkQl-4wiK6C%oLIz2Y zA@RJzS7V&?&EJz7@^6pm^H}--iNf@e<#zj^RtTXuMxJB90AfCtE~|dk*`r{ z(Qq-=u}cDg^rb^%%(rf?WEz_>U5i?!CauY=SC%^HUE--no^zfj13(;&_q5AjOo!$wl<$xHv#Y%TNf zXm5XE=P`TmU8FWh{U3Pd319wv^hf#e0TTi8%nI&N-1P>D!}`Zhzz3$IMe8anh7rCj zT~5%e>tB%l&;B#w5n>ax59ENwrGo6{rJtV%y?|0wNciCxFZ?T>BXyT~0MG9+p3C`q zp8KF3J=Wu$;Q=ZW_V&LsVFUiKZ;XI|X5bggha11CVm+HL(9~iA!dQ_s21i{Y?!K3#d{JC5nq-W3!!d7Cm*tlrXotmXGAgCC?PO$5SXJ%W^3s`u9 zlPYU$wAT~2kIjpg2e{eI;6)ZxHsu_v7HF# z-a!Qx_n~F(&aOpU3b&6G%hw5ixHWpul0xfU8=B8RjzX*(87D}K)lKX%2)StnaTH~V zhHgDHe}AzxdPHz9ErK**!wbRGY4EUo&#l&ZkKQd>e?FZt&D#$RBJ&L-F%-Diw)UPT zUj#>AF;;c!x$Pom^2S0yswTh<=_WZ7QqyD@(cFIe_k*H*?DjggZFgJV%oSg&h;&t**sdQ z{^r&4Af1QY`Eh3!Nc)Jqem5Kp_JP9>jZ>JYFfs_?gzP(tPxBnA%Z&#k?H?y#PL zO7`zayMoUD-1Txk2AQTq+A0+itsXN2RNtCGKH1;gqY!!tyL@o-x{yznW*W{nK1HEd z@oZuFj-oXjr0(|bfJ>}RPJQ_LNmVQP=rgs5rR7h{j@XwHn;$;3*(44Tw!<>bI88xLfLP|Ht9=d?E1_> z)SJ>33ZgYgjjl9hi(#~yxlitl)Vt4DI0O#>k31e9%(qSN&D?AOsrab_FhRa0efRCx zMw=1ld@uUDyBUOf<2GikE=}Te)GJG;JwM(zJg%VSd4<++ee`800f_405Qh7enTb@p zt70d$TYW~?b_)mKHK*o-c^rg<6?DrKghYHvKw>3M{%P6e;_STA<^~Z!E2`TloZJQH zzFTl0#Joe@kSOOTafrKoI`fMVaf`Z6+BALgWZLLEzVK19^Y-wQ(G{EI>#+dZ=%_oJ zZ+>@>4DH>3m)Ju8V>!Tb_85~t2fd_80P|eX?TY|1WNhH1xy5(Z9@*?xO~X={G6-;; zdKurK0R06VlxIVu7aUBDP)qcYf|caLBHfeUJXT?f&Xg+YK;s+WR;*CW$_Db(C?!8& zbwB!KL`k{tk1O`{sqD;(iPjUP1KY@NWIrfAk68J(2*$awt^=u{I-nt>e0=k5Y6B0^ z%*o_uKR6>FF}wnx1gE5s12Y%lY@r7QWAT}?G(Q@rPdn7O0nN4iLQzBD^X_M#H0vR(UHI`_H9+>LQX16tU(!P(t3aqr>a4ZTd-wO}t zi=;IE^d77G;6K9&%n|Rv#C=F^dy)3f)`1!|0?>d)r8Zjru>`^QG5=Xi|4cjojsKG% z0v}e=@z-4hVv=z{h&Hc)y}9ULMdQCFtA8f=ze$(>AO7QuAO$8&l$T{ipZ;DEeH0u& za7n;(=fD4H|Md$qu;F>~*jk^J|Ev=T&KiHTi{{QhL|MlpH5y6L#Am)$d z{Bxnh1n{2_l#KoNEe_syBznv(mDR| z#p|J-!-z~dNUi5e5psNWJmh`N=iVhe8$;g6hn8jTrN!|%)6p{S#O4f0_yZv}ovg&N<% zZ;|+Ywd>tHevln0#3sC5@g2p6;bt9TdJYm&Q{YCIohY*uMa!3DFKvnrZU+?>0wU=M zuGs1P8z2#fy?y{}#!|=eUpyG$A*4aZIs5@!G<$$2DwqN>S3HK_{bFH&Z?HQC2T6kP zD(-vW4&(0K$Si?S$lFYS5^C$w$X4pVK@~rhT&=NRdiUtX&Gkw1s^60K7q|HKw`a?V z&dr$<*MP1RKal+JbzEk7Dez86$l;MD@NL+qU+5oa;(F!>vsr8dbaR>kSdTrSZa=hj z2Ht`aYxZPVTpyHqTzyBt;xxX55YFA?GI#!fg?i(@Q+pXViuv{D^xNM{OVY=krIl#- z;kbS*eBqx2dGq*PCxK!|1*)|dx|+{G?O0|65H6E97v49`Ne8CX7f+o)wJe)*ThD@M z^v@^4yU>$4Z*NtdBd}G$>wZ!{_p{>l$64?1DYL&0?^(OFlg}J*H=UZuQp4Zx1h+Y= zeh0x^W*Chc++uZabMOd?fezc_HSY@5vHF?AIGL&=KL-J z8vdd;pFUUFZC@_ndUwwrq@Db#a{Y=gSA#K+hoelO=6dqexnA+fFnyHBBAfN0|FHU- znuQ=!F`0R0gp7a6I%h<4} za*LrsctCz{tgqp{#zRC*j$!u`Ztt`3$8UMS3E8*pkDbMb!I)GOGI~1VhltIm9o!H^ zyA05)u)=XuZ0k>>7oNH|$oU}u#ZGCVPslTVCkSb8iZeDoKRigk5t)8dKA+`SmB#=281Ps_Bv2|mp>ePN?#8UC*-JEHU$i?QAq~4Jr*!c zA=ZrRMGsBj&$9)O&c`pU7lHTuxVkxY8&u>=V*7EICNrpfZIq`|<4r3NvsZP8-yWBP ziTMB;ib2elkG1qYH|6agrpA5yX*;6GI`Pw1+?D%$lhb100Sz6U{LnEHt-n6s?7F-H z|IWUu4TGJbbvwf!$F8#n$SPU%z?@26ZE2xpiuM^S?_ba!h#pLdWuGIUv|^B!RnjKy z9t%ff=MgrsN;|2R8SFOSTu*|2Yv=m%c752?n|pTu9_-n$UW+DT=!yc1OEjC-t*S0{B~%_%V} zoDjrRZn_I!yQ1ziEP|HUuE95=vfZ$h&|(m@mJ_X@mCBA1oBAyYTMpQRLqjs~q8{pQ zogm33Fj7<;oV$Q^;Dr$oKR$k#h*7UW{b_GFW1@}?t6*=W>Im`KBl^_LWK!*pUOdUF zZU+s?0q<4Nt<--C`wcqEM9V>BmXE-l@4wog#Fw~(>Ph5Qz%}fL$@SqU@Vt$f(Ie?b z_iuokvnAymoP`UD8lvwn{r?tSr1@^nHkXP8z>A&GIjbv z5y?^**d>8QtVb4*rnnD#J;pmW!C*F1Wj*?ye(g|cJ-$Jk7Ie71Fd+8wE|S5Q>?9H-cri)BFh2@?#Erp)jki5g%PztoF72X?6O z6nh?;KH{X_Jf$Q8M>D#Edy}JIYx&KAy{txNg?W2I&jNRnOdIu~dlw$5IFbg;6&OUX zq=H)Ro)Qhl!MfC%{n<}f;5RZ&GDWPF9<)H@iIZwxsJjq{je@)v>DPyOeIgrana`Nf zscD*&hm8p9wyUPgIIAYI#*vb6d-SIQ&^TyY7^GQCUw@Nxtsd}v-XPq8rArRhI~p{+ zn$AY7!bK&4e6(5bn=8?u7o!E5?m`Z!tRGq)!zz;TB!dL_r3Cso%ljdL1D;!^)b_qn z!+b*`vC6;YRfJSP_KKe#%al* z8+P=Hc_vFW>RR}HSL<>W07YyD7o-GM32dU8TL6GikVzfOfE1+Mqa=> zl;wxqN+D%_mR-!&Q9to(q}*H!o~-ah&4+K1nuVy?)n>V7V;H0I8S}UoS#wk z!w~1mdSipUiRq2)n%?;PE1{~{7q=guI<-tQ-FoY1kBT))a^frtn4o^|K&{}_Up+Y# z1yF4T*A-{cUsO%fMiMjY-%GQ?u#pfTs$0Vp26s$BvVelUAXYSS?beZgZ-!C4^?2~X; zAkW$}8yO5Q-fywfF|FR92i}h7qCTF-@P#R*2)vZ|^Agde`~a);YNu-L20$DZYMt5q zCsJw?_uojVND9apHZ^L(WY zXCoAFC(s`Wm`~r+UZ^(4sFFDxbZ#n7v^@cq>)oSRBxDWF#mj>s=lH@41*6MFlJcHd z=6cmCeEpckoe#j=!(4pK2{j(ZTN7%Q=cLD-x_q#1&32u=I$yh*X74r!xATryzT=@e4U~CzW2434ehC$NNC{$pEi7LRv_$xb!|FwC*g|vg0ok8k#u+CSuT6t!i&>{``+Rd55~c(5TT@|+&!4jv^H5E zByoc;?+8bi9FfQT1|bWtSHWZmvt)+)G1~0=^lIf^_NaP6I?)6Empmy7bQ-q!+`h7N&;Yefo}Z${F* z$s7NcTE?`|95sGLuSplg_Iz;#mS}yDZhHOZ{l?4)_}@_CCM-A;SI{mf!W`Y z&NXs15p)6Kfc{8^qFI(%49q(!6J0f~U~lyVvLC05QxTO>2k@D-*UybVYW-}-6^Fq$ z(`lo!qQ?cD&;S!($43StCZa(_)8 z%uaEA13iM6e)sAR9^FjYkPM*l;VI;Z_NRjM|E zcSuGW1*uoT|B--AD|25P6jwA3{MwFO*|ZaBAQ0#6+jE7YhfTYLi4wIAPquL{;wrnI zNrtwGy=bzPGEMzGca^JV(*dZriz}%dVR2h8<`yZ`K5CgL%2nicBC$pCF!dDn>$Wu! zEpj|JoIS3pt}Q1t9dgkizwrD0+&H$ZfV53OT-V(=Ch-c1!zOFKfArTbG9*SN3DS}3 zA6FuC);IZ1N}B6>kA19J71la#s~MWe+mkoIiMKm}N$x9qO@q}1rmi;VQD&48J+2~V^@Sex6iyVjU|7bI z@$EeemkNrw2YUKg;n%q;sZ)H#D@O(ByJMGlO*A>KHJ9(MYCySAC)zbNuf%8{8mAPr z`UbRz_GGVJ?*&$gvFkb)5g*s8?g^$Ubl)_xUu11NW=*SR+Az@*Y(^e+B};ai4n`jc z=;W%V8@lAKiGBP<;zl_Z-#5W0@H2G8_o!#etjH`>@|x)-o^BWiWUq_ut6;LaDlE6LTTzRbfp{&yBb+29qgWO@AwKt~P)zt}KPcGs^Ifzg6F5jo z_1N!etbafEqR0-p!SDErM)Q}|X*RcWo>+EHW3HVRRZu^IZhK(2&l3jC?s8gGE4tGe;rFDKmb}m8f17m+Js*BjO)0f1K zgo~G*LiHUi0BgTmCjfbcWL~fP0ZcG?9{1VtLYktb`yr#*fZS}W086~FqLSlBIfwLl z`tI-DmTPR$k_%U`q#29Wq$YJsJXfmgfOh>6Q3$eA0ifLuvYexfBheqKn-zRLLnuOf zFyFt_q#0iWwR_~-1@edLt5v#$LGWR(kmT&hYrVlS-SQXafY}0dr~$2>+B&ZRec&4G=+SAN$Y_&x|qQaggySh$vk ziSJB^`j~9B?29TCx2Kjq0NSto=;wnM;z7q+${tJR8nli5vjeM@V zrPWQYEKhOqa;f6GioLJDd8nhW7xHy57y1-nOs6)YwlM{AOsj$@rIN@};j-d&Za2(x zZ8P%GtG9N}hh1}rRN^mzpAUeNE`$Whn57(|w1g#PCB#-{CakJ|!noGgvZJ^v_3N@u zwu41;*oCe%2*2-T#vMnGULsQB2^qbaf^|*Em!z0pEUKsm`itlV;wo#BB}HtnrPI2w z?8h2Cv<87nPHt!;{s$cV8t9{aDaCR2BR0B7Myjpe(a_@wQ{1j{6DQNMlh_U;7S%_E zpOC-qd;(ixCRN~oqGl!9J*LzoXB_REjSb~AK%dFka3$eLSDLki{aiL|PIIDeO-|D* z#)PAke`*-hm_5<4($0k~9i7$QW{pyJ4+7NL2roH5FiSEr~WpVmZ|{?=mcjD#$!3BGn_~un*3$gc6th zyl{gnz~+osgs-~Sswb@X!2&~A>?nZe-n$ebk%~)i+S?J2fRdQ%gN?SVcH<(mBYY3r z{ZPS|&(}T%zyz#4v7~0nu*Bg6ci`QNtg$6B;iyxgc7Bi7V6B+tgsD!Sl>+OoNn^mfP zMQJY7nN0dT8qGXEL^R5F7ZBSAs%G6bYmXDWP)$X{?5!$3Pn{GFZO&tGz1(V4<7dbE zgPQV2?YE(k{*A40EXT#p+od^n4d}%8zrOF|R8cN6qEPQBO}`2tfJn2js@t8d-dV-= zl}WZSX(@QO~3VFlAwg-@Q_a;|1t7}Zz7AVR1N&3^8YGo>dDVf=dMJC7O9R; z_O`Gq!`o4V`ba;{|E$3N(y7qTJm`)n8Z8?A=u))nU`zN|v~vsuAhsf-bcVE$2{KcI zjb3B-eXdP{E(>LYDH7!|$yDbQHkjbh!fs|G*VTejYinA>Lt4cF?!!mPz2=$r7^a9K z6ifBoUw&J;;No1%L}tShNmq2edHuZc85j{1>&zgnbTA`cp{44X^_RW4}ffk?`#OV92e=L!+?^~AGW zZLH21WXQXdX%}T`6^Qj{i_Z&_OjZ-93}@>%w}u*=lV>Tfs_GdMZL92_1P|Jr zzspQ&!CV9O+-?C?(*OjlVD@w%JDggo_n2cw{4l{?TatoR}Fc+2KT+Teor1o zJ{|l7OA-*qH(uYAb)k|Ig3UtX5bOB|8?-FqsQB#Bth-~8UD6IhFDeEF$l7pB1x_q? zDzDF1V5Z7=ErSMkFa)iA#3fI!VF|j_YiKpzG0}{&Yj`$TlHMKn@w4tDUon$1C&>GY z;roPn;Ycw-JA3HOAgAa7#TfogsvyQeKx%;^)SfNUi*D(xmDpqp$2@Nkv$&-o^a3k@ z?~T&QC{jJ-KxZ{c>msWU@B&*4poA(NGwdn z_xoZ$|K<&czsK!F|G8@}!3(p=7n^pd32_Io-}P08@-Ac+S;R|lyea{G>X^#kd0u~w zaFu<(j>(~`q0b=TD)j#$>Z>1`4*O^UK}rb~=?;|?kYYOH8|5hJ&XEJ0z@6{=-h2N6eqhh{Jm+)H`JCr>`^D`J1>>{a07@<`o~Rb< z2)qjo?5-t=!LpC{YBr~Fu9{)tuH+vd4xdUdUff5=3bU^>Ejv{MzGh|HSuYfap(<_n zVjNxnC{0E#%x}EZETRuw6_2pp)#q&*c>eH}|;Q z`iE~Y#y_oAOp-5uL+CD3>aAbSn&G~T`4P{b8z-54VN47E`ei`swJDEQ@sH4K(a^_v zuY)zT-+3@onY~?U*(%8tubcFg_`SF5d<2_0*gFWs9w`mZ`vqKGW#N>rH*M z%&$Mnk?i)0otX|iMgipPoa6fKs6f`n*}e1W7>i5J=!W#+GJS9UfWq`oPm~!;`)--> zPrI2;N5MgS%zWNca+h=vb+b*U}8MEA|?vpepZLWM);@_fAEo;+*Ud2LJPPe(rp zE>$@*lGmSIfr&piLD~oVW?OV-hTgq4t~UR>*sf3F-UIip(D9j*vT!xt=TvvdCgR)7 zR%n9pA$04eTViS@lvEq&j$Gj%UUw;l)kpNMi++~XHj;2n8JWf@*q&HKzOdoom{HrT zC%#v0>3Q*TT{@yZKh`fHwC>}bqNkbm;(Hjn5gE+C*nzWr^6bwbo`rQ|?YcHi*j}O3 zPsRI64}rmQKTq#WJ$~-%Nv`+>WWN2#QIAY3dh>2*aS}RKk4{4Bp8aBM*b|8jdyNOH zGX8fasOTKz;kR08H!S%>cu)Mv$wg=L;PNBYk`9|W-~i0ZXBiA*DGvkR0M>1XwU@SP zz`l=^5j34r&ggncWDIi+W!faS^2g)b@s@u=j4o0fEsE;o5c9THJn`gx_WDiaKWL8~ z2lUViw@aU3FSy!;=cu)RQOH|ENNe0I>8J)^0=`Zz6Go{*@}3ij0xY|_3}D$!9GEdL zRuTKvvDoiHq8m=hj;qXap*LmZH$u@W1 zaf+)IQI91xc_D=K^3S}9A6@IRTDIFluCrtfNo!rzhTNZaIAcdyuhhj34lA z@&vVT%t%N8n)g7x&7(V6v(mwYUSsUff=f8TU-BAfVxT>o2777YFk3Nr?_s1wIqI;K4o- zo57sk>_zK&`z$;BW?Hu01D`k#)3=VsN>kN_d#9)wSge6Wrn@2eIQ6~|T2|P_F#0mD zdM!7Vk$@@Kn`Mmz?3g=}Vf$-stSTti7S3~qdSEos59~hgXGF`ml{t=>OAq%qia}fq zwKi*#Vu@cZAhOt>`|E+Y0OfC9ShfwQB?gZmt}mICB3sf|fX7pAH3pEImkg6fHz`K| zfB2#_j64I{)1`b)?ZWiCz~$}S?$NRrGDjZ7+g$iP z?AC9t$BR03a5koVd;r(_HSP3%J<&_kGyT@f1n0@h|vPR~d#l6P-ZQ(~JpJmZLA@o{R1 z?9tnYu$g$rY_5=Wg@jsjwVCey{@Q?TD<8Z z|6WfPU$a7k371?h44Qmzu7?;7?7k%x@g#t}w4T&;1dV<1U^4NANLAuCZFj+rT9cD| zcwL6J!Up%{yFpVu#6z#x>7~d58Cysku0N(snQ_kG5Doz@1`Q z2^j73gA+L#w{XLjXTUf$S;i^0+W_4kM)t{sisBfr#nn`vGZ70 zcy)03d7;=uY!34uQJ}SSA&U`3Q5y%ffffxq--5SCal|3v2!MUQopA9JSINb~|AMJg ziRB%~aaj>`laHN>y!ZPXyIHErB2y)bmarp@hlmAVgAj}Mw%QWyhY{p`nEJ_U;M`Ep zv%22I0VqhnKe#bgtEG5|=AAg(=?fJAo&sXi-Jj9ry~%n*18>=_3;TdCwcza~Y3ZB` z)w$r&=gLKXRGxBCFEXTxpfiw{Wd5ZrF46+<`>(0Wma0~h^`huF|^ib zA!$nhMqY6IAkPQ!*)G7m++Lv{EkAXL;-~Dl-fEt#a&SbgbA*D0xH52SoUzcagO(S- z?3=S4jTt9*ow!ie?-{(kKlnf=st$B57{?kE_u&21>1(VfY59Hvf0+Bmx6u*mz*@#3@2`Q~m11XhG^EmYnb3E! z&JD%Sv0G$RhqSf?Tw9h-o?#qw6iM4|ntIce7l?5dL z^X|CX#GC>#q+*t|SW|3UAr)WLdLYqBQo2Pm`$U57!$jl@$f*@*?z>F?DXoK=ESjLq z**2AG^`j*7Bt;y0s_idYp~v8smZh$^%(Y@``#t?QUvQyfad-mFYocMFDz*&TFT?V%XGxu!+X ztgSVihNlSghH{GLO$S1TVex&LN=>aQcNmIYa`3NhGVSbdpB|r3f03E3DY8MQ_P%#9 zH0FRzHM$PYTH@}D-tVTPFKkZpOWX@H)YRsA8mz)|)74q(oBL&P;xlPeerM_obbPw% zkO;8q=!Yx{{&%m-Z!L2a`+tbnrx1-F|1ec0rQlMmkDAZR*h_<8koRz~KbgB_=>S5O z*Y7SAz&-qgJviLD^Y^>?8y7RvPs)cBr#7mW-)H05{_8%29rR;g;RONA*I}n*xXJm8*@iDG1`Yk57C?N)2vslGtP zwkTBH&fGWF+n#IX_YhMc*ZVr&DTiG8&;1Md4tFQkrGUA}#YWx<&*11U7wG4x?k_)L zyaT-kl`mxw=wL0qxf|Rp6M=bkogt-6!!0e%VuVeRxP-{yyPBvFVmEg)G^~vZ-D}ml z`m;(_%C6?uZ97r?rGkCN&uHFzVYVobZh}68Xb+{f3L}ZbvtxmJr~dCtEjt1^d?r*R zew%vMzJ5c$-wCrLA@RvGR;KQC@Y-Zm^1Su4xcZ$E?d_4>4v79V?&SDQe zJfFR@=jO+WNjK33dbNY&IZW?O^%-=oq?t?sLIbM%TNn zKzfAVW!Kle<9!SQ-}>!t-bI$~I_)w;Hte0uJ`qxO9!dp9OyYKwD!DSij8vI!E}XU; zsv&sy)QHJ#@?D1|kRHM{`&?fl=4~o+bU>jY&}j+>?y1O`;$CdCd$lNXdM0XL;6)AFcqH@vD{XvdH)9J|Rno z{94<%b9`)dw`D}JOg3KG3$CO+L(qnEN?1zdfx_l8tF7uAcv^Hj7}kTCQ5%{)VE;4# z9$sqhfKt57zWl&B0EzOX+8@HhMwSIAk7jOX$MIdOMLncE01Rm#| z!hfglJWj9is$br*AlzLl1{-9VY+n1cZ-w_(_d}~HOoil=I=%X`LxA!3uGcoM^FO>d z`RfTc)L1l0*2lU0GxXw%wT7#yq1ILn-to^&@vqx?me`yuwe{aJD=7qU_o7}OL%>r) z5yGjD>DcejYy5+n)FDCUWu+mhKRXSP29UnX#GQLNv>aiyd_JYBDF3%L`URXy>1*`J zPnnldJ{fSye(tKC0LI-r>AVh44kNJW4Yo=${9uKo&Yo>~pVS*|VsFB-)nWBfF?q3@ zFx^{Y>-U*5xn*yfJ$EX=M@oCJ6~|(+-m_z3Ic2rXQ}RcvV?Y-)(_YBnJjBp|Zd~Yj z+;%lrm&%x4A=|{7v;^eD$#~kl!=)2v?q`{I8lzWNY!|!Peas1B$mHV`>fS0Qq6Ln@ zNN~i`(EX$iS+c<2-SJyGOPvpzAsy6d4!QT_%SS`J$Hgz}i(itG?+vTsA4yI1&Y4;t z9uY}&AIiu{b`vt`C7c_H`%UhXA~!2^*i%`hMR|9Xr&6? zzx3nZMvwr5=Xra%-tpv!*xsF3SF^do@{_EDes#gO|D)Z>&AIJ>g)t?45NNqd_M?Fj=IK zuHH$gP$5LWMkZEO~Rr^Wxpu7G97Pp6v;g@oxLQ+s@N(I>vLTX)Z`Y2hgGGVSD#r%83H0-2CN|oU0l9q zL@w|7D&zesu@DpBFeY#u#_V*;nOjat98a4&|W603&4QUp^LC!gvn&evMih#$X zSvyFrxY4|6{7fh`k}v8*pYF`u{Pp)G3!^_ulCH(2haj5ym5B4p7n(0`n&NYsv`*H# z6xR1@cda0^z17PyMBwedDn3#}3kW^0D*H}7PXwopdaIzqkNH_!Uc9VwpuAit!?yX3 zlhozfLR6N%3}wPj^z3&TmvOe$rp+B*Fu}%ROi1l5Z45c5qZQhUm!q?U9^Z*nNWNS2 zX|svN2s9V1aqAU%QSTBcXUu9WNu)5RQUj4IqGLm{oc2gb8?mnfj<6b~eL8ojU+;nW z?lV$%dh2vA&7v}8F$wWS#D>~AqnZgm2Be>!({HWd>ST@1ev(@Jnq2EgiN+-CjBPro z32+M6n`tulL)W^jUd&ZPJk$RgtVjn$P|5E=FSMZ|(=J1O@X24<;f7F@$F$M3d-_Bj z=#q_qwyZl%@d9!`V}JVvp6oG&w4-;!L{-}=gHrw>3PV^I50!a2W7YJt%V5gK!T`2K z*^;!img%v=B|!QL{YVa|ViPWPFCD?TN#BQ4^lJSAs=uJ8PM43=Rcn*DHPtg^*d;#L zN5$#$2x(K^V#;udZYj>xXwx=PjrZf1NmUtJDD2&ssCZj&4sU9i0y=r}HO>Xdlc$kY2VI+O2 z6Ypp{N13G$?SSyn1zX2vWek7B;H{6UiGVSLGI5gl-_$+KFsXr1d%rO3WePrHeBV{s zB7p1<4!wO#Esf*vG0`yLH0uXHo1Gx0fqO`X7~12rm}1Elk|pe2`jPCXAN7RjT|d{D zg&mR>F<0Eh^s|=Qfnsl^9}v81A6nomWA$X;%d7R?suEC8o2#~GbQDywrkKz? zpTRd;$hvRsXGfEyXm+b=(O7Ry3t9vE>P`Tqr3B z8WjAkeHkE({3b@(D9f(V?Ta8A{O&Rk%pRrrR30x7*y>_Vli2bJ*pacIocfBqI|&Mt zf}F)?F=zEbXN}beAgiN{u0h! zh5!40>e~|!HB@ju7^O>(2YQ;GD&}x`7i=l4XvwYr1o=3WaCr{DI&X;Bl2bRi1o@x3 z7)^1^)=$iF&L{OTeWF+ndxA6mpvxw;U6xeV#eVh@nmS>JIN2k|4(&;3ue6 z-NHZEXp&Vs66Xw@ex!|X4Yvc-)}5t zq>bM`t%TCpU{YHTrL$+V5~}Rn!;jvon77H^>Jf#CtWCFQAXvgjoK%71&F^RYqaj{; z2-B)f>YQW>)qLPO*OWC8N3xxyjbKXPuC@n|tsJ6ow>!J*tu)bcLR>%C&@nY@x@s`! z$lsCkL4$L^d2G7{L}hFE!)B`Eee+JU;66ls+y2k^9LXyvosQDn__pM2hN8i~-f_cF?PL)xJcY7Az;C|e z_OykTRR!}sH_yUT;=`y$)Y3;s=J5BOlgHDEp|j_zg5Dnmdv*q2UAbAuiy-T^qQU+( zT@$rE0dB>zscrG7OX51`=|MTF(p?zIH}f&zEHcnrs@T}T!Zt8{5HFsupI>-$`iPj$ z_Dsh7$#Us+yLYL&6TU0`FVn|eDq^Q`YYaT?*ZSLh zPj5Zsy(UuxU4{2mLeIM8S`PLbiNWJDL%KcaxdNh3or{CvPOXAl>y1%fvTc@it3RXZ zTrA8Os8#Wv`kywX9rrTbaD~2L+T?%QDpt!p0Oyt99_GwYaF}`9Q2<<> zXVoCTS)Y_$PB&$=Dyq=QPfI*E-)?GUgW&jod#B0|1@!xLh=LhB^o<=)7AP}FYlWpf z8rBA;nae`}QZ1mN_t(gzXYkZZMyw&F#bn^UQ+xL=i`=iVpNXG2JkW3ULJeV>d@ci& zmM@^MKPJvv(CQ4w4+Ep>0Hxb&H-hwV=+1hpxw+UAEUHO4pXsbd^VL2ylpLkKyH z)-HXdJ{1IG)-%l_5blP8n~k35*B;&BeDC7kW#wxo+fZlL0OtOZK&GvmVDa^i@?(a@ z&Zt;>y$cqz*D?k3T>m!!OtT*?BUrYRuTa$W#?KqCWhmNGl(k-}z(r;lnWcWSRR z0#|F@ibtn2R8&qgh*NS}R9bd~I%1N&>BT?ANEk?&rN=gkhn_q-Hvgj>DbsfqKgp-w zk+pI@%Wtw$T5sOnmm%Xc0G>_e{A&c02d6d_pVq(>q>*IjWD5KOCY0tsM2_bOJc%Mi zg0~nO*=fBnnPDltp&2-5T`Y zl5YT}bgIX@#adOruY68#{kuvD+gV%Dl<*yii>0k{k$9y!IZEmFk3yyutJLaa8?1bG zz0vpGH8ZKDDBsbFrZGv_3G3N;(!u{^BeXLXA7=G)K@dkidYRbY{5-vHDrKt;CC0X` zAYL_r0!Th~-4j-Sp^H=f8Z=X30 zFJMp0P%Z=KeCa|7N1DwpM2{`uLh#n&v`gIf8+VE)PJ>LKyY3|Sy8c7+X&zxOIX-2y z_8_Ix>#Rc;zqhU8E%~JgtHAhPl}3B3WArS@b=G$%s(QJ0!#)c5g7uCSk;*{gf$NFN z+(lVokX_Z02tC?i4&DF%?I~p&7Vq0yCxqSMm~R=Fw4bMe4KT1w@FZ!krlwi&hRP-# zDs;#aiySdN2Dmv34_jd)l(6(yT78uDC~GG?QNcaD?LG(wzGC)kXXbE`bf924E{WDh zRrfMY7{(6bKNpusI9;vhrWmaeu*f5x-PwmP6;5bd_h}PcYdwFIhCZVx-a%biOwY~6 z{{ZirE3oVn`wPZKOlk$tr3&vztPK+jXCcI4c|_5PPSm`^am&jth$sj8ZSUTjPrqP8 zJ%!y<-S2Sre%{BFzCkbfh#^|=jz#idI4T^s6UzN}A?`(Ok$zW8*Lg$baR2|cqvO||7*wF10QZ9#RdhJeeL;F~hj$=;Iz<^iA(ORLcOhAeQpc%O@Im%rVT>K_f=$uzgiN<6&; zu~v1J%tYr$E@N2Fpc%+M1v^JaleZF^8gx!Q6b=$lom?;7xyUpT^7O5ZP5%{Ca~T@+ z|J}Ug0sYTzr;4;(%(VKy+JCBId`$ODp*Qqe)R>1sqN0057S*>!zdL7l_^$O&ldSw} z+UTi5NG;Y#eYSvRPl1^pV(G#-NV?6s7h1Gb&if3xF;CjrC=p(BZqI~U_j*E`m(?_tpIN+u19pscv59+tC zn6Nu{te&1r8`=Er1C@5^&F7lBnYMpEUZmn7N-Zq!Ug91PjCB|CzDuS_zPwUe1habt z?ChIbVNqx3$9{ICk5y9u=|ONv^m?t+lyCM8zSs)uLqTiz!Nk6elUShg@;)p4fYp#z z>Q4)f(DIY}a*=xu@{9QOH@_7?hCq`@A7s%hjJ=^#CUjZ zsgtBU1aZz9rt@d8K480k?z?#6eD(>#sF%t7GzM^7_2S55tQ>5-uHMyW*+q-o~x-P9ColLdkMHTvKC1pfnD{gERG)1#@z z4LUP-{09sJN!G3fnCN}JyC;41U1C=_P*e8R84yX-z1v ziG{L#b19qgZDxQDq<-+c^%T=;T-Pge(+kpFv#wia2_wG$)TDYO7Bwe`*#;jsgI~$ho{jHK9 zRN0<9ujBJ{28pm+(plhMVTj}YH^cwo2LKxf{>$qGLC;Dk8$Q-fg*{#q?zB@nAOcjG zqI;d2#Ac0OIVJ#KodD-^4UCQoG_Zc3zT$P)g|JyD~@a(Jg9Z$P#_yMUqYt+Iqr#l*rNE|z;WEgdM z7X{+O;OE5BjLU-}EJV4!!1>2{0_Sjf@7{6YnY|`b33_;|UH=^T>~W7~+;S)Rx!}D9Tke zK*g$y2x@(6-i<4+@}G_syqvU6m<3%LUk`Is&T15*dlB-hcU)Z;W^M5K9^CJ+ZA4Wt zR+y}YY`e+90sa*6w)gp(T)xT2$_vkKhVE1zRB73LF#2pJ)8ea>`Axe6%lQM&c{hef z`o7&qwe#?7YEYH)>NW*-HC6yLkHj}Zk8E&T_xQ7^$!Y?Lt@f)_$)RN@uxrAUqtXV3 z(9vlc{U|n&uu|D>Iyf5xng{oLM43l9+=!Hd=tsY0VEX#a_eCbFT{%i=S~|&M5vBmL zD!o?Ku8n=NtaUY}=j*P2w3Kq-x>aj_13jmn5R1}no93u|1bnR+Zc*vcI{8F`T@%rJ z)OPBBViI`LepxMW>`y8H=m0@nu-pnBcDqZDcH%!nQzRO{J&mZS0JY*9pPJxla3;J z_>0OJ@(&PJJqaql&DC1uRb{-}>%dqV3+IEu{H8S1hQihvkbBx(nc^;SiciCrBZ0&z zKI2#l{ZS)}rM0sDVwcDVD{tKnrk&|d`G*Nj|1g25SsCtVmHFgh?|VYO-x{E^zp!|! z_3h(4_tgRSJiBkp14mk)IP>bgwP(SgYFxRQobz%<`PHBD*011_G<@?qz~$iAi*ulG zg{mgL!tC>E^_ zJN=ELUz)p_&>Sd#Z?biYwk$ae^%-pmIUQq^pJ+)7m`fZyM`$PlPchqg zHg^hh7>{w4pxM}*;;sVtN_KB(FMmx_BWI?<;JzZH@nb zl|B};Oyi%gkT##k(GeF!3kheH_|64@6l%gDFB3u4n-W7kGOY=Rkv0ERzI|o&0rfw$ zvvymV#;gqY4Y7$LT9fq*=^NU152)V?eKnvs#{FUjb+=nu{;U(>xjIt89qq{k@4^t3 zLRf)%B{-%isUL-}Ek~tWyo)YPzjzpxrFx#Mdj9B(aYt+z&ANaDM{uhfMm4GHPh1MI z#r3QaKPOS=*OPO)FUk9K)$RvqPP?eT6Ypn;a1?8KwuF8C=4Fqb)nSsYCcG(8)~BL& zxOqP=FUh6s0^w-nMj!H8g47K$+88d{QU{8PBYXLrZTt!&K5(1&gX(5MChPQ z@G0cEQs^U1HWDlZC-#k#TEe$`Son=rKJN^g_4}pVoZbD>wA-~{>>iG{w@txsUm?}{ z1~t5{qJk;}vz$XM4qjQGyowC`+Y^}ONb@btG0`aEKI?PhRUEMGef83lX+pl{w5r4o z7_!Zh5xbt#tMlP+IM1INR>|}V!0IXV=$oKEir99b+Dw?mSvkfBBns{&Ty7*dTno@j z5_u#H1dVWWkiWPKj(!&E*M;QjP>Um}69}=36|whP$Kr^%p|?AE2wA{Xl%yP6xW3Mr zM@jWTc4iOsiFBzOh=pvZR}BY@F#C@jr0St#K$*!q z{m|IGEA7ID9_4rk`M3=L)azyYc7M6%t>~ZejE^3%Z7x0o=8dzepZA*`9J^$Q&H(K7 zuc(|}t^3a0H_Z0XW6+!d$f)Tri^9bjwyu+ynOt*cSJ-TyvZ_g%NOeT0p z45f;=uigx{ym8_daOD3~{!}Ljf_Ra4{C$pCZ*jJKTBW3~U{tt2E24J0Z$km&gFdL$ zOYI-@0Adxip9+~cn&s8lt{@31=M8JqP~wn3HsD?;vrXIa+zw!Io4mE>^0vQcD{tM7~2vuxXuGq2P|gDnxp*bND)~&~U>- z4gdP@-QdoRB|06YU%^aFGcC<_?wZc#H8Wob)8!Y_T~4+{G0*zbf5g1!;d?QyXE83u zGSN7O?;#cGB9NhM*xg{Oh6VMxrs~$vy$9_f(%5MY63CuvI&tp*xnV(gjU@nPSdZ5O zFW2vBi>TgJay+A+>>c_lie!tvteHP?{HZXu!{#1NA`o`JN+VXS0fDfZN@H~INxT)*XzxHN$OdJ79TAA9LHR(I_eRazPpAC0fg`Y>7+8TRM zPZ2Ew&i`5jRhtQ>s#<@Zxc`SVh!EoJ`4ebJcfIs(3GVUWyJS{Azfg3~N~qDT^T9Y3 z)JhmaMetiOjLUWjz)9w^yd{mt0%MzuV}hm{o?rOS{Ris(1{VKGItdBij`lfgJeQum zw>_piwt)$^Ut5jzDMi*<=^Bm~EtsbaUD zc_#F&-v{@Kh`WJcOq%#wG$ug2djM%Ns9g$F;MGx9JstY@wx_M%pk?$yILqB{TW8#V z+qr+g0>>Y<`4PQ6?7XOgk4R>&^tf>cLWvM1;^zhxK~#*D^!+a@OfO27*~j$dHwOuw zyM`=1EYMewo`RxzQ{SbLxtHI&S6!Yx8jyGMaNi~69VzYxStsFsc1W}PYw2JxRBYM< zMzx5$F(Ku;@-}6|BR+vBBgXaoyvKLVhxo`;fG8=9$U!=!uNH~K{R_36#{R=qB!HuN ziK$#(YDGcgu^l%!km^Z}+P3_ohf95>b0R<16)MI|va0M#*xHGrz`*tOh1(myL^$Kr zz5#fpE-(AwfBVLS-g~OJZSkkScZoXa(oN=!Hd>*vm92`BC_~@TP9xjCJF6xynrXYT=TWe#K`R6!$Q8yPkz^IQyhQw zKUE=?08z$&oGOEKm^zDw9h2z{8VQh52C8SY#C#Rj+kUp6dGKB=Dz_2ycMzleu!JUr zTGD{xiFj%|peRraO{;ZlS!OK{&mXfQqcr`|lKIom@7IAiF){pCyJg!~P^Sn~*x&gj=Fglbhn z19OiG;U6bG)e&*q<$`!ALmnad)<8SlStL<#4b?wauQ7dJEM}S~ZFjua?h-564l~e` zA9vB6MvWs%^XKSm>uzbpqYVDv@Izy|l7zby_r5umEBM_M&M;V2y+-U6Ae0R1!}9N* z;Vj)ge2m4TnWJ8yDW<3#aR>gDT0T|@pJo)5r=_o5Ouvb{&qxeHy$^j>_Lal>_>X9> zMYr@VlPH;c{g%X97)^w$<+d`@-&Ko=B&So0Jgv4yEUAojl?J15a7k16f{!Ojw z3XfQ0j@!wcc-`7u>SB)6qV86X}eYWYQ6s&x!M1_B~xQ3B{AyEK9p3ObICL+ z)LDi9@onJ-OI3tLyF_=6PS&+7rfTc3)`6*H{b!@MAQAqLN`#tR46{8~d>{TX`&V%k zkN0(-h(@fn=!Z+lrilK{DAWJA#R`FnXk~Hc4ds2B*272I!GmyG0qaGZ(9!@rFcAM; zHQCB065u2}=kwt|)Cu17I_@}jU(-=BF7sE5SgL-0&kM1U=Kdann<=GbE9zZ}Z>+Q10z zVfQzwf$`ri^DtXBhOkMRkozlFUGFM*sud6C0@ z{O*d7X&woebC`C%HyR&R_w!Q6`Ov|>+x>rSQ*HZhCWlibxhh$Z19winQA3q4-ALk z-r$%lBp6gR0;zctL}xE8A9DWGL67gv3hUdAz@?ftlv)*j572epXV?wZ76-v_+KMCh zc>lZ(>}(i7Uo}MV_K^m?PywkOy8KSkX@k%gVq=IWEj_hL6-Ms%4cV=l9)QoM@2 zj8^a1h>W z%EK_ma@Y0lb+t|&1JU3QZVYRQqxIbf#t)^*k`LHyve=}no@O$WwN|%vOv|L+Y-j0P z;ncbZ?)0_chy+XIJjmtaC_Qj-vR*l5_sTb6J1PqNQv|H8EMqr2GKtG!zL8(~x;rz@ z+!oUabox~!#Z$v7@@B{GL3MYhhmZKNaMBlc4ma$Tj16LQ;4UQMiv{n8Ei-H&;n`d{ zIlw#6xVFMM1GvlPqQYkqc3{9DYNHh^1G1^1J@{#bMU<74@MzDbwUuz<$RL|!Iy!4m zz%*Nuq@>XFiEbuw&jZf|smZmoxrhgFv`iH*c!B4#G}J6a@O0n;CPI&#|CpSZ%38)+ z*HTYugW6pIkRSF5gZ>lXt(4r4&+i_kw*(u*G#TK)@C{W1GPA1_f4esyGVNP)nfuh_ zQkgz<21q`Yke+`fT%i)-ylkF27(rUZUa9rnZlQ4)RCW)mF}eB@3k_CW3nf_6w)VQ} zF~670Z#qA+5dMuEODM-oS+KevGGWXdG6cprzUs%TI1siK8y{;&zWwExR-T_7h41OqiYy z7i>S#zV&t@NoLvuYqdn*6TZ{L%RlkG?wU3+bEmF;FV{S*%^va8e2_c1?N|=tI!Jx= zjNx{OEHOU-f%z1cQ**)$q8}=zJ}?>PpA{nymgBe+Qp9jEb18%OB?n_zDz)NNyx_{} zKxY+zP0K4n)_V1%HDfz6 zPoN4!CA*LH{&ovK){(oQX$o?zy(40DBr>Pj6NUP01o`|vn%uVa^M!qXfZd$p)iK&W z&utrkX)@=dv-B@s+T}XptH<3sbtbf>IKTb<1&pREGfI9KXkOfuxUa>x|J)&#fCr#A?Ic zqztcev2Jsam#NYD*cbQLj|`TTrbN$0Cyhf$!u%3~p#F4@L!TDl=Ph=YXQ_>ys|gSJWPlkg=SxMUJEllJuA8}35m|Jw4T}N*|9e( zpZ)JO@>}8sgR1)7^`M*;X;QvP0`alpKA|a>$!Cvu)OUWNx#!Q~=Dl%#q##ec;MZk4 z)$82XXKL)?&jS=KCT-JlkUh94D3YegiwDbRSqg==AfSYuu2w;{Fr=u-oYGK*9(UH`eF6U7H!^Lt>k$ zGV^bBB%M1=fl@Ln_L(q^Aep9eo)>-I>YZ~wgxuPjb@IGV4?8UHZ9E@tdl16#t@LP) zkECiyz`tLKGvLi=oI=-oXtntuV2sp=WS&?~$E&9qw^)jh-M;gzzSbA_411z zXrnI|^Sh#_`E5%7t5|GJdOP}$h^vgoz6af**%3!PI};e&uSD!XVc!lT>{wEL0)1NuSBJN^+iXio;s=rtQp@$^9bZ158DyU3m>>+cxt>O z&V_nQ@8#iR7=2--C?mTEjW2gTd|Kpa&TbX4X1;QcV<_ci_!#%lV$2+zT2VkKovFM| z^ER$uT<OK};Ke+T*174*6rxG${o+Wp!qB2O2x#J~(u$`R ziWGn*u}yL5G}-!&=Y~K!#-Q;Z989esZFGTs5E%){4K7^`bz`jJ$GDF(GLI9s7VVsR zS;tE;M!#~G0u-mmFP(36`YdY)tY{0J4EkA?TRz0R>RtO|DpZC%kg_X=Bz+>*rRaSilO!M?_6BPx2Nvyl%XFwjef?ne!8`OnMK|uL;OjL zm-l56>E4~N%5)Nktqc7Auh=tYO*BqOIArMz!K522wF6GMJ-b*2gicBfeJL zDBih`hA%4E8O?=yv_5Fwj&dA@^b=vQdb|3S1EKodfZj4Q_*3U4xESIUi$d*~qdP*- z>5kV%=zsu$!QvL^{cGw@29qqlb(_d)N-4^YA-2U##_zLxNFv9TacT$y9UBQaJuKSE zHquSpt3pv-I8mJENK{O8D+KZ_*>05Kx3J=OG1XYZsoO+q3~s`Ve1L%33(lWRsu~BV zYECXfZ4(Q8rTPoqZ~m7Pk79Of^DcPL&-wARpqCQGb^!^}ECe${__51hcL3{GVrY|Q z!Nvdd+#fLCGS3)CE)=;l#k?L11?*{lF^XO>R_{&7cQHCWoTqa;{Y53IW(bxvO)ir@Wj~Q`1}$p`zNGbn#PN@99;kdzlBBwWw7C&~lJfr+ zIb<2+VHRIsMBRZsT-9}6rld<4Q=dSK8rEVDACVt&4eqm1CGy-b1O4)rw>-WQw-lX(ut{wu* z9SZtYVah+W;w_X=Tk(ZS(tgqhlp!ZA;kSP_Y_p~*uu*(Ltq4jWq33GWR2xHPq3_sX z(Y5;UXRID9ho~`Al$dQxuIrSBLF!!n8nD++wBqS%M9xD*-;NkdK$-OZxa``ty@}D+ zJSJS7C;5n$TC6Z%84En>aW^hy!@NBWTZ-LuaHL_g&y|YA+F7J(cJWRIw`R9a|5WQ8 z?pc^*m+(P+Xxfg`?o999+f*P6xBF(pA|L4petNYdBk|V0EY->La|$r0&tWN-F8MV> zv)xNekw14O`O@K*jp;|xjEW)lrJz3rv)pSr{JlDB7V0`i*Qu9h-bB8i;7^{qHbe75 zKQoZ>{)WyWXkGgjew2kU$Fg zv$el;+kR;BH2AjY{@HSZ;g)@tY4@WgAm+oo`O!vg)?>3lW;14pzw^zS);h(3D4CMT zMWnAW4mO=}%{=QvS})VFqoSDvPs~rfH4&Q@>W@3SZd4vnw~rrxkAfHg5a3H&oW$jl zM0_-@@t|oEc;Y(>J*&5CMIdky70=Ou(slK=I$7P^inJP57I@PYi!FK;wKHgRvGMo* zffj9Wv7d5K36pkkW=W<9FRO~o!#jcdCo zt;$pdmuH(~Xmz|yd!XLZZ?q5=lICGhs2(PRuND0iVRSoOw02cC0GMpEefwBtJ*e=> zxmI0j1=uWka=h@CcIk)Kps|1D|AtNDD$7%#DB@FDjfUlo`x&xXkT`%uxir~liu>Yy zb4Pr0fx3`-x9%LxjSZ|Y&_UOm{8OY8rctQ6sPX}6pHm+ZE%_VGmmjYs>FJ;JA^)?@ ze1L*X*H3=UGM@q#?z|wHO*ZW0^V{^YM{oiX4#}8v1^|~|p?d$MPM95`m9ua6UbwapL(t{ue#h-UT7y3?-@%l~JVz_HcBKHx$l^*-NHy9@lmzoy&=p3(aM zPsaL``LibrnoZ6A*nZ$)RL-yGXa4T}qj+&y@ptaB$lpo&0{7#VJ+jz))I$8pytg62 z+Ya_z=a9V_b;$qz=GWQt3!l81|F_{!+qYjb)f>v==NS9B-G6=Njn3X@bHv}L`A=&} z>iy9BT`2IA|L65*LU}XhufMcn#$Qr{%9I6N4VT`Dz=DF)Ag51bTz?%N5ZoZAw|T%ULvjhp_R!zycND^9_}c6L zumAt_L#NYP*k}@XwMeAAXq6-+tKG{%?H!|MK?35AW;QuBn4=7of-y3j}7kKKKuGg1;=#8I=|? z|BgQ_`0-=;|L%;yAVgv*Z*lNm=dkDp&=C(Mfq0?+|LgaGyB6GKL)Jsj3ZTRpzquL} z!vCxXdb1OVLw>!l{krh0AuL@SFjW+I!j=2&|Ek~>ag6~VF{P`!?T- zLbwv90df!u3A_Wb${*Ix&tqsh`rl55Z~mVz@-Ey{b-bXfra?Pm`vfvhiaKrxSgG_+ zA&h0`qrO>@)bO~|gME$+JC(E|YF-ss{AkWW4f6y4SzVUaRJ?y6mB#=Cp00i_>zopr 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 55/58] 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 56/58] 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 57/58] 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 58/58] 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(