diff --git a/dev-packages/e2e-tests/test-applications/sveltekit-2/test/errors.server.test.ts b/dev-packages/e2e-tests/test-applications/sveltekit-2/test/errors.server.test.ts index ffdfad2932c8..51488b103107 100644 --- a/dev-packages/e2e-tests/test-applications/sveltekit-2/test/errors.server.test.ts +++ b/dev-packages/e2e-tests/test-applications/sveltekit-2/test/errors.server.test.ts @@ -60,7 +60,6 @@ test.describe('server-side errors', () => { }), ); - // TODO: Uncomment once we update the scope transaction name on the server side - // expect(errorEvent.transaction).toEqual('GET /server-route-error'); + expect(errorEvent.transaction).toEqual('GET /server-route-error'); }); }); diff --git a/dev-packages/e2e-tests/test-applications/sveltekit/test/errors.server.test.ts b/dev-packages/e2e-tests/test-applications/sveltekit/test/errors.server.test.ts index 6274239a936b..d2215cf8e763 100644 --- a/dev-packages/e2e-tests/test-applications/sveltekit/test/errors.server.test.ts +++ b/dev-packages/e2e-tests/test-applications/sveltekit/test/errors.server.test.ts @@ -63,7 +63,6 @@ test.describe('server-side errors', () => { }), ); - // TODO: Uncomment once we update the scope transaction name on the server side - // expect(errorEvent.transaction).toEqual('GET /server-route-error'); + expect(errorEvent.transaction).toEqual('GET /server-route-error'); }); }); diff --git a/packages/sveltekit/src/server/handle.ts b/packages/sveltekit/src/server/handle.ts index 0bb08be6ce50..ee55ed810e8e 100644 --- a/packages/sveltekit/src/server/handle.ts +++ b/packages/sveltekit/src/server/handle.ts @@ -2,6 +2,8 @@ import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, getActiveSpan, + getDefaultIsolationScope, + getIsolationScope, getRootSpan, setHttpStatus, spanToTraceHeader, @@ -10,11 +12,12 @@ import { import { startSpan } from '@sentry/core'; import { captureException, continueTrace } from '@sentry/node'; import type { Span } from '@sentry/types'; -import { dynamicSamplingContextToSentryBaggageHeader, objectify } from '@sentry/utils'; +import { dynamicSamplingContextToSentryBaggageHeader, logger, objectify } from '@sentry/utils'; import type { Handle, ResolveOptions } from '@sveltejs/kit'; import { getDynamicSamplingContextFromSpan } from '@sentry/opentelemetry'; +import { DEBUG_BUILD } from '../common/debug-build'; import { isHttpError, isRedirect } from '../common/utils'; import { flushIfServerless, getTracePropagationData } from './utils'; @@ -183,6 +186,14 @@ async function instrumentHandle( return resolve(event); } + const routeName = `${event.request.method} ${event.route?.id || event.url.pathname}`; + + if (getIsolationScope() !== getDefaultIsolationScope()) { + getIsolationScope().setTransactionName(routeName); + } else { + DEBUG_BUILD && logger.warn('Isolation scope is default isolation scope - skipping setting transactionName'); + } + try { const resolveResult = await startSpan( { @@ -192,7 +203,7 @@ async function instrumentHandle( [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: event.route?.id ? 'route' : 'url', 'http.method': event.request.method, }, - name: `${event.request.method} ${event.route?.id || event.url.pathname}`, + name: routeName, }, async (span?: Span) => { const res = await resolve(event, {