From 7c6f6c184ca50b5f2b6e9bdfc08236316513bcb0 Mon Sep 17 00:00:00 2001 From: Charly Gomez Date: Thu, 30 Apr 2026 15:29:05 +0200 Subject: [PATCH 1/2] set ctx on segment --- .../deno-streamed/tests/spans.test.ts | 25 +++++++++++++++++++ packages/deno/src/integrations/context.ts | 24 +++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/deno-streamed/tests/spans.test.ts b/dev-packages/e2e-tests/test-applications/deno-streamed/tests/spans.test.ts index 023429b07f41..15d7eaf99d9a 100644 --- a/dev-packages/e2e-tests/test-applications/deno-streamed/tests/spans.test.ts +++ b/dev-packages/e2e-tests/test-applications/deno-streamed/tests/spans.test.ts @@ -3,6 +3,10 @@ import { waitForStreamedSpans, getSpanOp } from '@sentry-internal/test-utils'; const SEGMENT_SPAN = { attributes: { + 'app.start_time': { + type: 'string', + value: expect.any(String), + }, 'client.address': { type: 'string', value: expect.any(String), @@ -11,6 +15,11 @@ const SEGMENT_SPAN = { type: 'integer', value: expect.any(Number), }, + // TODO: 'device.archs' is set but arrays are not yet serialized in span attributes + 'device.processor_count': { + type: 'integer', + value: expect.any(Number), + }, 'http.request.header.accept': { type: 'string', value: '*/*', @@ -51,6 +60,14 @@ const SEGMENT_SPAN = { type: 'integer', value: expect.any(Number), }, + 'os.name': { + type: 'string', + value: expect.any(String), + }, + 'os.version': { + type: 'string', + value: expect.any(String), + }, 'sentry.environment': { type: 'string', value: 'qa', @@ -115,6 +132,14 @@ const SEGMENT_SPAN = { type: 'string', value: 'node', }, + 'process.runtime.engine.name': { + type: 'string', + value: 'v8', + }, + 'process.runtime.engine.version': { + type: 'string', + value: expect.any(String), + }, }, end_timestamp: expect.any(Number), is_segment: true, diff --git a/packages/deno/src/integrations/context.ts b/packages/deno/src/integrations/context.ts index 979ffff7d0e8..82b70e178275 100644 --- a/packages/deno/src/integrations/context.ts +++ b/packages/deno/src/integrations/context.ts @@ -1,5 +1,5 @@ import type { Event, IntegrationFn } from '@sentry/core'; -import { defineIntegration } from '@sentry/core'; +import { defineIntegration, safeSetSpanJSONAttributes } from '@sentry/core'; const INTEGRATION_NAME = 'DenoContext'; @@ -53,11 +53,33 @@ async function addDenoRuntimeContext(event: Event): Promise { } const _denoContextIntegration = (() => { + // Eagerly resolve the async OS release so it's available synchronously in processSegmentSpan + let cachedOsRelease: string | undefined; + getOSRelease() + .then(release => { + cachedOsRelease = release; + }) + .catch(() => { + // Ignore - os.version will be undefined + }); + return { name: INTEGRATION_NAME, processEvent(event) { return addDenoRuntimeContext(event); }, + processSegmentSpan(span) { + safeSetSpanJSONAttributes(span, { + 'app.start_time': new Date(Date.now() - performance.now()).toISOString(), + 'device.archs': [Deno.build.arch], + // eslint-disable-next-line no-restricted-globals + 'device.processor_count': navigator.hardwareConcurrency, + 'os.name': getOSName(), + 'os.version': cachedOsRelease, + 'process.runtime.engine.name': 'v8', + 'process.runtime.engine.version': Deno.version.v8, + }); + }, }; }) satisfies IntegrationFn; From 2fd4d2ec3eb4c1e531551aedbc9f0f2892c0388d Mon Sep 17 00:00:00 2001 From: Charly Gomez Date: Thu, 30 Apr 2026 16:04:49 +0200 Subject: [PATCH 2/2] . --- .../e2e-tests/test-applications/deno-streamed/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/deno-streamed/package.json b/dev-packages/e2e-tests/test-applications/deno-streamed/package.json index 7bbaeaf631f8..282f8abb6492 100644 --- a/dev-packages/e2e-tests/test-applications/deno-streamed/package.json +++ b/dev-packages/e2e-tests/test-applications/deno-streamed/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "private": true, "scripts": { - "start": "deno run --allow-net --allow-env --allow-read src/app.ts", + "start": "deno run --allow-net --allow-env --allow-read --allow-sys src/app.ts", "test": "playwright test", "clean": "npx rimraf node_modules pnpm-lock.yaml", "test:build": "pnpm install",