diff --git a/package.json b/package.json index a67436f9..76d63cb0 100644 --- a/package.json +++ b/package.json @@ -43,11 +43,11 @@ "@livekit/track-processors": "^0.5.5", "@mediapipe/tasks-vision": "^0.10.18", "@opentelemetry/api": "^1.4.0", - "@opentelemetry/core": "^1.25.1", + "@opentelemetry/core": "^2.0.0", "@opentelemetry/exporter-trace-otlp-http": "^0.201.0", - "@opentelemetry/resources": "^1.25.1", - "@opentelemetry/sdk-trace-base": "^1.25.1", - "@opentelemetry/sdk-trace-web": "^1.9.1", + "@opentelemetry/resources": "^2.0.0", + "@opentelemetry/sdk-trace-base": "^2.0.0", + "@opentelemetry/sdk-trace-web": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.25.1", "@playwright/test": "^1.52.0", "@radix-ui/react-dialog": "^1.0.4", diff --git a/src/analytics/RageshakeSpanProcessor.ts b/src/analytics/RageshakeSpanProcessor.ts index 97b6eebe..eca657db 100644 --- a/src/analytics/RageshakeSpanProcessor.ts +++ b/src/analytics/RageshakeSpanProcessor.ts @@ -107,13 +107,13 @@ export class RageshakeSpanProcessor implements SpanProcessor { startTime, duration, references: - span.parentSpanId === undefined + span.parentSpanContext?.spanId === undefined ? [] : [ { refType: "CHILD_OF", traceID: traceId, - spanID: span.parentSpanId, + spanID: span.parentSpanContext?.spanId, }, ], tags: dumpAttributes(span.attributes), diff --git a/src/otel/otel.ts b/src/otel/otel.ts index a2cd809e..915c3d58 100644 --- a/src/otel/otel.ts +++ b/src/otel/otel.ts @@ -5,12 +5,15 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { SimpleSpanProcessor } from "@opentelemetry/sdk-trace-base"; +import { + SimpleSpanProcessor, + type SpanProcessor, +} from "@opentelemetry/sdk-trace-base"; import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; import { WebTracerProvider } from "@opentelemetry/sdk-trace-web"; import opentelemetry, { type Tracer } from "@opentelemetry/api"; -import { Resource } from "@opentelemetry/resources"; -import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions"; +import { resourceFromAttributes } from "@opentelemetry/resources"; +import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; import { logger } from "matrix-js-sdk/lib/logger"; import { PosthogSpanProcessor } from "../analytics/PosthogSpanProcessor"; @@ -59,34 +62,34 @@ export class ElementCallOpenTelemetry { collectorUrl: string | undefined, rageshakeUrl: string | undefined, ) { - // This is how we can make Jaeger show a reasonable service in the dropdown on the left. - const providerConfig = { - resource: new Resource({ - [SemanticResourceAttributes.SERVICE_NAME]: SERVICE_NAME, - }), - }; - this._provider = new WebTracerProvider(providerConfig); + const spanProcessors: SpanProcessor[] = []; if (collectorUrl) { logger.info("Enabling OTLP collector with URL " + collectorUrl); this.otlpExporter = new OTLPTraceExporter({ url: collectorUrl, }); - this._provider.addSpanProcessor( - new SimpleSpanProcessor(this.otlpExporter), - ); + spanProcessors.push(new SimpleSpanProcessor(this.otlpExporter)); } else { logger.info("OTLP collector disabled"); } if (rageshakeUrl) { this.rageshakeProcessor = new RageshakeSpanProcessor(); - this._provider.addSpanProcessor(this.rageshakeProcessor); + spanProcessors.push(this.rageshakeProcessor); } - this._provider.addSpanProcessor(new PosthogSpanProcessor()); - opentelemetry.trace.setGlobalTracerProvider(this._provider); + spanProcessors.push(new PosthogSpanProcessor()); + this._provider = new WebTracerProvider({ + resource: resourceFromAttributes({ + // This is how we can make Jaeger show a reasonable service in the dropdown on the left. + [ATTR_SERVICE_NAME]: SERVICE_NAME, + }), + spanProcessors, + }); + + opentelemetry.trace.setGlobalTracerProvider(this._provider); this._tracer = opentelemetry.trace.getTracer( // This is not the serviceName shown in jaeger "my-element-call-otl-tracer", diff --git a/yarn.lock b/yarn.lock index 70336a78..6481a102 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2932,18 +2932,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/core@npm:1.30.1, @opentelemetry/core@npm:^1.25.1": - version: 1.30.1 - resolution: "@opentelemetry/core@npm:1.30.1" - dependencies: - "@opentelemetry/semantic-conventions": "npm:1.28.0" - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/4c25ba50a6137c2ba9ca563fb269378f3c9ca6fd1b3f15dbb6eff78eebf5656f281997cbb7be8e51c01649fd6ad091083fcd8a42dd9b5dfac907dc06d7cfa092 - languageName: node - linkType: hard - -"@opentelemetry/core@npm:2.0.1": +"@opentelemetry/core@npm:2.0.1, @opentelemetry/core@npm:^2.0.0": version: 2.0.1 resolution: "@opentelemetry/core@npm:2.0.1" dependencies: @@ -2998,19 +2987,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/resources@npm:1.30.1, @opentelemetry/resources@npm:^1.25.1": - version: 1.30.1 - resolution: "@opentelemetry/resources@npm:1.30.1" - dependencies: - "@opentelemetry/core": "npm:1.30.1" - "@opentelemetry/semantic-conventions": "npm:1.28.0" - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/688e73258283c80662bfa9a858aaf73bf3b832a18d96e546d0dddfa6dcec556cdfa087a1d0df643435293406009e4122d7fb7eeea69aa87b539d3bab756fba74 - languageName: node - linkType: hard - -"@opentelemetry/resources@npm:2.0.1": +"@opentelemetry/resources@npm:2.0.1, @opentelemetry/resources@npm:^2.0.0": version: 2.0.1 resolution: "@opentelemetry/resources@npm:2.0.1" dependencies: @@ -3047,20 +3024,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/sdk-trace-base@npm:1.30.1, @opentelemetry/sdk-trace-base@npm:^1.25.1": - version: 1.30.1 - resolution: "@opentelemetry/sdk-trace-base@npm:1.30.1" - dependencies: - "@opentelemetry/core": "npm:1.30.1" - "@opentelemetry/resources": "npm:1.30.1" - "@opentelemetry/semantic-conventions": "npm:1.28.0" - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/77019dc3efaeceb41b4c54dd83b92f0ccd81ecceca544cbbe8e0aee4b2c8727724bdb9dcecfe00622c16d60946ae4beb69a5c0e7d85c4bc7ef425bd84f8b970c - languageName: node - linkType: hard - -"@opentelemetry/sdk-trace-base@npm:2.0.1": +"@opentelemetry/sdk-trace-base@npm:2.0.1, @opentelemetry/sdk-trace-base@npm:^2.0.0": version: 2.0.1 resolution: "@opentelemetry/sdk-trace-base@npm:2.0.1" dependencies: @@ -3073,23 +3037,15 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/sdk-trace-web@npm:^1.9.1": - version: 1.30.1 - resolution: "@opentelemetry/sdk-trace-web@npm:1.30.1" +"@opentelemetry/sdk-trace-web@npm:^2.0.0": + version: 2.0.1 + resolution: "@opentelemetry/sdk-trace-web@npm:2.0.1" dependencies: - "@opentelemetry/core": "npm:1.30.1" - "@opentelemetry/sdk-trace-base": "npm:1.30.1" - "@opentelemetry/semantic-conventions": "npm:1.28.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/sdk-trace-base": "npm:2.0.1" peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/8dd2901b5eef68a5896da0ad11f04c8990ce4ef2dcbec27bbc02d7e193097c270ba5f4c9ca363ea10fb53ca7cc515f18d9dc383a69a17720cd0590474c0ffdaf - languageName: node - linkType: hard - -"@opentelemetry/semantic-conventions@npm:1.28.0": - version: 1.28.0 - resolution: "@opentelemetry/semantic-conventions@npm:1.28.0" - checksum: 10c0/deb8a0f744198071e70fea27143cf7c9f7ecb7e4d7b619488c917834ea09b31543c1c2bcea4ec5f3cf68797f0ef3549609c14e859013d9376400ac1499c2b9cb + checksum: 10c0/48821b91430e24378b0b5b2632e78efdd018a3f840462a6aeba6ce318a6480bad2f623cc7f7f625a9266028ad44b78eb8456181778de6cb18725f26c44e2729b languageName: node linkType: hard @@ -7392,11 +7348,11 @@ __metadata: "@livekit/track-processors": "npm:^0.5.5" "@mediapipe/tasks-vision": "npm:^0.10.18" "@opentelemetry/api": "npm:^1.4.0" - "@opentelemetry/core": "npm:^1.25.1" + "@opentelemetry/core": "npm:^2.0.0" "@opentelemetry/exporter-trace-otlp-http": "npm:^0.201.0" - "@opentelemetry/resources": "npm:^1.25.1" - "@opentelemetry/sdk-trace-base": "npm:^1.25.1" - "@opentelemetry/sdk-trace-web": "npm:^1.9.1" + "@opentelemetry/resources": "npm:^2.0.0" + "@opentelemetry/sdk-trace-base": "npm:^2.0.0" + "@opentelemetry/sdk-trace-web": "npm:^2.0.0" "@opentelemetry/semantic-conventions": "npm:^1.25.1" "@playwright/test": "npm:^1.52.0" "@radix-ui/react-dialog": "npm:^1.0.4"