From 5a04fcb1b3c0ff713ddf95eef7b3a0471d75d282 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Mon, 11 Mar 2024 10:20:13 +0000 Subject: [PATCH] feat(opentelemetry): Use core `getRootSpan` functionality --- packages/core/src/index.ts | 1 + packages/node-experimental/src/index.ts | 3 +-- packages/opentelemetry/src/index.ts | 2 +- .../opentelemetry/src/setupEventContextTrace.ts | 3 ++- packages/opentelemetry/src/spanProcessor.ts | 3 ++- packages/opentelemetry/src/trace.ts | 2 +- .../opentelemetry/src/utils/getActiveSpan.ts | 16 ---------------- packages/opentelemetry/test/trace.test.ts | 3 ++- .../test/utils/getActiveSpan.test.ts | 3 ++- 9 files changed, 12 insertions(+), 24 deletions(-) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 9c90fe4d31b0..6b4c6a13021f 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -93,6 +93,7 @@ export { getStatusMessage, getRootSpan, getActiveSpan, + addChildSpanToSpan, } from './utils/spanUtils'; export { applySdkMetadata } from './utils/sdkMetadata'; export { DEFAULT_ENVIRONMENT } from './constants'; diff --git a/packages/node-experimental/src/index.ts b/packages/node-experimental/src/index.ts index f7a101acdfe3..0db75fa312a3 100644 --- a/packages/node-experimental/src/index.ts +++ b/packages/node-experimental/src/index.ts @@ -41,8 +41,6 @@ export { cron } from './cron'; export type { NodeOptions } from './types'; -export { getRootSpan } from '@sentry/opentelemetry'; - export { addRequestDataToEvent, DEFAULT_USER_INCLUDES, @@ -106,6 +104,7 @@ export { startInactiveSpan, getActiveSpan, withActiveSpan, + getRootSpan, } from '@sentry/core'; export type { diff --git a/packages/opentelemetry/src/index.ts b/packages/opentelemetry/src/index.ts index 3599a21f1123..2f54b7fe25f1 100644 --- a/packages/opentelemetry/src/index.ts +++ b/packages/opentelemetry/src/index.ts @@ -26,7 +26,7 @@ export { export { isSentryRequestSpan } from './utils/isSentryRequest'; -export { getActiveSpan, getRootSpan } from './utils/getActiveSpan'; +export { getActiveSpan } from './utils/getActiveSpan'; export { startSpan, startSpanManual, startInactiveSpan, withActiveSpan } from './trace'; // eslint-disable-next-line deprecation/deprecation diff --git a/packages/opentelemetry/src/setupEventContextTrace.ts b/packages/opentelemetry/src/setupEventContextTrace.ts index 93e9033f4969..1aa1edbbe12c 100644 --- a/packages/opentelemetry/src/setupEventContextTrace.ts +++ b/packages/opentelemetry/src/setupEventContextTrace.ts @@ -1,7 +1,8 @@ +import { getRootSpan } from '@sentry/core'; import type { Client } from '@sentry/types'; import { dropUndefinedKeys } from '@sentry/utils'; -import { getActiveSpan, getRootSpan } from './utils/getActiveSpan'; +import { getActiveSpan } from './utils/getActiveSpan'; import { spanHasName, spanHasParentId } from './utils/spanTypes'; /** Ensure the `trace` context is set on all events. */ diff --git a/packages/opentelemetry/src/spanProcessor.ts b/packages/opentelemetry/src/spanProcessor.ts index ba00d69f7799..8592ffd900ab 100644 --- a/packages/opentelemetry/src/spanProcessor.ts +++ b/packages/opentelemetry/src/spanProcessor.ts @@ -2,7 +2,7 @@ import type { Context } from '@opentelemetry/api'; import { ROOT_CONTEXT, trace } from '@opentelemetry/api'; import type { Span, SpanProcessor as SpanProcessorInterface } from '@opentelemetry/sdk-trace-base'; import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'; -import { getClient, getDefaultCurrentScope, getDefaultIsolationScope } from '@sentry/core'; +import { addChildSpanToSpan, getClient, getDefaultCurrentScope, getDefaultIsolationScope } from '@sentry/core'; import { logger } from '@sentry/utils'; import { DEBUG_BUILD } from './debug-build'; @@ -21,6 +21,7 @@ function onSpanStart(span: Span, parentContext: Context): void { // We need access to the parent span in order to be able to move up the span tree for breadcrumbs if (parentSpan) { setSpanParent(span, parentSpan); + addChildSpanToSpan(parentSpan, span); } // The root context does not have scopes stored, so we check for this specifically diff --git a/packages/opentelemetry/src/trace.ts b/packages/opentelemetry/src/trace.ts index 80637001d809..910ce872f212 100644 --- a/packages/opentelemetry/src/trace.ts +++ b/packages/opentelemetry/src/trace.ts @@ -10,6 +10,7 @@ import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, getClient, getCurrentScope, + getRootSpan, handleCallbackErrors, } from '@sentry/core'; import type { Client, Scope } from '@sentry/types'; @@ -19,7 +20,6 @@ import { SENTRY_TRACE_STATE_DSC } from './constants'; import type { OpenTelemetryClient, OpenTelemetrySpanContext } from './types'; import { getContextFromScope } from './utils/contextData'; import { getDynamicSamplingContextFromSpan } from './utils/dynamicSamplingContext'; -import { getRootSpan } from './utils/getActiveSpan'; import { setSpanMetadata } from './utils/spanData'; /** diff --git a/packages/opentelemetry/src/utils/getActiveSpan.ts b/packages/opentelemetry/src/utils/getActiveSpan.ts index 1244a7cb4d62..e2d06176caeb 100644 --- a/packages/opentelemetry/src/utils/getActiveSpan.ts +++ b/packages/opentelemetry/src/utils/getActiveSpan.ts @@ -1,25 +1,9 @@ import type { Span } from '@opentelemetry/api'; import { trace } from '@opentelemetry/api'; -import { getSpanParent } from './spanData'; - /** * Returns the currently active span. */ export function getActiveSpan(): Span | undefined { return trace.getActiveSpan(); } - -/** - * Get the root span for the given span. - * The given span may be the root span itself. - */ -export function getRootSpan(span: Span): Span { - let parent: Span = span; - - while (getSpanParent(parent)) { - parent = getSpanParent(parent) as Span; - } - - return parent; -} diff --git a/packages/opentelemetry/test/trace.test.ts b/packages/opentelemetry/test/trace.test.ts index ed2900541587..c13ca6e7eff5 100644 --- a/packages/opentelemetry/test/trace.test.ts +++ b/packages/opentelemetry/test/trace.test.ts @@ -11,13 +11,14 @@ import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, getClient, getCurrentScope, + getRootSpan, withScope, } from '@sentry/core'; import type { Event, Scope } from '@sentry/types'; import { startInactiveSpan, startSpan, startSpanManual } from '../src/trace'; import type { AbstractSpan } from '../src/types'; -import { getActiveSpan, getRootSpan } from '../src/utils/getActiveSpan'; +import { getActiveSpan } from '../src/utils/getActiveSpan'; import { getSpanKind } from '../src/utils/getSpanKind'; import { getSpanMetadata } from '../src/utils/spanData'; import { spanHasAttributes, spanHasName } from '../src/utils/spanTypes'; diff --git a/packages/opentelemetry/test/utils/getActiveSpan.test.ts b/packages/opentelemetry/test/utils/getActiveSpan.test.ts index 4859d970623e..9921f82f2982 100644 --- a/packages/opentelemetry/test/utils/getActiveSpan.test.ts +++ b/packages/opentelemetry/test/utils/getActiveSpan.test.ts @@ -1,7 +1,8 @@ import { trace } from '@opentelemetry/api'; import type { BasicTracerProvider } from '@opentelemetry/sdk-trace-base'; +import { getRootSpan } from '@sentry/core'; -import { getActiveSpan, getRootSpan } from '../../src/utils/getActiveSpan'; +import { getActiveSpan } from '../../src/utils/getActiveSpan'; import { TestClient, getDefaultTestClientOptions } from '../helpers/TestClient'; import { setupOtel } from '../helpers/initOtel'; import { cleanupOtel } from '../helpers/mockSdkInit';