Skip to content

Commit d265fe5

Browse files
authored
ref(sveltekit): Rewrite sentryHandle using trace func (#7559)
1 parent e97b097 commit d265fe5

File tree

1 file changed

+22
-45
lines changed

1 file changed

+22
-45
lines changed
Lines changed: 22 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
/* eslint-disable @sentry-internal/sdk/no-optional-chaining */
2-
import { captureException, getCurrentHub, startTransaction } from '@sentry/node';
3-
import type { Transaction } from '@sentry/types';
2+
import type { Span } from '@sentry/core';
3+
import { trace } from '@sentry/core';
4+
import { captureException } from '@sentry/node';
45
import {
56
addExceptionMechanism,
67
baggageHeaderToDynamicSamplingContext,
78
extractTraceparentData,
8-
isThenable,
99
objectify,
1010
} from '@sentry/utils';
1111
import type { Handle } from '@sveltejs/kit';
@@ -51,53 +51,30 @@ function sendErrorToSentry(e: unknown): unknown {
5151
*/
5252
export const sentryHandle: Handle = ({ event, resolve }) => {
5353
return domain.create().bind(() => {
54-
let maybePromiseResult;
55-
5654
const sentryTraceHeader = event.request.headers.get('sentry-trace');
5755
const baggageHeader = event.request.headers.get('baggage');
5856
const traceparentData = sentryTraceHeader ? extractTraceparentData(sentryTraceHeader) : undefined;
5957
const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggageHeader);
6058

61-
// transaction could be undefined if hub extensions were not added.
62-
const transaction: Transaction | undefined = startTransaction({
63-
op: 'http.server',
64-
name: `${event.request.method} ${event.route.id}`,
65-
status: 'ok',
66-
...traceparentData,
67-
metadata: {
68-
source: 'route',
69-
dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext,
70-
},
71-
});
72-
73-
getCurrentHub().getScope()?.setSpan(transaction);
74-
75-
try {
76-
maybePromiseResult = resolve(event);
77-
} catch (e) {
78-
transaction?.setStatus('internal_error');
79-
const sentryError = sendErrorToSentry(e);
80-
transaction?.finish();
81-
throw sentryError;
82-
}
83-
84-
if (isThenable(maybePromiseResult)) {
85-
Promise.resolve(maybePromiseResult).then(
86-
response => {
87-
transaction?.setHttpStatus(response.status);
88-
transaction?.finish();
89-
},
90-
e => {
91-
transaction?.setStatus('internal_error');
92-
sendErrorToSentry(e);
93-
transaction?.finish();
59+
return trace(
60+
{
61+
op: 'http.server',
62+
name: `${event.request.method} ${event.route.id}`,
63+
status: 'ok',
64+
...traceparentData,
65+
metadata: {
66+
source: 'route',
67+
dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext,
9468
},
95-
);
96-
} else {
97-
transaction?.setHttpStatus(maybePromiseResult.status);
98-
transaction?.finish();
99-
}
100-
101-
return maybePromiseResult;
69+
},
70+
async (span?: Span) => {
71+
const res = await resolve(event);
72+
if (span) {
73+
span.setHttpStatus(res.status);
74+
}
75+
return res;
76+
},
77+
sendErrorToSentry,
78+
);
10279
})();
10380
};

0 commit comments

Comments
 (0)