From 3bfb9f73b4b7d20bee56532ee5d159ec5d544767 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 21 Mar 2023 20:34:22 +0100 Subject: [PATCH 1/2] ref(sveltekit): Rewrite `sentryHandle` using trace func --- packages/sveltekit/src/server/handle.ts | 65 ++++++++----------------- 1 file changed, 20 insertions(+), 45 deletions(-) diff --git a/packages/sveltekit/src/server/handle.ts b/packages/sveltekit/src/server/handle.ts index 90dda26dac55..b27ce420da8e 100644 --- a/packages/sveltekit/src/server/handle.ts +++ b/packages/sveltekit/src/server/handle.ts @@ -1,11 +1,11 @@ /* eslint-disable @sentry-internal/sdk/no-optional-chaining */ -import { captureException, getCurrentHub, startTransaction } from '@sentry/node'; -import type { Transaction } from '@sentry/types'; +import type { Span } from '@sentry/core'; +import { trace } from '@sentry/core'; +import { captureException } from '@sentry/node'; import { addExceptionMechanism, baggageHeaderToDynamicSamplingContext, extractTraceparentData, - isThenable, objectify, } from '@sentry/utils'; import type { Handle } from '@sveltejs/kit'; @@ -51,53 +51,28 @@ function sendErrorToSentry(e: unknown): unknown { */ export const sentryHandle: Handle = ({ event, resolve }) => { return domain.create().bind(() => { - let maybePromiseResult; - const sentryTraceHeader = event.request.headers.get('sentry-trace'); const baggageHeader = event.request.headers.get('baggage'); const traceparentData = sentryTraceHeader ? extractTraceparentData(sentryTraceHeader) : undefined; const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggageHeader); - // transaction could be undefined if hub extensions were not added. - const transaction: Transaction | undefined = startTransaction({ - op: 'http.server', - name: `${event.request.method} ${event.route.id}`, - status: 'ok', - ...traceparentData, - metadata: { - source: 'route', - dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext, - }, - }); - - getCurrentHub().getScope()?.setSpan(transaction); - - try { - maybePromiseResult = resolve(event); - } catch (e) { - transaction?.setStatus('internal_error'); - const sentryError = sendErrorToSentry(e); - transaction?.finish(); - throw sentryError; - } - - if (isThenable(maybePromiseResult)) { - Promise.resolve(maybePromiseResult).then( - response => { - transaction?.setHttpStatus(response.status); - transaction?.finish(); - }, - e => { - transaction?.setStatus('internal_error'); - sendErrorToSentry(e); - transaction?.finish(); + return trace( + { + op: 'http.server', + name: `${event.request.method} ${event.route.id}`, + status: 'ok', + ...traceparentData, + metadata: { + source: 'route', + dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext, }, - ); - } else { - transaction?.setHttpStatus(maybePromiseResult.status); - transaction?.finish(); - } - - return maybePromiseResult; + }, + async (span: Span) => { + const res = await resolve(event); + span.setHttpStatus(res.status); + return res; + }, + sendErrorToSentry, + ); })(); }; From 71b85cd75de1d901aa8b9fab97dccd496823484f Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Wed, 22 Mar 2023 15:03:02 +0100 Subject: [PATCH 2/2] check if span is defined --- packages/sveltekit/src/server/handle.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/sveltekit/src/server/handle.ts b/packages/sveltekit/src/server/handle.ts index b27ce420da8e..aab69c085048 100644 --- a/packages/sveltekit/src/server/handle.ts +++ b/packages/sveltekit/src/server/handle.ts @@ -67,9 +67,11 @@ export const sentryHandle: Handle = ({ event, resolve }) => { dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext, }, }, - async (span: Span) => { + async (span?: Span) => { const res = await resolve(event); - span.setHttpStatus(res.status); + if (span) { + span.setHttpStatus(res.status); + } return res; }, sendErrorToSentry,