From 8e7de36508aa3bfad7c9261b8f31f1d7591c2673 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Wed, 28 Jun 2023 15:40:40 -0400 Subject: [PATCH 1/8] update tests --- .../suites/replay/captureReplay/test.ts | 4 ++++ .../suites/replay/captureReplayFromReplayPackage/test.ts | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/packages/browser-integration-tests/suites/replay/captureReplay/test.ts b/packages/browser-integration-tests/suites/replay/captureReplay/test.ts index 421e725bb3e4..f1aff48ac9df 100644 --- a/packages/browser-integration-tests/suites/replay/captureReplay/test.ts +++ b/packages/browser-integration-tests/suites/replay/captureReplay/test.ts @@ -56,6 +56,10 @@ sentryTest('should capture replays (@sentry/browser export)', async ({ getLocalT version: SDK_VERSION, name: 'sentry.javascript.browser', }, +<<<<<<< HEAD +======= + sdkProcessingMetadata: expect.any(Object), +>>>>>>> 929289c22 (update tests) request: { url: expect.stringContaining('/dist/index.html'), headers: { diff --git a/packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/test.ts b/packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/test.ts index c42bfc692018..2509bb764020 100644 --- a/packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/test.ts +++ b/packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/test.ts @@ -56,6 +56,10 @@ sentryTest('should capture replays (@sentry/replay export)', async ({ getLocalTe version: SDK_VERSION, name: 'sentry.javascript.browser', }, +<<<<<<< HEAD +======= + sdkProcessingMetadata: expect.any(Object), +>>>>>>> 929289c22 (update tests) request: { url: expect.stringContaining('/dist/index.html'), headers: { From 096c09568fe673550faa6941c61e4c3029940544 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Wed, 28 Jun 2023 16:01:56 -0400 Subject: [PATCH 2/8] remove sdkProcessingMetadata from replay fixtures --- .../suites/replay/captureReplay/test.ts | 4 ---- .../suites/replay/captureReplayFromReplayPackage/test.ts | 4 ---- 2 files changed, 8 deletions(-) diff --git a/packages/browser-integration-tests/suites/replay/captureReplay/test.ts b/packages/browser-integration-tests/suites/replay/captureReplay/test.ts index f1aff48ac9df..421e725bb3e4 100644 --- a/packages/browser-integration-tests/suites/replay/captureReplay/test.ts +++ b/packages/browser-integration-tests/suites/replay/captureReplay/test.ts @@ -56,10 +56,6 @@ sentryTest('should capture replays (@sentry/browser export)', async ({ getLocalT version: SDK_VERSION, name: 'sentry.javascript.browser', }, -<<<<<<< HEAD -======= - sdkProcessingMetadata: expect.any(Object), ->>>>>>> 929289c22 (update tests) request: { url: expect.stringContaining('/dist/index.html'), headers: { diff --git a/packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/test.ts b/packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/test.ts index 2509bb764020..c42bfc692018 100644 --- a/packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/test.ts +++ b/packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/test.ts @@ -56,10 +56,6 @@ sentryTest('should capture replays (@sentry/replay export)', async ({ getLocalTe version: SDK_VERSION, name: 'sentry.javascript.browser', }, -<<<<<<< HEAD -======= - sdkProcessingMetadata: expect.any(Object), ->>>>>>> 929289c22 (update tests) request: { url: expect.stringContaining('/dist/index.html'), headers: { From 059368459bd6ee40677b1a9fdb26fb983973ed6f Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Wed, 28 Jun 2023 17:31:55 -0400 Subject: [PATCH 3/8] feat(node): Populate propagation context using env variables --- packages/node/src/sdk.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/node/src/sdk.ts b/packages/node/src/sdk.ts index fee681921bb3..845716e8ac55 100644 --- a/packages/node/src/sdk.ts +++ b/packages/node/src/sdk.ts @@ -6,14 +6,20 @@ import { initAndBind, Integrations as CoreIntegrations, } from '@sentry/core'; -import type { SessionStatus, StackParser } from '@sentry/types'; +import type { DynamicSamplingContext, PropagationContext, SessionStatus, StackParser } from '@sentry/types'; import { + baggageHeaderToDynamicSamplingContext, createStackParser, + extractTraceparentData, GLOBAL_OBJ, logger, nodeStackLineParser, stackParserFromStackParserOptions, +<<<<<<< HEAD tracingContextFromHeaders, +======= + uuid4, +>>>>>>> 9ca434fc5 (feat(node): Populate propagation context using env variables) } from '@sentry/utils'; import { setNodeAsyncContextStrategy } from './async'; From d2c28cc0d526ae2690bf687e0c72aba2efc09378 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Thu, 29 Jun 2023 11:12:53 -0400 Subject: [PATCH 4/8] simplify environment logic --- packages/node/src/sdk.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/src/sdk.ts b/packages/node/src/sdk.ts index 845716e8ac55..7149d9e0a203 100644 --- a/packages/node/src/sdk.ts +++ b/packages/node/src/sdk.ts @@ -305,7 +305,7 @@ function startSessionTracking(): void { function updateScopeFromEnvVariables(): void { const sentryUseEnvironment = (process.env.SENTRY_USE_ENVIRONMENT || '').toLowerCase(); if (!['false', 'n', 'no', 'off', '0'].includes(sentryUseEnvironment)) { - const sentryTraceEnv = process.env.SENTRY_TRACE; + const sentryTraceEnv = process.env.SENTRY_TRACE || ''; const baggageEnv = process.env.SENTRY_BAGGAGE; const { propagationContext } = tracingContextFromHeaders(sentryTraceEnv, baggageEnv); getCurrentHub().getScope().setPropagationContext(propagationContext); From b9bcb9362bbef7d0e23fd5832737db890fb84b73 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Thu, 29 Jun 2023 11:51:30 -0400 Subject: [PATCH 5/8] update node env to use helper func --- packages/node/src/sdk.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/node/src/sdk.ts b/packages/node/src/sdk.ts index 7149d9e0a203..2d05bf54bf6d 100644 --- a/packages/node/src/sdk.ts +++ b/packages/node/src/sdk.ts @@ -6,20 +6,14 @@ import { initAndBind, Integrations as CoreIntegrations, } from '@sentry/core'; -import type { DynamicSamplingContext, PropagationContext, SessionStatus, StackParser } from '@sentry/types'; +import type { SessionStatus, StackParser } from '@sentry/types'; import { - baggageHeaderToDynamicSamplingContext, createStackParser, - extractTraceparentData, GLOBAL_OBJ, logger, nodeStackLineParser, stackParserFromStackParserOptions, -<<<<<<< HEAD tracingContextFromHeaders, -======= - uuid4, ->>>>>>> 9ca434fc5 (feat(node): Populate propagation context using env variables) } from '@sentry/utils'; import { setNodeAsyncContextStrategy } from './async'; From 0f647640174cd9bdc48356e91fad763ebcbb3b6e Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Thu, 29 Jun 2023 12:11:09 -0400 Subject: [PATCH 6/8] ref(node): Extract propagation context from request --- packages/node/src/handlers.ts | 15 ++++++++------- packages/node/test/handlers.test.ts | 30 ++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/packages/node/src/handlers.ts b/packages/node/src/handlers.ts index 95a4cfe65e38..0f2ffca1b502 100644 --- a/packages/node/src/handlers.ts +++ b/packages/node/src/handlers.ts @@ -11,13 +11,12 @@ import type { Span } from '@sentry/types'; import type { AddRequestDataToEventOptions } from '@sentry/utils'; import { addRequestDataToTransaction, - baggageHeaderToDynamicSamplingContext, dropUndefinedKeys, extractPathForTransaction, - extractTraceparentData, isString, logger, normalize, + tracingContextFromHeaders, } from '@sentry/utils'; import type * as http from 'http'; @@ -62,11 +61,13 @@ export function tracingHandler(): ( return next(); } - // If there is a trace header set, we extract the data from it (parentSpanId, traceId, and sampling decision) - const traceparentData = - req.headers && isString(req.headers['sentry-trace']) && extractTraceparentData(req.headers['sentry-trace']); - const incomingBaggageHeaders = req.headers?.baggage; - const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(incomingBaggageHeaders); + const sentryTrace = req.headers && isString(req.headers['sentry-trace']) ? req.headers['sentry-trace'] : undefined; + const baggage = req.headers?.baggage; + const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders( + sentryTrace, + baggage, + ); + hub.getScope().setPropagationContext(propagationContext); const [name, source] = extractPathForTransaction(req, { path: true, method: true }); const transaction = startTransaction( diff --git a/packages/node/test/handlers.test.ts b/packages/node/test/handlers.test.ts index 298d61cf1aac..4722eb45ca3f 100644 --- a/packages/node/test/handlers.test.ts +++ b/packages/node/test/handlers.test.ts @@ -1,7 +1,7 @@ import type { Hub } from '@sentry/core'; import * as sentryCore from '@sentry/core'; import { setAsyncContextStrategy, Transaction } from '@sentry/core'; -import type { Event } from '@sentry/types'; +import type { Event, PropagationContext } from '@sentry/types'; import { SentryError } from '@sentry/utils'; import * as http from 'http'; @@ -209,6 +209,11 @@ describe('tracingHandler', () => { jest.restoreAllMocks(); }); + function getPropagationContext(): PropagationContext { + // @ts-expect-error accesing private property for test + return hub.getScope()._propagationContext; + } + it('creates a transaction when handling a request', () => { const startTransaction = jest.spyOn(sentryCore, 'startTransaction'); @@ -251,6 +256,13 @@ describe('tracingHandler', () => { const transaction = (res as any).__sentry_transaction; + expect(getPropagationContext()).toEqual({ + traceId: '12312012123120121231201212312012', + parentSpanId: '1121201211212012', + spanId: expect.any(String), + sampled: false, + }); + // since we have no tracesSampler defined, the default behavior (inherit if possible) applies expect(transaction.traceId).toEqual('12312012123120121231201212312012'); expect(transaction.parentSpanId).toEqual('1121201211212012'); @@ -260,18 +272,28 @@ describe('tracingHandler', () => { it("pulls parent's data from tracing and baggage headers on the request", () => { req.headers = { - 'sentry-trace': '12312012123120121231201212312012-1121201211212012-0', + 'sentry-trace': '12312012123120121231201212312012-1121201211212012-1', baggage: 'sentry-version=1.0,sentry-environment=production', }; sentryTracingMiddleware(req, res, next); + console.log(getPropagationContext()); + + expect(getPropagationContext()).toEqual({ + traceId: '12312012123120121231201212312012', + parentSpanId: '1121201211212012', + spanId: expect.any(String), + sampled: true, + dsc: { version: '1.0', environment: 'production' }, + }); + const transaction = (res as any).__sentry_transaction; // since we have no tracesSampler defined, the default behavior (inherit if possible) applies expect(transaction.traceId).toEqual('12312012123120121231201212312012'); expect(transaction.parentSpanId).toEqual('1121201211212012'); - expect(transaction.sampled).toEqual(false); + expect(transaction.sampled).toEqual(true); expect(transaction.metadata?.dynamicSamplingContext).toStrictEqual({ version: '1.0', environment: 'production' }); }); @@ -283,6 +305,8 @@ describe('tracingHandler', () => { sentryTracingMiddleware(req, res, next); + expect(getPropagationContext().dsc).toEqual({ version: '1.0', environment: 'production' }); + const transaction = (res as any).__sentry_transaction; expect(transaction.metadata?.dynamicSamplingContext).toStrictEqual({ version: '1.0', environment: 'production' }); }); From b4bda1f6b6ac39157e471b59cbd8ed1f40a68e18 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Thu, 29 Jun 2023 12:46:07 -0400 Subject: [PATCH 7/8] bad rebase --- packages/node/src/sdk.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/src/sdk.ts b/packages/node/src/sdk.ts index 2d05bf54bf6d..fee681921bb3 100644 --- a/packages/node/src/sdk.ts +++ b/packages/node/src/sdk.ts @@ -299,7 +299,7 @@ function startSessionTracking(): void { function updateScopeFromEnvVariables(): void { const sentryUseEnvironment = (process.env.SENTRY_USE_ENVIRONMENT || '').toLowerCase(); if (!['false', 'n', 'no', 'off', '0'].includes(sentryUseEnvironment)) { - const sentryTraceEnv = process.env.SENTRY_TRACE || ''; + const sentryTraceEnv = process.env.SENTRY_TRACE; const baggageEnv = process.env.SENTRY_BAGGAGE; const { propagationContext } = tracingContextFromHeaders(sentryTraceEnv, baggageEnv); getCurrentHub().getScope().setPropagationContext(propagationContext); From f30e9652f123492f94055ee3db572001a544bdce Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Thu, 29 Jun 2023 13:04:25 -0400 Subject: [PATCH 8/8] lint fix --- packages/node/test/handlers.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/node/test/handlers.test.ts b/packages/node/test/handlers.test.ts index 4722eb45ca3f..d464342fe396 100644 --- a/packages/node/test/handlers.test.ts +++ b/packages/node/test/handlers.test.ts @@ -278,8 +278,6 @@ describe('tracingHandler', () => { sentryTracingMiddleware(req, res, next); - console.log(getPropagationContext()); - expect(getPropagationContext()).toEqual({ traceId: '12312012123120121231201212312012', parentSpanId: '1121201211212012',