From c143c7596c43efddb3da752f30e4d8f88e4d1c6b Mon Sep 17 00:00:00 2001 From: Charly Gomez Date: Wed, 14 May 2025 17:24:35 +0200 Subject: [PATCH 1/2] preserve next.route attr --- packages/nextjs/src/server/index.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/nextjs/src/server/index.ts b/packages/nextjs/src/server/index.ts index e4e437ebd691..a6594e7fae1e 100644 --- a/packages/nextjs/src/server/index.ts +++ b/packages/nextjs/src/server/index.ts @@ -176,6 +176,8 @@ export function init(options: NodeOptions): NodeClient | undefined { const route = spanAttributes['next.route'].replace(/\/route$/, ''); rootSpan.updateName(route); rootSpan.setAttribute(ATTR_HTTP_ROUTE, route); + // Preserving the original attribute despite internally not depending on it + rootSpan.setAttribute('next.route', route); } } @@ -322,11 +324,14 @@ export function init(options: NodeOptions): NodeClient | undefined { const method = event.contexts.trace.data[SEMATTRS_HTTP_METHOD]; // eslint-disable-next-line deprecation/deprecation const target = event.contexts?.trace?.data?.[SEMATTRS_HTTP_TARGET]; - const route = event.contexts.trace.data[ATTR_HTTP_ROUTE]; + const route = event.contexts.trace.data[ATTR_HTTP_ROUTE] || event.contexts.trace.data['next.route']; if (typeof method === 'string' && typeof route === 'string') { - event.transaction = `${method} ${route.replace(/\/route$/, '')}`; + const cleanRoute = route.replace(/\/route$/, ''); + event.transaction = `${method} ${cleanRoute}`; event.contexts.trace.data[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = 'route'; + // Preserve next.route in case it did not get hoisted + event.contexts.trace.data['next.route'] = cleanRoute; } // backfill transaction name for pages that would otherwise contain unparameterized routes From 7ea95c984a195b4b1ba356214876eb137ed2af32 Mon Sep 17 00:00:00 2001 From: Charly Gomez Date: Wed, 14 May 2025 17:51:16 +0200 Subject: [PATCH 2/2] update e2e test --- .../nextjs-app-dir/tests/server-components.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/server-components.test.ts b/dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/server-components.test.ts index 4f564f2f462d..498c9b969ed9 100644 --- a/dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/server-components.test.ts +++ b/dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/server-components.test.ts @@ -25,6 +25,7 @@ test('Sends a transaction for a request to app router', async ({ page }) => { 'http.status_code': 200, 'http.target': '/server-component/parameter/1337/42', 'otel.kind': 'SERVER', + 'next.route': '/server-component/parameter/[...parameters]', }), op: 'http.server', origin: 'auto',