From 594a99817cbe44553b2c288578fbba8e1e9c1907 Mon Sep 17 00:00:00 2001 From: Luca Casonato Date: Tue, 19 Nov 2024 00:55:22 +0100 Subject: feat(runtime): remove public OTEL trace API (#26854) This PR removes the public Deno.tracing.Span API. We are not confident we can ship an API that is better than the `@opentelemetry/api` API, because V8 CPED does not support us using `using` to manage span context. If this changes, we can revisit this decision. For now, users wanting custom spans can instrument their code using the `@opentelemetry/api` API and `@deno/otel`. This PR also speeds up the OTEL trace generation by a 30% by using Uint8Array instead of strings for the trace ID and span ID. --- tests/registry/jsr/@deno/otel/0.0.2/deno.json | 14 ++++++++ tests/registry/jsr/@deno/otel/0.0.2/src/index.ts | 38 ++++++++++++++++++++++ .../registry/jsr/@deno/otel/0.0.2/src/register.ts | 5 +++ tests/registry/jsr/@deno/otel/0.0.2_meta.json | 6 ++++ tests/registry/jsr/@deno/otel/meta.json | 8 +++++ 5 files changed, 71 insertions(+) create mode 100644 tests/registry/jsr/@deno/otel/0.0.2/deno.json create mode 100644 tests/registry/jsr/@deno/otel/0.0.2/src/index.ts create mode 100644 tests/registry/jsr/@deno/otel/0.0.2/src/register.ts create mode 100644 tests/registry/jsr/@deno/otel/0.0.2_meta.json create mode 100644 tests/registry/jsr/@deno/otel/meta.json (limited to 'tests/registry/jsr/@deno') diff --git a/tests/registry/jsr/@deno/otel/0.0.2/deno.json b/tests/registry/jsr/@deno/otel/0.0.2/deno.json new file mode 100644 index 000000000..cfa44a7d0 --- /dev/null +++ b/tests/registry/jsr/@deno/otel/0.0.2/deno.json @@ -0,0 +1,14 @@ +{ + "name": "@deno/otel", + "version": "0.0.2", + "exports": { + ".": "./src/index.ts", + "./register": "./src/register.ts" + }, + "tasks": { + "check:license": "deno run -A tools/check_license.ts", + "check:docs": "deno doc --lint src/index.ts", + "check": "deno task check:license --check", + "ok": "deno fmt --check && deno lint && deno task check" + } +} diff --git a/tests/registry/jsr/@deno/otel/0.0.2/src/index.ts b/tests/registry/jsr/@deno/otel/0.0.2/src/index.ts new file mode 100644 index 000000000..9c4445783 --- /dev/null +++ b/tests/registry/jsr/@deno/otel/0.0.2/src/index.ts @@ -0,0 +1,38 @@ +// Copyright 2024-2024 the Deno authors. All rights reserved. MIT license. + +import { context } from "npm:@opentelemetry/api@1"; +import { + BasicTracerProvider, + SimpleSpanProcessor, +} from "npm:@opentelemetry/sdk-trace-base@1"; + +// @ts-ignore Deno.telemetry is not typed yet +const telemetry = Deno.telemetry ?? Deno.tracing; + +let COUNTER = 1; + +/** + * Register `Deno.telemetry` with the OpenTelemetry library. + */ +export function register() { + context.setGlobalContextManager( + new telemetry.ContextManager() ?? telemetry.ContextManager(), + ); + + const provider = new BasicTracerProvider({ + idGenerator: Deno.env.get("DENO_UNSTABLE_OTEL_DETERMINISTIC") === "1" ? { + generateSpanId() { + return "1" + String(COUNTER++).padStart(15, "0"); + }, + generateTraceId() { + return "1" + String(COUNTER++).padStart(31, "0"); + } + } : undefined + }); + + // @ts-ignore Deno.tracing is not typed yet + const exporter = new telemetry.SpanExporter(); + provider.addSpanProcessor(new SimpleSpanProcessor(exporter)); + + provider.register(); +} diff --git a/tests/registry/jsr/@deno/otel/0.0.2/src/register.ts b/tests/registry/jsr/@deno/otel/0.0.2/src/register.ts new file mode 100644 index 000000000..544370707 --- /dev/null +++ b/tests/registry/jsr/@deno/otel/0.0.2/src/register.ts @@ -0,0 +1,5 @@ +// Copyright 2024-2024 the Deno authors. All rights reserved. MIT license. + +import { register } from "./index.ts"; + +register(); diff --git a/tests/registry/jsr/@deno/otel/0.0.2_meta.json b/tests/registry/jsr/@deno/otel/0.0.2_meta.json new file mode 100644 index 000000000..79c28d61d --- /dev/null +++ b/tests/registry/jsr/@deno/otel/0.0.2_meta.json @@ -0,0 +1,6 @@ +{ + "exports": { + ".": "./src/index.ts", + "./register": "./src/register.ts" + } +} \ No newline at end of file diff --git a/tests/registry/jsr/@deno/otel/meta.json b/tests/registry/jsr/@deno/otel/meta.json new file mode 100644 index 000000000..1cb49741a --- /dev/null +++ b/tests/registry/jsr/@deno/otel/meta.json @@ -0,0 +1,8 @@ +{ + "scope": "deno", + "name": "otel", + "latest": "0.0.2", + "versions": { + "0.0.2": {} + } +} \ No newline at end of file -- cgit v1.2.3