From 4e43a9952c2e3ae71280a1a7dcb7babf8f729eeb Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 29 Nov 2022 15:53:35 +0100 Subject: [PATCH] fix(otel): Set root transaction name to be route --- .../src/utils/parse-otel-span-description.ts | 4 +++- .../opentelemetry-node/test/spanprocessor.test.ts | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/opentelemetry-node/src/utils/parse-otel-span-description.ts b/packages/opentelemetry-node/src/utils/parse-otel-span-description.ts index 0cce027aa478..d95fc7028223 100644 --- a/packages/opentelemetry-node/src/utils/parse-otel-span-description.ts +++ b/packages/opentelemetry-node/src/utils/parse-otel-span-description.ts @@ -98,7 +98,9 @@ function descriptionForHttpMethod(otelSpan: OtelSpan, httpMethod: AttributeValue // Ex. description="GET /api/users". const description = `${httpMethod} ${httpPath}`; - const source: TransactionSource = httpRoute ? 'route' : 'url'; + + // If `httpPath` is a root path, then we can categorize the transaction source as route. + const source: TransactionSource = httpRoute || httpPath === '/' ? 'route' : 'url'; return { op: opParts.join('.'), description, source }; } diff --git a/packages/opentelemetry-node/test/spanprocessor.test.ts b/packages/opentelemetry-node/test/spanprocessor.test.ts index 1666b67a44d9..b73fb2fcf58a 100644 --- a/packages/opentelemetry-node/test/spanprocessor.test.ts +++ b/packages/opentelemetry-node/test/spanprocessor.test.ts @@ -458,6 +458,21 @@ describe('SentrySpanProcessor', () => { }); }); + it('adds transaction source `route` for root path HTTP_TARGET', async () => { + const tracer = provider.getTracer('default'); + + tracer.startActiveSpan('GET /', otelSpan => { + const sentrySpan = getSpanForOtelSpan(otelSpan); + + otelSpan.setAttribute(SemanticAttributes.HTTP_METHOD, 'GET'); + otelSpan.setAttribute(SemanticAttributes.HTTP_TARGET, '/'); + + otelSpan.end(); + + expect(sentrySpan?.transaction?.metadata.source).toBe('route'); + }); + }); + it('adds transaction source `url` for HTTP_ROUTE', async () => { const tracer = provider.getTracer('default');