From 1750b8973e49e182b5a74ca15deb463bb9054695 Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Fri, 2 Oct 2026 12:59:37 +0200 Subject: [PATCH 1/2] ref(core): Use SENTRY_OP convention constant Co-Authored-By: GPT-6 --- .../public-api/startSpan/streamed/test.ts | 12 +-- .../test.ts | 6 +- .../long-animation-frame-enabled/test.ts | 7 +- .../test.ts | 6 +- .../test.ts | 7 +- .../navigation-aborting-pageload/test.ts | 12 +-- .../multiple-redirects/test.ts | 10 +-- .../pageload-redirect/test.ts | 10 +-- .../navigation-streamed/test.ts | 14 ++-- .../navigation/test.ts | 16 ++-- .../pageload-streamed/test.ts | 10 +-- .../pageload-update-txn-name/test.ts | 10 +-- .../pageload-updateSpanName/test.ts | 10 +-- .../pageload/test.ts | 10 +-- .../reportPageLoaded-streamed/default/test.ts | 10 +-- .../finalTimeout/test.ts | 10 +-- .../navigation/test.ts | 10 +-- .../reportPageLoaded/default/test.ts | 10 +-- .../reportPageLoaded/finalTimeout/test.ts | 10 +-- .../reportPageLoaded/navigation/test.ts | 10 +-- .../suites/tracing/interactions/spans/test.ts | 7 +- .../metrics/pageload-resource-spans/test.ts | 7 +- .../suites/public-api/startSpan/test.ts | 14 ++-- .../suites/tracing/d1/test.ts | 5 +- .../suites/tracing/durableobject-sql/test.ts | 5 +- .../tracing/durableobject-sync-kv/test.ts | 5 +- .../suites/tracing/scheduled/test.ts | 10 +-- .../suites/tracing/workflow/test.ts | 10 +-- .../angular-19/tests/performance.test.ts | 13 ++-- .../nuxt-4-static/tests/cache.test.ts | 12 +-- .../tests/storage-aliases.test.ts | 12 +-- .../nuxt-4-static/tests/storage.test.ts | 18 ++--- .../tests/tracing.server.test.ts | 4 +- .../tests/performance.server.test.ts | 6 +- .../suites/fs-instrumentation/test.ts | 45 ++++++------ .../startSpan/basic-usage-streamed/test.ts | 12 +-- .../transaction-route/scenario.ts | 4 +- .../transaction-url/scenario.ts | 4 +- .../suites/tracing/groq/test.ts | 7 +- .../ignoreSpans-streamed/children/test.ts | 6 +- .../suites/tracing/langgraph/test.ts | 21 +++--- .../suites/tracing/mistral/test.ts | 9 ++- .../suites/tracing/mysql/test.ts | 7 +- .../tracing/openai/openai-tool-calls/test.ts | 19 ++--- .../suites/tracing/openai/test.ts | 73 ++++++++++--------- .../suites/tracing/openai/v6/test.ts | 43 +++++------ .../suites/tracing/openai/v7/test.ts | 9 ++- .../suites/tracing/postgres-streamed/test.ts | 5 +- .../suites/tracing/redis/test.ts | 8 +- .../suites/tracing/together-ai/test.ts | 7 +- .../vercelai/span-streaming-v4/test.ts | 33 +++++---- .../vercelai/span-streaming-v6/test.ts | 33 +++++---- packages/astro/src/index.server.ts | 1 + packages/aws-serverless/src/index.ts | 1 + .../browser-utils/src/web-vitals/emitSpan.ts | 14 +--- .../browser-utils/src/web-vitals/softNavs.ts | 6 +- .../browser-utils/src/web-vitals/spans.ts | 7 +- .../test/performance/browserMetrics.test.ts | 14 ++-- packages/browser/src/exports.ts | 1 + .../test/integrations/httpcontext.test.ts | 23 +++--- .../tracing/browserTracingIntegration.test.ts | 25 +++---- packages/bun/src/index.ts | 1 + .../test/integrations/bunHttpServer.test.ts | 8 +- packages/cloudflare/src/index.ts | 1 + packages/core/src/semanticAttributes.ts | 1 + packages/core/src/tracing/sentrySpan.ts | 15 ++-- packages/core/src/tracing/trace.ts | 8 +- packages/core/src/utils/spanUtils.ts | 10 +-- .../lib/tracing/spans/captureSpan.test.ts | 10 +-- packages/core/test/lib/tracing/trace.test.ts | 11 ++- .../core/test/lib/utils/spanUtils.test.ts | 17 ++--- packages/deno/src/index.ts | 1 + packages/effect/test/tracer.test.ts | 11 +-- packages/elysia/src/index.ts | 1 + packages/elysia/src/withElysia.ts | 5 +- packages/google-cloud-serverless/src/index.ts | 1 + packages/nestjs/src/decorators.ts | 6 +- packages/nestjs/test/decorators.test.ts | 10 +-- .../src/common/utils/liveRootSpanAdapter.ts | 6 +- packages/nextjs/src/edge/index.ts | 3 +- .../test/common/liveRootSpanAdapter.test.ts | 6 +- .../enhanceHandleRequestRootSpan.test.ts | 10 +-- packages/node/src/index.ts | 1 + .../fs/vendored/instrumentation.ts | 5 +- .../hooks/updateRouteBeforeResponse.test.ts | 6 +- .../hooks/wrapMiddlewareHandler.test.ts | 11 +-- packages/opentelemetry/test/trace.test.ts | 7 +- packages/react/src/reactrouter.tsx | 3 +- packages/react/test/react-router.test.tsx | 14 +--- .../test/reactrouter-cross-usage.test.tsx | 24 +++--- .../reactrouter-descendant-routes.test.tsx | 20 ++--- packages/react/test/reactrouterv3.test.tsx | 20 ++--- packages/react/test/reactrouterv4.test.tsx | 28 +++---- packages/react/test/reactrouterv5.test.tsx | 28 +++---- packages/react/test/reactrouterv6.test.tsx | 52 ++++++------- packages/remix/src/cloudflare/index.ts | 1 + packages/remix/src/server/index.ts | 1 + packages/server-utils/src/ai/mastra/index.ts | 5 +- .../graphql/graphql-dc-subscriber.ts | 16 ++-- .../src/integrations/graphql/resolvers.ts | 4 +- .../src/integrations/graphql/spans.ts | 10 ++- .../src/integrations/redis/redis-cache.ts | 14 +--- .../test/ai/lib/tracing/workers-ai.test.ts | 6 +- packages/solid/src/solidrouter.ts | 3 +- packages/solid/test/solidrouter.test.tsx | 18 ++--- packages/solidstart/src/server/index.ts | 1 + .../test/client/solidrouter.test.tsx | 18 ++--- .../withServerActionInstrumentation.test.ts | 9 +-- packages/sveltekit/src/server/index.ts | 1 + packages/sveltekit/src/worker/index.ts | 1 + packages/sveltekit/test/client/load.test.ts | 12 +-- .../integrations/svelteKitSpans.test.ts | 45 ++++++------ .../sveltekit/test/server-common/load.test.ts | 18 ++--- .../test/server-common/serverRoute.test.ts | 15 ++-- packages/vercel-edge/src/index.ts | 1 + 115 files changed, 596 insertions(+), 729 deletions(-) diff --git a/dev-packages/browser-integration-tests/suites/public-api/startSpan/streamed/test.ts b/dev-packages/browser-integration-tests/suites/public-api/startSpan/streamed/test.ts index 289a5716746f..e10826f486a9 100644 --- a/dev-packages/browser-integration-tests/suites/public-api/startSpan/streamed/test.ts +++ b/dev-packages/browser-integration-tests/suites/public-api/startSpan/streamed/test.ts @@ -1,10 +1,5 @@ import { expect } from '@playwright/test'; -import { - SDK_VERSION, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/core'; +import { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/core'; import { sentryTest } from '../../../../utils/fixtures'; import { shouldSkipTracingTest } from '../../../../utils/helpers'; import { waitForStreamedSpanEnvelope } from '../../../../utils/spanUtils'; @@ -19,6 +14,7 @@ import { SENTRY_STATUS_MESSAGE, SENTRY_ENVIRONMENT, SENTRY_SDK_INTEGRATIONS, + SENTRY_OP, } from '@sentry/conventions/attributes'; sentryTest( @@ -77,7 +73,7 @@ sentryTest( { attributes: { 'sentry.is_localhost': { value: false, type: 'boolean' }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'test-child', }, @@ -240,7 +236,7 @@ sentryTest( type: 'string', value: expect.any(String), }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'test', }, diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-animation-frame-enabled-streamed/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-animation-frame-enabled-streamed/test.ts index 6f7116bd33a7..5f15f4354416 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-animation-frame-enabled-streamed/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-animation-frame-enabled-streamed/test.ts @@ -1,7 +1,7 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import type { Route } from '@playwright/test'; import { expect } from '@playwright/test'; import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/browser'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP } from '@sentry/core'; import { sentryTest } from '../../../../utils/fixtures'; import { shouldSkipTracingTest } from '../../../../utils/helpers'; import { getSpanOp, waitForStreamedSpans } from '../../../../utils/spanUtils'; @@ -45,7 +45,7 @@ sentryTest( value: 'https://sentry-test-site.example/path/to/script.js', }, 'browser.script.invoker_type': { type: 'string', value: 'classic-script' }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'ui.long_animation_frame' }, + [SENTRY_OP]: { type: 'string', value: 'ui.long_animation_frame' }, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.ui.browser.metrics' }, }), }), @@ -94,7 +94,7 @@ sentryTest('captures long animation frame span for event listener.', async ({ br 'browser.script.invoker': { type: 'string', value: 'BUTTON#clickme.onclick' }, 'browser.script.invoker_type': { type: 'string', value: 'event-listener' }, 'code.file.path': { type: 'string', value: 'https://sentry-test-site.example/path/to/script.js' }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'ui.long_animation_frame' }, + [SENTRY_OP]: { type: 'string', value: 'ui.long_animation_frame' }, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.ui.browser.metrics' }, }), }), diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-animation-frame-enabled/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-animation-frame-enabled/test.ts index 17db0254533e..a6ed74270ebb 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-animation-frame-enabled/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-animation-frame-enabled/test.ts @@ -1,6 +1,7 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import type { Route } from '@playwright/test'; import { expect } from '@playwright/test'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/browser'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/browser'; import type { Event } from '@sentry/core'; import { sentryTest } from '../../../../utils/fixtures'; import { getFirstSentryEnvelopeRequest, shouldSkipTracingTest } from '../../../../utils/helpers'; @@ -44,7 +45,7 @@ sentryTest( 'browser.script.source_char_position': 0, 'browser.script.invoker': 'https://sentry-test-site.example/path/to/script.js', 'browser.script.invoker_type': 'classic-script', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.long_animation_frame', + [SENTRY_OP]: 'ui.long_animation_frame', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics', }, }), @@ -98,7 +99,7 @@ sentryTest( 'browser.script.invoker': 'BUTTON#clickme.onclick', 'browser.script.invoker_type': 'event-listener', 'code.file.path': 'https://sentry-test-site.example/path/to/script.js', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.long_animation_frame', + [SENTRY_OP]: 'ui.long_animation_frame', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics', }, }), diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-tasks-and-animation-frame-enabled-streamed/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-tasks-and-animation-frame-enabled-streamed/test.ts index d97eba7c9a0c..4a4cda50b962 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-tasks-and-animation-frame-enabled-streamed/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-tasks-and-animation-frame-enabled-streamed/test.ts @@ -1,7 +1,7 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import type { Route } from '@playwright/test'; import { expect } from '@playwright/test'; import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/browser'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP } from '@sentry/core'; import { sentryTest } from '../../../../utils/fixtures'; import { shouldSkipTracingTest } from '../../../../utils/helpers'; import { getSpanOp, waitForStreamedSpans } from '../../../../utils/spanUtils'; @@ -47,7 +47,7 @@ sentryTest( value: 'https://sentry-test-site.example/path/to/script.js', }, 'browser.script.invoker_type': { type: 'string', value: 'classic-script' }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'ui.long_animation_frame' }, + [SENTRY_OP]: { type: 'string', value: 'ui.long_animation_frame' }, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.ui.browser.metrics' }, }), }), @@ -96,7 +96,7 @@ sentryTest('captures long animation frame span for event listener.', async ({ br 'browser.script.invoker': { type: 'string', value: 'BUTTON#clickme.onclick' }, 'browser.script.invoker_type': { type: 'string', value: 'event-listener' }, 'code.file.path': { type: 'string', value: 'https://sentry-test-site.example/path/to/script.js' }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'ui.long_animation_frame' }, + [SENTRY_OP]: { type: 'string', value: 'ui.long_animation_frame' }, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.ui.browser.metrics' }, }), }), diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-tasks-and-animation-frame-enabled/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-tasks-and-animation-frame-enabled/test.ts index 4e14a8add77d..5efc2258f48f 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-tasks-and-animation-frame-enabled/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/long-tasks-and-animation-frame-enabled/test.ts @@ -1,6 +1,7 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import type { Route } from '@playwright/test'; import { expect } from '@playwright/test'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/browser'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/browser'; import type { Event } from '@sentry/core'; import { sentryTest } from '../../../../utils/fixtures'; import { getFirstSentryEnvelopeRequest, shouldSkipTracingTest } from '../../../../utils/helpers'; @@ -46,7 +47,7 @@ sentryTest( 'browser.script.source_char_position': 0, 'browser.script.invoker': 'https://sentry-test-site.example/path/to/script.js', 'browser.script.invoker_type': 'classic-script', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.long_animation_frame', + [SENTRY_OP]: 'ui.long_animation_frame', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics', }, }), @@ -100,7 +101,7 @@ sentryTest( 'browser.script.invoker': 'BUTTON#clickme.onclick', 'browser.script.invoker_type': 'event-listener', 'code.file.path': 'https://sentry-test-site.example/path/to/script.js', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.long_animation_frame', + [SENTRY_OP]: 'ui.long_animation_frame', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics', }, }), diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-aborting-pageload/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-aborting-pageload/test.ts index 4791b010015b..f58116dd9c32 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-aborting-pageload/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-aborting-pageload/test.ts @@ -1,10 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect } from '@playwright/test'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/core'; import { sentryTest } from '../../../../utils/fixtures'; import { envelopeRequestParser, shouldSkipTracingTest, waitForTransactionRequest } from '../../../../utils/helpers'; @@ -47,14 +43,14 @@ sentryTest( [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', ['sentry.idle_span_finish_reason']: 'cancelled', }); expect(navigationRequest.contexts?.trace?.data).toMatchObject({ [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', ['sentry.idle_span_finish_reason']: 'idleTimeout', }); expect(pageloadRequest.request).toEqual({ diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-redirect/multiple-redirects/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-redirect/multiple-redirects/test.ts index 8b512db6a4f9..9fd5b0cdc35f 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-redirect/multiple-redirects/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-redirect/multiple-redirects/test.ts @@ -1,12 +1,8 @@ import { expect } from '@playwright/test'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/core'; import { sentryTest } from '../../../../../utils/fixtures'; import { envelopeRequestParser, shouldSkipTracingTest, waitForTransactionRequest } from '../../../../../utils/helpers'; -import { SENTRY_SEGMENT_NAME_SOURCE, URL_FULL, URL_PATH } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, URL_FULL, URL_PATH, SENTRY_OP } from '@sentry/conventions/attributes'; sentryTest( 'creates a pageload and navigation root spans each with multiple navigation.redirect childspans', @@ -34,7 +30,7 @@ sentryTest( [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', ['sentry.idle_span_finish_reason']: 'cancelled', }); diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-redirect/pageload-redirect/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-redirect/pageload-redirect/test.ts index b0d8a061fec8..0735f69f127c 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-redirect/pageload-redirect/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-redirect/pageload-redirect/test.ts @@ -1,12 +1,8 @@ import { expect } from '@playwright/test'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/core'; import { sentryTest } from '../../../../../utils/fixtures'; import { envelopeRequestParser, shouldSkipTracingTest, waitForTransactionRequest } from '../../../../../utils/helpers'; -import { SENTRY_SEGMENT_NAME_SOURCE, URL_FULL, URL_PATH } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, URL_FULL, URL_PATH, SENTRY_OP } from '@sentry/conventions/attributes'; sentryTest('creates a pageload root span with navigation.redirect childspan', async ({ getLocalTestUrl, page }) => { if (shouldSkipTracingTest()) { @@ -27,7 +23,7 @@ sentryTest('creates a pageload root span with navigation.redirect childspan', as [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', ['sentry.idle_span_finish_reason']: 'idleTimeout', }); diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-streamed/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-streamed/test.ts index 5d298cb1e9cd..b2281d6ddfa4 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-streamed/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation-streamed/test.ts @@ -1,10 +1,5 @@ import { expect } from '@playwright/test'; -import { - SDK_VERSION, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/core'; +import { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/core'; import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_TRACE_LIFECYCLE, @@ -13,6 +8,7 @@ import { USER_AGENT_ORIGINAL, SENTRY_ENVIRONMENT, SENTRY_SDK_INTEGRATIONS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { sentryTest } from '../../../../utils/fixtures'; import { shouldSkipTracingTest } from '../../../../utils/helpers'; @@ -124,7 +120,7 @@ sentryTest('starts a streamed navigation span on page navigation', async ({ brow type: 'string', value: 'idleTimeout', }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'navigation', }, @@ -236,7 +232,7 @@ sentryTest('handles pushState with full URL', async ({ getLocalTestUrl, page }) type: 'string', value: 'url', }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'navigation', }, @@ -265,7 +261,7 @@ sentryTest('handles pushState with full URL', async ({ getLocalTestUrl, page }) type: 'string', value: 'url', }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'navigation', }, diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation/test.ts index 30a457268d45..a7cf07af6838 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/navigation/test.ts @@ -1,11 +1,7 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect } from '@playwright/test'; import type { Event } from '@sentry/core'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/core'; import { sentryTest } from '../../../../utils/fixtures'; import { envelopeRequestParser, @@ -44,14 +40,14 @@ sentryTest('should create a navigation transaction on page navigation', async ({ [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', ['sentry.idle_span_finish_reason']: 'idleTimeout', }); expect(navigationRequest.contexts?.trace?.data).toMatchObject({ [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', ['sentry.idle_span_finish_reason']: 'idleTimeout', }); expect(pageloadRequest.request).toEqual({ @@ -122,7 +118,7 @@ sentryTest('should handle pushState with full URL', async ({ getLocalTestUrl, pa [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', ['sentry.idle_span_finish_reason']: 'idleTimeout', }); expect(navigationRequest.request).toEqual({ @@ -142,7 +138,7 @@ sentryTest('should handle pushState with full URL', async ({ getLocalTestUrl, pa [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', ['sentry.idle_span_finish_reason']: 'idleTimeout', }); expect(navigationRequest2.request).toEqual({ diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload-streamed/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload-streamed/test.ts index 1fdaaadce2bd..e7127322f2a8 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload-streamed/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload-streamed/test.ts @@ -1,10 +1,5 @@ import { expect } from '@playwright/test'; -import { - SDK_VERSION, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/core'; +import { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/core'; import { BROWSER_NAVIGATION_TYPE, SENTRY_SEGMENT_NAME_SOURCE, @@ -18,6 +13,7 @@ import { USER_AGENT_ORIGINAL, SENTRY_ENVIRONMENT, SENTRY_SDK_INTEGRATIONS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { sentryTest } from '../../../../utils/fixtures'; import { shouldSkipTracingTest } from '../../../../utils/helpers'; @@ -136,7 +132,7 @@ sentryTest( type: 'string', value: 'idleTimeout', }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'pageload', }, diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload-update-txn-name/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload-update-txn-name/test.ts index 401b30e2a5fb..5bb181132068 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload-update-txn-name/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload-update-txn-name/test.ts @@ -1,10 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect } from '@playwright/test'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/browser'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/browser'; import { type Event, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME } from '@sentry/core'; import { sentryTest } from '../../../../utils/fixtures'; import { getFirstSentryEnvelopeRequest, shouldSkipTracingTest } from '../../../../utils/helpers'; @@ -30,7 +26,7 @@ sentryTest( [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'custom', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', }); expect(traceContextData![SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]).toBeUndefined(); diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload-updateSpanName/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload-updateSpanName/test.ts index f6c3282e30c8..3a3952d1637b 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload-updateSpanName/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload-updateSpanName/test.ts @@ -1,10 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect } from '@playwright/test'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/browser'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/browser'; import { type Event, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME } from '@sentry/core'; import { sentryTest } from '../../../../utils/fixtures'; import { getFirstSentryEnvelopeRequest, shouldSkipTracingTest } from '../../../../utils/helpers'; @@ -28,7 +24,7 @@ sentryTest( [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'custom', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', }); expect(traceContextData![SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]).toBeUndefined(); diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload/test.ts index bd02b4799199..b1aa7b48bb0d 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/pageload/test.ts @@ -1,10 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect } from '@playwright/test'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/browser'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/browser'; import type { Event } from '@sentry/core'; import { sentryTest } from '../../../../utils/fixtures'; import { getFirstSentryEnvelopeRequest, shouldSkipTracingTest } from '../../../../utils/helpers'; @@ -29,7 +25,7 @@ sentryTest('creates a pageload transaction with url as source', async ({ getLoca [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', ['sentry.idle_span_finish_reason']: 'idleTimeout', }); diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded-streamed/default/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded-streamed/default/test.ts index 3d3d4e69069c..b5f733ff6298 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded-streamed/default/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded-streamed/default/test.ts @@ -1,10 +1,6 @@ -import { SENTRY_IDLE_SPAN_FINISH_REASON, SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_IDLE_SPAN_FINISH_REASON, SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect } from '@playwright/test'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/browser'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/browser'; import { sentryTest } from '../../../../../utils/fixtures'; import { shouldSkipTracingTest } from '../../../../../utils/helpers'; import { getSpanOp, waitForStreamedSpan } from '../../../../../utils/spanUtils'; @@ -28,7 +24,7 @@ sentryTest( [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.pageload.browser' }, [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: expect.objectContaining({ value: 1 }), [SENTRY_SEGMENT_NAME_SOURCE]: { type: 'string', value: 'url' }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'pageload' }, + [SENTRY_OP]: { type: 'string', value: 'pageload' }, [SENTRY_IDLE_SPAN_FINISH_REASON]: { type: 'string', value: 'reportPageLoaded' }, }); diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded-streamed/finalTimeout/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded-streamed/finalTimeout/test.ts index 9983809f9947..d7da4c7c3cc6 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded-streamed/finalTimeout/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded-streamed/finalTimeout/test.ts @@ -1,10 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect } from '@playwright/test'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/browser'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/browser'; import { sentryTest } from '../../../../../utils/fixtures'; import { shouldSkipTracingTest } from '../../../../../utils/helpers'; import { getSpanOp, waitForStreamedSpan } from '../../../../../utils/spanUtils'; @@ -28,7 +24,7 @@ sentryTest( [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.pageload.browser' }, [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: expect.objectContaining({ value: 1 }), [SENTRY_SEGMENT_NAME_SOURCE]: { type: 'string', value: 'url' }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'pageload' }, + [SENTRY_OP]: { type: 'string', value: 'pageload' }, 'sentry.idle_span_finish_reason': { type: 'string', value: 'finalTimeout' }, }); diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded-streamed/navigation/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded-streamed/navigation/test.ts index e71f12c00993..b224fa51fdb3 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded-streamed/navigation/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded-streamed/navigation/test.ts @@ -1,10 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect } from '@playwright/test'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/browser'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/browser'; import { sentryTest } from '../../../../../utils/fixtures'; import { shouldSkipTracingTest } from '../../../../../utils/helpers'; import { getSpanOp, waitForStreamedSpan } from '../../../../../utils/spanUtils'; @@ -28,7 +24,7 @@ sentryTest( [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.pageload.browser' }, [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: expect.objectContaining({ value: 1 }), [SENTRY_SEGMENT_NAME_SOURCE]: { type: 'string', value: 'url' }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'pageload' }, + [SENTRY_OP]: { type: 'string', value: 'pageload' }, 'sentry.idle_span_finish_reason': { type: 'string', value: 'cancelled' }, }); diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded/default/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded/default/test.ts index 9c8c0b48fb69..8448aad75624 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded/default/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded/default/test.ts @@ -1,10 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect } from '@playwright/test'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/browser'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/browser'; import { sentryTest } from '../../../../../utils/fixtures'; import { envelopeRequestParser, shouldSkipTracingTest, waitForTransactionRequest } from '../../../../../utils/helpers'; @@ -30,7 +26,7 @@ sentryTest( [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', ['sentry.idle_span_finish_reason']: 'reportPageLoaded', }); diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded/finalTimeout/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded/finalTimeout/test.ts index 90deb74d0f2b..0bcc574b5933 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded/finalTimeout/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded/finalTimeout/test.ts @@ -1,10 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect } from '@playwright/test'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/browser'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/browser'; import { sentryTest } from '../../../../../utils/fixtures'; import { envelopeRequestParser, shouldSkipTracingTest, waitForTransactionRequest } from '../../../../../utils/helpers'; @@ -30,7 +26,7 @@ sentryTest( [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', ['sentry.idle_span_finish_reason']: 'finalTimeout', }); diff --git a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded/navigation/test.ts b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded/navigation/test.ts index 6b0bf8ceb8b8..c3de6c158f9c 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded/navigation/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/reportPageLoaded/navigation/test.ts @@ -1,10 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect } from '@playwright/test'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/browser'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/browser'; import { sentryTest } from '../../../../../utils/fixtures'; import { envelopeRequestParser, shouldSkipTracingTest, waitForTransactionRequest } from '../../../../../utils/helpers'; @@ -30,7 +26,7 @@ sentryTest( [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', ['sentry.idle_span_finish_reason']: 'cancelled', }); diff --git a/dev-packages/browser-integration-tests/suites/tracing/interactions/spans/test.ts b/dev-packages/browser-integration-tests/suites/tracing/interactions/spans/test.ts index 2a6123aa2aa9..15cf43e68b5e 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/interactions/spans/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/interactions/spans/test.ts @@ -1,5 +1,5 @@ import { expect } from '@playwright/test'; -import { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { SENTRY_IDLE_SPAN_FINISH_REASON, SENTRY_SEGMENT_ID, @@ -12,6 +12,7 @@ import { URL_PATH, SENTRY_ENVIRONMENT, SENTRY_SDK_INTEGRATIONS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { sentryTest } from '../../../../utils/fixtures'; import { shouldSkipTracingTest } from '../../../../utils/helpers'; @@ -76,7 +77,7 @@ sentryTest('captures streamed interaction span tree. @firefox', async ({ browser type: 'string', value: 'idleTimeout', }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'ui.action.click', }, @@ -133,7 +134,7 @@ sentryTest('captures streamed interaction span tree. @firefox', async ({ browser type: 'string', value: 'stream', }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'ui.interaction.click', }, diff --git a/dev-packages/browser-integration-tests/suites/tracing/metrics/pageload-resource-spans/test.ts b/dev-packages/browser-integration-tests/suites/tracing/metrics/pageload-resource-spans/test.ts index 12e3861db87f..3b8f662f0003 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/metrics/pageload-resource-spans/test.ts +++ b/dev-packages/browser-integration-tests/suites/tracing/metrics/pageload-resource-spans/test.ts @@ -1,6 +1,7 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import type { Route } from '@playwright/test'; import { expect } from '@playwright/test'; -import { type Event, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { type Event, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { sentryTest } from '../../../../utils/fixtures'; import { getFirstSentryEnvelopeRequest, shouldSkipTracingTest } from '../../../../utils/helpers'; @@ -95,7 +96,7 @@ sentryTest('adds resource spans to pageload transaction', async ({ getLocalTestU 'http.request.time_to_first_byte': expect.any(Number), 'network.protocol.name': '', 'network.protocol.version': 'unknown', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'resource.img', + [SENTRY_OP]: 'resource.img', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics', 'server.address': 'sentry-test-site.example', 'url.domain': 'sentry-test-site.example', @@ -148,7 +149,7 @@ sentryTest('adds resource spans to pageload transaction', async ({ getLocalTestU 'http.request.time_to_first_byte': expect.any(Number), 'network.protocol.name': '', 'network.protocol.version': 'unknown', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'resource.link', + [SENTRY_OP]: 'resource.link', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics', 'server.address': 'sentry-test-site.example', 'url.domain': 'sentry-test-site.example', diff --git a/dev-packages/cloudflare-integration-tests/suites/public-api/startSpan/test.ts b/dev-packages/cloudflare-integration-tests/suites/public-api/startSpan/test.ts index f5a787bbc91e..00d89567b577 100644 --- a/dev-packages/cloudflare-integration-tests/suites/public-api/startSpan/test.ts +++ b/dev-packages/cloudflare-integration-tests/suites/public-api/startSpan/test.ts @@ -1,9 +1,4 @@ -import { - SDK_VERSION, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/core'; +import { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/core'; import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_SDK_NAME, @@ -14,6 +9,7 @@ import { SENTRY_ENVIRONMENT, SENTRY_RELEASE, SENTRY_SDK_INTEGRATIONS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { expect, it } from 'vitest'; import { createRunner } from '../../../runner'; @@ -80,7 +76,7 @@ it('sends a streamed span envelope with correct spans for a manually started spa attributes: { 'sentry.is_localhost': { value: true, type: 'boolean' }, [SENTRY_TRACE_LIFECYCLE]: { type: 'string', value: 'stream' }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'test-child', }, @@ -167,7 +163,7 @@ it('sends a streamed span envelope with correct spans for a manually started spa attributes: { 'sentry.is_localhost': { value: true, type: 'boolean' }, [SENTRY_TRACE_LIFECYCLE]: { type: 'string', value: 'stream' }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'test' }, + [SENTRY_OP]: { type: 'string', value: 'test' }, [SENTRY_SDK_NAME]: { type: 'string', value: CLOUDFLARE_SDK }, [SENTRY_SDK_VERSION]: { type: 'string', value: SDK_VERSION }, [SENTRY_SEGMENT_ID]: { type: 'string', value: segmentSpanId }, @@ -200,7 +196,7 @@ it('sends a streamed span envelope with correct spans for a manually started spa [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.http.cloudflare' }, [SENTRY_SEGMENT_ID]: { type: 'string', value: segmentSpanId }, [SENTRY_SEGMENT_NAME]: { type: 'string', value: segmentName }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'http.server' }, + [SENTRY_OP]: { type: 'string', value: 'http.server' }, [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: { type: 'integer', value: 1 }, [SENTRY_SEGMENT_NAME_SOURCE]: { type: 'string', value: 'route' }, [SENTRY_ENVIRONMENT]: { type: 'string', value: 'production' }, diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/d1/test.ts b/dev-packages/cloudflare-integration-tests/suites/tracing/d1/test.ts index 2cd081b06b51..13a6474f8377 100644 --- a/dev-packages/cloudflare-integration-tests/suites/tracing/d1/test.ts +++ b/dev-packages/cloudflare-integration-tests/suites/tracing/d1/test.ts @@ -1,6 +1,6 @@ import { expect, it } from 'vitest'; import type { Envelope, SerializedStreamedSpan } from '@sentry/core'; -import { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { SENTRY_SDK_NAME, SENTRY_SDK_VERSION, @@ -8,6 +8,7 @@ import { SENTRY_SEGMENT_NAME, SENTRY_TRACE_LIFECYCLE, SENTRY_ENVIRONMENT, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { createRunner } from '../../../runner'; import { getSpanOp, getSpansFromEnvelope } from '../../../spanUtils'; @@ -35,7 +36,7 @@ function commonAttributes(segmentSpan: SerializedStreamedSpan): SerializedStream [SENTRY_SEGMENT_ID]: { type: 'string', value: segmentSpan.span_id }, [SENTRY_SEGMENT_NAME]: { type: 'string', value: segmentSpan.name }, [SENTRY_ENVIRONMENT]: { type: 'string', value: 'production' }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'db.query' }, + [SENTRY_OP]: { type: 'string', value: 'db.query' }, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.db.cloudflare.d1' }, 'db.system.name': { type: 'string', value: 'cloudflare-d1' }, }; diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/durableobject-sql/test.ts b/dev-packages/cloudflare-integration-tests/suites/tracing/durableobject-sql/test.ts index e9feaa6215f4..3b0fbb839714 100644 --- a/dev-packages/cloudflare-integration-tests/suites/tracing/durableobject-sql/test.ts +++ b/dev-packages/cloudflare-integration-tests/suites/tracing/durableobject-sql/test.ts @@ -1,5 +1,6 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import type { Envelope } from '@sentry/core'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { expect, it } from 'vitest'; import { createRunner } from '../../../runner'; import { getSpansFromEnvelope } from '../../../spanUtils'; @@ -32,7 +33,7 @@ it('instruments SQL exec operations on Durable Object storage', async ({ signal expect.objectContaining({ name: 'CREATE TABLE users', attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'db.query' }, + [SENTRY_OP]: { type: 'string', value: 'db.query' }, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.db.cloudflare.durable_object.sql' }, 'db.system.name': { type: 'string', value: 'cloudflare-durable-object-sql' }, 'db.operation.name': { type: 'string', value: 'exec' }, diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/durableobject-sync-kv/test.ts b/dev-packages/cloudflare-integration-tests/suites/tracing/durableobject-sync-kv/test.ts index 1051890b8f94..113d35d64cf8 100644 --- a/dev-packages/cloudflare-integration-tests/suites/tracing/durableobject-sync-kv/test.ts +++ b/dev-packages/cloudflare-integration-tests/suites/tracing/durableobject-sync-kv/test.ts @@ -1,6 +1,7 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import type { Envelope } from '@sentry/core'; import { expect, it } from 'vitest'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { createRunner } from '../../../runner'; import { getSpanOp, getSpansFromEnvelope } from '../../../spanUtils'; @@ -29,7 +30,7 @@ it('instruments sync KV operations on Durable Object storage', async ({ signal } expect.objectContaining({ name: 'durable_object_storage_kv_put', attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'db' }, + [SENTRY_OP]: { type: 'string', value: 'db' }, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.db.cloudflare.durable_object' }, 'db.system.name': { type: 'string', value: 'cloudflare-durable-object-sql' }, 'db.operation.name': { type: 'string', value: 'put' }, diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/scheduled/test.ts b/dev-packages/cloudflare-integration-tests/suites/tracing/scheduled/test.ts index 6cb7888217b0..637dddd01aa3 100644 --- a/dev-packages/cloudflare-integration-tests/suites/tracing/scheduled/test.ts +++ b/dev-packages/cloudflare-integration-tests/suites/tracing/scheduled/test.ts @@ -1,11 +1,7 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect, it } from 'vitest'; import type { Event } from '@sentry/core'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/core'; import { createRunner } from '../../../runner'; import { getSpansFromEnvelope } from '../../../spanUtils'; @@ -24,7 +20,7 @@ it('Scheduled handler creates a segment span with correct attributes', async ({ is_segment: true, status: 'ok', attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'function' }, + [SENTRY_OP]: { type: 'string', value: 'function' }, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.faas.cloudflare.scheduled' }, [SENTRY_SEGMENT_NAME_SOURCE]: { type: 'string', value: 'task' }, [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: { type: 'integer', value: 1 }, diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/workflow/test.ts b/dev-packages/cloudflare-integration-tests/suites/tracing/workflow/test.ts index f54038aaa714..5934cf064a1e 100644 --- a/dev-packages/cloudflare-integration-tests/suites/tracing/workflow/test.ts +++ b/dev-packages/cloudflare-integration-tests/suites/tracing/workflow/test.ts @@ -1,10 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { expect, it } from 'vitest'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/core'; import { createRunner } from '../../../runner'; it('Workflow steps create segment spans with correct attributes', async ({ signal }) => { @@ -28,7 +24,7 @@ it('Workflow steps create segment spans with correct attributes', async ({ signa is_segment: true, status: 'ok', attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'function' }, + [SENTRY_OP]: { type: 'string', value: 'function' }, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto.faas.cloudflare.workflow' }, [SENTRY_SEGMENT_NAME_SOURCE]: { type: 'string', value: 'task' }, [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: { type: 'integer', value: 1 }, diff --git a/dev-packages/e2e-tests/test-applications/angular-19/tests/performance.test.ts b/dev-packages/e2e-tests/test-applications/angular-19/tests/performance.test.ts index 2abfce92b545..d6e4e0215ede 100644 --- a/dev-packages/e2e-tests/test-applications/angular-19/tests/performance.test.ts +++ b/dev-packages/e2e-tests/test-applications/angular-19/tests/performance.test.ts @@ -1,7 +1,6 @@ import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; -// Cannot use @sentry/angular here due to build stuff -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; // The `angular-19 (streamed)` variant builds the app with `traceLifecycle: 'stream'`, which emits // spans instead of transactions. See `streamed-performance.test.ts` for that variant. @@ -265,7 +264,7 @@ test.describe('TraceDirective', () => { expect.arrayContaining([ expect.objectContaining({ data: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.mount', + ['sentry.op']: 'ui.mount', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.angular.trace_directive', 'ui.component_name': 'sample-component', }, @@ -277,7 +276,7 @@ test.describe('TraceDirective', () => { }), expect.objectContaining({ data: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.mount', + ['sentry.op']: 'ui.mount', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.angular.trace_directive', 'ui.component_name': 'app-sample-component', }, @@ -311,7 +310,7 @@ test.describe('TraceClass Decorator', () => { expect(classDecoratorSpan).toEqual( expect.objectContaining({ data: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.mount', + ['sentry.op']: 'ui.mount', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.angular.trace_class_decorator', 'ui.component_name': 'ComponentTrackingComponent', }, @@ -344,7 +343,7 @@ test.describe('TraceMethod Decorator', () => { expect(ngInitSpan).toEqual( expect.objectContaining({ data: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + ['sentry.op']: 'function', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.angular.trace_method_decorator', 'code.function.name': 'ngOnInit', }, @@ -375,7 +374,7 @@ test.describe('TraceMethod Decorator', () => { expect(ngAfterViewInitSpan).toEqual( expect.objectContaining({ data: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + ['sentry.op']: 'function', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.angular.trace_method_decorator', 'code.function.name': 'ngAfterViewInit', }, diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/cache.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/cache.test.ts index d8ad57bca377..4faf24382636 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/cache.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/cache.test.ts @@ -1,6 +1,6 @@ import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; test.describe('Cache Instrumentation', () => { const SEMANTIC_ATTRIBUTE_CACHE_KEY = 'cache.key'; @@ -42,7 +42,7 @@ test.describe('Cache Instrumentation', () => { ); if (cacheMissSpan) { expect(cacheMissSpan.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.get', + ['sentry.op']: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_HIT]: false, 'db.operation.name': 'getItem', @@ -59,7 +59,7 @@ test.describe('Cache Instrumentation', () => { ); if (cacheHitSpan) { expect(cacheHitSpan.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.get', + ['sentry.op']: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_HIT]: true, 'db.operation.name': 'getItem', @@ -78,7 +78,7 @@ test.describe('Cache Instrumentation', () => { ); if (cacheSetSpan) { expect(cacheSetSpan.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.put', + ['sentry.op']: 'cache.put', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', 'db.operation.name': 'setItem', 'db.collection.name': expect.stringMatching(/^(cache)?$/), @@ -133,10 +133,10 @@ test.describe('Cache Instrumentation', () => { expect(allCacheSpans?.length).toBeGreaterThan(0); // Get all getItem operations - const allGetItemSpans = allCacheSpans?.filter(span => span.data?.[SEMANTIC_ATTRIBUTE_SENTRY_OP] === 'cache.get'); + const allGetItemSpans = allCacheSpans?.filter(span => span.data?.['sentry.op'] === 'cache.get'); // Get all setItem operations - const allSetItemSpans = allCacheSpans?.filter(span => span.data?.[SEMANTIC_ATTRIBUTE_SENTRY_OP] === 'cache.put'); + const allSetItemSpans = allCacheSpans?.filter(span => span.data?.['sentry.op'] === 'cache.put'); // We should have both get and set operations expect(allGetItemSpans?.length).toBeGreaterThan(0); diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage-aliases.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage-aliases.test.ts index ee1950050482..c1e2a0d9b33c 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage-aliases.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage-aliases.test.ts @@ -1,6 +1,6 @@ import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; test.describe('Storage Instrumentation - Aliases', () => { const prefixKey = (key: string) => `test-storage:${key}`; @@ -28,7 +28,7 @@ test.describe('Storage Instrumentation - Aliases', () => { const setSpan = setSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('alias:user')); expect(setSpan).toBeDefined(); expect(setSpan?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.put', + ['sentry.op']: 'cache.put', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('alias:user'), 'db.operation.name': 'setItem', @@ -43,7 +43,7 @@ test.describe('Storage Instrumentation - Aliases', () => { const getSpan = getSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('alias:user')); expect(getSpan).toBeDefined(); expect(getSpan?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.get', + ['sentry.op']: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('alias:user'), [SEMANTIC_ATTRIBUTE_CACHE_HIT]: true, @@ -59,7 +59,7 @@ test.describe('Storage Instrumentation - Aliases', () => { const hasSpan = hasSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('alias:user')); expect(hasSpan).toBeDefined(); expect(hasSpan?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.get', + ['sentry.op']: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('alias:user'), [SEMANTIC_ATTRIBUTE_CACHE_HIT]: true, @@ -75,7 +75,7 @@ test.describe('Storage Instrumentation - Aliases', () => { const delSpan = removeSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('alias:temp1')); expect(delSpan).toBeDefined(); expect(delSpan?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.remove', + ['sentry.op']: 'cache.remove', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('alias:temp1'), 'db.operation.name': 'removeItem', @@ -87,7 +87,7 @@ test.describe('Storage Instrumentation - Aliases', () => { const removeSpan = removeSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('alias:temp2')); expect(removeSpan).toBeDefined(); expect(removeSpan?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.remove', + ['sentry.op']: 'cache.remove', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('alias:temp2'), 'db.operation.name': 'removeItem', diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage.test.ts index b4138a8eb6e8..675dd5e5e759 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage.test.ts @@ -1,6 +1,6 @@ import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; test.describe('Storage Instrumentation', () => { const prefixKey = (key: string) => `test-storage:${key}`; @@ -28,7 +28,7 @@ test.describe('Storage Instrumentation', () => { const setItemSpan = setItemSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('user:123')); expect(setItemSpan).toBeDefined(); expect(setItemSpan?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.put', + ['sentry.op']: 'cache.put', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('user:123'), 'db.operation.name': 'setItem', @@ -45,7 +45,7 @@ test.describe('Storage Instrumentation', () => { ); expect(setItemRawSpan).toBeDefined(); expect(setItemRawSpan?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.put', + ['sentry.op']: 'cache.put', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('raw:data'), 'db.operation.name': 'setItemRaw', @@ -59,7 +59,7 @@ test.describe('Storage Instrumentation', () => { const hasItemSpan = hasItemSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('user:123')); expect(hasItemSpan).toBeDefined(); expect(hasItemSpan?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.get', + ['sentry.op']: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('user:123'), [SEMANTIC_ATTRIBUTE_CACHE_HIT]: true, @@ -74,7 +74,7 @@ test.describe('Storage Instrumentation', () => { const getItemSpan = getItemSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('user:123')); expect(getItemSpan).toBeDefined(); expect(getItemSpan?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.get', + ['sentry.op']: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('user:123'), [SEMANTIC_ATTRIBUTE_CACHE_HIT]: true, @@ -92,7 +92,7 @@ test.describe('Storage Instrumentation', () => { ); expect(getItemRawSpan).toBeDefined(); expect(getItemRawSpan?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.get', + ['sentry.op']: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('raw:data'), [SEMANTIC_ATTRIBUTE_CACHE_HIT]: true, @@ -105,7 +105,7 @@ test.describe('Storage Instrumentation', () => { const getKeysSpans = findSpansByMethod('getKeys'); expect(getKeysSpans.length).toBeGreaterThanOrEqual(1); expect(getKeysSpans[0]?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.get', + ['sentry.op']: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', 'db.operation.name': 'getKeys', 'db.collection.name': 'test-storage', @@ -120,7 +120,7 @@ test.describe('Storage Instrumentation', () => { ); expect(removeItemSpan).toBeDefined(); expect(removeItemSpan?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.remove', + ['sentry.op']: 'cache.remove', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('batch:1'), 'db.operation.name': 'removeItem', @@ -132,7 +132,7 @@ test.describe('Storage Instrumentation', () => { const clearSpans = findSpansByMethod('clear'); expect(clearSpans.length).toBeGreaterThanOrEqual(1); expect(clearSpans[0]?.data).toMatchObject({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'cache.remove', + ['sentry.op']: 'cache.remove', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', 'db.operation.name': 'clear', 'db.collection.name': 'test-storage', diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/tracing.server.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/tracing.server.test.ts index 2bc3c805f172..7df64f73d8c8 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/tracing.server.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/tracing.server.test.ts @@ -1,6 +1,6 @@ import { expect, test } from '@playwright/test'; import { waitForError, waitForTransaction } from '@sentry-internal/test-utils'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; test('sends a server action transaction on pageload', async ({ page }) => { const transactionPromise = waitForTransaction('nuxt-4-static', transactionEvent => { @@ -14,7 +14,7 @@ test('sends a server action transaction on pageload', async ({ page }) => { expect(transaction.contexts.trace).toEqual( expect.objectContaining({ data: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.server', + ['sentry.op']: 'http.server', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.http_server', }), }), diff --git a/dev-packages/e2e-tests/test-applications/solidstart-static/tests/performance.server.test.ts b/dev-packages/e2e-tests/test-applications/solidstart-static/tests/performance.server.test.ts index 7d15bbe3eba8..935b718dcda8 100644 --- a/dev-packages/e2e-tests/test-applications/solidstart-static/tests/performance.server.test.ts +++ b/dev-packages/e2e-tests/test-applications/solidstart-static/tests/performance.server.test.ts @@ -1,6 +1,6 @@ import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/solidstart'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/solidstart'; test('sends a server action transaction on pageload', async ({ page }) => { const transactionPromise = waitForTransaction('solidstart-static', transactionEvent => { @@ -16,7 +16,7 @@ test('sends a server action transaction on pageload', async ({ page }) => { expect.objectContaining({ description: 'getPrefecture', data: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + ['sentry.op']: 'function', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.solidstart', 'code.function.name': 'getPrefecture', }, @@ -41,7 +41,7 @@ test('sends a server action transaction on client navigation', async ({ page }) expect.objectContaining({ description: 'getPrefecture', data: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + ['sentry.op']: 'function', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.solidstart', 'code.function.name': 'getPrefecture', }, diff --git a/dev-packages/node-integration-tests/suites/fs-instrumentation/test.ts b/dev-packages/node-integration-tests/suites/fs-instrumentation/test.ts index a49710d6e560..53d79a85a603 100644 --- a/dev-packages/node-integration-tests/suites/fs-instrumentation/test.ts +++ b/dev-packages/node-integration-tests/suites/fs-instrumentation/test.ts @@ -1,4 +1,5 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/node'; +import { SENTRY_OP } from '@sentry/conventions/attributes'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/node'; import { afterAll, describe, expect } from 'vitest'; import { cleanupChildProcesses, createCjsTests } from '../../utils/runner'; @@ -26,7 +27,7 @@ describe('fs instrumentation', () => { data: { 'error.type': 'ENOENT', path_argument: expect.stringMatching('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/fixtures/some-file-that-doesnt-exist.txt'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -52,7 +53,7 @@ describe('fs instrumentation', () => { status: 'ok', data: { path_argument: expect.stringMatching('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/fixtures/some-file.txt'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -62,7 +63,7 @@ describe('fs instrumentation', () => { status: 'ok', data: { path_argument: expect.stringMatching('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/fixtures/some-file-promises.txt'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -72,7 +73,7 @@ describe('fs instrumentation', () => { status: 'ok', data: { path_argument: expect.stringMatching('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/fixtures/some-file-promisify.txt'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -99,7 +100,7 @@ describe('fs instrumentation', () => { data: { src_argument: expect.stringMatching('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/fixtures/some-file.txt'), dest_argument: expect.stringMatching('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/fixtures/some-file.txt.copy'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -110,7 +111,7 @@ describe('fs instrumentation', () => { data: { src_argument: expect.stringMatching('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/fixtures/some-file-promises.txt'), dest_argument: expect.stringMatching('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/fixtures/some-file-promises.txt.copy'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -121,7 +122,7 @@ describe('fs instrumentation', () => { data: { src_argument: expect.stringMatching('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/fixtures/some-file-promisify.txt'), dest_argument: expect.stringMatching('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/fixtures/some-file-promisify.txt.copy'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -148,7 +149,7 @@ describe('fs instrumentation', () => { data: { existing_path_argument: expect.stringMatching('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/fixtures/some-file.txt'), new_path_argument: expect.stringMatching('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/fixtures/some-file.txt.link'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -159,7 +160,7 @@ describe('fs instrumentation', () => { data: { existing_path_argument: expect.stringMatching('/some-file-promises.txt'), new_path_argument: expect.stringMatching('/some-file-promises.txt.link'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -170,7 +171,7 @@ describe('fs instrumentation', () => { data: { existing_path_argument: expect.stringMatching('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/fixtures/some-file-promisify.txt'), new_path_argument: expect.stringMatching('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/fixtures/some-file-promisify.txt.link'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -196,7 +197,7 @@ describe('fs instrumentation', () => { status: 'ok', data: { prefix_argument: expect.stringMatching('/foo-'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -206,7 +207,7 @@ describe('fs instrumentation', () => { status: 'ok', data: { prefix_argument: expect.stringMatching('/foo-'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -216,7 +217,7 @@ describe('fs instrumentation', () => { status: 'ok', data: { prefix_argument: expect.stringMatching('/foo-'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -243,7 +244,7 @@ describe('fs instrumentation', () => { data: { target_argument: expect.stringMatching('/some-file-promisify.txt'), path_argument: expect.stringMatching('/some-file-promisify.txt.symlink'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -254,7 +255,7 @@ describe('fs instrumentation', () => { data: { target_argument: expect.stringMatching('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/fixtures/some-file-promisify.txt'), path_argument: expect.stringMatching('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/fixtures/some-file-promisify.txt.symlink'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -265,7 +266,7 @@ describe('fs instrumentation', () => { data: { target_argument: expect.stringMatching('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/fixtures/some-file-promisify.txt'), path_argument: expect.stringMatching('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/fixtures/some-file-promisify.txt.symlink'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -291,7 +292,7 @@ describe('fs instrumentation', () => { status: 'ok', data: { path_argument: expect.stringMatching('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/fixtures/some-file.txt'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -301,7 +302,7 @@ describe('fs instrumentation', () => { status: 'ok', data: { path_argument: expect.stringMatching('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/fixtures/some-file-promisify.txt'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -338,7 +339,7 @@ describe('fs instrumentation', () => { // `path_argument` is recorded, but `error.type` is NOT, since `recordErrorMessagesAsSpanAttributes` is off data: { path_argument: expect.stringMatching('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/fixtures/some-file-that-doesnt-exist.txt'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -375,7 +376,7 @@ describe('fs instrumentation', () => { // `error.type` is recorded, but `path_argument` is NOT, since `recordFilePaths` is off data: { 'error.type': 'ENOENT', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), @@ -401,7 +402,7 @@ describe('fs instrumentation', () => { status: 'ok', // Neither `path_argument` nor `error.type` are recorded data: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file', + [SENTRY_OP]: 'file', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs', }, }), diff --git a/dev-packages/node-integration-tests/suites/public-api/startSpan/basic-usage-streamed/test.ts b/dev-packages/node-integration-tests/suites/public-api/startSpan/basic-usage-streamed/test.ts index 2eb452d43386..dd7d18f7c961 100644 --- a/dev-packages/node-integration-tests/suites/public-api/startSpan/basic-usage-streamed/test.ts +++ b/dev-packages/node-integration-tests/suites/public-api/startSpan/basic-usage-streamed/test.ts @@ -1,9 +1,4 @@ -import { - SDK_VERSION, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, -} from '@sentry/core'; +import { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '@sentry/core'; import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_SEGMENT_ID, @@ -14,6 +9,7 @@ import { SENTRY_ENVIRONMENT, SENTRY_RELEASE, SENTRY_SDK_INTEGRATIONS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { expect, test } from 'vitest'; import { createRunner } from '../../../../utils/runner'; @@ -60,7 +56,7 @@ test('sends a streamed span envelope with correct spans for a manually started s attributes: { [SENTRY_TRACE_LIFECYCLE]: { type: 'string', value: 'stream' }, 'sentry.is_localhost': { type: 'boolean', value: false }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'test-child', }, @@ -146,7 +142,7 @@ test('sends a streamed span envelope with correct spans for a manually started s const expectedAttributes: Record = { [SENTRY_TRACE_LIFECYCLE]: { type: 'string', value: 'stream' }, 'sentry.is_localhost': { type: 'boolean', value: false }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'test' }, + [SENTRY_OP]: { type: 'string', value: 'test' }, [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: { type: 'integer', value: 1 }, [SENTRY_SDK_NAME]: { type: 'string', value: EXPECTED_SDK_NAME }, [SENTRY_SDK_VERSION]: { type: 'string', value: SDK_VERSION }, diff --git a/dev-packages/node-integration-tests/suites/tracing/envelope-header/transaction-route/scenario.ts b/dev-packages/node-integration-tests/suites/tracing/envelope-header/transaction-route/scenario.ts index 4d67fee0a0d2..83f987a0cfdf 100644 --- a/dev-packages/node-integration-tests/suites/tracing/envelope-header/transaction-route/scenario.ts +++ b/dev-packages/node-integration-tests/suites/tracing/envelope-header/transaction-route/scenario.ts @@ -1,4 +1,4 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import * as Sentry from '@sentry/node'; import { loggingTransport } from '@sentry-internal/node-integration-tests'; @@ -17,7 +17,7 @@ Sentry.startSpan( attributes: { 'http.request.method': 'GET', 'http.route': '/route', - [Sentry.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.server', + [SENTRY_OP]: 'http.server', [SENTRY_SEGMENT_NAME_SOURCE]: 'route', }, }, diff --git a/dev-packages/node-integration-tests/suites/tracing/envelope-header/transaction-url/scenario.ts b/dev-packages/node-integration-tests/suites/tracing/envelope-header/transaction-url/scenario.ts index 69b76f248555..4c46fe4bcd9e 100644 --- a/dev-packages/node-integration-tests/suites/tracing/envelope-header/transaction-url/scenario.ts +++ b/dev-packages/node-integration-tests/suites/tracing/envelope-header/transaction-url/scenario.ts @@ -1,4 +1,4 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import * as Sentry from '@sentry/node'; import { loggingTransport } from '@sentry-internal/node-integration-tests'; @@ -17,7 +17,7 @@ Sentry.startSpan( attributes: { 'http.request.method': 'GET', 'http.route': '/route', - [Sentry.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.server', + [SENTRY_OP]: 'http.server', [SENTRY_SEGMENT_NAME_SOURCE]: 'url', }, }, diff --git a/dev-packages/node-integration-tests/suites/tracing/groq/test.ts b/dev-packages/node-integration-tests/suites/tracing/groq/test.ts index 5797f38d2d1b..d63eca3f15c5 100644 --- a/dev-packages/node-integration-tests/suites/tracing/groq/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/groq/test.ts @@ -1,4 +1,4 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { GEN_AI_EMBEDDINGS_INPUT, GEN_AI_INPUT_MESSAGES, @@ -15,6 +15,7 @@ import { GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, GEN_AI_USAGE_TOTAL_TOKENS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { afterAll, describe, expect } from 'vitest'; import { cleanupChildProcesses, createEsmAndCjsTests } from '../../../utils/runner'; @@ -37,7 +38,7 @@ describe('Groq integration', () => { expect(chatSpan!.name).toBe('chat llama-3.3-70b-versatile'); expect(chatSpan!.status).toBe('ok'); expect(chatSpan!.attributes[GEN_AI_OPERATION_NAME]?.value).toBe('chat'); - expect(chatSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value).toBe('gen_ai.chat'); + expect(chatSpan!.attributes[SENTRY_OP]?.value).toBe('gen_ai.chat'); expect(chatSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]?.value).toBe(ORIGIN); expect(chatSpan!.attributes[GEN_AI_PROVIDER_NAME]?.value).toBe(PROVIDER); expect(chatSpan!.attributes[GEN_AI_REQUEST_MODEL]?.value).toBe('llama-3.3-70b-versatile'); @@ -70,7 +71,7 @@ describe('Groq integration', () => { expect(embeddingsSpan).toBeDefined(); expect(embeddingsSpan!.name).toBe('embeddings nomic-embed-text-v1_5'); expect(embeddingsSpan!.attributes[GEN_AI_OPERATION_NAME]?.value).toBe('embeddings'); - expect(embeddingsSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value).toBe('gen_ai.embeddings'); + expect(embeddingsSpan!.attributes[SENTRY_OP]?.value).toBe('gen_ai.embeddings'); expect(embeddingsSpan!.attributes[GEN_AI_PROVIDER_NAME]?.value).toBe(PROVIDER); expect(embeddingsSpan!.attributes[GEN_AI_USAGE_INPUT_TOKENS]?.value).toBe(8); expect(embeddingsSpan!.attributes[GEN_AI_EMBEDDINGS_INPUT]).toBeUndefined(); diff --git a/dev-packages/node-integration-tests/suites/tracing/ignoreSpans-streamed/children/test.ts b/dev-packages/node-integration-tests/suites/tracing/ignoreSpans-streamed/children/test.ts index c1ac1f7fc4a6..fefa45353102 100644 --- a/dev-packages/node-integration-tests/suites/tracing/ignoreSpans-streamed/children/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/ignoreSpans-streamed/children/test.ts @@ -1,6 +1,6 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import { afterAll, describe, expect } from 'vitest'; import { cleanupChildProcesses, createEsmAndCjsTests } from '../../../../utils/runner'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP } from '@sentry/core'; describe('filtering child spans with ignoreSpans (streaming)', () => { afterAll(() => { @@ -28,9 +28,7 @@ describe('filtering child spans with ignoreSpans (streaming)', () => { // Would be 7 if we didn't ignore the 'middleware - expressInit' and 'custom-to-drop' spans expect(container.items).toHaveLength(8); const getSpan = (name: string, op: string) => - container.items.find( - item => item.name === name && item.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value === op, - ); + container.items.find(item => item.name === name && item.attributes[SENTRY_OP]?.value === op); const queryMiddlewareSpan = getSpan('query', 'middleware'); const corsMiddlewareSpan = getSpan('corsMiddleware', 'middleware'); const requestHandlerSpan = getSpan('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/test/express', 'handler'); diff --git a/dev-packages/node-integration-tests/suites/tracing/langgraph/test.ts b/dev-packages/node-integration-tests/suites/tracing/langgraph/test.ts index 3f85267b154e..e436b94a61e8 100644 --- a/dev-packages/node-integration-tests/suites/tracing/langgraph/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/langgraph/test.ts @@ -1,4 +1,4 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { afterAll, describe, expect } from 'vitest'; import { GEN_AI_AGENT_NAME, @@ -15,6 +15,7 @@ import { GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, GEN_AI_USAGE_TOTAL_TOKENS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { getStringAttributeValue } from '../../../utils'; import { cleanupChildProcesses, createEsmAndCjsTests } from '../../../utils/runner'; @@ -274,7 +275,7 @@ describe('LangGraph integration', () => { status: 'ok', attributes: expect.objectContaining({ [GEN_AI_OPERATION_NAME]: expect.objectContaining({ value: 'invoke_agent' }), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: expect.objectContaining({ value: 'gen_ai.invoke_agent' }), + [SENTRY_OP]: expect.objectContaining({ value: 'gen_ai.invoke_agent' }), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: expect.objectContaining({ value: 'auto.ai.langgraph' }), [GEN_AI_AGENT_NAME]: expect.objectContaining({ value: 'helpful_assistant' }), [GEN_AI_PIPELINE_NAME]: expect.objectContaining({ value: 'helpful_assistant' }), @@ -284,7 +285,7 @@ describe('LangGraph integration', () => { expect(spans).toContainEqual( expect.objectContaining({ attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: expect.objectContaining({ value: 'gen_ai.chat' }), + [SENTRY_OP]: expect.objectContaining({ value: 'gen_ai.chat' }), [GEN_AI_AGENT_NAME]: expect.objectContaining({ value: 'helpful_assistant' }), }), }), @@ -314,7 +315,7 @@ describe('LangGraph integration', () => { expect.objectContaining({ status: 'ok', attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: expect.objectContaining({ value: 'gen_ai.invoke_agent' }), + [SENTRY_OP]: expect.objectContaining({ value: 'gen_ai.invoke_agent' }), [GEN_AI_OPERATION_NAME]: expect.objectContaining({ value: 'invoke_agent' }), [GEN_AI_AGENT_NAME]: expect.objectContaining({ value: 'math_assistant' }), }), @@ -325,7 +326,7 @@ describe('LangGraph integration', () => { name: 'execute_tool add', status: 'ok', attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: expect.objectContaining({ value: 'gen_ai.execute_tool' }), + [SENTRY_OP]: expect.objectContaining({ value: 'gen_ai.execute_tool' }), [GEN_AI_OPERATION_NAME]: expect.objectContaining({ value: 'execute_tool' }), [GEN_AI_TOOL_NAME]: expect.objectContaining({ value: 'add' }), }), @@ -336,15 +337,13 @@ describe('LangGraph integration', () => { name: 'execute_tool multiply', status: 'ok', attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: expect.objectContaining({ value: 'gen_ai.execute_tool' }), + [SENTRY_OP]: expect.objectContaining({ value: 'gen_ai.execute_tool' }), [GEN_AI_OPERATION_NAME]: expect.objectContaining({ value: 'execute_tool' }), [GEN_AI_TOOL_NAME]: expect.objectContaining({ value: 'multiply' }), }), }), ); - expect( - spans.filter(span => span.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value === 'gen_ai.chat'), - ).toHaveLength(3); + expect(spans.filter(span => span.attributes[SENTRY_OP]?.value === 'gen_ai.chat')).toHaveLength(3); }, }) .start() @@ -362,9 +361,7 @@ describe('LangGraph integration', () => { }) .expect({ span: container => { - const chatSpans = container.items.filter( - s => s.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value === 'gen_ai.chat', - ); + const chatSpans = container.items.filter(s => s.attributes[SENTRY_OP]?.value === 'gen_ai.chat'); expect(chatSpans).toHaveLength(1); expect(chatSpans[0]?.attributes[GEN_AI_AGENT_NAME]?.value).toBe('plain_assistant'); }, diff --git a/dev-packages/node-integration-tests/suites/tracing/mistral/test.ts b/dev-packages/node-integration-tests/suites/tracing/mistral/test.ts index 49fe09771da1..4ae126d350d9 100644 --- a/dev-packages/node-integration-tests/suites/tracing/mistral/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/mistral/test.ts @@ -1,4 +1,4 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { GEN_AI_AGENT_NAME, GEN_AI_EMBEDDINGS_INPUT, @@ -20,6 +20,7 @@ import { GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, GEN_AI_USAGE_TOTAL_TOKENS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { afterAll, describe, expect } from 'vitest'; import { cleanupChildProcesses, createEsmTests } from '../../../utils/runner'; @@ -47,7 +48,7 @@ describe('Mistral integration', () => { expect(chatSpan!.name).toBe('chat mistral-small-latest'); expect(chatSpan!.status).toBe('ok'); expect(chatSpan!.attributes[GEN_AI_OPERATION_NAME]?.value).toBe('chat'); - expect(chatSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value).toBe('gen_ai.chat'); + expect(chatSpan!.attributes[SENTRY_OP]?.value).toBe('gen_ai.chat'); expect(chatSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]?.value).toBe(ORIGIN); expect(chatSpan!.attributes[GEN_AI_PROVIDER_NAME]?.value).toBe(PROVIDER); expect(chatSpan!.attributes[GEN_AI_REQUEST_MODEL]?.value).toBe('mistral-small-latest'); @@ -140,7 +141,7 @@ describe('Mistral integration', () => { expect(embeddingsSpan!.name).toBe('embeddings mistral-embed'); expect(embeddingsSpan!.status).toBe('ok'); expect(embeddingsSpan!.attributes[GEN_AI_OPERATION_NAME]?.value).toBe('embeddings'); - expect(embeddingsSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value).toBe('gen_ai.embeddings'); + expect(embeddingsSpan!.attributes[SENTRY_OP]?.value).toBe('gen_ai.embeddings'); expect(embeddingsSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]?.value).toBe(ORIGIN); expect(embeddingsSpan!.attributes[GEN_AI_PROVIDER_NAME]?.value).toBe(PROVIDER); expect(embeddingsSpan!.attributes[GEN_AI_REQUEST_MODEL]?.value).toBe('mistral-embed'); @@ -183,7 +184,7 @@ describe('Mistral integration', () => { expect(agentSpan!.name).toBe('invoke_agent'); expect(agentSpan!.status).toBe('ok'); expect(agentSpan!.attributes[GEN_AI_OPERATION_NAME]?.value).toBe('invoke_agent'); - expect(agentSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value).toBe('gen_ai.invoke_agent'); + expect(agentSpan!.attributes[SENTRY_OP]?.value).toBe('gen_ai.invoke_agent'); expect(agentSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]?.value).toBe(ORIGIN); expect(agentSpan!.attributes[GEN_AI_PROVIDER_NAME]?.value).toBe(PROVIDER); expect(agentSpan!.attributes[GEN_AI_AGENT_NAME]?.value).toBe('ag-mock-123'); diff --git a/dev-packages/node-integration-tests/suites/tracing/mysql/test.ts b/dev-packages/node-integration-tests/suites/tracing/mysql/test.ts index 2188dd49f356..e0db6de0be75 100644 --- a/dev-packages/node-integration-tests/suites/tracing/mysql/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/mysql/test.ts @@ -3,8 +3,7 @@ import { afterAll, beforeAll, describe, expect } from 'vitest'; import { cleanupChildProcesses, createCjsTests, createEsmAndCjsTests } from '../../../utils/runner'; import { startMysqlTestServer } from './mysql-test-server'; import type { SerializedStreamedSpanContainer } from '@sentry/core'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP } from '@sentry/core'; -import { SENTRY_TRACE_LIFECYCLE } from '@sentry/conventions/attributes'; +import { SENTRY_TRACE_LIFECYCLE, SENTRY_OP } from '@sentry/conventions/attributes'; describe('mysql auto instrumentation', () => { // A minimal in-process MySQL server (on a random free port) so the client's @@ -176,9 +175,7 @@ describe('mysql auto instrumentation', () => { const segmentSpan = container.items.find(item => item.is_segment); expect(segmentSpan?.name).toBe('Test Transaction'); - const dbSpans = container.items.filter( - spanItem => spanItem.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value === 'db', - ); + const dbSpans = container.items.filter(spanItem => spanItem.attributes[SENTRY_OP]?.value === 'db'); expect(dbSpans.length).toBe(2); diff --git a/dev-packages/node-integration-tests/suites/tracing/openai/openai-tool-calls/test.ts b/dev-packages/node-integration-tests/suites/tracing/openai/openai-tool-calls/test.ts index 89bf6c7b0544..cd746332059b 100644 --- a/dev-packages/node-integration-tests/suites/tracing/openai/openai-tool-calls/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/openai/openai-tool-calls/test.ts @@ -1,4 +1,4 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { afterAll, describe, expect } from 'vitest'; import { GEN_AI_INPUT_MESSAGES, @@ -15,6 +15,7 @@ import { GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, GEN_AI_USAGE_TOTAL_TOKENS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { GEN_AI_REQUEST_STREAM_ATTRIBUTE } from '../../../../../../packages/server-utils/src/ai/core/gen-ai-attributes'; import { cleanupChildProcesses, createEsmAndCjsTests } from '../../../../utils/runner'; @@ -92,7 +93,7 @@ describe('OpenAI Tool Calls integration', () => { type: 'string', value: 'chat', }); - expect(chatToolsSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(chatToolsSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -142,7 +143,7 @@ describe('OpenAI Tool Calls integration', () => { type: 'string', value: 'chat', }); - expect(streamingChatToolsSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingChatToolsSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -202,7 +203,7 @@ describe('OpenAI Tool Calls integration', () => { type: 'string', value: 'chat', }); - expect(responsesToolsSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(responsesToolsSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -255,7 +256,7 @@ describe('OpenAI Tool Calls integration', () => { type: 'string', value: 'chat', }); - expect(streamingResponsesToolsSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingResponsesToolsSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -328,7 +329,7 @@ describe('OpenAI Tool Calls integration', () => { type: 'string', value: 'chat', }); - expect(chatToolsSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(chatToolsSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -392,7 +393,7 @@ describe('OpenAI Tool Calls integration', () => { type: 'string', value: 'chat', }); - expect(streamingChatToolsSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingChatToolsSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -463,7 +464,7 @@ describe('OpenAI Tool Calls integration', () => { type: 'string', value: 'chat', }); - expect(responsesToolsSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(responsesToolsSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -527,7 +528,7 @@ describe('OpenAI Tool Calls integration', () => { type: 'string', value: 'chat', }); - expect(streamingResponsesToolsSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingResponsesToolsSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); diff --git a/dev-packages/node-integration-tests/suites/tracing/openai/test.ts b/dev-packages/node-integration-tests/suites/tracing/openai/test.ts index a27e3308179a..27382085cdcc 100644 --- a/dev-packages/node-integration-tests/suites/tracing/openai/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/openai/test.ts @@ -1,4 +1,4 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import type { SerializedStreamedSpanContainer } from '@sentry/core'; import { afterAll, describe, expect } from 'vitest'; import { @@ -18,6 +18,7 @@ import { GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, GEN_AI_USAGE_TOTAL_TOKENS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { GEN_AI_REQUEST_DIMENSIONS_ATTRIBUTE, @@ -50,7 +51,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(chatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(chatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -107,7 +108,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(responsesSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(responsesSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -157,7 +158,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(nonStreamingErrorSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(nonStreamingErrorSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -184,7 +185,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(streamingChatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingChatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -247,7 +248,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(streamingResponsesSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingResponsesSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -319,7 +320,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'openai', }); - expect(streamingErrorSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingErrorSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -340,7 +341,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(parsedChatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(parsedChatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -393,7 +394,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(parsedResponsesSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(parsedResponsesSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -466,7 +467,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(chatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(chatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -535,7 +536,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(responsesSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(responsesSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -593,7 +594,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(nonStreamingErrorSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(nonStreamingErrorSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -624,7 +625,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(streamingChatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingChatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -699,7 +700,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(streamingResponsesSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingResponsesSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -783,7 +784,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'openai', }); - expect(streamingErrorSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingErrorSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -804,7 +805,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(parsedChatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(parsedChatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -866,7 +867,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(parsedResponsesSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(parsedResponsesSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -1019,7 +1020,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'embeddings', }); - expect(singleEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(singleEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -1064,7 +1065,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'embeddings', }); - expect(errorEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(errorEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -1093,7 +1094,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'embeddings', }); - expect(multiEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(multiEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -1140,7 +1141,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'embeddings', }); - expect(rawEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(rawEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -1187,7 +1188,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'embeddings', }); - expect(singleEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(singleEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -1238,7 +1239,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'embeddings', }); - expect(errorEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(errorEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -1271,7 +1272,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'embeddings', }); - expect(multiEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(multiEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -1312,7 +1313,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'embeddings', }); - expect(rawEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(rawEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -1360,7 +1361,7 @@ describe('OpenAI integration', () => { trace_id: expect.any(String), data: { [GEN_AI_OPERATION_NAME]: 'chat', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.chat', + [SENTRY_OP]: 'gen_ai.chat', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.openai', [GEN_AI_PROVIDER_NAME]: 'openai', [GEN_AI_REQUEST_MODEL]: 'gpt-3.5-turbo', @@ -1402,7 +1403,7 @@ describe('OpenAI integration', () => { trace_id: expect.any(String), data: { [GEN_AI_OPERATION_NAME]: 'chat', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.chat', + [SENTRY_OP]: 'gen_ai.chat', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.openai', [GEN_AI_PROVIDER_NAME]: 'openai', [GEN_AI_REQUEST_MODEL]: 'gpt-3.5-turbo', @@ -1446,7 +1447,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(conversationCreateSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(conversationCreateSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -1475,7 +1476,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(conversationResponseSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(conversationResponseSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -1498,12 +1499,12 @@ describe('OpenAI integration', () => { const unlinkedResponseSpan = container.items.find( span => - span.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value === 'gen_ai.chat' && + span.attributes[SENTRY_OP]?.value === 'gen_ai.chat' && span.attributes[GEN_AI_CONVERSATION_ID] === undefined, ); expect(unlinkedResponseSpan).toBeDefined(); expect(unlinkedResponseSpan!.status).toBe('ok'); - expect(unlinkedResponseSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(unlinkedResponseSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -1518,7 +1519,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(previousResponseSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(previousResponseSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -1549,7 +1550,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(rawConversationSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(rawConversationSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -1749,7 +1750,7 @@ describe('OpenAI integration', () => { expect(chatCompletionSpan!.name).toBe('chat gpt-3.5-turbo'); expect(chatCompletionSpan!.status).toBe('ok'); expect(chatCompletionSpan!.attributes[GEN_AI_OPERATION_NAME]).toEqual({ type: 'string', value: 'chat' }); - expect(chatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(chatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -1779,7 +1780,7 @@ describe('OpenAI integration', () => { type: 'string', value: 'chat', }); - expect(parsedChatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(parsedChatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -1809,7 +1810,7 @@ describe('OpenAI integration', () => { expect(parsedResponsesSpan!.name).toBe('chat gpt-4o'); expect(parsedResponsesSpan!.status).toBe('ok'); expect(parsedResponsesSpan!.attributes[GEN_AI_OPERATION_NAME]).toEqual({ type: 'string', value: 'chat' }); - expect(parsedResponsesSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(parsedResponsesSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); diff --git a/dev-packages/node-integration-tests/suites/tracing/openai/v6/test.ts b/dev-packages/node-integration-tests/suites/tracing/openai/v6/test.ts index 091867486e4e..be3746e90068 100644 --- a/dev-packages/node-integration-tests/suites/tracing/openai/v6/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/openai/v6/test.ts @@ -1,4 +1,4 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { afterAll, describe, expect } from 'vitest'; import { GEN_AI_EMBEDDINGS_INPUT, @@ -16,6 +16,7 @@ import { GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, GEN_AI_USAGE_TOTAL_TOKENS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { GEN_AI_REQUEST_DIMENSIONS_ATTRIBUTE, @@ -50,7 +51,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'chat', }); - expect(chatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(chatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -105,7 +106,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'chat', }); - expect(responsesSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(responsesSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -155,7 +156,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'chat', }); - expect(nonStreamingErrorSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(nonStreamingErrorSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -182,7 +183,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'chat', }); - expect(streamingChatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingChatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -245,7 +246,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'chat', }); - expect(streamingResponsesSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingResponsesSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -317,7 +318,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'openai', }); - expect(streamingErrorSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingErrorSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -359,7 +360,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'chat', }); - expect(chatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(chatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -426,7 +427,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'chat', }); - expect(responsesSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(responsesSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -484,7 +485,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'chat', }); - expect(nonStreamingErrorSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(nonStreamingErrorSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -515,7 +516,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'chat', }); - expect(streamingChatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingChatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -590,7 +591,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'chat', }); - expect(streamingResponsesSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingResponsesSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -674,7 +675,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'openai', }); - expect(streamingErrorSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(streamingErrorSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -784,7 +785,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'embeddings', }); - expect(singleEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(singleEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -829,7 +830,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'embeddings', }); - expect(errorEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(errorEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -858,7 +859,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'embeddings', }); - expect(multiEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(multiEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -924,7 +925,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'embeddings', }); - expect(singleEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(singleEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -975,7 +976,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'embeddings', }); - expect(errorEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(errorEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -1008,7 +1009,7 @@ describe('OpenAI integration (V6)', () => { type: 'string', value: 'embeddings', }); - expect(multiEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(multiEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -1075,7 +1076,7 @@ describe('OpenAI integration (V6)', () => { trace_id: expect.any(String), data: { [GEN_AI_OPERATION_NAME]: 'chat', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.chat', + [SENTRY_OP]: 'gen_ai.chat', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.openai', [GEN_AI_PROVIDER_NAME]: 'openai', [GEN_AI_REQUEST_MODEL]: 'gpt-3.5-turbo', @@ -1128,7 +1129,7 @@ describe('OpenAI integration (V6)', () => { trace_id: expect.any(String), data: { [GEN_AI_OPERATION_NAME]: 'chat', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.chat', + [SENTRY_OP]: 'gen_ai.chat', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.openai', [GEN_AI_PROVIDER_NAME]: 'openai', [GEN_AI_REQUEST_MODEL]: 'gpt-3.5-turbo', diff --git a/dev-packages/node-integration-tests/suites/tracing/openai/v7/test.ts b/dev-packages/node-integration-tests/suites/tracing/openai/v7/test.ts index 6d7eb552c219..646b63ec7a6a 100644 --- a/dev-packages/node-integration-tests/suites/tracing/openai/v7/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/openai/v7/test.ts @@ -1,4 +1,4 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { afterAll, expect } from 'vitest'; import { GEN_AI_OPERATION_NAME, @@ -11,6 +11,7 @@ import { GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, GEN_AI_USAGE_TOTAL_TOKENS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { cleanupChildProcesses, createEsmAndCjsTests } from '../../../../utils/runner'; import { conditionalTest } from '../../../../utils/index'; @@ -44,7 +45,7 @@ conditionalTest({ min: 22 })('OpenAI integration (V7)', () => { expect(chatCompletionSpan).toBeDefined(); expect(chatCompletionSpan!.name).toBe('chat gpt-3.5-turbo'); expect(chatCompletionSpan!.status).toBe('ok'); - expect(chatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(chatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); @@ -135,7 +136,7 @@ conditionalTest({ min: 22 })('OpenAI integration (V7)', () => { span => span.name === 'embeddings text-embedding-3-small' && span.status === 'ok', ); expect(singleEmbeddingSpan).toBeDefined(); - expect(singleEmbeddingSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(singleEmbeddingSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.embeddings', }); @@ -184,7 +185,7 @@ conditionalTest({ min: 22 })('OpenAI integration (V7)', () => { expect(chatCompletionSpan).toBeDefined(); expect(chatCompletionSpan!.name).toBe('chat gpt-3.5-turbo'); expect(chatCompletionSpan!.status).toBe('ok'); - expect(chatCompletionSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual({ + expect(chatCompletionSpan!.attributes[SENTRY_OP]).toEqual({ type: 'string', value: 'gen_ai.chat', }); diff --git a/dev-packages/node-integration-tests/suites/tracing/postgres-streamed/test.ts b/dev-packages/node-integration-tests/suites/tracing/postgres-streamed/test.ts index 3a2cea4a4c74..bec779c70b02 100644 --- a/dev-packages/node-integration-tests/suites/tracing/postgres-streamed/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/postgres-streamed/test.ts @@ -1,6 +1,5 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_OP } from '@sentry/core'; import type { SerializedStreamedSpanContainer } from '@sentry/core'; -import { SENTRY_TRACE_LIFECYCLE } from '@sentry/conventions/attributes'; +import { SENTRY_TRACE_LIFECYCLE, SENTRY_OP } from '@sentry/conventions/attributes'; import { afterAll, describe, expect } from 'vitest'; import { conditionalTest, EXPECTED_SDK_NAME } from '../../../utils'; import { cleanupChildProcesses, createEsmAndCjsTests, describeWithDockerCompose } from '../../../utils/runner'; @@ -157,7 +156,7 @@ const CREATE_NATIVE_USER_TABLE_STATEMENT = 'CREATE TABLE "NativeUser" ("id" SERIAL NOT NULL,"createdAt" TIMESTAMP(?) NOT NULL DEFAULT CURRENT_TIMESTAMP,"email" TEXT NOT NULL,"name" TEXT,CONSTRAINT "User_pkey" PRIMARY KEY ("id"))'; function getDbSpans(container: SerializedStreamedSpanContainer): SerializedStreamedSpanContainer['items'] { - return container.items.filter(item => item.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value === 'db'); + return container.items.filter(item => item.attributes[SENTRY_OP]?.value === 'db'); } describeWithDockerCompose('postgres auto instrumentation (streamed)', { workingDirectory: [__dirname] }, () => { diff --git a/dev-packages/node-integration-tests/suites/tracing/redis/test.ts b/dev-packages/node-integration-tests/suites/tracing/redis/test.ts index 50cd473957b8..d8b8b728a2af 100644 --- a/dev-packages/node-integration-tests/suites/tracing/redis/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/redis/test.ts @@ -1,5 +1,5 @@ -import { SENTRY_TRACE_LIFECYCLE } from '@sentry/conventions/attributes'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, type SerializedStreamedSpanContainer } from '@sentry/core'; +import { SENTRY_TRACE_LIFECYCLE, SENTRY_OP } from '@sentry/conventions/attributes'; +import { type SerializedStreamedSpanContainer } from '@sentry/core'; import { afterAll, describe, expect } from 'vitest'; import { EXPECTED_SDK_NAME } from '../../../utils'; import { cleanupChildProcesses, createEsmAndCjsTests, describeWithDockerCompose } from '../../../utils/runner'; @@ -136,9 +136,7 @@ describeWithDockerCompose('redis auto instrumentation', { workingDirectory: [__d const segmentSpan = container.items.find(item => item.is_segment); expect(segmentSpan?.name).toBe('Test Span'); - const dbSpans = container.items.filter( - item => item.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value === redisSpanOp, - ); + const dbSpans = container.items.filter(item => item.attributes[SENTRY_OP]?.value === redisSpanOp); expect(dbSpans).toEqual([ expectedDbSpan({ operation: 'set', statement: 'set test-key [1 other arguments]' }), diff --git a/dev-packages/node-integration-tests/suites/tracing/together-ai/test.ts b/dev-packages/node-integration-tests/suites/tracing/together-ai/test.ts index 2e7c3b94dc7b..b9a7fb1fe38b 100644 --- a/dev-packages/node-integration-tests/suites/tracing/together-ai/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/together-ai/test.ts @@ -1,4 +1,4 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { GEN_AI_EMBEDDINGS_INPUT, GEN_AI_INPUT_MESSAGES, @@ -15,6 +15,7 @@ import { GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, GEN_AI_USAGE_TOTAL_TOKENS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { afterAll, describe, expect } from 'vitest'; import { cleanupChildProcesses, createEsmAndCjsTests } from '../../../utils/runner'; @@ -37,7 +38,7 @@ describe('Together integration', () => { expect(chatSpan!.name).toBe('chat meta-llama/Llama-3.3-70B-Instruct-Turbo'); expect(chatSpan!.status).toBe('ok'); expect(chatSpan!.attributes[GEN_AI_OPERATION_NAME]?.value).toBe('chat'); - expect(chatSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value).toBe('gen_ai.chat'); + expect(chatSpan!.attributes[SENTRY_OP]?.value).toBe('gen_ai.chat'); expect(chatSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]?.value).toBe(ORIGIN); expect(chatSpan!.attributes[GEN_AI_PROVIDER_NAME]?.value).toBe(PROVIDER); expect(chatSpan!.attributes[GEN_AI_REQUEST_MODEL]?.value).toBe('meta-llama/Llama-3.3-70B-Instruct-Turbo'); @@ -70,7 +71,7 @@ describe('Together integration', () => { expect(embeddingsSpan).toBeDefined(); expect(embeddingsSpan!.name).toBe('embeddings togethercomputer/m2-bert-80M-8k-retrieval'); expect(embeddingsSpan!.attributes[GEN_AI_OPERATION_NAME]?.value).toBe('embeddings'); - expect(embeddingsSpan!.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]?.value).toBe('gen_ai.embeddings'); + expect(embeddingsSpan!.attributes[SENTRY_OP]?.value).toBe('gen_ai.embeddings'); expect(embeddingsSpan!.attributes[GEN_AI_PROVIDER_NAME]?.value).toBe(PROVIDER); expect(embeddingsSpan!.attributes[GEN_AI_USAGE_INPUT_TOKENS]?.value).toBe(8); expect(embeddingsSpan!.attributes[GEN_AI_EMBEDDINGS_INPUT]).toBeUndefined(); diff --git a/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v4/test.ts b/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v4/test.ts index e4276d73a0dd..3da2f82f24c9 100644 --- a/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v4/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v4/test.ts @@ -1,4 +1,4 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { afterAll, describe, expect } from 'vitest'; import { GEN_AI_INPUT_MESSAGES, @@ -14,6 +14,7 @@ import { GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, GEN_AI_USAGE_TOTAL_TOKENS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { GEN_AI_TOOL_CALL_ID_ATTRIBUTE } from '../../../../../../packages/server-utils/src/ai/core/gen-ai-attributes'; import { cleanupChildProcesses, createEsmAndCjsTests } from '../../../../utils/runner'; @@ -50,7 +51,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(20), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(30), [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -65,7 +66,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(20), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(30), [GEN_AI_OPERATION_NAME]: attr('generate_content'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.generate_content'), + [SENTRY_OP]: attr('gen_ai.generate_content'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -79,7 +80,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(20), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(30), [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -93,7 +94,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(25), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(40), [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -107,7 +108,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(25), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(40), [GEN_AI_OPERATION_NAME]: attr('generate_content'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.generate_content'), + [SENTRY_OP]: attr('gen_ai.generate_content'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -120,7 +121,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_TOOL_CALL_ID_ATTRIBUTE]: attr('call-1'), [GEN_AI_TOOL_NAME]: attr('getWeather'), [GEN_AI_OPERATION_NAME]: attr('execute_tool'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.execute_tool'), + [SENTRY_OP]: attr('gen_ai.execute_tool'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -144,7 +145,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(20), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(30), [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -163,7 +164,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(20), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(30), [GEN_AI_OPERATION_NAME]: attr('generate_content'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.generate_content'), + [SENTRY_OP]: attr('gen_ai.generate_content'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -181,7 +182,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(20), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(30), [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -199,7 +200,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(25), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(40), [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -216,7 +217,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(25), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(40), [GEN_AI_OPERATION_NAME]: attr('generate_content'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.generate_content'), + [SENTRY_OP]: attr('gen_ai.generate_content'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -231,7 +232,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_TOOL_NAME]: attr('getWeather'), [GEN_AI_TOOL_CALL_RESULT]: expect.objectContaining({ value: expect.any(String) }), [GEN_AI_OPERATION_NAME]: attr('execute_tool'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.execute_tool'), + [SENTRY_OP]: attr('gen_ai.execute_tool'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -245,7 +246,7 @@ describe('Vercel AI integration (streaming v4)', () => { status: 'error', attributes: expect.objectContaining({ [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -258,7 +259,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(25), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(40), [GEN_AI_OPERATION_NAME]: attr('generate_content'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.generate_content'), + [SENTRY_OP]: attr('gen_ai.generate_content'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), @@ -269,7 +270,7 @@ describe('Vercel AI integration (streaming v4)', () => { [GEN_AI_TOOL_CALL_ID_ATTRIBUTE]: attr('call-1'), [GEN_AI_TOOL_NAME]: attr('getWeather'), [GEN_AI_OPERATION_NAME]: attr('execute_tool'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.execute_tool'), + [SENTRY_OP]: attr('gen_ai.execute_tool'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(expectedOrigin), }), }), diff --git a/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v6/test.ts b/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v6/test.ts index 939ba08e9746..806649ede43f 100644 --- a/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v6/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v6/test.ts @@ -1,4 +1,4 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { afterAll, describe, expect } from 'vitest'; import { GEN_AI_INPUT_MESSAGES, @@ -14,6 +14,7 @@ import { GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, GEN_AI_USAGE_TOTAL_TOKENS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { GEN_AI_TOOL_CALL_ID_ATTRIBUTE } from '../../../../../../packages/server-utils/src/ai/core/gen-ai-attributes'; import { cleanupChildProcesses, createEsmAndCjsTests } from '../../../../utils/runner'; @@ -47,7 +48,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(20), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(30), [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -62,7 +63,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(20), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(30), [GEN_AI_OPERATION_NAME]: attr('generate_content'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.generate_content'), + [SENTRY_OP]: attr('gen_ai.generate_content'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -76,7 +77,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(20), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(30), [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -90,7 +91,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(25), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(40), [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -104,7 +105,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(25), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(40), [GEN_AI_OPERATION_NAME]: attr('generate_content'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.generate_content'), + [SENTRY_OP]: attr('gen_ai.generate_content'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -117,7 +118,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_TOOL_CALL_ID_ATTRIBUTE]: attr('call-1'), [GEN_AI_TOOL_NAME]: attr('getWeather'), [GEN_AI_OPERATION_NAME]: attr('execute_tool'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.execute_tool'), + [SENTRY_OP]: attr('gen_ai.execute_tool'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -141,7 +142,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(20), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(30), [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -160,7 +161,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(20), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(30), [GEN_AI_OPERATION_NAME]: attr('generate_content'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.generate_content'), + [SENTRY_OP]: attr('gen_ai.generate_content'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -178,7 +179,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(20), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(30), [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -196,7 +197,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(25), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(40), [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -213,7 +214,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(25), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(40), [GEN_AI_OPERATION_NAME]: attr('generate_content'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.generate_content'), + [SENTRY_OP]: attr('gen_ai.generate_content'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -228,7 +229,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_TOOL_NAME]: attr('getWeather'), [GEN_AI_TOOL_CALL_RESULT]: expect.objectContaining({ value: expect.any(String) }), [GEN_AI_OPERATION_NAME]: attr('execute_tool'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.execute_tool'), + [SENTRY_OP]: attr('gen_ai.execute_tool'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -241,7 +242,7 @@ describe('Vercel AI integration (streaming, v6)', () => { name: 'invoke_agent', attributes: expect.objectContaining({ [GEN_AI_OPERATION_NAME]: attr('invoke_agent'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.invoke_agent'), + [SENTRY_OP]: attr('gen_ai.invoke_agent'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -254,7 +255,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_USAGE_OUTPUT_TOKENS]: attr(25), [GEN_AI_USAGE_TOTAL_TOKENS]: attr(40), [GEN_AI_OPERATION_NAME]: attr('generate_content'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.generate_content'), + [SENTRY_OP]: attr('gen_ai.generate_content'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), @@ -265,7 +266,7 @@ describe('Vercel AI integration (streaming, v6)', () => { [GEN_AI_TOOL_CALL_ID_ATTRIBUTE]: attr('call-1'), [GEN_AI_TOOL_NAME]: attr('getWeather'), [GEN_AI_OPERATION_NAME]: attr('execute_tool'), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: attr('gen_ai.execute_tool'), + [SENTRY_OP]: attr('gen_ai.execute_tool'), [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: attr(origin), }), }), diff --git a/packages/astro/src/index.server.ts b/packages/astro/src/index.server.ts index b67a20a788f8..fcdbc89ee7f6 100644 --- a/packages/astro/src/index.server.ts +++ b/packages/astro/src/index.server.ts @@ -120,6 +120,7 @@ export { rewriteFramesIntegration, Scope, SDK_VERSION, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/aws-serverless/src/index.ts b/packages/aws-serverless/src/index.ts index 5d0c37614a3e..77b40c7da02d 100644 --- a/packages/aws-serverless/src/index.ts +++ b/packages/aws-serverless/src/index.ts @@ -95,6 +95,7 @@ export { getAutoPerformanceIntegrations, cron, parameterize, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/browser-utils/src/web-vitals/emitSpan.ts b/packages/browser-utils/src/web-vitals/emitSpan.ts index ba56bf783f57..ed3602f35e6f 100644 --- a/packages/browser-utils/src/web-vitals/emitSpan.ts +++ b/packages/browser-utils/src/web-vitals/emitSpan.ts @@ -1,12 +1,5 @@ import type { Integration, Span, SpanAttributes } from '@sentry/core'; -import { - getClient, - getCurrentScope, - getRootSpan, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - spanToJSON, -} from '@sentry/core'; +import { getClient, getCurrentScope, getRootSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, spanToJSON } from '@sentry/core'; import { startInactiveSpan } from '@sentry/core/browser'; import { SENTRY_EXCLUSIVE_TIME, @@ -16,6 +9,7 @@ import { SENTRY_SEGMENT_NAME, SENTRY_TRANSACTION, USER_AGENT_ORIGINAL, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { WINDOW } from '../types'; import type { MetricNavigationType } from '../instrumentation/performanceObserver'; @@ -92,7 +86,7 @@ export function _emitWebVitalSpan(options: WebVitalSpanOptions): void { const attributes: SpanAttributes = { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: origin, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: op, + [SENTRY_OP]: op, [SENTRY_EXCLUSIVE_TIME]: 0, [`browser.web_vital.${metricName}.value`]: value, // oxlint-disable-next-line typescript-eslint/no-deprecated @@ -103,7 +97,7 @@ export function _emitWebVitalSpan(options: WebVitalSpanOptions): void { ...passedAttributes, }; - if (parentSpan && spanToJSON(parentSpan).attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] === 'pageload') { + if (parentSpan && spanToJSON(parentSpan).attributes[SENTRY_OP] === 'pageload') { // for LCP and CLS, we collect the pageload span id as an attribute attributes['sentry.pageload.span_id'] = parentSpan.spanContext().spanId; } diff --git a/packages/browser-utils/src/web-vitals/softNavs.ts b/packages/browser-utils/src/web-vitals/softNavs.ts index addab70c50b0..9c7c03560df5 100644 --- a/packages/browser-utils/src/web-vitals/softNavs.ts +++ b/packages/browser-utils/src/web-vitals/softNavs.ts @@ -1,6 +1,6 @@ import type { Client, Span } from '@sentry/core'; -import { debug, LRUMap, SEMANTIC_ATTRIBUTE_SENTRY_OP, spanToJSON } from '@sentry/core'; -import { BROWSER_NAVIGATION_ID } from '@sentry/conventions/attributes'; +import { debug, LRUMap, spanToJSON } from '@sentry/core'; +import { BROWSER_NAVIGATION_ID, SENTRY_OP } from '@sentry/conventions/attributes'; import { DEBUG_BUILD } from '../debug-build'; import type { PerformanceSoftNavigation } from '../instrumentation/performanceObserver'; import { addPerformanceInstrumentationHandler, isPerformanceEventTiming } from '../instrumentation/performanceObserver'; @@ -113,7 +113,7 @@ export function startSoftNavigationCorrelation(client: Client): void { WINDOW.addEventListener('keydown', onInteraction, { capture: true, passive: true }); client.on('spanStart', span => { - if (spanToJSON(span).attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP] !== 'navigation') { + if (spanToJSON(span).attributes?.[SENTRY_OP] !== 'navigation') { return; } diff --git a/packages/browser-utils/src/web-vitals/spans.ts b/packages/browser-utils/src/web-vitals/spans.ts index 69bee44f19a3..0e60188b456f 100644 --- a/packages/browser-utils/src/web-vitals/spans.ts +++ b/packages/browser-utils/src/web-vitals/spans.ts @@ -7,7 +7,6 @@ import { getClient, getRootSpan, hasSpanStreamingEnabled, - SEMANTIC_ATTRIBUTE_SENTRY_OP, spanToJSON, timestampInSeconds, UI_INTERACTION_CLICK_SPAN_NAME_FALLBACK, @@ -35,6 +34,7 @@ import { BROWSER_WEB_VITAL_INP_INTERACTION_TYPE, BROWSER_WEB_VITAL_INP_TARGET, UI_COMPONENT_NAME, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { _emitWebVitalSpan } from './emitSpan'; import { isValidLcpMetric } from './lcp'; @@ -96,10 +96,7 @@ function trackWebVitalPerNavigation( // `back-forward-cache` navigation type, so matching on that alone lets the first of them replace the // navigation span, and every later vital then hangs off a sibling vital instead. const attributes = spanToJSON(span).attributes; - if ( - attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP] === NAVIGATION && - attributes[BROWSER_NAVIGATION_TYPE] === 'back-forward-cache' - ) { + if (attributes?.[SENTRY_OP] === NAVIGATION && attributes[BROWSER_NAVIGATION_TYPE] === 'back-forward-cache') { bfcacheNavigationSpan = span; } }); diff --git a/packages/browser-utils/test/performance/browserMetrics.test.ts b/packages/browser-utils/test/performance/browserMetrics.test.ts index d01d7b3c779a..bb87c4d64750 100644 --- a/packages/browser-utils/test/performance/browserMetrics.test.ts +++ b/packages/browser-utils/test/performance/browserMetrics.test.ts @@ -1,8 +1,8 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import type { Span, SpanAttributes } from '@sentry/core'; import { getClient, getMainCarrier, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SentrySpan, setCurrentClient, @@ -246,7 +246,7 @@ describe('_addResourceSpans', () => { start_timestamp: timeOrigin + startTime, end_timestamp: timeOrigin + startTime + duration, attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'resource.css', + [SENTRY_OP]: 'resource.css', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics', ['http.response.body.decoded_size']: entry.decodedBodySize, ['http.response.body.size']: entry.encodedBodySize, @@ -356,7 +356,7 @@ describe('_addResourceSpans', () => { _addResourceSpans(span, entry, 'https://example.com/assets/to/me', 123, 234, 465); expect(spans).toHaveLength(i + 1); - expect(spanToJSON(spans[i]!).attributes).toEqual(expect.objectContaining({ [SEMANTIC_ATTRIBUTE_SENTRY_OP]: op })); + expect(spanToJSON(spans[i]!).attributes).toEqual(expect.objectContaining({ [SENTRY_OP]: op })); } }); @@ -429,7 +429,7 @@ describe('_addResourceSpans', () => { expect(spanToJSON(spans[0]!)).toEqual( expect.objectContaining({ attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'resource.css', + [SENTRY_OP]: 'resource.css', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics', ['http.response.body.decoded_size']: entry.decodedBodySize, ['http.response.body.size']: entry.encodedBodySize, @@ -468,7 +468,7 @@ describe('_addResourceSpans', () => { expect(spanToJSON(spans[0]!)).toEqual( expect.objectContaining({ attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'resource.css', + [SENTRY_OP]: 'resource.css', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics', 'server.address': 'example.com', 'url.domain': 'example.com', @@ -520,7 +520,7 @@ describe('_addResourceSpans', () => { expect(spanToJSON(spans[0]!)).toEqual( expect.objectContaining({ attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'resource.css', + [SENTRY_OP]: 'resource.css', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics', 'server.address': 'example.com', 'url.domain': 'example.com', @@ -820,7 +820,7 @@ describe('_addNavigationSpans', () => { // `unloadEventStart`/`End` are 0 in the shared entry, so that span is never created. _addNavigationSpans(pageloadSpan, { ...entry, unloadEventStart: 1, unloadEventEnd: 2 }, 999, true); - const spanJson = spans.map(spanToJSON).find(span => span.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] === op); + const spanJson = spans.map(spanToJSON).find(span => span.attributes[SENTRY_OP] === op); expect(spanJson?.name).toBe(expectedName); expect(spanJson?.attributes['url.full']).toBe('https://santry.com/test?q=secret#frag'); diff --git a/packages/browser/src/exports.ts b/packages/browser/src/exports.ts index 6708e12549ba..cf066ee57cd2 100644 --- a/packages/browser/src/exports.ts +++ b/packages/browser/src/exports.ts @@ -78,6 +78,7 @@ export { } from '@sentry/core'; export { + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/browser/test/integrations/httpcontext.test.ts b/packages/browser/test/integrations/httpcontext.test.ts index 524c8742bf3a..555b68dd1c05 100644 --- a/packages/browser/test/integrations/httpcontext.test.ts +++ b/packages/browser/test/integrations/httpcontext.test.ts @@ -1,5 +1,6 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import { describe, expect, it, vi } from 'vitest'; -import { httpContextIntegration, SEMANTIC_ATTRIBUTE_SENTRY_OP } from '../../src/exports'; +import { httpContextIntegration } from '../../src/exports'; import type { Event, StreamedSpanJSON } from '@sentry/core'; import { getDefaultBrowserClientOptions } from '../helper/browser-client-options'; import { BrowserClient } from '../../src/client'; @@ -29,7 +30,7 @@ describe('httpContextIntegration', () => { const span: Partial = { is_segment: true, attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client', + [SENTRY_OP]: 'http.client', }, }; @@ -39,7 +40,7 @@ describe('httpContextIntegration', () => { expect(span.attributes).not.toHaveProperty('url.full'); expect(span.attributes).toEqual({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client', + [SENTRY_OP]: 'http.client', 'http.request.header.referer': ['https://example.com'], 'user_agent.original': USER_AGENT, 'sentry.is_localhost': false, @@ -52,7 +53,7 @@ describe('httpContextIntegration', () => { const span: Partial = { is_segment: true, attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', }, }; @@ -61,7 +62,7 @@ describe('httpContextIntegration', () => { integration.processSpan!(span as StreamedSpanJSON, browserClient); expect(span.attributes).toEqual({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', 'http.request.header.referer': ['https://example.com'], 'user_agent.original': USER_AGENT, 'sentry.is_localhost': false, @@ -74,14 +75,14 @@ describe('httpContextIntegration', () => { const span: Partial = { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.click', + [SENTRY_OP]: 'ui.click', }, }; integration.processSpan!(span as StreamedSpanJSON, new BrowserClient(getDefaultBrowserClientOptions())); expect(span.attributes).toEqual({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.click', + [SENTRY_OP]: 'ui.click', 'user_agent.original': USER_AGENT, 'sentry.is_localhost': false, }); @@ -161,13 +162,13 @@ describe('httpContextIntegration', () => { ); const span: Partial = { is_segment: true, - attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload' }, + attributes: { [SENTRY_OP]: 'pageload' }, }; httpContextIntegration().processSpan!(span as StreamedSpanJSON, client); expect(span.attributes).toEqual({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', 'sentry.is_localhost': false, 'url.full': 'https://example.com', }); @@ -179,13 +180,13 @@ describe('httpContextIntegration', () => { ); const span: Partial = { is_segment: true, - attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload' }, + attributes: { [SENTRY_OP]: 'pageload' }, }; httpContextIntegration().processSpan!(span as StreamedSpanJSON, client); expect(span.attributes).toEqual({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', 'url.full': 'https://example.com', 'http.request.header.referer': ['[Filtered]'], 'user_agent.original': USER_AGENT, diff --git a/packages/browser/test/tracing/browserTracingIntegration.test.ts b/packages/browser/test/tracing/browserTracingIntegration.test.ts index b61518c581f5..38bc3e745045 100644 --- a/packages/browser/test/tracing/browserTracingIntegration.test.ts +++ b/packages/browser/test/tracing/browserTracingIntegration.test.ts @@ -9,7 +9,6 @@ import { getDynamicSamplingContextFromSpan, getMainCarrier, metrics, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, setCurrentClient, @@ -35,7 +34,7 @@ import { PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE } from '../../src/tracing/linkedTrace import { bfcacheMetricsIntegration } from '../../src/integrations/bfcacheMetrics'; import * as webVitalsModule from '../../src/integrations/webVitals'; import { getDefaultBrowserClientOptions } from '../helper/browser-client-options'; -import { SENTRY_SEGMENT_NAME_SOURCE, URL_FULL, URL_PATH } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, URL_FULL, URL_PATH, SENTRY_OP } from '@sentry/conventions/attributes'; const oldTextEncoder = global.window.TextEncoder; const oldTextDecoder = global.window.TextDecoder; @@ -176,7 +175,7 @@ describe('browserTracingIntegration', () => { name: 'Pageload', status: 'ok', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', @@ -320,7 +319,7 @@ describe('browserTracingIntegration', () => { name: 'Pageload', status: 'ok', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', @@ -355,7 +354,7 @@ describe('browserTracingIntegration', () => { name: 'Navigation', status: 'ok', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', @@ -398,7 +397,7 @@ describe('browserTracingIntegration', () => { name: 'Navigation', status: 'ok', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', @@ -443,7 +442,7 @@ describe('browserTracingIntegration', () => { name: 'Pageload', status: 'ok', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'url', @@ -478,7 +477,7 @@ describe('browserTracingIntegration', () => { expect(getSpanDescendants(span).map(span => spanToJSON(span))).toContainEqual( expect.objectContaining({ attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation.redirect', + [SENTRY_OP]: 'navigation.redirect', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser', [URL_FULL]: 'https://example.com/test', [URL_PATH]: '/test', @@ -539,7 +538,7 @@ describe('browserTracingIntegration', () => { name: 'test span', status: 'ok', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'custom', @@ -615,7 +614,7 @@ describe('browserTracingIntegration', () => { name: 'test span', status: 'ok', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.test', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'custom', @@ -917,7 +916,7 @@ describe('browserTracingIntegration', () => { expect(span).toBeDefined(); expect(spanToJSON(span).attributes).toEqual( expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser.bfcache', 'browser.navigation.type': 'back-forward-cache', }), @@ -1045,7 +1044,7 @@ describe('browserTracingIntegration', () => { name: 'test span', status: 'ok', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'custom', @@ -1102,7 +1101,7 @@ describe('browserTracingIntegration', () => { name: 'test span', status: 'ok', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.test', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'custom', diff --git a/packages/bun/src/index.ts b/packages/bun/src/index.ts index d5b1d11ee4e5..e02142b940d6 100644 --- a/packages/bun/src/index.ts +++ b/packages/bun/src/index.ts @@ -116,6 +116,7 @@ export { getAutoPerformanceIntegrations, cron, parameterize, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/bun/test/integrations/bunHttpServer.test.ts b/packages/bun/test/integrations/bunHttpServer.test.ts index 48d5f255d821..62b008bafe4a 100644 --- a/packages/bun/test/integrations/bunHttpServer.test.ts +++ b/packages/bun/test/integrations/bunHttpServer.test.ts @@ -1,6 +1,6 @@ import http from 'node:http'; -import { HTTP_REQUEST_METHOD } from '@sentry/conventions/attributes'; -import { getActiveSpan, getCurrentScope, getTraceData, SEMANTIC_ATTRIBUTE_SENTRY_OP, spanToJSON } from '@sentry/core'; +import { HTTP_REQUEST_METHOD, SENTRY_OP } from '@sentry/conventions/attributes'; +import { getActiveSpan, getCurrentScope, getTraceData, spanToJSON } from '@sentry/core'; import { afterAll, beforeAll, describe, expect, test } from 'bun:test'; import { init } from '../../src'; @@ -51,7 +51,7 @@ describe('Bun HTTP Server Integration', () => { await close(); expect(span).toBeDefined(); - expect(span?.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('http.server'); + expect(span?.attributes[SENTRY_OP]).toBe('http.server'); // No router resolves a route here, so with span streaming the name is the request method. expect(span?.name).toBe('GET'); expect(span?.attributes['url.path']).toBe('/users'); @@ -82,7 +82,7 @@ describe('Bun HTTP Server Integration', () => { await close(); expect(span).toBeDefined(); - expect(span?.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('http.server'); + expect(span?.attributes[SENTRY_OP]).toBe('http.server'); expect(span?.name).toBe('QUERY'); expect(span?.attributes['url.path']).toBe('/search'); expect(span?.attributes[HTTP_REQUEST_METHOD]).toBe('QUERY'); diff --git a/packages/cloudflare/src/index.ts b/packages/cloudflare/src/index.ts index 59f8713b181e..0b583ec88d9b 100644 --- a/packages/cloudflare/src/index.ts +++ b/packages/cloudflare/src/index.ts @@ -86,6 +86,7 @@ export { instrumentSupabaseClient, zodErrorsIntegration, consoleIntegration, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/core/src/semanticAttributes.ts b/packages/core/src/semanticAttributes.ts index f77eb63b8f56..5f3ed230f85e 100644 --- a/packages/core/src/semanticAttributes.ts +++ b/packages/core/src/semanticAttributes.ts @@ -16,6 +16,7 @@ export const SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE = 'sentry.prev /** * Use this attribute to represent the operation of a span. + * @deprecated Use `SENTRY_OP` from `@sentry/conventions/attributes` instead. */ export const SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op'; diff --git a/packages/core/src/tracing/sentrySpan.ts b/packages/core/src/tracing/sentrySpan.ts index abd27b52edf1..7d149353da1a 100644 --- a/packages/core/src/tracing/sentrySpan.ts +++ b/packages/core/src/tracing/sentrySpan.ts @@ -1,12 +1,13 @@ /* eslint-disable max-lines */ import { getClient, getCurrentScope } from '../currentScopes'; import { DEBUG_BUILD } from '../debug-build'; -import { SENTRY_PROFILE_ID, SENTRY_EXCLUSIVE_TIME, SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; import { - SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, -} from '../semanticAttributes'; + SENTRY_PROFILE_ID, + SENTRY_EXCLUSIVE_TIME, + SENTRY_SEGMENT_NAME_SOURCE, + SENTRY_OP, +} from '@sentry/conventions/attributes'; +import { SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../semanticAttributes'; import type { Client } from '../client'; import type { TransactionEvent } from '../types/event'; import type { SpanLink } from '../types/link'; @@ -103,7 +104,7 @@ export class SentrySpan implements Span { this._attributes = {}; this.setAttributes({ [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op, + [SENTRY_OP]: spanContext.op, ...spanContext.attributes, }); @@ -270,7 +271,7 @@ export class SentrySpan implements Span { return { data: this._attributes, description: this._name, - op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP], + op: this._attributes[SENTRY_OP], parent_span_id: this._parentSpanId, span_id: this._spanId, start_timestamp: this._startTime, diff --git a/packages/core/src/tracing/trace.ts b/packages/core/src/tracing/trace.ts index 1aa3818a9f1c..ff312712ee46 100644 --- a/packages/core/src/tracing/trace.ts +++ b/packages/core/src/tracing/trace.ts @@ -6,8 +6,8 @@ import { getMainCarrier } from '../carrier'; import { getClient, getCurrentScope, getIsolationScope, withScope } from '../currentScopes'; import { DEBUG_BUILD } from '../debug-build'; import type { Scope } from '../scope'; -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '../semanticAttributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; +import { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '../semanticAttributes'; import type { ClientOptions } from '../types/options'; import type { SentrySpanArguments, Span, SpanTimeInput } from '../types/span'; import type { StartSpanOptions } from '../types/startSpanOptions'; @@ -448,7 +448,7 @@ function parseSentrySpanArguments(options: StartSpanOptions): SentrySpanArgument // constructor only adds it after the sampling decision. An explicit `sentry.op` attribute wins. if (options.op) { initialCtx.attributes = { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: options.op, + [SENTRY_OP]: options.op, ...options.attributes, }; } @@ -633,7 +633,7 @@ function _shouldIgnoreStreamedSpan(client: Client | undefined, spanArguments: Se return shouldIgnoreSpan( { description: spanArguments.name || '', - op: spanArguments.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP] || spanArguments.op, + op: spanArguments.attributes?.[SENTRY_OP] || spanArguments.op, attributes: spanArguments.attributes, }, ignoreSpans, diff --git a/packages/core/src/utils/spanUtils.ts b/packages/core/src/utils/spanUtils.ts index 2bf38cdb5864..a643caeccaba 100644 --- a/packages/core/src/utils/spanUtils.ts +++ b/packages/core/src/utils/spanUtils.ts @@ -5,12 +5,8 @@ import { serializeAttributes } from '../attributes'; import { getMainCarrier } from '../carrier'; import { getCurrentScope } from '../currentScopes'; import type { Scope } from '../scope'; -import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_STATUS_MESSAGE } from '@sentry/conventions/attributes'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, -} from '../semanticAttributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_STATUS_MESSAGE, SENTRY_OP } from '@sentry/conventions/attributes'; +import { SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../semanticAttributes'; import type { SentrySpan } from '../tracing/sentrySpan'; import { isStatusErrorMessageValid, SPAN_STATUS_OK, SPAN_STATUS_UNSET } from '../tracing/spanstatus'; import { getCapturedScopesOnSpan } from '../tracing/utils'; @@ -190,7 +186,7 @@ export function spanToStaticSpanJSON(span: Span): SpanJSON { // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time timestamp: spanTimeInputToSeconds(endTime) || undefined, status: getStatusMessage(status), - op: attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP], + op: attributes[SENTRY_OP], origin: attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined, links: convertSpanLinksForEnvelope(links), }; diff --git a/packages/core/test/lib/tracing/spans/captureSpan.test.ts b/packages/core/test/lib/tracing/spans/captureSpan.test.ts index 06f83bea6b0a..5f72e42a622b 100644 --- a/packages/core/test/lib/tracing/spans/captureSpan.test.ts +++ b/packages/core/test/lib/tracing/spans/captureSpan.test.ts @@ -3,7 +3,6 @@ import type { Contexts, Span, StreamedSpanJSON } from '../../../../src'; import { captureSpan, debug, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, spanStreamingIntegration, @@ -33,6 +32,7 @@ import { SENTRY_ENVIRONMENT, SENTRY_RELEASE, SENTRY_SDK_INTEGRATIONS, + SENTRY_OP, } from '@sentry/conventions/attributes'; describe('captureSpan', () => { @@ -77,7 +77,7 @@ describe('captureSpan', () => { type: 'string', value: 'stream', }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'http.client', }, @@ -173,7 +173,7 @@ describe('captureSpan', () => { status: 'ok', is_segment: true, attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'http.client', }, @@ -269,7 +269,7 @@ describe('captureSpan', () => { status: 'ok', is_segment: true, attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { + [SENTRY_OP]: { type: 'string', value: 'http.client', }, @@ -350,7 +350,7 @@ describe('captureSpan', () => { is_segment: true, attributes: { [SENTRY_TRACE_LIFECYCLE]: { type: 'string', value: 'stream' }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'http.client' }, + [SENTRY_OP]: { type: 'string', value: 'http.client' }, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'manual' }, [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: { type: 'integer', value: 1 }, [SENTRY_SEGMENT_NAME]: { value: 'my-span', type: 'string' }, diff --git a/packages/core/test/lib/tracing/trace.test.ts b/packages/core/test/lib/tracing/trace.test.ts index e36effb86317..9f54b7e693c9 100644 --- a/packages/core/test/lib/tracing/trace.test.ts +++ b/packages/core/test/lib/tracing/trace.test.ts @@ -6,7 +6,6 @@ import { getMainCarrier, getTraceData, Scope, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, setAsyncContextStrategy, setCurrentClient, @@ -33,7 +32,7 @@ import { getActiveSpan, getRootSpan, getSpanDescendants, spanIsSampled } from '. import { getDefaultTestClientOptions, TestClient } from '../../mocks/client'; import { SUPPRESS_TRACING_KEY } from '../../../src/tracing/constants'; import { resetGlobals } from '../../testutils'; -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; const enum Type { Sync = 'sync', @@ -110,14 +109,14 @@ describe('startSpan', () => { }); try { await startSpan({ name: 'GET users/[id]' }, span => { - span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'http.server'); + span.setAttribute(SENTRY_OP, 'http.server'); return callback(); }); } catch { // } - expect(spanToJSON(_span!).attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual('http.server'); + expect(spanToJSON(_span!).attributes[SENTRY_OP]).toEqual('http.server'); }); it('creates a span with correct description', async () => { @@ -156,7 +155,7 @@ describe('startSpan', () => { try { await startSpan({ name: 'GET users/[id]' }, () => { return startSpan({ name: 'SELECT * from users' }, childSpan => { - childSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'db.query'); + childSpan.setAttribute(SENTRY_OP, 'db.query'); return callback(); }); }); @@ -168,7 +167,7 @@ describe('startSpan', () => { const spans = getSpanDescendants(_span!); expect(spans).toHaveLength(2); - expect(spanToJSON(spans[1]!).attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toEqual('db.query'); + expect(spanToJSON(spans[1]!).attributes[SENTRY_OP]).toEqual('db.query'); }); it('correctly sets the span origin', async () => { diff --git a/packages/core/test/lib/utils/spanUtils.test.ts b/packages/core/test/lib/utils/spanUtils.test.ts index e8ae4379b86f..c11a2fa3317d 100644 --- a/packages/core/test/lib/utils/spanUtils.test.ts +++ b/packages/core/test/lib/utils/spanUtils.test.ts @@ -1,10 +1,9 @@ -import { SENTRY_LINK_TYPE, SENTRY_STATUS_MESSAGE } from '@sentry/conventions/attributes'; +import { SENTRY_LINK_TYPE, SENTRY_STATUS_MESSAGE, SENTRY_OP } from '@sentry/conventions/attributes'; import { beforeEach, describe, expect, it, test } from 'vitest'; import { convertSpanLinksForEnvelope, getCurrentScope, Scope, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SentryNonRecordingSpan, SentrySpan, @@ -400,7 +399,7 @@ describe('spanToStaticSpanJSON', () => { attributes: { attr1: 'value1', attr2: 2, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'test op', + [SENTRY_OP]: 'test op', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto', }, status: { code: SPAN_STATUS_ERROR, message: 'unknown_error' }, @@ -417,7 +416,7 @@ describe('spanToStaticSpanJSON', () => { data: { attr1: 'value1', attr2: 2, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'test op', + [SENTRY_OP]: 'test op', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto', }, status: 'unknown_error', @@ -488,7 +487,7 @@ describe('spanToStaticSpanJSON', () => { attr2: 2, attr3: true, attr4: [1, 2, 3], - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'test op', + [SENTRY_OP]: 'test op', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto', }, links: [ @@ -586,7 +585,7 @@ describe('spanToStaticSpanJSON', () => { attributes: { attr1: 'value1', attr2: 2, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'test op', + [SENTRY_OP]: 'test op', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto', }, links: [ @@ -616,7 +615,7 @@ describe('spanToStaticSpanJSON', () => { attributes: { attr1: 'value1', attr2: 2, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'test op', + [SENTRY_OP]: 'test op', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto', [SENTRY_STATUS_MESSAGE]: 'unknown_error', }, @@ -683,7 +682,7 @@ describe('spanToStaticSpanJSON', () => { attr2: 2, attr3: true, attr4: [1, 2, 3], - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'test op', + [SENTRY_OP]: 'test op', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto', }, links: [ @@ -712,7 +711,7 @@ describe('spanToStaticSpanJSON', () => { attr2: { type: 'integer', value: 2 }, attr3: { type: 'boolean', value: true }, attr4: { type: 'array', value: [1, 2, 3] }, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: { type: 'string', value: 'test op' }, + [SENTRY_OP]: { type: 'string', value: 'test op' }, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: { type: 'string', value: 'auto' }, }, links: [ diff --git a/packages/deno/src/index.ts b/packages/deno/src/index.ts index 8db992d91e6a..cccdbf5f479c 100644 --- a/packages/deno/src/index.ts +++ b/packages/deno/src/index.ts @@ -81,6 +81,7 @@ export { supabaseIntegration, instrumentSupabaseClient, zodErrorsIntegration, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/effect/test/tracer.test.ts b/packages/effect/test/tracer.test.ts index a7aace022282..66ccf6cb9e0a 100644 --- a/packages/effect/test/tracer.test.ts +++ b/packages/effect/test/tracer.test.ts @@ -1,7 +1,8 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import { describe, expect, it } from '@effect/vitest'; import * as sentryCore from '@sentry/core'; import * as sentryCoreBrowser from '@sentry/core/browser'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { ServerRuntimeClient } from '@sentry/core/server'; import { Effect } from 'effect'; import * as Tracer from 'effect/Tracer'; @@ -202,9 +203,9 @@ describe.each(VARIANTS)('SentryEffectTracer ($variant)', ({ variant, tracer, spa const attributes = yield* attributesFor('my-operation'); expect(attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBeUndefined(); - expect(attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBeUndefined(); + expect(attributes?.[SENTRY_OP]).toBeUndefined(); expect(attributes).not.toHaveProperty(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN); - expect(attributes).not.toHaveProperty(SEMANTIC_ATTRIBUTE_SENTRY_OP); + expect(attributes).not.toHaveProperty(SENTRY_OP); }), ); @@ -213,7 +214,7 @@ describe.each(VARIANTS)('SentryEffectTracer ($variant)', ({ variant, tracer, spa const attributes = yield* attributesFor('http.server GET /api/users'); expect(attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBe('auto.http.effect'); - expect(attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('http.server'); + expect(attributes?.[SENTRY_OP]).toBe('http.server'); }), ); @@ -222,7 +223,7 @@ describe.each(VARIANTS)('SentryEffectTracer ($variant)', ({ variant, tracer, spa const attributes = yield* attributesFor('http.client GET https://api.example.com'); expect(attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBe('auto.http.effect'); - expect(attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('http.client'); + expect(attributes?.[SENTRY_OP]).toBe('http.client'); }), ); diff --git a/packages/elysia/src/index.ts b/packages/elysia/src/index.ts index cf35f6de4eb8..e5ddb8ee3726 100644 --- a/packages/elysia/src/index.ts +++ b/packages/elysia/src/index.ts @@ -95,6 +95,7 @@ export { getAutoPerformanceIntegrations, cron, parameterize, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/elysia/src/withElysia.ts b/packages/elysia/src/withElysia.ts index c68c192e3fa4..f423920872cc 100644 --- a/packages/elysia/src/withElysia.ts +++ b/packages/elysia/src/withElysia.ts @@ -18,7 +18,6 @@ import { getTraceData, hasSpanStreamingEnabled, REQUEST_HANDLER_SPAN_NAME_FALLBACK, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, setHttpStatus, startInactiveSpan, @@ -154,7 +153,7 @@ function instrumentLifecyclePhase( name: isStreamedRequestHandlerSpan ? context.route || REQUEST_HANDLER_SPAN_NAME_FALLBACK : phaseName, parentSpan: rootSpan, attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: op, + [SENTRY_OP]: op, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ELYSIA_ORIGIN, ...routeAttribute, }, @@ -169,7 +168,7 @@ function instrumentLifecyclePhase( name: isStreamedRequestHandlerSpan ? context.route || REQUEST_HANDLER_SPAN_NAME_FALLBACK : handlerName, parentSpan: phaseSpan, attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: op, + [SENTRY_OP]: op, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ELYSIA_ORIGIN, ...routeAttribute, // Streamed request handler spans are named after the route, so the diff --git a/packages/google-cloud-serverless/src/index.ts b/packages/google-cloud-serverless/src/index.ts index d789d83c91a8..8404d252e4b3 100644 --- a/packages/google-cloud-serverless/src/index.ts +++ b/packages/google-cloud-serverless/src/index.ts @@ -96,6 +96,7 @@ export { getAutoPerformanceIntegrations, cron, parameterize, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/nestjs/src/decorators.ts b/packages/nestjs/src/decorators.ts index e4690c988d7a..a7e41bacc1b2 100644 --- a/packages/nestjs/src/decorators.ts +++ b/packages/nestjs/src/decorators.ts @@ -1,6 +1,6 @@ import type { MonitorConfig } from '@sentry/core'; -import { CODE_FUNCTION_NAME } from '@sentry/conventions/attributes'; -import { captureException, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { CODE_FUNCTION_NAME, SENTRY_OP } from '@sentry/conventions/attributes'; +import { captureException, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import * as Sentry from '@sentry/node'; import { startSpan } from '@sentry/node'; import { isExpectedError } from './helpers'; @@ -43,7 +43,7 @@ export function SentryTraced(op: string = 'function') { name: propertyKey, attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.nestjs.sentry_traced', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: op, + [SENTRY_OP]: op, [CODE_FUNCTION_NAME]: propertyKey, }, }, diff --git a/packages/nestjs/test/decorators.test.ts b/packages/nestjs/test/decorators.test.ts index 9640244de437..8e6c083057ff 100644 --- a/packages/nestjs/test/decorators.test.ts +++ b/packages/nestjs/test/decorators.test.ts @@ -1,7 +1,7 @@ import 'reflect-metadata'; -import { CODE_FUNCTION_NAME } from '@sentry/conventions/attributes'; +import { CODE_FUNCTION_NAME, SENTRY_OP } from '@sentry/conventions/attributes'; import * as core from '@sentry/core'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { SentryCron, SentryExceptionCaptured, SentryTraced } from '../src/decorators'; import * as helpers from '../src/helpers'; @@ -42,7 +42,7 @@ describe('SentryTraced decorator', () => { name: 'testMethod', attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.nestjs.sentry_traced', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'test-operation', + [SENTRY_OP]: 'test-operation', [CODE_FUNCTION_NAME]: 'testMethod', }, }, @@ -76,7 +76,7 @@ describe('SentryTraced decorator', () => { name: 'testDefaultOp', attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.nestjs.sentry_traced', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', [CODE_FUNCTION_NAME]: 'testDefaultOp', }, }, @@ -110,7 +110,7 @@ describe('SentryTraced decorator', () => { name: 'syncMethod', attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.nestjs.sentry_traced', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'sync-operation', + [SENTRY_OP]: 'sync-operation', [CODE_FUNCTION_NAME]: 'syncMethod', }, }, diff --git a/packages/nextjs/src/common/utils/liveRootSpanAdapter.ts b/packages/nextjs/src/common/utils/liveRootSpanAdapter.ts index e80079fe68bd..be2c8b998316 100644 --- a/packages/nextjs/src/common/utils/liveRootSpanAdapter.ts +++ b/packages/nextjs/src/common/utils/liveRootSpanAdapter.ts @@ -1,6 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import type { Span } from '@sentry/core'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, spanToStaticSpanJSON } from '@sentry/core'; +import { spanToStaticSpanJSON } from '@sentry/core'; import type { MutableRootSpan } from '../../server/enhanceHandleRequestRootSpan'; /** @@ -24,7 +24,7 @@ export function createLiveRootSpanAdapter(span: Span): MutableRootSpan { span.setAttribute(SENTRY_SEGMENT_NAME_SOURCE, source); }, setOp: (op: string) => { - span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, op); + span.setAttribute(SENTRY_OP, op); }, }; } diff --git a/packages/nextjs/src/edge/index.ts b/packages/nextjs/src/edge/index.ts index c971bbafec91..564b8c4f39e6 100644 --- a/packages/nextjs/src/edge/index.ts +++ b/packages/nextjs/src/edge/index.ts @@ -10,7 +10,6 @@ import { hasSpanStreamingEnabled, HTTP_SPAN_NAME_FALLBACK, registerSpanErrorInstrumentation, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, spanToJSON, } from '@sentry/core'; @@ -165,7 +164,7 @@ export function init(options: VercelEdgeOptions = {}): void { // Make sure middleware spans get the right op if (spanAttributes?.[ATTR_NEXT_SPAN_TYPE] === 'Middleware.execute') { - span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, MIDDLEWARE); + span.setAttribute(SENTRY_OP, MIDDLEWARE); span.setAttribute(SENTRY_SEGMENT_NAME_SOURCE, 'url'); } diff --git a/packages/nextjs/test/common/liveRootSpanAdapter.test.ts b/packages/nextjs/test/common/liveRootSpanAdapter.test.ts index cd2f7a9fcac3..3e935f4fe8f9 100644 --- a/packages/nextjs/test/common/liveRootSpanAdapter.test.ts +++ b/packages/nextjs/test/common/liveRootSpanAdapter.test.ts @@ -1,5 +1,5 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SentrySpan, spanToStaticSpanJSON } from '@sentry/core'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; +import { SentrySpan, spanToStaticSpanJSON } from '@sentry/core'; import { describe, expect, it } from 'vitest'; import { createLiveRootSpanAdapter } from '../../src/common/utils/liveRootSpanAdapter'; @@ -12,7 +12,7 @@ describe('createLiveRootSpanAdapter', () => { expect(adapter.attributes.foo).toBe('bar'); adapter.setOp('http.server'); - expect(spanToStaticSpanJSON(span).data[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('http.server'); + expect(spanToStaticSpanJSON(span).data[SENTRY_OP]).toBe('http.server'); }); it('renames the span without stamping source=custom (preserves an existing source)', () => { diff --git a/packages/nextjs/test/server/enhanceHandleRequestRootSpan.test.ts b/packages/nextjs/test/server/enhanceHandleRequestRootSpan.test.ts index c25f9d79e650..743bb32b8d02 100644 --- a/packages/nextjs/test/server/enhanceHandleRequestRootSpan.test.ts +++ b/packages/nextjs/test/server/enhanceHandleRequestRootSpan.test.ts @@ -3,8 +3,8 @@ import { HTTP_RESPONSE_STATUS_CODE, HTTP_ROUTE, HTTP_STATUS_CODE, + SENTRY_OP, } from '@sentry/conventions/attributes'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP } from '@sentry/core'; import { describe, expect, it } from 'vitest'; import { ATTR_NEXT_ROUTE, ATTR_NEXT_SPAN_NAME, ATTR_NEXT_SPAN_TYPE } from '../../src/common/nextSpanAttributes'; import { TRANSACTION_ATTR_SENTRY_ROUTE_BACKFILL } from '../../src/common/span-attributes-with-logic-attached'; @@ -35,7 +35,7 @@ describe('enhanceHandleRequestRootSpan', () => { enhanceHandleRequestRootSpan(span); expect(getName()).toBe('GET /api/foo'); expect(getOp()).toBeUndefined(); - expect(span.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBeUndefined(); + expect(span.attributes[SENTRY_OP]).toBeUndefined(); }); it('sets http.server op and source=route for parameterized routes', () => { @@ -50,7 +50,7 @@ describe('enhanceHandleRequestRootSpan', () => { enhanceHandleRequestRootSpan(span); expect(getOp()).toBe('http.server'); - expect(span.attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('http.server'); + expect(span.attributes[SENTRY_OP]).toBe('http.server'); expect(getName()).toBe('GET /api/users/[id]'); expect(span.attributes[SENTRY_SEGMENT_NAME_SOURCE]).toBe('route'); expect(span.attributes[ATTR_NEXT_ROUTE]).toBe('/api/users/[id]'); @@ -192,14 +192,14 @@ describe('enhanceHandleRequestRootSpan', () => { name = n; }, setOp: (op: string) => { - attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] = op; + attributes[SENTRY_OP] = op; }, }; enhanceHandleRequestRootSpan(span); expect(name).toBe('middleware GET'); - expect(attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('middleware'); + expect(attributes[SENTRY_OP]).toBe('middleware'); }); it('rewrites GET /_error using the http.target attribute', () => { diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index deed6c7c0b65..4ca920d43784 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -113,6 +113,7 @@ export { setAttributes, setUser, setConversationId, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/node/src/integrations/fs/vendored/instrumentation.ts b/packages/node/src/integrations/fs/vendored/instrumentation.ts index c2effd4a23f1..23660cc7f7ff 100644 --- a/packages/node/src/integrations/fs/vendored/instrumentation.ts +++ b/packages/node/src/integrations/fs/vendored/instrumentation.ts @@ -14,11 +14,10 @@ * `error.type` (the syscall error code, e.g. `ENOENT`). */ -import { ERROR_TYPE } from '@sentry/conventions/attributes'; +import { ERROR_TYPE, SENTRY_OP } from '@sentry/conventions/attributes'; import { FILE } from '@sentry/conventions/op'; import type { Span, SpanAttributes } from '@sentry/core'; import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_STATUS_ERROR, getActiveSpan, @@ -101,7 +100,7 @@ function getSpanAttributes( config: FsInstrumentationConfig, ): SpanAttributes { const attributes: SpanAttributes = { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: SPAN_OP, + [SENTRY_OP]: SPAN_OP, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: SPAN_ORIGIN, }; diff --git a/packages/nuxt/test/runtime/hooks/updateRouteBeforeResponse.test.ts b/packages/nuxt/test/runtime/hooks/updateRouteBeforeResponse.test.ts index fec51364d935..9d6a84fa318f 100644 --- a/packages/nuxt/test/runtime/hooks/updateRouteBeforeResponse.test.ts +++ b/packages/nuxt/test/runtime/hooks/updateRouteBeforeResponse.test.ts @@ -1,5 +1,5 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; -import { getActiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_OP, SentrySpan } from '@sentry/core'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; +import { getActiveSpan, SentrySpan } from '@sentry/core'; import { afterEach, describe, expect, it, type Mock, vi } from 'vitest'; import { updateRouteBeforeResponse } from '../../../src/runtime/hooks/updateRouteBeforeResponse'; @@ -15,7 +15,7 @@ vi.mock(import('@sentry/core'), async importOriginal => { describe('updateRouteBeforeResponse', () => { const mockRootSpan = new SentrySpan({ attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.server', + [SENTRY_OP]: 'http.server', }, }); mockRootSpan.updateName = vi.fn(); diff --git a/packages/nuxt/test/runtime/hooks/wrapMiddlewareHandler.test.ts b/packages/nuxt/test/runtime/hooks/wrapMiddlewareHandler.test.ts index d7fb10fe2eef..c91f26abf59b 100644 --- a/packages/nuxt/test/runtime/hooks/wrapMiddlewareHandler.test.ts +++ b/packages/nuxt/test/runtime/hooks/wrapMiddlewareHandler.test.ts @@ -1,3 +1,4 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import * as SentryCore from '@sentry/core'; import * as SentryCoreServer from '@sentry/core/server'; import type { EventHandler, EventHandlerRequest, H3Event } from 'h3'; @@ -187,7 +188,7 @@ describe('wrapMiddlewareHandlerWithSentry', () => { expect.objectContaining({ name: 'object-middleware', attributes: expect.objectContaining({ - [SentryCore.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware', + [SENTRY_OP]: 'middleware', 'nuxt.middleware.name': 'object-middleware', }), }), @@ -218,7 +219,7 @@ describe('wrapMiddlewareHandlerWithSentry', () => { expect.objectContaining({ name: 'request-middleware.onRequest', attributes: expect.objectContaining({ - [SentryCore.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware', + [SENTRY_OP]: 'middleware', 'nuxt.middleware.name': 'request-middleware', 'nuxt.middleware.hook.name': 'onRequest', }), @@ -305,7 +306,7 @@ describe('wrapMiddlewareHandlerWithSentry', () => { expect.objectContaining({ name: 'response-middleware.onBeforeResponse', attributes: expect.objectContaining({ - [SentryCore.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware', + [SENTRY_OP]: 'middleware', 'nuxt.middleware.name': 'response-middleware', 'nuxt.middleware.hook.name': 'onBeforeResponse', }), @@ -517,7 +518,7 @@ describe('wrapMiddlewareHandlerWithSentry', () => { expect.objectContaining({ name: 'v2-middleware.middleware', attributes: expect.objectContaining({ - [SentryCore.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware', + [SENTRY_OP]: 'middleware', 'nuxt.middleware.name': 'v2-middleware', 'nuxt.middleware.hook.name': 'middleware', 'nuxt.middleware.hook.index': 0, @@ -596,7 +597,7 @@ describe('wrapMiddlewareHandlerWithSentry', () => { expect.objectContaining({ name: 'api-middleware', attributes: expect.objectContaining({ - [SentryCore.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'middleware', + [SENTRY_OP]: 'middleware', 'nuxt.middleware.name': 'api-middleware', 'http.request.method': 'GET', 'http.route': '/test-path', diff --git a/packages/opentelemetry/test/trace.test.ts b/packages/opentelemetry/test/trace.test.ts index 1b967dfc051a..957f034b801d 100644 --- a/packages/opentelemetry/test/trace.test.ts +++ b/packages/opentelemetry/test/trace.test.ts @@ -1,7 +1,7 @@ /* eslint-disable typescript/no-deprecated */ import type { Span, TimeInput } from '@opentelemetry/api'; import { context, ROOT_CONTEXT, trace, TraceFlags } from '@opentelemetry/api'; -import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_KIND } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_KIND, SENTRY_OP } from '@sentry/conventions/attributes'; import type { Event, Scope } from '@sentry/core'; import { getCapturedScopesOnSpan, @@ -10,7 +10,6 @@ import { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromSpan, getRootSpan, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, spanToJSON, @@ -232,7 +231,7 @@ describe('trace', () => { expect(getSpanAttributes(span)).toEqual({ [SENTRY_SEGMENT_NAME_SOURCE]: 'task', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.test.origin', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'my-op', + [SENTRY_OP]: 'my-op', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, }); }, @@ -627,7 +626,7 @@ describe('trace', () => { [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'task', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.test.origin', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'my-op', + [SENTRY_OP]: 'my-op', }); }); diff --git a/packages/react/src/reactrouter.tsx b/packages/react/src/reactrouter.tsx index 2110d4835cf0..2dbc01907fe6 100644 --- a/packages/react/src/reactrouter.tsx +++ b/packages/react/src/reactrouter.tsx @@ -12,7 +12,6 @@ import { hasSpanStreamingEnabled, NAVIGATION_SPAN_NAME_FALLBACK, PAGELOAD_SPAN_NAME_FALLBACK, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, spanToJSON, } from '@sentry/core'; @@ -287,7 +286,7 @@ function getActiveRootSpan(): Span | undefined { return undefined; } - const op = spanToJSON(rootSpan).attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]; + const op = spanToJSON(rootSpan).attributes[SENTRY_OP]; // Only use this root span if it is a pageload or navigation span return op === 'navigation' || op === 'pageload' ? rootSpan : undefined; diff --git a/packages/react/test/react-router.test.tsx b/packages/react/test/react-router.test.tsx index cb100633002f..7422c57878da 100644 --- a/packages/react/test/react-router.test.tsx +++ b/packages/react/test/react-router.test.tsx @@ -5,14 +5,8 @@ * directly from `react` / `react-router` so `reactRouterBrowserTracingIntegration()` can be used * without passing them in. */ -import { - createTransport, - getCurrentScope, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - setCurrentClient, -} from '@sentry/core'; -import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE } from '@sentry/conventions/attributes'; +import { createTransport, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, setCurrentClient } from '@sentry/core'; +import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE, SENTRY_OP } from '@sentry/conventions/attributes'; import { fireEvent, render } from '@testing-library/react'; import * as React from 'react'; import { MemoryRouter, Route, Routes, useNavigate } from 'react-router'; @@ -78,7 +72,7 @@ describe('@sentry/react/react-router', () => { name: 'Pageload', attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', // version-agnostic origin (no `_v6`/`_v7` suffix) [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.reactrouter', }, @@ -120,7 +114,7 @@ describe('@sentry/react/react-router', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/about', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter', }, }); diff --git a/packages/react/test/reactrouter-cross-usage.test.tsx b/packages/react/test/reactrouter-cross-usage.test.tsx index 3711626a27c2..6b312e8987ba 100644 --- a/packages/react/test/reactrouter-cross-usage.test.tsx +++ b/packages/react/test/reactrouter-cross-usage.test.tsx @@ -1,14 +1,8 @@ /** * @vitest-environment jsdom */ -import { - createTransport, - getCurrentScope, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - setCurrentClient, -} from '@sentry/core'; -import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE } from '@sentry/conventions/attributes'; +import { createTransport, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, setCurrentClient } from '@sentry/core'; +import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE, SENTRY_OP } from '@sentry/conventions/attributes'; import { render, waitFor } from '@testing-library/react'; import * as React from 'react'; import { act } from 'react'; @@ -667,7 +661,7 @@ describe('React Router cross usage of wrappers', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '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/settings', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -687,8 +681,8 @@ describe('React Router cross usage of wrappers', () => { const calls = mockStartBrowserTracingNavigationSpan.mock.calls; expect(calls[0]![1].name).toBe('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/settings'); expect(calls[1]![1].name).toBe('/profile'); - expect(calls[0]![1].attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('navigation'); - expect(calls[1]![1].attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('navigation'); + expect(calls[0]![1].attributes[SENTRY_OP]).toBe('navigation'); + expect(calls[1]![1].attributes[SENTRY_OP]).toBe('navigation'); }); it('should create separate transactions for rapid consecutive navigations', async () => { @@ -786,7 +780,7 @@ describe('React Router cross usage of wrappers', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/user/:id', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -808,7 +802,7 @@ describe('React Router cross usage of wrappers', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/user/:id', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -864,7 +858,7 @@ describe('React Router cross usage of wrappers', () => { expect(mockStartBrowserTracingNavigationSpan).toHaveBeenLastCalledWith(expect.any(BrowserClient), { name: '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/settings/*', attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }), }); }); @@ -912,7 +906,7 @@ describe('React Router cross usage of wrappers', () => { expect(mockStartBrowserTracingNavigationSpan).toHaveBeenCalledWith(expect.any(BrowserClient), { name: '/details/*', attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }), }); }); diff --git a/packages/react/test/reactrouter-descendant-routes.test.tsx b/packages/react/test/reactrouter-descendant-routes.test.tsx index 10804904f5e5..4754f55f4e55 100644 --- a/packages/react/test/reactrouter-descendant-routes.test.tsx +++ b/packages/react/test/reactrouter-descendant-routes.test.tsx @@ -1,14 +1,8 @@ /** * @vitest-environment jsdom */ -import { - createTransport, - getCurrentScope, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - setCurrentClient, -} from '@sentry/core'; -import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE } from '@sentry/conventions/attributes'; +import { createTransport, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, setCurrentClient } from '@sentry/core'; +import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE, SENTRY_OP } from '@sentry/conventions/attributes'; import { render } from '@testing-library/react'; import * as React from 'react'; import { @@ -177,7 +171,7 @@ describe('React Router Descendant Routes', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/child/:id', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -309,7 +303,7 @@ describe('React Router Descendant Routes', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/:orgId/:id', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -420,7 +414,7 @@ describe('React Router Descendant Routes', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/projects/:projectId/views/:viewId/:detailId', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -481,7 +475,7 @@ describe('React Router Descendant Routes', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/projects/:projectId/views/:viewId/:detailId', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -634,7 +628,7 @@ describe('React Router Descendant Routes', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/projects/:projectId/views/:viewId/:detailId', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); diff --git a/packages/react/test/reactrouterv3.test.tsx b/packages/react/test/reactrouterv3.test.tsx index e77d9584499b..24546d9eeffa 100644 --- a/packages/react/test/reactrouterv3.test.tsx +++ b/packages/react/test/reactrouterv3.test.tsx @@ -2,14 +2,8 @@ * @vitest-environment jsdom */ import { BrowserClient } from '@sentry/browser'; -import { - createTransport, - getCurrentScope, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - setCurrentClient, -} from '@sentry/core'; -import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE } from '@sentry/conventions/attributes'; +import { createTransport, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, setCurrentClient } from '@sentry/core'; +import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE, SENTRY_OP } from '@sentry/conventions/attributes'; import { render } from '@testing-library/react'; import * as React from 'react'; import { act } from 'react'; @@ -109,7 +103,7 @@ describe('browserTracingReactRouterV3', () => { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.reactrouter_v3', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', }, }); }); @@ -146,7 +140,7 @@ describe('browserTracingReactRouterV3', () => { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/about', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v3', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); @@ -160,7 +154,7 @@ describe('browserTracingReactRouterV3', () => { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/features', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v3', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); }); @@ -202,7 +196,7 @@ describe('browserTracingReactRouterV3', () => { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/users/:userid', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v3', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); expect(getCurrentScope().getScopeData().transactionName).toEqual('/users/:userid'); @@ -218,7 +212,7 @@ describe('browserTracingReactRouterV3', () => { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/teams/:teamId/details', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v3', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); expect(getCurrentScope().getScopeData().transactionName).toEqual('/teams/:teamId/details'); diff --git a/packages/react/test/reactrouterv4.test.tsx b/packages/react/test/reactrouterv4.test.tsx index 98c4da18df5a..c1d6bff53432 100644 --- a/packages/react/test/reactrouterv4.test.tsx +++ b/packages/react/test/reactrouterv4.test.tsx @@ -1,20 +1,14 @@ /** * @vitest-environment jsdom */ -import { - createTransport, - getCurrentScope, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - setCurrentClient, -} from '@sentry/core'; +import { createTransport, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, setCurrentClient } from '@sentry/core'; import { render } from '@testing-library/react'; import { createMemoryHistory } from 'history-4'; import * as React from 'react'; import { act } from 'react'; import { matchPath, Route, Router, Switch } from 'react-router-4'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE, SENTRY_OP } from '@sentry/conventions/attributes'; import { BrowserClient, reactRouterV4BrowserTracingIntegration, withSentryRouting } from '../src'; import type { RouteConfig } from '../src/reactrouter'; @@ -87,7 +81,7 @@ describe('browserTracingReactRouterV4', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.reactrouter_v4', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', }, }); }); @@ -132,7 +126,7 @@ describe('browserTracingReactRouterV4', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v4', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); @@ -145,7 +139,7 @@ describe('browserTracingReactRouterV4', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v4', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); }); @@ -204,7 +198,7 @@ describe('browserTracingReactRouterV4', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v4', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); }); @@ -241,7 +235,7 @@ describe('browserTracingReactRouterV4', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v4', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); expect(mockRootSpan.updateName).toHaveBeenCalledTimes(2); @@ -286,7 +280,7 @@ describe('browserTracingReactRouterV4', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v4', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); expect(mockRootSpan.updateName).toHaveBeenCalledTimes(2); @@ -309,7 +303,7 @@ describe('browserTracingReactRouterV4', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v4', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); expect(mockRootSpan.updateName).toHaveBeenCalledTimes(3); @@ -358,7 +352,7 @@ describe('browserTracingReactRouterV4', () => { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/organizations/:orgid/v1/:teamid', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v4', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); @@ -372,7 +366,7 @@ describe('browserTracingReactRouterV4', () => { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/organizations/:orgid', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v4', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); }); diff --git a/packages/react/test/reactrouterv5.test.tsx b/packages/react/test/reactrouterv5.test.tsx index 489735c46d47..7e25b9fbb4bc 100644 --- a/packages/react/test/reactrouterv5.test.tsx +++ b/packages/react/test/reactrouterv5.test.tsx @@ -1,20 +1,14 @@ /** * @vitest-environment jsdom */ -import { - createTransport, - getCurrentScope, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - setCurrentClient, -} from '@sentry/core'; +import { createTransport, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, setCurrentClient } from '@sentry/core'; import { render } from '@testing-library/react'; import { createMemoryHistory } from 'history-4'; import * as React from 'react'; import { act } from 'react'; import { matchPath, Route, Router, Switch } from 'react-router-5'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE, SENTRY_OP } from '@sentry/conventions/attributes'; import { BrowserClient, reactRouterV5BrowserTracingIntegration, withSentryRouting } from '../src'; import type { RouteConfig } from '../src/reactrouter'; @@ -87,7 +81,7 @@ describe('browserTracingReactRouterV5', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.reactrouter_v5', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', }, }); }); @@ -132,7 +126,7 @@ describe('browserTracingReactRouterV5', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v5', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); @@ -145,7 +139,7 @@ describe('browserTracingReactRouterV5', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v5', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); }); @@ -204,7 +198,7 @@ describe('browserTracingReactRouterV5', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v5', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); }); @@ -241,7 +235,7 @@ describe('browserTracingReactRouterV5', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v5', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); expect(mockRootSpan.updateName).toHaveBeenCalledTimes(2); @@ -286,7 +280,7 @@ describe('browserTracingReactRouterV5', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v5', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); expect(mockRootSpan.updateName).toHaveBeenCalledTimes(2); @@ -309,7 +303,7 @@ describe('browserTracingReactRouterV5', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v5', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', }, }); expect(mockRootSpan.updateName).toHaveBeenCalledTimes(3); @@ -357,7 +351,7 @@ describe('browserTracingReactRouterV5', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v5', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [URL_TEMPLATE]: '/organizations/:orgid/v1/:teamid', }, }); @@ -371,7 +365,7 @@ describe('browserTracingReactRouterV5', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v5', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [URL_TEMPLATE]: '/organizations/:orgid', }, }); diff --git a/packages/react/test/reactrouterv6.test.tsx b/packages/react/test/reactrouterv6.test.tsx index b4b94eb6c5ca..d22f2e445d49 100644 --- a/packages/react/test/reactrouterv6.test.tsx +++ b/packages/react/test/reactrouterv6.test.tsx @@ -1,14 +1,8 @@ /** * @vitest-environment jsdom */ -import { - createTransport, - getCurrentScope, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - setCurrentClient, -} from '@sentry/core'; -import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE } from '@sentry/conventions/attributes'; +import { createTransport, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, setCurrentClient } from '@sentry/core'; +import { SENTRY_SEGMENT_NAME_SOURCE, URL_TEMPLATE, SENTRY_OP } from '@sentry/conventions/attributes'; import { fireEvent, render } from '@testing-library/react'; import * as React from 'react'; import type { RouteObject } from 'react-router-6'; @@ -214,7 +208,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { name: 'Pageload', attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.reactrouter_v6', }, }); @@ -261,7 +255,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { name: 'Pageload', attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.reactrouter_v6', }, }); @@ -298,7 +292,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { name: 'Pageload', attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.reactrouter_v6', }, }); @@ -416,7 +410,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/about', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -503,7 +497,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '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/about/us', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -541,7 +535,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/about/:page', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -581,7 +575,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/stores/:storeId/products/:productId', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -629,7 +623,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/projects/:projectId/views/:viewId', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -679,7 +673,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/projects/:projectId/views/:viewId', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -731,7 +725,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/projects/:projectId/views/:viewId', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -771,7 +765,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/issues/:groupId/', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -811,7 +805,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/issues/:groupId/', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -883,7 +877,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { name: 'Pageload', attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.reactrouter_v6', }, }); @@ -1035,7 +1029,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/about', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -1087,7 +1081,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '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/about/us', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -1139,7 +1133,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/about/:page', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -1197,7 +1191,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/stores/:storeId/products/:productId', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -1279,7 +1273,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/projects/:projectId/views/:viewId', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -1359,7 +1353,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/param-page/:id/details/:superId', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -1516,7 +1510,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/issues/:groupId/', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); @@ -1556,7 +1550,7 @@ describe('reactRouterV6BrowserTracingIntegration', () => { attributes: { [SENTRY_SEGMENT_NAME_SOURCE]: 'route', [URL_TEMPLATE]: '/issues/:groupId/', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v6', }, }); diff --git a/packages/remix/src/cloudflare/index.ts b/packages/remix/src/cloudflare/index.ts index 543dd239a67e..36629df62a35 100644 --- a/packages/remix/src/cloudflare/index.ts +++ b/packages/remix/src/cloudflare/index.ts @@ -106,6 +106,7 @@ export { supabaseIntegration, instrumentSupabaseClient, zodErrorsIntegration, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/remix/src/server/index.ts b/packages/remix/src/server/index.ts index f18b713dac6b..00bc981926d9 100644 --- a/packages/remix/src/server/index.ts +++ b/packages/remix/src/server/index.ts @@ -84,6 +84,7 @@ export { rewriteFramesIntegration, Scope, SDK_VERSION, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/server-utils/src/ai/mastra/index.ts b/packages/server-utils/src/ai/mastra/index.ts index 10ca720d976c..48db51f77fcc 100644 --- a/packages/server-utils/src/ai/mastra/index.ts +++ b/packages/server-utils/src/ai/mastra/index.ts @@ -5,12 +5,11 @@ import { getActiveSpan, getClient, LRUMap, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_STATUS_ERROR, startInactiveSpan, } from '@sentry/core'; -import { GEN_AI_RESPONSE_MODEL } from '@sentry/conventions/attributes'; +import { GEN_AI_RESPONSE_MODEL, SENTRY_OP } from '@sentry/conventions/attributes'; import { DEBUG_BUILD } from '../../debug-build'; import type { GenAiOptions } from '../core/utils'; import { resolveAIRecordingOptions } from '../core/utils'; @@ -144,7 +143,7 @@ export class SentryMastraExporter implements MastraObservabilityExporter { parentSpan: parentSpan ?? activeSpan, attributes: { ...this._attributesFor(span), - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getOperation(span.type)?.op, + [SENTRY_OP]: getOperation(span.type)?.op, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: MASTRA_ORIGIN, }, }); diff --git a/packages/server-utils/src/integrations/graphql/graphql-dc-subscriber.ts b/packages/server-utils/src/integrations/graphql/graphql-dc-subscriber.ts index 68f7c832fe14..57aea8904715 100644 --- a/packages/server-utils/src/integrations/graphql/graphql-dc-subscriber.ts +++ b/packages/server-utils/src/integrations/graphql/graphql-dc-subscriber.ts @@ -1,10 +1,14 @@ import type { TracingChannel } from 'node:diagnostics_channel'; -import { GRAPHQL_DOCUMENT, GRAPHQL_OPERATION_NAME, GRAPHQL_OPERATION_TYPE } from '@sentry/conventions/attributes'; +import { + GRAPHQL_DOCUMENT, + GRAPHQL_OPERATION_NAME, + GRAPHQL_OPERATION_TYPE, + SENTRY_OP, +} from '@sentry/conventions/attributes'; import { GRAPHQL } from '@sentry/conventions/op'; import { getClient, hasSpanStreamingEnabled, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_STATUS_ERROR, startInactiveSpan, @@ -160,7 +164,7 @@ function setupParseChannel(tracingChannel: GraphqlTracingChannelFactory): void { name: client && hasSpanStreamingEnabled(client) ? `GraphQL ${PROCESSING_TYPE_PARSE}` : SPAN_NAME_PARSE, attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: GRAPHQL, + [SENTRY_OP]: GRAPHQL, [GRAPHQL_PROCESSING_TYPE]: PROCESSING_TYPE_PARSE, }, }); @@ -177,7 +181,7 @@ function setupValidateChannel(tracingChannel: GraphqlTracingChannelFactory): voi name: client && hasSpanStreamingEnabled(client) ? `GraphQL ${PROCESSING_TYPE_VALIDATE}` : SPAN_NAME_VALIDATE, attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: GRAPHQL, + [SENTRY_OP]: GRAPHQL, [GRAPHQL_PROCESSING_TYPE]: PROCESSING_TYPE_VALIDATE, [GRAPHQL_DOCUMENT]: collectGraphqlDocument(data.document), }, @@ -213,7 +217,7 @@ function setupOperationChannel( : getOperationSpanName(data.operationType, data.operationName, fallbackName), attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: GRAPHQL, + [SENTRY_OP]: GRAPHQL, [GRAPHQL_PROCESSING_TYPE]: PROCESSING_TYPE_EXECUTE, [GRAPHQL_OPERATION_TYPE]: data.operationType, [GRAPHQL_OPERATION_NAME]: data.operationName || undefined, @@ -255,7 +259,7 @@ function setupResolveChannel(tracingChannel: GraphqlTracingChannelFactory, ignor : `${SPAN_NAME_RESOLVE} ${data.fieldPath}`, attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: GRAPHQL, + [SENTRY_OP]: GRAPHQL, [GRAPHQL_PROCESSING_TYPE]: PROCESSING_TYPE_RESOLVE, [GRAPHQL_FIELD_NAME]: data.fieldName, [GRAPHQL_FIELD_PATH]: data.fieldPath, diff --git a/packages/server-utils/src/integrations/graphql/resolvers.ts b/packages/server-utils/src/integrations/graphql/resolvers.ts index 8e028d939ee8..d5c36ccd4915 100644 --- a/packages/server-utils/src/integrations/graphql/resolvers.ts +++ b/packages/server-utils/src/integrations/graphql/resolvers.ts @@ -6,13 +6,13 @@ * call runs). Resolver spans use the same origin/op/field attributes as the native subscriber. */ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import { GRAPHQL } from '@sentry/conventions/op'; import type { Span, SpanAttributes } from '@sentry/core'; import { getClient, hasSpanStreamingEnabled, isObjectLike, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_STATUS_ERROR, startInactiveSpan, @@ -183,7 +183,7 @@ function createFieldIfNotExists( function createResolverSpan(info: GraphQLResolveInfo, path: string[], parentSpan?: Span): Span { const attributes: SpanAttributes = { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: GRAPHQL, + [SENTRY_OP]: GRAPHQL, [GRAPHQL_PROCESSING_TYPE]: PROCESSING_TYPE_RESOLVE, [GRAPHQL_FIELD_NAME]: info.fieldName, [GRAPHQL_FIELD_PATH]: path.join('.'), diff --git a/packages/server-utils/src/integrations/graphql/spans.ts b/packages/server-utils/src/integrations/graphql/spans.ts index 16f27d8a5a9c..fb0ef6a624b7 100644 --- a/packages/server-utils/src/integrations/graphql/spans.ts +++ b/packages/server-utils/src/integrations/graphql/spans.ts @@ -5,13 +5,17 @@ * arguments of the injected `parse`/`validate`/`execute` calls rather than graphql's native events. */ -import { GRAPHQL_DOCUMENT, GRAPHQL_OPERATION_NAME, GRAPHQL_OPERATION_TYPE } from '@sentry/conventions/attributes'; +import { + GRAPHQL_DOCUMENT, + GRAPHQL_OPERATION_NAME, + GRAPHQL_OPERATION_TYPE, + SENTRY_OP, +} from '@sentry/conventions/attributes'; import { GRAPHQL } from '@sentry/conventions/op'; import type { Span } from '@sentry/core'; import { getClient, hasSpanStreamingEnabled, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_STATUS_ERROR, startInactiveSpan, @@ -41,7 +45,7 @@ import type { const BASE_ATTRIBUTES = { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN, - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: GRAPHQL, + [SENTRY_OP]: GRAPHQL, } as const; export function startParseSpan(): Span { diff --git a/packages/server-utils/src/integrations/redis/redis-cache.ts b/packages/server-utils/src/integrations/redis/redis-cache.ts index ac74bee358f4..bdc860872a6d 100644 --- a/packages/server-utils/src/integrations/redis/redis-cache.ts +++ b/packages/server-utils/src/integrations/redis/redis-cache.ts @@ -7,17 +7,11 @@ import { NETWORK_PEER_PORT, SERVER_ADDRESS, SERVER_PORT, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { CACHE_GET, CACHE_PUT, CACHE_REMOVE } from '@sentry/conventions/op'; import type { Span, SpanAttributes } from '@sentry/core'; -import { - CACHE_OPERATION_NAMES, - getClient, - hasSpanStreamingEnabled, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - spanToJSON, - truncate, -} from '@sentry/core'; +import { CACHE_OPERATION_NAMES, getClient, hasSpanStreamingEnabled, spanToJSON, truncate } from '@sentry/core'; // Runtime-agnostic on purpose: imports nothing from `node:*` and touches `Buffer` only inside // function bodies (never at module load), so bundling this into an edge runtime is safe and the @@ -174,7 +168,7 @@ export function getRedisCacheAttributes( } const attributes: SpanAttributes = { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: cacheOperation, + [SENTRY_OP]: cacheOperation, [CACHE_KEY]: safeKey, [CACHE_OPERATION]: CACHE_OPERATION_NAMES[cacheOperation], }; @@ -208,7 +202,7 @@ export function getRedisCacheAttributes( * meaningless. */ export function applyCacheResponseAttributes(span: Span, response: unknown): void { - const op = spanToJSON(span).attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP]; + const op = spanToJSON(span).attributes[SENTRY_OP]; if (op !== CACHE_GET && op !== CACHE_PUT) { return; } diff --git a/packages/server-utils/test/ai/lib/tracing/workers-ai.test.ts b/packages/server-utils/test/ai/lib/tracing/workers-ai.test.ts index bc282e0348bc..8e7c4d840d11 100644 --- a/packages/server-utils/test/ai/lib/tracing/workers-ai.test.ts +++ b/packages/server-utils/test/ai/lib/tracing/workers-ai.test.ts @@ -11,11 +11,11 @@ import { GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, GEN_AI_USAGE_TOTAL_TOKENS, + SENTRY_OP, } from '@sentry/conventions/attributes'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { getMainCarrier, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, setCurrentClient, @@ -70,7 +70,7 @@ describe('instrumentWorkersAiClient', () => { */ const ALWAYS_RECORDED = { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.cloudflare.workers_ai', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.chat', + [SENTRY_OP]: 'gen_ai.chat', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'custom', [GEN_AI_PROVIDER_NAME]: 'cloudflare.workers_ai', @@ -188,7 +188,7 @@ describe('instrumentWorkersAiClient', () => { expect(span.description).toBe('evaluate typesafe/jev'); expect(span.data).toEqual({ [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.cloudflare.workers_ai', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.evaluate', + [SENTRY_OP]: 'gen_ai.evaluate', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SENTRY_SEGMENT_NAME_SOURCE]: 'custom', [GEN_AI_PROVIDER_NAME]: 'cloudflare.workers_ai', diff --git a/packages/solid/src/solidrouter.ts b/packages/solid/src/solidrouter.ts index a9e133da3a97..41f440b66fe0 100644 --- a/packages/solid/src/solidrouter.ts +++ b/packages/solid/src/solidrouter.ts @@ -21,7 +21,6 @@ import { getClient, hasSpanStreamingEnabled, NAVIGATION_SPAN_NAME_FALLBACK, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, filterCollectedUrl, } from '@sentry/core'; @@ -153,7 +152,7 @@ function withSentryRouterRoot(Root: Component): Component { name: 'Pageload', attributes: expect.objectContaining({ [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', }), }), @@ -105,7 +99,7 @@ describe('solidRouterBrowserTracingIntegration', () => { name: 'Pageload', attributes: expect.objectContaining({ [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', }), }), @@ -150,7 +144,7 @@ describe('solidRouterBrowserTracingIntegration', () => { expect(span.name).toBe(parametrizedRoute); expect(span.attributes).toMatchObject({ [SENTRY_SEGMENT_NAME_SOURCE]: 'route', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.solid.solidrouter', }); @@ -186,7 +180,7 @@ describe('solidRouterBrowserTracingIntegration', () => { name: '/about', attributes: expect.objectContaining({ [SENTRY_SEGMENT_NAME_SOURCE]: 'route', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.solid.solidrouter', }), }), diff --git a/packages/solidstart/src/server/index.ts b/packages/solidstart/src/server/index.ts index bc01f6bb9906..d8a151159551 100644 --- a/packages/solidstart/src/server/index.ts +++ b/packages/solidstart/src/server/index.ts @@ -88,6 +88,7 @@ export { rewriteFramesIntegration, Scope, SDK_VERSION, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/solidstart/test/client/solidrouter.test.tsx b/packages/solidstart/test/client/solidrouter.test.tsx index 226868db256d..8a64b1f1c5ac 100644 --- a/packages/solidstart/test/client/solidrouter.test.tsx +++ b/packages/solidstart/test/client/solidrouter.test.tsx @@ -1,13 +1,7 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import { spanToJSON } from '@sentry/browser'; import type { Span } from '@sentry/core'; -import { - createTransport, - getCurrentScope, - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - setCurrentClient, -} from '@sentry/core'; +import { createTransport, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, setCurrentClient } from '@sentry/core'; import type { MemoryHistory } from '@solidjs/router'; import { createMemoryHistory, MemoryRouter, Navigate, Route } from '@solidjs/router'; import { render, waitFor } from '@solidjs/testing-library'; @@ -74,7 +68,7 @@ describe('solidRouterBrowserTracingIntegration', () => { name: 'Pageload', attributes: expect.objectContaining({ [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', }), }), @@ -105,7 +99,7 @@ describe('solidRouterBrowserTracingIntegration', () => { name: '/', attributes: expect.objectContaining({ [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', + [SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser', }), }), @@ -150,7 +144,7 @@ describe('solidRouterBrowserTracingIntegration', () => { expect(span.name).toBe(parametrizedRoute); expect(span.attributes).toMatchObject({ [SENTRY_SEGMENT_NAME_SOURCE]: 'route', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.solidstart.solidrouter', }); @@ -186,7 +180,7 @@ describe('solidRouterBrowserTracingIntegration', () => { name: '/about', attributes: expect.objectContaining({ [SENTRY_SEGMENT_NAME_SOURCE]: 'route', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', + [SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.solidstart.solidrouter', }), }), diff --git a/packages/solidstart/test/server/withServerActionInstrumentation.test.ts b/packages/solidstart/test/server/withServerActionInstrumentation.test.ts index b196f7a78a2a..2fe8b328b9ad 100644 --- a/packages/solidstart/test/server/withServerActionInstrumentation.test.ts +++ b/packages/solidstart/test/server/withServerActionInstrumentation.test.ts @@ -1,11 +1,10 @@ -import { SENTRY_SEGMENT_NAME_SOURCE, CODE_FUNCTION_NAME } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, CODE_FUNCTION_NAME, SENTRY_OP } from '@sentry/conventions/attributes'; import * as SentryCore from '@sentry/core'; import * as SentryCoreServer from '@sentry/core/server'; import * as SentryNode from '@sentry/node'; import { createTransport, NodeClient, - SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, setCurrentClient, spanToJSON, @@ -101,7 +100,7 @@ describe('withServerActionInstrumentation', () => { expect.objectContaining({ name: 'getPrefecture', attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', [CODE_FUNCTION_NAME]: 'getPrefecture', [SENTRY_SEGMENT_NAME_SOURCE]: 'component', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.solidstart', @@ -128,7 +127,7 @@ describe('withServerActionInstrumentation', () => { const span = new SentryCore.SentrySpan({ attributes: { 'http.target': '/_server', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.server', + [SENTRY_OP]: 'http.server', }, }); mockGetActiveSpan.mockReturnValue(span); @@ -153,7 +152,7 @@ describe('withServerActionInstrumentation', () => { const span = new SentryCore.SentrySpan({ attributes: { 'url.path': '/_server', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.server', + [SENTRY_OP]: 'http.server', }, }); mockGetActiveSpan.mockReturnValue(span); diff --git a/packages/sveltekit/src/server/index.ts b/packages/sveltekit/src/server/index.ts index cff338b62ed0..a0883d508e5b 100644 --- a/packages/sveltekit/src/server/index.ts +++ b/packages/sveltekit/src/server/index.ts @@ -87,6 +87,7 @@ export { rewriteFramesIntegration, Scope, SDK_VERSION, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/sveltekit/src/worker/index.ts b/packages/sveltekit/src/worker/index.ts index 22927842682c..1730aac31865 100644 --- a/packages/sveltekit/src/worker/index.ts +++ b/packages/sveltekit/src/worker/index.ts @@ -53,6 +53,7 @@ export { rewriteFramesIntegration, Scope, SDK_VERSION, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, diff --git a/packages/sveltekit/test/client/load.test.ts b/packages/sveltekit/test/client/load.test.ts index 616326565f46..c071dc2c0fb8 100644 --- a/packages/sveltekit/test/client/load.test.ts +++ b/packages/sveltekit/test/client/load.test.ts @@ -1,6 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import type { Client } from '@sentry/core'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import * as SentryCore from '@sentry/core'; import * as SentrySvelte from '@sentry/svelte'; import type { Load } from '@sveltejs/kit'; @@ -106,7 +106,7 @@ describe('wrapLoadWithSentry', () => { expect(mockStartSpan).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'load', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', [SENTRY_SEGMENT_NAME_SOURCE]: 'route', @@ -136,7 +136,7 @@ describe('wrapLoadWithSentry', () => { expect(mockStartSpan).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'load', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', [SENTRY_SEGMENT_NAME_SOURCE]: 'url', @@ -202,7 +202,7 @@ describe('wrapLoadWithSentry', () => { expect(mockStartSpan).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'load', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', [SENTRY_SEGMENT_NAME_SOURCE]: 'route', @@ -223,7 +223,7 @@ describe('wrapLoadWithSentry', () => { expect(mockStartSpan).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'load', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', [SENTRY_SEGMENT_NAME_SOURCE]: 'url', diff --git a/packages/sveltekit/test/server-common/integrations/svelteKitSpans.test.ts b/packages/sveltekit/test/server-common/integrations/svelteKitSpans.test.ts index 3412e9376b25..0b258dd51ee3 100644 --- a/packages/sveltekit/test/server-common/integrations/svelteKitSpans.test.ts +++ b/packages/sveltekit/test/server-common/integrations/svelteKitSpans.test.ts @@ -1,5 +1,6 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import type { SpanJSON, StreamedSpanJSON, TransactionEvent } from '@sentry/core'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import { describe, expect, it } from 'vitest'; import { _enhanceKitSpan, @@ -47,7 +48,7 @@ describe('svelteKitSpansIntegration', () => { expect(event.spans).toHaveLength(1); expect(event.spans?.[0]?.op).toBe('function'); expect(event.spans?.[0]?.origin).toBe('auto.http.sveltekit'); - expect(event.spans?.[0]?.data[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('function'); + expect(event.spans?.[0]?.data[SENTRY_OP]).toBe('function'); expect(event.spans?.[0]?.data[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBe('auto.http.sveltekit'); }); @@ -74,7 +75,7 @@ describe('svelteKitSpansIntegration', () => { expect(span.op).toBe(op); expect(span.origin).toBe(origin); - expect(span.data[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe(op); + expect(span.data[SENTRY_OP]).toBe(op); expect(span.data[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBe(origin); }); @@ -88,7 +89,7 @@ describe('svelteKitSpansIntegration', () => { expect(span.op).toBeUndefined(); expect(span.origin).toBeUndefined(); - expect(span.data[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBeUndefined(); + expect(span.data[SENTRY_OP]).toBeUndefined(); expect(span.data[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBeUndefined(); }); @@ -98,7 +99,7 @@ describe('svelteKitSpansIntegration', () => { op: 'http.server', origin: 'auto.http.sveltekit', data: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.server', + [SENTRY_OP]: 'http.server', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.sveltekit', }, span_id: '123', @@ -108,7 +109,7 @@ describe('svelteKitSpansIntegration', () => { _enhanceKitSpan(rootHandleSpan); - expect(rootHandleSpan.data[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('http.server'); + expect(rootHandleSpan.data[SENTRY_OP]).toBe('http.server'); expect(rootHandleSpan.data[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBe('auto.http.sveltekit'); expect(rootHandleSpan.op).toBe('http.server'); expect(rootHandleSpan.origin).toBe('auto.http.sveltekit'); @@ -118,7 +119,7 @@ describe('svelteKitSpansIntegration', () => { const span = { description: 'someOtherSpan', data: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'db', + [SENTRY_OP]: 'db', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.pg', }, op: 'db', @@ -132,7 +133,7 @@ describe('svelteKitSpansIntegration', () => { expect(span.op).toBe('db'); expect(span.origin).toBe('auto.db.pg'); - expect(span.data[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('db'); + expect(span.data[SENTRY_OP]).toBe('db'); expect(span.data[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBe('auto.db.pg'); }); @@ -142,7 +143,7 @@ describe('svelteKitSpansIntegration', () => { description: 'sveltekit.resolve', origin: 'auto.custom.origin', data: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'custom.op', + [SENTRY_OP]: 'custom.op', }, span_id: '123', trace_id: 'abc', @@ -152,7 +153,7 @@ describe('svelteKitSpansIntegration', () => { _enhanceKitSpan(span); expect(span.origin).toBe('auto.custom.origin'); - expect(span.data[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('custom.op'); + expect(span.data[SENTRY_OP]).toBe('custom.op'); }); it('overwrites previously set "manual" origins on sveltekit spans', () => { @@ -161,7 +162,7 @@ describe('svelteKitSpansIntegration', () => { description: 'sveltekit.resolve', origin: 'manual', data: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'custom.op', + [SENTRY_OP]: 'custom.op', }, span_id: '123', trace_id: 'abc', @@ -171,7 +172,7 @@ describe('svelteKitSpansIntegration', () => { _enhanceKitSpan(span); expect(span.origin).toBe('auto.http.sveltekit'); - expect(span.data[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('custom.op'); + expect(span.data[SENTRY_OP]).toBe('custom.op'); }); }); @@ -202,7 +203,7 @@ describe('svelteKitSpansIntegration', () => { _enhanceKitSpanStreamed(span); - expect(span.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe(op); + expect(span.attributes?.[SENTRY_OP]).toBe(op); expect(span.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBe(origin); expect(span.attributes?.['sentry.description']).toBe(spanName); }); @@ -212,7 +213,7 @@ describe('svelteKitSpansIntegration', () => { _enhanceKitSpanStreamed(span); - expect(span.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBeUndefined(); + expect(span.attributes?.[SENTRY_OP]).toBeUndefined(); expect(span.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBeUndefined(); expect(span.attributes?.['sentry.description']).toBeUndefined(); }); @@ -221,14 +222,14 @@ describe('svelteKitSpansIntegration', () => { const rootHandleSpan = makeStreamedSpan({ name: 'sveltekit.handle.root', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.server', + [SENTRY_OP]: 'http.server', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.sveltekit', }, }); _enhanceKitSpanStreamed(rootHandleSpan); - expect(rootHandleSpan.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('http.server'); + expect(rootHandleSpan.attributes?.[SENTRY_OP]).toBe('http.server'); expect(rootHandleSpan.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBe('auto.http.sveltekit'); }); @@ -236,14 +237,14 @@ describe('svelteKitSpansIntegration', () => { const span = makeStreamedSpan({ name: 'someOtherSpan', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'db', + [SENTRY_OP]: 'db', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.pg', }, }); _enhanceKitSpanStreamed(span); - expect(span.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('db'); + expect(span.attributes?.[SENTRY_OP]).toBe('db'); expect(span.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBe('auto.db.pg'); }); @@ -252,14 +253,14 @@ describe('svelteKitSpansIntegration', () => { const span = makeStreamedSpan({ name: 'sveltekit.resolve', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'custom.op', + [SENTRY_OP]: 'custom.op', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.custom.origin', }, }); _enhanceKitSpanStreamed(span); - expect(span.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('custom.op'); + expect(span.attributes?.[SENTRY_OP]).toBe('custom.op'); expect(span.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBe('auto.custom.origin'); }); @@ -278,14 +279,14 @@ describe('svelteKitSpansIntegration', () => { const span = makeStreamedSpan({ name: 'sveltekit.resolve', attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'custom.op', + [SENTRY_OP]: 'custom.op', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual', }, }); _enhanceKitSpanStreamed(span); - expect(span.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP]).toBe('custom.op'); + expect(span.attributes?.[SENTRY_OP]).toBe('custom.op'); expect(span.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]).toBe('auto.http.sveltekit'); }); }); diff --git a/packages/sveltekit/test/server-common/load.test.ts b/packages/sveltekit/test/server-common/load.test.ts index 4dc513b778c7..99433faeb3f3 100644 --- a/packages/sveltekit/test/server-common/load.test.ts +++ b/packages/sveltekit/test/server-common/load.test.ts @@ -1,6 +1,6 @@ -import { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes'; +import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP } from '@sentry/conventions/attributes'; import type { Client, Event } from '@sentry/core'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; import * as SentryCore from '@sentry/core'; import { NodeClient, setCurrentClient } from '@sentry/node'; import type { Load, ServerLoad } from '@sveltejs/kit'; @@ -166,7 +166,7 @@ describe('wrapLoadWithSentry calls `startSpan`', () => { expect(mockStartSpan).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'load', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', [SENTRY_SEGMENT_NAME_SOURCE]: 'route', @@ -187,7 +187,7 @@ describe('wrapLoadWithSentry calls `startSpan`', () => { expect(mockStartSpan).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'load', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', [SENTRY_SEGMENT_NAME_SOURCE]: 'url', @@ -259,7 +259,7 @@ describe('wrapServerLoadWithSentry calls `startSpan`', () => { data: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit.server', [SENTRY_SEGMENT_NAME_SOURCE]: 'url', - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'load', 'http.request.method': 'GET', 'url.path': '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/users/123', @@ -301,7 +301,7 @@ describe('wrapServerLoadWithSentry calls `startSpan`', () => { expect(mockStartSpan).toHaveBeenCalledWith( expect.objectContaining({ attributes: expect.objectContaining({ - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', }), name: '/users/[id]', // <-- this shows that the route was still accessed }), @@ -356,7 +356,7 @@ describe('with span streaming enabled', () => { expect(mockStartSpan).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'load', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', [SENTRY_SEGMENT_NAME_SOURCE]: 'route', @@ -377,7 +377,7 @@ describe('with span streaming enabled', () => { expect(mockStartSpan).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'load', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', [SENTRY_SEGMENT_NAME_SOURCE]: 'url', @@ -397,7 +397,7 @@ describe('with span streaming enabled', () => { expect(mockStartSpan).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'load', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit.server', [SENTRY_SEGMENT_NAME_SOURCE]: 'route', diff --git a/packages/sveltekit/test/server-common/serverRoute.test.ts b/packages/sveltekit/test/server-common/serverRoute.test.ts index 72efa31c1a7e..5a4564565bb8 100644 --- a/packages/sveltekit/test/server-common/serverRoute.test.ts +++ b/packages/sveltekit/test/server-common/serverRoute.test.ts @@ -1,13 +1,10 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import type { Client } from '@sentry/core'; import * as SentryCore from '@sentry/core'; import type { NumericRange, RequestEvent } from '@sveltejs/kit'; import { error, redirect } from '@sveltejs/kit'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - wrapServerRouteWithSentry, -} from '../../src/server'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, wrapServerRouteWithSentry } from '../../src/server'; describe('wrapServerRouteWithSentry', () => { const originalRouteHandler = vi.fn(); @@ -37,7 +34,7 @@ describe('wrapServerRouteWithSentry', () => { expect(startSpanSpy).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'GET', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', 'http.request.method': 'GET', @@ -60,7 +57,7 @@ describe('wrapServerRouteWithSentry', () => { expect(startSpanSpy).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'GET', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', 'http.request.method': 'GET', @@ -93,7 +90,7 @@ describe('wrapServerRouteWithSentry', () => { expect(startSpanSpy).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'GET', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', 'http.request.method': 'GET', @@ -115,7 +112,7 @@ describe('wrapServerRouteWithSentry', () => { expect(startSpanSpy).toHaveBeenCalledWith( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + [SENTRY_OP]: 'function', 'code.function.name': 'GET', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', 'http.request.method': 'GET', diff --git a/packages/vercel-edge/src/index.ts b/packages/vercel-edge/src/index.ts index 30d4a428eefb..6d0b6e6a0962 100644 --- a/packages/vercel-edge/src/index.ts +++ b/packages/vercel-edge/src/index.ts @@ -83,6 +83,7 @@ export { instrumentSupabaseClient, zodErrorsIntegration, consoleIntegration, + // oxlint-disable-next-line typescript/no-deprecated SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, From 5dffe5922d1a1417eb9d935a67ff07dee1f42565 Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Fri, 2 Oct 2026 14:06:00 +0200 Subject: [PATCH 2/2] ref(core): Use SENTRY_OP in E2E fixtures Co-Authored-By: GPT-6 --- .../test-applications/angular-19/package.json | 1 + .../angular-19/tests/performance.test.ts | 12 +++++++----- .../nuxt-4-static/package.json | 1 + .../nuxt-4-static/tests/cache.test.ts | 11 ++++++----- .../nuxt-4-static/tests/storage-aliases.test.ts | 11 ++++++----- .../nuxt-4-static/tests/storage.test.ts | 17 +++++++++-------- .../nuxt-4-static/tests/tracing.server.test.ts | 3 ++- .../solidstart-static/package.json | 1 + .../tests/performance.server.test.ts | 5 +++-- 9 files changed, 36 insertions(+), 26 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/angular-19/package.json b/dev-packages/e2e-tests/test-applications/angular-19/package.json index e3d141736b9d..417939441749 100644 --- a/dev-packages/e2e-tests/test-applications/angular-19/package.json +++ b/dev-packages/e2e-tests/test-applications/angular-19/package.json @@ -36,6 +36,7 @@ "@angular/cli": "^19.0.0", "@angular/compiler-cli": "^19.0.0", "@playwright/test": "~1.63.0", + "@sentry/conventions": "0.25.0", "@sentry-internal/test-utils": "link:../../../test-utils", "@sentry/core": "file:../../packed/sentry-core-packed.tgz", "@types/jasmine": "~5.1.0", diff --git a/dev-packages/e2e-tests/test-applications/angular-19/tests/performance.test.ts b/dev-packages/e2e-tests/test-applications/angular-19/tests/performance.test.ts index d6e4e0215ede..a9e2b94e214e 100644 --- a/dev-packages/e2e-tests/test-applications/angular-19/tests/performance.test.ts +++ b/dev-packages/e2e-tests/test-applications/angular-19/tests/performance.test.ts @@ -1,5 +1,7 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; +// Cannot use @sentry/angular here due to build stuff import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; // The `angular-19 (streamed)` variant builds the app with `traceLifecycle: 'stream'`, which emits @@ -264,7 +266,7 @@ test.describe('TraceDirective', () => { expect.arrayContaining([ expect.objectContaining({ data: { - ['sentry.op']: 'ui.mount', + [SENTRY_OP]: 'ui.mount', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.angular.trace_directive', 'ui.component_name': 'sample-component', }, @@ -276,7 +278,7 @@ test.describe('TraceDirective', () => { }), expect.objectContaining({ data: { - ['sentry.op']: 'ui.mount', + [SENTRY_OP]: 'ui.mount', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.angular.trace_directive', 'ui.component_name': 'app-sample-component', }, @@ -310,7 +312,7 @@ test.describe('TraceClass Decorator', () => { expect(classDecoratorSpan).toEqual( expect.objectContaining({ data: { - ['sentry.op']: 'ui.mount', + [SENTRY_OP]: 'ui.mount', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.angular.trace_class_decorator', 'ui.component_name': 'ComponentTrackingComponent', }, @@ -343,7 +345,7 @@ test.describe('TraceMethod Decorator', () => { expect(ngInitSpan).toEqual( expect.objectContaining({ data: { - ['sentry.op']: 'function', + [SENTRY_OP]: 'function', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.angular.trace_method_decorator', 'code.function.name': 'ngOnInit', }, @@ -374,7 +376,7 @@ test.describe('TraceMethod Decorator', () => { expect(ngAfterViewInitSpan).toEqual( expect.objectContaining({ data: { - ['sentry.op']: 'function', + [SENTRY_OP]: 'function', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.angular.trace_method_decorator', 'code.function.name': 'ngAfterViewInit', }, diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4-static/package.json b/dev-packages/e2e-tests/test-applications/nuxt-4-static/package.json index e77ada5ee0d9..fc4a77a4cedc 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4-static/package.json +++ b/dev-packages/e2e-tests/test-applications/nuxt-4-static/package.json @@ -26,6 +26,7 @@ }, "devDependencies": { "@playwright/test": "~1.63.0", + "@sentry/conventions": "0.25.0", "@sentry-internal/test-utils": "link:../../../test-utils" }, "volta": { diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/cache.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/cache.test.ts index 4faf24382636..677322ccae16 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/cache.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/cache.test.ts @@ -1,3 +1,4 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; @@ -42,7 +43,7 @@ test.describe('Cache Instrumentation', () => { ); if (cacheMissSpan) { expect(cacheMissSpan.data).toMatchObject({ - ['sentry.op']: 'cache.get', + [SENTRY_OP]: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_HIT]: false, 'db.operation.name': 'getItem', @@ -59,7 +60,7 @@ test.describe('Cache Instrumentation', () => { ); if (cacheHitSpan) { expect(cacheHitSpan.data).toMatchObject({ - ['sentry.op']: 'cache.get', + [SENTRY_OP]: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_HIT]: true, 'db.operation.name': 'getItem', @@ -78,7 +79,7 @@ test.describe('Cache Instrumentation', () => { ); if (cacheSetSpan) { expect(cacheSetSpan.data).toMatchObject({ - ['sentry.op']: 'cache.put', + [SENTRY_OP]: 'cache.put', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', 'db.operation.name': 'setItem', 'db.collection.name': expect.stringMatching(/^(cache)?$/), @@ -133,10 +134,10 @@ test.describe('Cache Instrumentation', () => { expect(allCacheSpans?.length).toBeGreaterThan(0); // Get all getItem operations - const allGetItemSpans = allCacheSpans?.filter(span => span.data?.['sentry.op'] === 'cache.get'); + const allGetItemSpans = allCacheSpans?.filter(span => span.data?.[SENTRY_OP] === 'cache.get'); // Get all setItem operations - const allSetItemSpans = allCacheSpans?.filter(span => span.data?.['sentry.op'] === 'cache.put'); + const allSetItemSpans = allCacheSpans?.filter(span => span.data?.[SENTRY_OP] === 'cache.put'); // We should have both get and set operations expect(allGetItemSpans?.length).toBeGreaterThan(0); diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage-aliases.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage-aliases.test.ts index c1e2a0d9b33c..2d56c4cd5449 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage-aliases.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage-aliases.test.ts @@ -1,3 +1,4 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; @@ -28,7 +29,7 @@ test.describe('Storage Instrumentation - Aliases', () => { const setSpan = setSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('alias:user')); expect(setSpan).toBeDefined(); expect(setSpan?.data).toMatchObject({ - ['sentry.op']: 'cache.put', + [SENTRY_OP]: 'cache.put', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('alias:user'), 'db.operation.name': 'setItem', @@ -43,7 +44,7 @@ test.describe('Storage Instrumentation - Aliases', () => { const getSpan = getSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('alias:user')); expect(getSpan).toBeDefined(); expect(getSpan?.data).toMatchObject({ - ['sentry.op']: 'cache.get', + [SENTRY_OP]: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('alias:user'), [SEMANTIC_ATTRIBUTE_CACHE_HIT]: true, @@ -59,7 +60,7 @@ test.describe('Storage Instrumentation - Aliases', () => { const hasSpan = hasSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('alias:user')); expect(hasSpan).toBeDefined(); expect(hasSpan?.data).toMatchObject({ - ['sentry.op']: 'cache.get', + [SENTRY_OP]: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('alias:user'), [SEMANTIC_ATTRIBUTE_CACHE_HIT]: true, @@ -75,7 +76,7 @@ test.describe('Storage Instrumentation - Aliases', () => { const delSpan = removeSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('alias:temp1')); expect(delSpan).toBeDefined(); expect(delSpan?.data).toMatchObject({ - ['sentry.op']: 'cache.remove', + [SENTRY_OP]: 'cache.remove', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('alias:temp1'), 'db.operation.name': 'removeItem', @@ -87,7 +88,7 @@ test.describe('Storage Instrumentation - Aliases', () => { const removeSpan = removeSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('alias:temp2')); expect(removeSpan).toBeDefined(); expect(removeSpan?.data).toMatchObject({ - ['sentry.op']: 'cache.remove', + [SENTRY_OP]: 'cache.remove', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('alias:temp2'), 'db.operation.name': 'removeItem', diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage.test.ts index 675dd5e5e759..e16a0213c0a2 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/storage.test.ts @@ -1,3 +1,4 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; @@ -28,7 +29,7 @@ test.describe('Storage Instrumentation', () => { const setItemSpan = setItemSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('user:123')); expect(setItemSpan).toBeDefined(); expect(setItemSpan?.data).toMatchObject({ - ['sentry.op']: 'cache.put', + [SENTRY_OP]: 'cache.put', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('user:123'), 'db.operation.name': 'setItem', @@ -45,7 +46,7 @@ test.describe('Storage Instrumentation', () => { ); expect(setItemRawSpan).toBeDefined(); expect(setItemRawSpan?.data).toMatchObject({ - ['sentry.op']: 'cache.put', + [SENTRY_OP]: 'cache.put', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('raw:data'), 'db.operation.name': 'setItemRaw', @@ -59,7 +60,7 @@ test.describe('Storage Instrumentation', () => { const hasItemSpan = hasItemSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('user:123')); expect(hasItemSpan).toBeDefined(); expect(hasItemSpan?.data).toMatchObject({ - ['sentry.op']: 'cache.get', + [SENTRY_OP]: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('user:123'), [SEMANTIC_ATTRIBUTE_CACHE_HIT]: true, @@ -74,7 +75,7 @@ test.describe('Storage Instrumentation', () => { const getItemSpan = getItemSpans.find(span => span.data?.[SEMANTIC_ATTRIBUTE_CACHE_KEY] === prefixKey('user:123')); expect(getItemSpan).toBeDefined(); expect(getItemSpan?.data).toMatchObject({ - ['sentry.op']: 'cache.get', + [SENTRY_OP]: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('user:123'), [SEMANTIC_ATTRIBUTE_CACHE_HIT]: true, @@ -92,7 +93,7 @@ test.describe('Storage Instrumentation', () => { ); expect(getItemRawSpan).toBeDefined(); expect(getItemRawSpan?.data).toMatchObject({ - ['sentry.op']: 'cache.get', + [SENTRY_OP]: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('raw:data'), [SEMANTIC_ATTRIBUTE_CACHE_HIT]: true, @@ -105,7 +106,7 @@ test.describe('Storage Instrumentation', () => { const getKeysSpans = findSpansByMethod('getKeys'); expect(getKeysSpans.length).toBeGreaterThanOrEqual(1); expect(getKeysSpans[0]?.data).toMatchObject({ - ['sentry.op']: 'cache.get', + [SENTRY_OP]: 'cache.get', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', 'db.operation.name': 'getKeys', 'db.collection.name': 'test-storage', @@ -120,7 +121,7 @@ test.describe('Storage Instrumentation', () => { ); expect(removeItemSpan).toBeDefined(); expect(removeItemSpan?.data).toMatchObject({ - ['sentry.op']: 'cache.remove', + [SENTRY_OP]: 'cache.remove', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', [SEMANTIC_ATTRIBUTE_CACHE_KEY]: prefixKey('batch:1'), 'db.operation.name': 'removeItem', @@ -132,7 +133,7 @@ test.describe('Storage Instrumentation', () => { const clearSpans = findSpansByMethod('clear'); expect(clearSpans.length).toBeGreaterThanOrEqual(1); expect(clearSpans[0]?.data).toMatchObject({ - ['sentry.op']: 'cache.remove', + [SENTRY_OP]: 'cache.remove', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.cache.nuxt', 'db.operation.name': 'clear', 'db.collection.name': 'test-storage', diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/tracing.server.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/tracing.server.test.ts index 7df64f73d8c8..1a2dc1744613 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/tracing.server.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4-static/tests/tracing.server.test.ts @@ -1,3 +1,4 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import { expect, test } from '@playwright/test'; import { waitForError, waitForTransaction } from '@sentry-internal/test-utils'; import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/nuxt'; @@ -14,7 +15,7 @@ test('sends a server action transaction on pageload', async ({ page }) => { expect(transaction.contexts.trace).toEqual( expect.objectContaining({ data: expect.objectContaining({ - ['sentry.op']: 'http.server', + [SENTRY_OP]: 'http.server', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.http_server', }), }), diff --git a/dev-packages/e2e-tests/test-applications/solidstart-static/package.json b/dev-packages/e2e-tests/test-applications/solidstart-static/package.json index ebc880b29186..2d4607681775 100644 --- a/dev-packages/e2e-tests/test-applications/solidstart-static/package.json +++ b/dev-packages/e2e-tests/test-applications/solidstart-static/package.json @@ -18,6 +18,7 @@ }, "devDependencies": { "@playwright/test": "~1.63.0", + "@sentry/conventions": "0.25.0", "@sentry-internal/test-utils": "link:../../../test-utils", "@solidjs/meta": "^0.29.4", "@solidjs/router": "^1.0.0", diff --git a/dev-packages/e2e-tests/test-applications/solidstart-static/tests/performance.server.test.ts b/dev-packages/e2e-tests/test-applications/solidstart-static/tests/performance.server.test.ts index 935b718dcda8..c593a0fd396d 100644 --- a/dev-packages/e2e-tests/test-applications/solidstart-static/tests/performance.server.test.ts +++ b/dev-packages/e2e-tests/test-applications/solidstart-static/tests/performance.server.test.ts @@ -1,3 +1,4 @@ +import { SENTRY_OP } from '@sentry/conventions/attributes'; import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/solidstart'; @@ -16,7 +17,7 @@ test('sends a server action transaction on pageload', async ({ page }) => { expect.objectContaining({ description: 'getPrefecture', data: { - ['sentry.op']: 'function', + [SENTRY_OP]: 'function', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.solidstart', 'code.function.name': 'getPrefecture', }, @@ -41,7 +42,7 @@ test('sends a server action transaction on client navigation', async ({ page }) expect.objectContaining({ description: 'getPrefecture', data: { - ['sentry.op']: 'function', + [SENTRY_OP]: 'function', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.solidstart', 'code.function.name': 'getPrefecture', },