Skip to content

Commit 02e5035

Browse files
authored
ref(serverless): Extract propagation context (#8429)
1 parent a3178f7 commit 02e5035

File tree

3 files changed

+24
-30
lines changed

3 files changed

+24
-30
lines changed

packages/serverless/src/awslambda.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { Scope } from '@sentry/node';
33
import * as Sentry from '@sentry/node';
44
import { captureException, captureMessage, flush, getCurrentHub, withScope } from '@sentry/node';
55
import type { Integration } from '@sentry/types';
6-
import { baggageHeaderToDynamicSamplingContext, extractTraceparentData, isString, logger } from '@sentry/utils';
6+
import { isString, logger, tracingContextFromHeaders } from '@sentry/utils';
77
// NOTE: I have no idea how to fix this right now, and don't want to waste more time, as it builds just fine — Kamil
88
// eslint-disable-next-line import/no-unresolved
99
import type { Context, Handler } from 'aws-lambda';
@@ -274,17 +274,20 @@ export function wrapHandler<TEvent, TResult>(
274274
}, timeoutWarningDelay) as unknown as NodeJS.Timeout;
275275
}
276276

277-
// Applying `sentry-trace` to context
278-
let traceparentData;
279-
const eventWithHeaders = event as { headers?: { [key: string]: string } };
280-
if (eventWithHeaders.headers && isString(eventWithHeaders.headers['sentry-trace'])) {
281-
traceparentData = extractTraceparentData(eventWithHeaders.headers['sentry-trace']);
282-
}
277+
const hub = getCurrentHub();
283278

284-
const baggageHeader = eventWithHeaders.headers && eventWithHeaders.headers.baggage;
285-
const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggageHeader);
279+
const eventWithHeaders = event as { headers?: { [key: string]: string } };
286280

287-
const hub = getCurrentHub();
281+
const sentryTrace =
282+
eventWithHeaders.headers && isString(eventWithHeaders.headers['sentry-trace'])
283+
? eventWithHeaders.headers['sentry-trace']
284+
: undefined;
285+
const baggage = eventWithHeaders.headers?.baggage;
286+
const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(
287+
sentryTrace,
288+
baggage,
289+
);
290+
hub.getScope().setPropagationContext(propagationContext);
288291

289292
const transaction = hub.startTransaction({
290293
name: context.functionName,

packages/serverless/src/gcpfunction/http.ts

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
import type { AddRequestDataToEventOptions } from '@sentry/node';
22
import { captureException, flush, getCurrentHub } from '@sentry/node';
3-
import {
4-
baggageHeaderToDynamicSamplingContext,
5-
extractTraceparentData,
6-
isString,
7-
isThenable,
8-
logger,
9-
stripUrlQueryAndFragment,
10-
} from '@sentry/utils';
3+
import { isString, isThenable, logger, stripUrlQueryAndFragment, tracingContextFromHeaders } from '@sentry/utils';
114

125
import { domainify, proxyFunction } from './../utils';
136
import type { HttpFunction, WrapperOptions } from './general';
@@ -68,21 +61,18 @@ function _wrapHttpFunction(fn: HttpFunction, wrapOptions: Partial<HttpFunctionWr
6861
...wrapOptions,
6962
};
7063
return (req, res) => {
64+
const hub = getCurrentHub();
65+
7166
const reqMethod = (req.method || '').toUpperCase();
7267
const reqUrl = stripUrlQueryAndFragment(req.originalUrl || req.url || '');
7368

74-
// Applying `sentry-trace` to context
75-
let traceparentData;
76-
const reqWithHeaders = req as { headers?: { [key: string]: string } };
77-
if (reqWithHeaders.headers && isString(reqWithHeaders.headers['sentry-trace'])) {
78-
traceparentData = extractTraceparentData(reqWithHeaders.headers['sentry-trace']);
79-
}
80-
81-
const baggageHeader = reqWithHeaders.headers?.baggage;
82-
83-
const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggageHeader);
84-
85-
const hub = getCurrentHub();
69+
const sentryTrace = req.headers && isString(req.headers['sentry-trace']) ? req.headers['sentry-trace'] : undefined;
70+
const baggage = req.headers?.baggage;
71+
const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(
72+
sentryTrace,
73+
baggage,
74+
);
75+
hub.getScope().setPropagationContext(propagationContext);
8676

8777
const transaction = hub.startTransaction({
8878
name: `${reqMethod} ${reqUrl}`,

packages/serverless/test/__mocks__/@sentry/node.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export const fakeScope = {
2222
setSpan: jest.fn(),
2323
getTransaction: jest.fn(() => fakeTransaction),
2424
setSDKProcessingMetadata: jest.fn(),
25+
setPropagationContext: jest.fn(),
2526
};
2627
export const fakeSpan = {
2728
finish: jest.fn(),

0 commit comments

Comments
 (0)