From 50b029466f937e8d63eb4a5d588b41c1de41e8b4 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Fri, 17 Jan 2025 17:18:53 +0100 Subject: [PATCH] fix(v8/aws-lambda): Avoid overwriting root span name (#15054) backport of #15000 --- packages/aws-serverless/src/sdk.ts | 5 +---- packages/aws-serverless/test/sdk.test.ts | 9 +++------ packages/core/src/scope.ts | 10 +++++++++- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/aws-serverless/src/sdk.ts b/packages/aws-serverless/src/sdk.ts index fc67aaa432ef..a6633fca14f8 100644 --- a/packages/aws-serverless/src/sdk.ts +++ b/packages/aws-serverless/src/sdk.ts @@ -220,10 +220,7 @@ function enhanceScopeWithEnvironmentData(scope: Scope, context: Context, startTi * @param context AWS Lambda context that will be used to extract some part of the data */ function enhanceScopeWithTransactionData(scope: Scope, context: Context): void { - scope.addEventProcessor(event => { - event.transaction = context.functionName; - return event; - }); + scope.setTransactionName(context.functionName); scope.setTag('server_name', process.env._AWS_XRAY_DAEMON_ADDRESS || process.env.SENTRY_NAME || hostname()); scope.setTag('url', `awslambda:///${context.functionName}`); } diff --git a/packages/aws-serverless/test/sdk.test.ts b/packages/aws-serverless/test/sdk.test.ts index 7ab59670cdf2..28b58a830e61 100644 --- a/packages/aws-serverless/test/sdk.test.ts +++ b/packages/aws-serverless/test/sdk.test.ts @@ -18,6 +18,7 @@ const mockScope = { setTag: jest.fn(), setContext: jest.fn(), addEventProcessor: jest.fn(), + setTransactionName: jest.fn(), }; jest.mock('@sentry/node', () => { @@ -81,12 +82,8 @@ const fakeCallback: Callback = (err, result) => { }; function expectScopeSettings() { - expect(mockScope.addEventProcessor).toBeCalledTimes(1); - // Test than an event processor to add `transaction` is registered for the scope - const eventProcessor = mockScope.addEventProcessor.mock.calls[0][0]; - const event: Event = {}; - eventProcessor(event); - expect(event).toEqual({ transaction: 'functionName' }); + expect(mockScope.setTransactionName).toBeCalledTimes(1); + expect(mockScope.setTransactionName).toBeCalledWith('functionName'); expect(mockScope.setTag).toBeCalledWith('server_name', expect.anything()); diff --git a/packages/core/src/scope.ts b/packages/core/src/scope.ts index 5bba8615e876..02ca7a570b17 100644 --- a/packages/core/src/scope.ts +++ b/packages/core/src/scope.ts @@ -306,7 +306,15 @@ class ScopeClass implements ScopeInterface { } /** - * @inheritDoc + * Sets the transaction name on the scope so that the name of e.g. taken server route or + * the page location is attached to future events. + * + * IMPORTANT: Calling this function does NOT change the name of the currently active + * root span. If you want to change the name of the active root span, use + * `Sentry.updateSpanName(rootSpan, 'new name')` instead. + * + * By default, the SDK updates the scope's transaction name automatically on sensible + * occasions, such as a page navigation or when handling a new request on the server. */ public setTransactionName(name?: string): this { this._transactionName = name;