Skip to content

Commit

Permalink
fix(v8/aws-lambda): Avoid overwriting root span name (#15054)
Browse files Browse the repository at this point in the history
backport of #15000
  • Loading branch information
Lms24 authored Jan 17, 2025
1 parent 40d9b9f commit 50b0294
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 11 deletions.
5 changes: 1 addition & 4 deletions packages/aws-serverless/src/sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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}`);
}
Expand Down
9 changes: 3 additions & 6 deletions packages/aws-serverless/test/sdk.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ const mockScope = {
setTag: jest.fn(),
setContext: jest.fn(),
addEventProcessor: jest.fn(),
setTransactionName: jest.fn(),
};

jest.mock('@sentry/node', () => {
Expand Down Expand Up @@ -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());

Expand Down
10 changes: 9 additions & 1 deletion packages/core/src/scope.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 50b0294

Please sign in to comment.