From 361c22d435086e9a0a89fd29269fd8034d0c7d8e Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 15 Feb 2024 12:30:07 +0000 Subject: [PATCH 01/19] ref: Migrate transaction source from metadata to attributes --- .../envelope-header-transaction-name/init.js | 3 +- .../src/tracing/dynamicSamplingContext.ts | 5 +- packages/core/src/tracing/transaction.ts | 15 +++-- .../tracing/dynamicSamplingContext.test.ts | 13 +++-- .../core/test/lib/tracing/transaction.test.ts | 26 ++------- .../common/withServerActionInstrumentation.ts | 6 +- .../test/integration/transactions.test.ts | 58 ++++++++++++------- packages/node/test/integrations/http.test.ts | 6 +- .../opentelemetry-node/src/spanprocessor.ts | 4 +- packages/opentelemetry/src/spanExporter.ts | 5 +- .../test/integration/transactions.test.ts | 6 +- packages/opentelemetry/test/trace.test.ts | 8 ++- packages/remix/src/client/performance.tsx | 8 +-- packages/remix/src/utils/instrumentServer.ts | 3 +- packages/sveltekit/src/client/load.ts | 11 ++-- packages/sveltekit/src/server/handle.ts | 3 +- packages/sveltekit/src/server/load.ts | 13 +++-- .../src/browser/browserTracingIntegration.ts | 23 ++------ .../src/browser/browsertracing.ts | 23 ++------ .../tracing-internal/src/browser/router.ts | 9 ++- packages/types/src/span.ts | 4 +- packages/types/src/transaction.ts | 8 +-- packages/utils/src/requestdata.ts | 9 +-- 23 files changed, 138 insertions(+), 131 deletions(-) diff --git a/dev-packages/browser-integration-tests/suites/tracing/envelope-header-transaction-name/init.js b/dev-packages/browser-integration-tests/suites/tracing/envelope-header-transaction-name/init.js index e28325fcf78e..579523ee2015 100644 --- a/dev-packages/browser-integration-tests/suites/tracing/envelope-header-transaction-name/init.js +++ b/dev-packages/browser-integration-tests/suites/tracing/envelope-header-transaction-name/init.js @@ -1,4 +1,5 @@ import * as Sentry from '@sentry/browser'; +import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '@sentry/browser'; import { Integrations } from '@sentry/tracing'; window.Sentry = Sentry; @@ -17,4 +18,4 @@ scope.addEventProcessor(event => { event.transaction = 'testTransactionDSC'; return event; }); -scope.getTransaction().setMetadata({ source: 'custom' }); +scope.getTransaction().setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'custom'); diff --git a/packages/core/src/tracing/dynamicSamplingContext.ts b/packages/core/src/tracing/dynamicSamplingContext.ts index d7fe3872b42f..e5bc279a1ef9 100644 --- a/packages/core/src/tracing/dynamicSamplingContext.ts +++ b/packages/core/src/tracing/dynamicSamplingContext.ts @@ -3,6 +3,7 @@ import { dropUndefinedKeys } from '@sentry/utils'; import { DEFAULT_ENVIRONMENT } from '../constants'; import { getClient } from '../exports'; +import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes'; import { getRootSpan } from '../utils/getRootSpan'; import { spanIsSampled, spanToJSON } from '../utils/spanUtils'; @@ -66,7 +67,7 @@ export function getDynamicSamplingContextFromSpan(span: Span): Readonly { name: 'tx', metadata: { sampleRate: 0.56, - source: 'route', + }, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route', }, sampled: true, }); @@ -97,9 +98,11 @@ describe('getDynamicSamplingContextFromSpan', () => { const transaction = new Transaction({ name: 'tx', metadata: { - source: 'url', sampleRate: 0.56, }, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url', + }, }); const dsc = getDynamicSamplingContextFromSpan(transaction); @@ -112,8 +115,8 @@ describe('getDynamicSamplingContextFromSpan', () => { ])('%s', (_: string, source) => { const transaction = startInactiveSpan({ name: 'tx', - metadata: { - ...(source && { source: source as TransactionSource }), + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source, }, }); diff --git a/packages/core/test/lib/tracing/transaction.test.ts b/packages/core/test/lib/tracing/transaction.test.ts index 415c0448f78e..fa6abde9f545 100644 --- a/packages/core/test/lib/tracing/transaction.test.ts +++ b/packages/core/test/lib/tracing/transaction.test.ts @@ -16,7 +16,7 @@ describe('transaction', () => { transaction.name = 'new name'; expect(transaction.name).toEqual('new name'); - expect(transaction.metadata.source).toEqual('custom'); + expect(transaction.attributes['sentry.source']).toEqual('custom'); }); it('allows to update the name via setName', () => { @@ -27,7 +27,7 @@ describe('transaction', () => { transaction.setName('new name'); expect(transaction.name).toEqual('new name'); - expect(transaction.metadata.source).toEqual('custom'); + expect(transaction.attributes['sentry.source']).toEqual('custom'); }); it('allows to update the name via updateName', () => { @@ -38,7 +38,7 @@ describe('transaction', () => { transaction.updateName('new name'); expect(transaction.name).toEqual('new name'); - expect(transaction.metadata.source).toEqual('route'); + expect(transaction.attributes['sentry.source']).toEqual('route'); }); /* eslint-enable deprecation/deprecation */ }); @@ -48,15 +48,13 @@ describe('transaction', () => { it('works with defaults', () => { const transaction = new Transaction({ name: 'span name' }); expect(transaction.metadata).toEqual({ - source: 'custom', spanMetadata: {}, }); }); it('allows to set metadata in constructor', () => { - const transaction = new Transaction({ name: 'span name', metadata: { source: 'url', request: {} } }); + const transaction = new Transaction({ name: 'span name', metadata: { request: {} } }); expect(transaction.metadata).toEqual({ - source: 'url', spanMetadata: {}, request: {}, }); @@ -80,28 +78,16 @@ describe('transaction', () => { }); it('allows to update metadata via setMetadata', () => { - const transaction = new Transaction({ name: 'span name', metadata: { source: 'url', request: {} } }); + const transaction = new Transaction({ name: 'span name', metadata: {} }); - transaction.setMetadata({ source: 'route' }); + transaction.setMetadata({ request: {} }); expect(transaction.metadata).toEqual({ - source: 'route', spanMetadata: {}, request: {}, }); }); - it('allows to update metadata via setAttribute', () => { - const transaction = new Transaction({ name: 'span name', metadata: { source: 'url', request: {} } }); - - transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'route'); - - expect(transaction.metadata).toEqual({ - source: 'route', - spanMetadata: {}, - request: {}, - }); - }); /* eslint-enable deprecation/deprecation */ }); }); diff --git a/packages/nextjs/src/common/withServerActionInstrumentation.ts b/packages/nextjs/src/common/withServerActionInstrumentation.ts index 1f4cdaf992c9..0c54a4f5b665 100644 --- a/packages/nextjs/src/common/withServerActionInstrumentation.ts +++ b/packages/nextjs/src/common/withServerActionInstrumentation.ts @@ -1,4 +1,4 @@ -import { getIsolationScope } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, getIsolationScope } from '@sentry/core'; import { addTracingExtensions, captureException, @@ -94,8 +94,8 @@ async function withServerActionInstrumentationImplementation { diff --git a/packages/node-experimental/test/integration/transactions.test.ts b/packages/node-experimental/test/integration/transactions.test.ts index 7de51c7811e6..23edcca3c579 100644 --- a/packages/node-experimental/test/integration/transactions.test.ts +++ b/packages/node-experimental/test/integration/transactions.test.ts @@ -32,7 +32,9 @@ describe('Integration | Transactions', () => { { op: 'test op', name: 'test name', - source: 'task', + attributes: { + [Sentry.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task', + }, origin: 'auto.test', metadata: { requestPath: 'test-path' }, }, @@ -188,26 +190,34 @@ describe('Integration | Transactions', () => { Sentry.addBreadcrumb({ message: 'test breadcrumb 1', timestamp: 123456 }); Sentry.withIsolationScope(() => { - Sentry.startSpan({ op: 'test op', name: 'test name', source: 'task', origin: 'auto.test' }, span => { - Sentry.addBreadcrumb({ message: 'test breadcrumb 2', timestamp: 123456 }); + Sentry.startSpan( + { + op: 'test op', + name: 'test name', + origin: 'auto.test', + attributes: { [Sentry.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task' }, + }, + span => { + Sentry.addBreadcrumb({ message: 'test breadcrumb 2', timestamp: 123456 }); - span.setAttributes({ - 'test.outer': 'test value', - }); + span.setAttributes({ + 'test.outer': 'test value', + }); - const subSpan = Sentry.startInactiveSpan({ name: 'inner span 1' }); - subSpan.end(); + const subSpan = Sentry.startInactiveSpan({ name: 'inner span 1' }); + subSpan.end(); - Sentry.setTag('test.tag', 'test value'); + Sentry.setTag('test.tag', 'test value'); - Sentry.startSpan({ name: 'inner span 2' }, innerSpan => { - Sentry.addBreadcrumb({ message: 'test breadcrumb 3', timestamp: 123456 }); + Sentry.startSpan({ name: 'inner span 2' }, innerSpan => { + Sentry.addBreadcrumb({ message: 'test breadcrumb 3', timestamp: 123456 }); - innerSpan.setAttributes({ - 'test.inner': 'test value', + innerSpan.setAttributes({ + 'test.inner': 'test value', + }); }); - }); - }); + }, + ); }); Sentry.withIsolationScope(() => { @@ -511,12 +521,20 @@ describe('Integration | Transactions', () => { context.with( trace.setSpanContext(setPropagationContextOnContext(context.active(), propagationContext), spanContext), () => { - Sentry.startSpan({ op: 'test op', name: 'test name', source: 'task', origin: 'auto.test' }, () => { - const subSpan = Sentry.startInactiveSpan({ name: 'inner span 1' }); - subSpan.end(); + Sentry.startSpan( + { + op: 'test op', + name: 'test name', + origin: 'auto.test', + attributes: { [Sentry.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task' }, + }, + () => { + const subSpan = Sentry.startInactiveSpan({ name: 'inner span 1' }); + subSpan.end(); - Sentry.startSpan({ name: 'inner span 2' }, () => {}); - }); + Sentry.startSpan({ name: 'inner span 2' }, () => {}); + }, + ); }, ); diff --git a/packages/node/test/integrations/http.test.ts b/packages/node/test/integrations/http.test.ts index b7e2149c74c9..a055aca30948 100644 --- a/packages/node/test/integrations/http.test.ts +++ b/packages/node/test/integrations/http.test.ts @@ -1,6 +1,6 @@ import * as http from 'http'; import * as https from 'https'; -import type { Span } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, Span } from '@sentry/core'; import { Transaction } from '@sentry/core'; import { getCurrentScope, makeMain, setUser, spanToJSON, startInactiveSpan } from '@sentry/core'; import { Hub, addTracingExtensions } from '@sentry/core'; @@ -162,7 +162,7 @@ describe('tracing', () => { it('adds the transaction name to the the baggage header if a valid transaction source is set', async () => { nock('http://dogs.are.great').get('/').reply(200); - createTransactionOnScope({}, { metadata: { source: 'route' } }); + createTransactionOnScope({}, { attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route' } }); const request = http.get({ host: 'http://dogs.are.great/', headers: { baggage: 'dog=great' } }); const baggageHeader = request.getHeader('baggage') as string; @@ -176,7 +176,7 @@ describe('tracing', () => { it('does not add the transaction name to the the baggage header if url transaction source is set', async () => { nock('http://dogs.are.great').get('/').reply(200); - createTransactionOnScope({}, { metadata: { source: 'url' } }); + createTransactionOnScope({}, { attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url' } }); const request = http.get({ host: 'http://dogs.are.great/', headers: { baggage: 'dog=great' } }); const baggageHeader = request.getHeader('baggage') as string; diff --git a/packages/opentelemetry-node/src/spanprocessor.ts b/packages/opentelemetry-node/src/spanprocessor.ts index 9996fc73111f..f79dc9f5b2e4 100644 --- a/packages/opentelemetry-node/src/spanprocessor.ts +++ b/packages/opentelemetry-node/src/spanprocessor.ts @@ -179,7 +179,9 @@ function getTraceData(otelSpan: OtelSpan, parentContext: Context): Partial { { op: 'test op', name: 'test name', - source: 'task', origin: 'auto.test', metadata: { requestPath: 'test-path' }, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task', + }, }, span => { addBreadcrumb({ message: 'test breadcrumb 2', timestamp: 123456 }); diff --git a/packages/opentelemetry/test/trace.test.ts b/packages/opentelemetry/test/trace.test.ts index 5785eb7fdb00..fa6e1d09dad8 100644 --- a/packages/opentelemetry/test/trace.test.ts +++ b/packages/opentelemetry/test/trace.test.ts @@ -218,8 +218,10 @@ describe('trace', () => { name: 'outer', op: 'my-op', origin: 'auto.test.origin', - source: 'task', metadata: { requestPath: 'test-path' }, + attributes: { + [InternalSentrySemanticAttributes.SOURCE]: 'task', + }, }, span => { expect(span).toBeDefined(); @@ -335,7 +337,9 @@ describe('trace', () => { name: 'outer', op: 'my-op', origin: 'auto.test.origin', - source: 'task', + attributes: { + [InternalSentrySemanticAttributes.SOURCE]: 'task', + }, metadata: { requestPath: 'test-path' }, }); diff --git a/packages/remix/src/client/performance.tsx b/packages/remix/src/client/performance.tsx index 10e91837149d..347e8a2f73e8 100644 --- a/packages/remix/src/client/performance.tsx +++ b/packages/remix/src/client/performance.tsx @@ -78,8 +78,8 @@ export function startPageloadSpan(): void { op: 'pageload', origin: 'auto.pageload.remix', tags: DEFAULT_TAGS, - metadata: { - source: 'url', + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url', }, }; @@ -103,8 +103,8 @@ function startNavigationSpan(matches: RouteMatch[]): void { op: 'navigation', origin: 'auto.navigation.remix', tags: DEFAULT_TAGS, - metadata: { - source: 'route', + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route', }, }; diff --git a/packages/remix/src/utils/instrumentServer.ts b/packages/remix/src/utils/instrumentServer.ts index 7e1822aa8612..793fdbe60f6b 100644 --- a/packages/remix/src/utils/instrumentServer.ts +++ b/packages/remix/src/utils/instrumentServer.ts @@ -1,6 +1,7 @@ /* eslint-disable max-lines */ import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, + SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, getActiveSpan, getActiveTransaction, getClient, @@ -415,13 +416,13 @@ export function startRequestHandlerTransaction( op: 'http.server', attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.remix', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source, }, tags: { method: request.method, }, ...traceparentData, metadata: { - source, dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext, }, }); diff --git a/packages/sveltekit/src/client/load.ts b/packages/sveltekit/src/client/load.ts index 3e454bdb364a..621015badbf1 100644 --- a/packages/sveltekit/src/client/load.ts +++ b/packages/sveltekit/src/client/load.ts @@ -1,4 +1,9 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, handleCallbackErrors, startSpan } from '@sentry/core'; +import { + SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, + SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, + handleCallbackErrors, + startSpan, +} from '@sentry/core'; import { captureException } from '@sentry/svelte'; import { addNonEnumerableProperty, objectify } from '@sentry/utils'; import type { LoadEvent } from '@sveltejs/kit'; @@ -86,12 +91,10 @@ export function wrapLoadWithSentry any>(origLoad: T) op: 'function.sveltekit.load', attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: routeId ? 'route' : 'url', }, name: routeId ? routeId : event.url.pathname, status: 'ok', - metadata: { - source: routeId ? 'route' : 'url', - }, }, () => handleCallbackErrors(() => wrappingTarget.apply(thisArg, [patchedEvent]), sendErrorToSentry), ); diff --git a/packages/sveltekit/src/server/handle.ts b/packages/sveltekit/src/server/handle.ts index 42f95c905ca5..2fa5a16b07b4 100644 --- a/packages/sveltekit/src/server/handle.ts +++ b/packages/sveltekit/src/server/handle.ts @@ -1,5 +1,6 @@ import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, + SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, getActiveSpan, getCurrentScope, getDynamicSamplingContextFromSpan, @@ -178,12 +179,12 @@ async function instrumentHandle( op: 'http.server', attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.sveltekit', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: event.route?.id ? 'route' : 'url', }, name: `${event.request.method} ${event.route?.id || event.url.pathname}`, status: 'ok', ...traceparentData, metadata: { - source: event.route?.id ? 'route' : 'url', dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext, }, }, diff --git a/packages/sveltekit/src/server/load.ts b/packages/sveltekit/src/server/load.ts index 9728dcf47b5b..0d73b27a9d1b 100644 --- a/packages/sveltekit/src/server/load.ts +++ b/packages/sveltekit/src/server/load.ts @@ -1,5 +1,10 @@ /* eslint-disable @sentry-internal/sdk/no-optional-chaining */ -import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getCurrentScope, startSpan } from '@sentry/core'; +import { + SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, + SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, + getCurrentScope, + startSpan, +} from '@sentry/core'; import { captureException } from '@sentry/node'; import { addNonEnumerableProperty, objectify } from '@sentry/utils'; import type { LoadEvent, ServerLoadEvent } from '@sveltejs/kit'; @@ -69,12 +74,10 @@ export function wrapLoadWithSentry any>(origLoad: T) op: 'function.sveltekit.load', attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: routeId ? 'route' : 'url', }, name: routeId ? routeId : event.url.pathname, status: 'ok', - metadata: { - source: routeId ? 'route' : 'url', - }, }; try { @@ -138,11 +141,11 @@ export function wrapServerLoadWithSentry any>(origSe op: 'function.sveltekit.server.load', attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: routeId ? 'route' : 'url', }, name: routeId ? routeId : event.url.pathname, status: 'ok', metadata: { - source: routeId ? 'route' : 'url', dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext, }, data: { diff --git a/packages/tracing-internal/src/browser/browserTracingIntegration.ts b/packages/tracing-internal/src/browser/browserTracingIntegration.ts index 95dee0c42f5e..ad70af5aa666 100644 --- a/packages/tracing-internal/src/browser/browserTracingIntegration.ts +++ b/packages/tracing-internal/src/browser/browserTracingIntegration.ts @@ -236,16 +236,15 @@ export const browserTracingIntegration = ((_options: Partial( startTimestamp: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined, op: 'pageload', origin: 'auto.pageload.browser', - metadata: { source: 'url' }, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url', + }, }); } @@ -58,7 +61,9 @@ export function instrumentRoutingWithDefaults( name: WINDOW.location.pathname, op: 'navigation', origin: 'auto.navigation.browser', - metadata: { source: 'url' }, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url', + }, }); } }); diff --git a/packages/types/src/span.ts b/packages/types/src/span.ts index 69704d497b8f..f9e29a188327 100644 --- a/packages/types/src/span.ts +++ b/packages/types/src/span.ts @@ -2,7 +2,7 @@ import type { TraceContext } from './context'; import type { Instrumenter } from './instrumenter'; import type { Primitive } from './misc'; import type { HrTime } from './opentelemetry'; -import type { Transaction } from './transaction'; +import type { Transaction, TransactionSource } from './transaction'; type SpanOriginType = 'manual' | 'auto'; type SpanOriginCategory = string; // e.g. http, db, ui, .... @@ -26,7 +26,7 @@ export type SpanAttributeValue = export type SpanAttributes = Partial<{ 'sentry.origin': string; 'sentry.op': string; - 'sentry.source': string; + 'sentry.source': TransactionSource; 'sentry.sample_rate': number; }> & Record; diff --git a/packages/types/src/transaction.ts b/packages/types/src/transaction.ts index fbcf8b38f02d..f57841e63ee9 100644 --- a/packages/types/src/transaction.ts +++ b/packages/types/src/transaction.ts @@ -109,7 +109,7 @@ export interface Transaction extends TransactionContext, Omit Date: Thu, 15 Feb 2024 14:42:11 +0000 Subject: [PATCH 02/19] beep boop --- packages/core/src/tracing/span.ts | 7 ++++++- packages/core/src/tracing/transaction.ts | 3 --- .../tracing/dynamicSamplingContext.test.ts | 3 ++- packages/core/test/lib/tracing/span.test.ts | 21 +++++++++++++------ packages/core/test/lib/tracing/trace.test.ts | 1 + .../core/test/lib/tracing/transaction.test.ts | 15 +++++++++++-- .../core/test/lib/utils/spanUtils.test.ts | 2 ++ 7 files changed, 39 insertions(+), 13 deletions(-) diff --git a/packages/core/src/tracing/span.ts b/packages/core/src/tracing/span.ts index 5ded23cc386d..eb6b85c1aeb1 100644 --- a/packages/core/src/tracing/span.ts +++ b/packages/core/src/tracing/span.ts @@ -17,7 +17,11 @@ import { dropUndefinedKeys, logger, timestampInSeconds, uuid4 } from '@sentry/ut import { DEBUG_BUILD } from '../debug-build'; import { getMetricSummaryJsonForSpan } from '../metrics/metric-summary'; -import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../semanticAttributes'; +import { + SEMANTIC_ATTRIBUTE_SENTRY_OP, + SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, + SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, +} from '../semanticAttributes'; import { getRootSpan } from '../utils/getRootSpan'; import { TRACE_FLAG_NONE, @@ -140,6 +144,7 @@ export class Span implements SpanInterface { this.setAttributes({ [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanContext.origin || 'manual', [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op, + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom', ...spanContext.attributes, }); diff --git a/packages/core/src/tracing/transaction.ts b/packages/core/src/tracing/transaction.ts index dafed6b4ff47..f699ac3557f3 100644 --- a/packages/core/src/tracing/transaction.ts +++ b/packages/core/src/tracing/transaction.ts @@ -117,9 +117,6 @@ export class Transaction extends SpanClass implements TransactionInterface { ...this._metadata, // From attributes - ...{ - source: (this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] as TransactionSource | undefined) || 'custom', - }, ...(this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] && { sampleRate: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] as TransactionMetadata['sampleRate'], }), diff --git a/packages/core/test/lib/tracing/dynamicSamplingContext.test.ts b/packages/core/test/lib/tracing/dynamicSamplingContext.test.ts index ae3cb9e54e60..3d48cb893594 100644 --- a/packages/core/test/lib/tracing/dynamicSamplingContext.test.ts +++ b/packages/core/test/lib/tracing/dynamicSamplingContext.test.ts @@ -1,3 +1,4 @@ +import { TransactionSource } from '@sentry/types'; import { Hub, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, makeMain } from '../../../src'; import { Transaction, getDynamicSamplingContextFromSpan, startInactiveSpan } from '../../../src/tracing'; import { addTracingExtensions } from '../../../src/tracing'; @@ -112,7 +113,7 @@ describe('getDynamicSamplingContextFromSpan', () => { test.each([ ['is included if transaction source is parameterized route/url', 'route'], ['is included if transaction source is a custom name', 'custom'], - ])('%s', (_: string, source) => { + ] as const)('%s', (_: string, source: TransactionSource) => { const transaction = startInactiveSpan({ name: 'tx', attributes: { diff --git a/packages/core/test/lib/tracing/span.test.ts b/packages/core/test/lib/tracing/span.test.ts index b3c08987d4b2..8aac2340b3e6 100644 --- a/packages/core/test/lib/tracing/span.test.ts +++ b/packages/core/test/lib/tracing/span.test.ts @@ -86,6 +86,7 @@ describe('span', () => { arrayWithUndefined: [1, undefined, 2], // origin is set by default to 'manual' in the Span constructor 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); }); @@ -94,12 +95,12 @@ describe('span', () => { span.setAttribute('str', 'bar'); - // length 2 because `sentry.origin` is always set by default - expect(Object.keys(span['_attributes']).length).toEqual(2); + // length 3 because `sentry.origin` and `sentry.source` are always set by default + expect(Object.keys(span['_attributes']).length).toEqual(3); span.setAttribute('str', undefined); - expect(Object.keys(span['_attributes']).length).toEqual(1); + expect(Object.keys(span['_attributes']).length).toEqual(2); }); it('disallows invalid attribute types', () => { @@ -125,6 +126,7 @@ describe('span', () => { expect(initialAttributes).toEqual({ // origin is set by default to 'manual' in the Span constructor 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); const newAttributes = { @@ -152,6 +154,7 @@ describe('span', () => { boolArray: [true, false], arrayWithUndefined: [1, undefined, 2], 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); expect(span['_attributes']).not.toBe(newAttributes); @@ -172,6 +175,7 @@ describe('span', () => { boolArray: [true, false], arrayWithUndefined: [1, undefined, 2], 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); }); @@ -180,12 +184,12 @@ describe('span', () => { span.setAttribute('str', 'bar'); - // length 2 because `sentry.origin` is always set by default - expect(Object.keys(span['_attributes']).length).toEqual(2); + // length 3 because `sentry.origin` and `sentry.source` are always set by default + expect(Object.keys(span['_attributes']).length).toEqual(3); span.setAttributes({ str: undefined }); - expect(Object.keys(span['_attributes']).length).toEqual(1); + expect(Object.keys(span['_attributes']).length).toEqual(2); }); }); @@ -287,6 +291,7 @@ describe('span', () => { expect(span['_getData']()).toEqual({ // origin is set by default to 'manual' in the Span constructor 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); }); @@ -299,11 +304,13 @@ describe('span', () => { foo: 'bar', // origin is set by default to 'manual' in the Span constructor 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); expect(span['_getData']()).toStrictEqual({ // eslint-disable-next-line deprecation/deprecation ...span.data, 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); }); @@ -315,6 +322,7 @@ describe('span', () => { foo: 'bar', // origin is set by default to 'manual' in the Span constructor 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); // eslint-disable-next-line deprecation/deprecation expect(span['_getData']()).toBe(span.attributes); @@ -335,6 +343,7 @@ describe('span', () => { baz: 'baz', // origin is set by default to 'manual' in the Span constructor 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); // eslint-disable-next-line deprecation/deprecation expect(span['_getData']()).not.toBe(span.attributes); diff --git a/packages/core/test/lib/tracing/trace.test.ts b/packages/core/test/lib/tracing/trace.test.ts index a3276952fd48..1b792bbda539 100644 --- a/packages/core/test/lib/tracing/trace.test.ts +++ b/packages/core/test/lib/tracing/trace.test.ts @@ -256,6 +256,7 @@ describe('startSpan', () => { data: { 'sentry.origin': 'auto.http.browser', 'sentry.sample_rate': 0, + 'sentry.source': 'custom', }, origin: 'auto.http.browser', description: 'GET users/[id]', diff --git a/packages/core/test/lib/tracing/transaction.test.ts b/packages/core/test/lib/tracing/transaction.test.ts index fa6abde9f545..9371bda548fd 100644 --- a/packages/core/test/lib/tracing/transaction.test.ts +++ b/packages/core/test/lib/tracing/transaction.test.ts @@ -1,4 +1,9 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, Transaction } from '../../../src'; +import { + SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, + SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, + SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, + Transaction, +} from '../../../src'; describe('transaction', () => { describe('name', () => { @@ -69,12 +74,18 @@ describe('transaction', () => { [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 0.5, }, }); + expect(transaction.metadata).toEqual({ - source: 'url', sampleRate: 0.5, spanMetadata: {}, request: {}, }); + + expect(transaction.attributes).toEqual({ + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url', + [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 0.5, + }); }); it('allows to update metadata via setMetadata', () => { diff --git a/packages/core/test/lib/utils/spanUtils.test.ts b/packages/core/test/lib/utils/spanUtils.test.ts index 0afb59530623..3f52daa39160 100644 --- a/packages/core/test/lib/utils/spanUtils.test.ts +++ b/packages/core/test/lib/utils/spanUtils.test.ts @@ -57,6 +57,7 @@ describe('spanToJSON', () => { start_timestamp: span['_startTime'], data: { 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, }); }); @@ -93,6 +94,7 @@ describe('spanToJSON', () => { data: { 'sentry.op': 'test op', 'sentry.origin': 'auto', + 'sentry.source': 'custom', }, }); }); From 2838b09ba4ca3b6be3c0b5e2272fa0e4392b7ccc Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 15 Feb 2024 14:47:33 +0000 Subject: [PATCH 03/19] I am losing braincells --- .../browser/browserTracingIntegration.test.ts | 4 ++++ .../test/browser/browsertracing.test.ts | 19 +++++++++++++++---- .../test/browser/router.test.ts | 5 +++-- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/tracing-internal/test/browser/browserTracingIntegration.test.ts b/packages/tracing-internal/test/browser/browserTracingIntegration.test.ts index 6ae36a8b9304..b886c01909e5 100644 --- a/packages/tracing-internal/test/browser/browserTracingIntegration.test.ts +++ b/packages/tracing-internal/test/browser/browserTracingIntegration.test.ts @@ -232,6 +232,7 @@ describe('browserTracingIntegration', () => { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom', }, span_id: expect.any(String), start_timestamp: expect.any(Number), @@ -265,6 +266,7 @@ describe('browserTracingIntegration', () => { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.test', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom', testy: 'yes', }, span_id: expect.any(String), @@ -326,6 +328,7 @@ describe('browserTracingIntegration', () => { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom', }, span_id: expect.any(String), start_timestamp: expect.any(Number), @@ -359,6 +362,7 @@ describe('browserTracingIntegration', () => { [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation', [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.test', [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom', testy: 'yes', }, span_id: expect.any(String), diff --git a/packages/tracing-internal/test/browser/browsertracing.test.ts b/packages/tracing-internal/test/browser/browsertracing.test.ts index 9d4105dc415d..58e4f741ee7a 100644 --- a/packages/tracing-internal/test/browser/browsertracing.test.ts +++ b/packages/tracing-internal/test/browser/browsertracing.test.ts @@ -1,5 +1,12 @@ /* eslint-disable deprecation/deprecation */ -import { Hub, TRACING_DEFAULTS, makeMain, setCurrentClient, spanToJSON } from '@sentry/core'; +import { + Hub, + SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, + TRACING_DEFAULTS, + makeMain, + setCurrentClient, + spanToJSON, +} from '@sentry/core'; import * as hubExtensions from '@sentry/core'; import type { BaseTransportOptions, ClientOptions, DsnComponents, HandlerDataHistory } from '@sentry/types'; import { JSDOM } from 'jsdom'; @@ -240,7 +247,7 @@ describe('BrowserTracing', () => { const transaction = getActiveTransaction(hub) as IdleTransaction; expect(transaction).toBeDefined(); expect(transaction.name).toBe('newName'); - expect(transaction.metadata.source).toBe('custom'); + expect(transaction.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toBe('custom'); expect(mockBeforeNavigation).toHaveBeenCalledTimes(1); }); @@ -252,13 +259,17 @@ describe('BrowserTracing', () => { createBrowserTracing(true, { beforeNavigate: mockBeforeNavigation, routingInstrumentation: (customStartTransaction: (obj: any) => void) => { - customStartTransaction({ name: 'a/path', op: 'pageload', metadata: { source: 'url' } }); + customStartTransaction({ + name: 'a/path', + op: 'pageload', + attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url' }, + }); }, }); const transaction = getActiveTransaction(hub) as IdleTransaction; expect(transaction).toBeDefined(); expect(transaction.name).toBe('a/path'); - expect(transaction.metadata.source).toBe('url'); + expect(transaction.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toBe('url'); expect(mockBeforeNavigation).toHaveBeenCalledTimes(1); }); diff --git a/packages/tracing-internal/test/browser/router.test.ts b/packages/tracing-internal/test/browser/router.test.ts index a27926ad9803..e7a12ea91506 100644 --- a/packages/tracing-internal/test/browser/router.test.ts +++ b/packages/tracing-internal/test/browser/router.test.ts @@ -1,3 +1,4 @@ +import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '@sentry/core'; import type { HandlerDataHistory } from '@sentry/types'; import { JSDOM } from 'jsdom'; @@ -45,7 +46,7 @@ conditionalTest({ min: 16 })('instrumentRoutingWithDefaults', () => { name: 'blank', op: 'pageload', origin: 'auto.pageload.browser', - metadata: { source: 'url' }, + attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url' }, startTimestamp: expect.any(Number), }); }); @@ -80,7 +81,7 @@ conditionalTest({ min: 16 })('instrumentRoutingWithDefaults', () => { name: 'blank', op: 'navigation', origin: 'auto.navigation.browser', - metadata: { source: 'url' }, + attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url' }, }); }); From 796eb844e5e195d881c413097115ee3e65683c97 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 15 Feb 2024 15:08:15 +0000 Subject: [PATCH 04/19] ci happy pls --- .../lib/tracing/dynamicSamplingContext.test.ts | 2 +- packages/node/test/integrations/http.test.ts | 3 ++- packages/tracing/test/span.test.ts | 12 ++++++------ packages/tracing/test/transaction.test.ts | 17 ++++++++++------- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/packages/core/test/lib/tracing/dynamicSamplingContext.test.ts b/packages/core/test/lib/tracing/dynamicSamplingContext.test.ts index 3d48cb893594..15a3344bfc5e 100644 --- a/packages/core/test/lib/tracing/dynamicSamplingContext.test.ts +++ b/packages/core/test/lib/tracing/dynamicSamplingContext.test.ts @@ -1,4 +1,4 @@ -import { TransactionSource } from '@sentry/types'; +import type { TransactionSource } from '@sentry/types'; import { Hub, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, makeMain } from '../../../src'; import { Transaction, getDynamicSamplingContextFromSpan, startInactiveSpan } from '../../../src/tracing'; import { addTracingExtensions } from '../../../src/tracing'; diff --git a/packages/node/test/integrations/http.test.ts b/packages/node/test/integrations/http.test.ts index a055aca30948..56d7c96b3c8f 100644 --- a/packages/node/test/integrations/http.test.ts +++ b/packages/node/test/integrations/http.test.ts @@ -1,6 +1,7 @@ import * as http from 'http'; import * as https from 'https'; -import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, Span } from '@sentry/core'; +import type { Span } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '@sentry/core'; import { Transaction } from '@sentry/core'; import { getCurrentScope, makeMain, setUser, spanToJSON, startInactiveSpan } from '@sentry/core'; import { Hub, addTracingExtensions } from '@sentry/core'; diff --git a/packages/tracing/test/span.test.ts b/packages/tracing/test/span.test.ts index 798cc2a8263c..5634ca243d9b 100644 --- a/packages/tracing/test/span.test.ts +++ b/packages/tracing/test/span.test.ts @@ -1,7 +1,7 @@ /* eslint-disable deprecation/deprecation */ import { BrowserClient } from '@sentry/browser'; import { Hub, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, Scope, makeMain, spanToJSON } from '@sentry/core'; -import type { BaseTransportOptions, ClientOptions, TransactionSource } from '@sentry/types'; +import type { BaseTransportOptions, ClientOptions } from '@sentry/types'; import { Span, TRACEPARENT_REGEXP, Transaction } from '../src'; import { getDefaultBrowserClientOptions } from './testutils'; @@ -638,8 +638,8 @@ describe('Span', () => { const transaction = new Transaction( { name: 'tx', - metadata: { - source: 'url', + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url', }, }, hub, @@ -652,12 +652,12 @@ describe('Span', () => { test.each([ ['is included if transaction source is paremeterized route/url', 'route'], ['is included if transaction source is a custom name', 'custom'], - ])('%s', (_: string, source) => { + ] as const)('%s', (_, source) => { const transaction = new Transaction( { name: 'tx', - metadata: { - ...(source && { source: source as TransactionSource }), + attributes: { + ...(source && { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source }), }, }, hub, diff --git a/packages/tracing/test/transaction.test.ts b/packages/tracing/test/transaction.test.ts index f9e950dd9cb9..ab7cc427d3dd 100644 --- a/packages/tracing/test/transaction.test.ts +++ b/packages/tracing/test/transaction.test.ts @@ -16,17 +16,20 @@ describe('`Transaction` class', () => { describe('transaction name source', () => { it('sets source in constructor if provided', () => { - const transaction = new Transaction({ name: 'dogpark', metadata: { source: 'route' } }); + const transaction = new Transaction({ + name: 'dogpark', + attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route' }, + }); expect(transaction.name).toEqual('dogpark'); - expect(transaction.metadata.source).toEqual('route'); + expect(transaction.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toEqual('route'); }); it("sets source to be `'custom'` in constructor if not provided", () => { const transaction = new Transaction({ name: 'dogpark' }); expect(transaction.name).toEqual('dogpark'); - expect(transaction.metadata.source).toBe('custom'); + expect(transaction.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toBe('custom'); }); it("sets source to `'custom'` when assigning to `name` property", () => { @@ -34,7 +37,7 @@ describe('`Transaction` class', () => { transaction.name = 'ballpit'; expect(transaction.name).toEqual('ballpit'); - expect(transaction.metadata.source).toEqual('custom'); + expect(transaction.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toEqual('custom'); }); it('sets instrumenter to be `sentry` in constructor if not provided', () => { @@ -55,7 +58,7 @@ describe('`Transaction` class', () => { transaction.setName('ballpit'); expect(transaction.name).toEqual('ballpit'); - expect(transaction.metadata.source).toEqual('custom'); + expect(transaction.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toEqual('custom'); }); it('uses given `source` value', () => { @@ -63,7 +66,7 @@ describe('`Transaction` class', () => { transaction.setName('ballpit', 'route'); expect(transaction.name).toEqual('ballpit'); - expect(transaction.metadata.source).toEqual('route'); + expect(transaction.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toEqual('route'); }); }); @@ -74,7 +77,7 @@ describe('`Transaction` class', () => { transaction.updateName('ballpit'); expect(transaction.name).toEqual('ballpit'); - expect(transaction.metadata.source).toEqual('route'); + expect(transaction.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toEqual('route'); }); }); }); From 5eb1406c5664bf12e4056159250b7d24786fbb2f Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 15 Feb 2024 15:46:19 +0000 Subject: [PATCH 05/19] Tests --- .../test/custom/transaction.test.ts | 2 -- .../test/integration/scope.test.ts | 1 + .../test/integration/transactions.test.ts | 3 +++ packages/sveltekit/test/client/load.test.ts | 10 +++------- packages/sveltekit/test/server/handle.test.ts | 6 +++--- packages/sveltekit/test/server/load.test.ts | 20 +++++++------------ packages/tracing/test/hub.test.ts | 4 ++-- packages/tracing/test/span.test.ts | 4 ++++ packages/tracing/test/transaction.test.ts | 2 ++ 9 files changed, 25 insertions(+), 27 deletions(-) diff --git a/packages/opentelemetry/test/custom/transaction.test.ts b/packages/opentelemetry/test/custom/transaction.test.ts index ae07939981cc..f56350abeb8e 100644 --- a/packages/opentelemetry/test/custom/transaction.test.ts +++ b/packages/opentelemetry/test/custom/transaction.test.ts @@ -24,7 +24,6 @@ describe('startTranscation', () => { expect(transaction.spanRecorder?.spans).toHaveLength(1); // eslint-disable-next-line deprecation/deprecation expect(transaction.metadata).toEqual({ - source: 'custom', spanMetadata: {}, }); @@ -55,7 +54,6 @@ describe('startTranscation', () => { expect(transaction).toBeInstanceOf(Transaction); // eslint-disable-next-line deprecation/deprecation expect(transaction.metadata).toEqual({ - source: 'custom', spanMetadata: {}, }); diff --git a/packages/opentelemetry/test/integration/scope.test.ts b/packages/opentelemetry/test/integration/scope.test.ts index cc4def42ddbc..594fa1bcf9ae 100644 --- a/packages/opentelemetry/test/integration/scope.test.ts +++ b/packages/opentelemetry/test/integration/scope.test.ts @@ -98,6 +98,7 @@ describe('Integration | Scope', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, span_id: spanId, status: 'ok', diff --git a/packages/opentelemetry/test/integration/transactions.test.ts b/packages/opentelemetry/test/integration/transactions.test.ts index 1a7c6a14c659..4218657f9cd2 100644 --- a/packages/opentelemetry/test/integration/transactions.test.ts +++ b/packages/opentelemetry/test/integration/transactions.test.ts @@ -88,6 +88,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'sentry.op': 'test op', 'sentry.origin': 'auto.test', + 'sentry.source': 'custom', }, op: 'test op', span_id: expect.any(String), @@ -252,6 +253,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'sentry.op': 'test op', 'sentry.origin': 'auto.test', + 'sentry.source': 'custom', }, op: 'test op', span_id: expect.any(String), @@ -379,6 +381,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'sentry.op': 'test op', 'sentry.origin': 'auto.test', + 'sentry.source': 'custom', }, op: 'test op', span_id: expect.any(String), diff --git a/packages/sveltekit/test/client/load.test.ts b/packages/sveltekit/test/client/load.test.ts index ca7c1d625224..3c625865cf1c 100644 --- a/packages/sveltekit/test/client/load.test.ts +++ b/packages/sveltekit/test/client/load.test.ts @@ -3,7 +3,7 @@ import type { Load } from '@sveltejs/kit'; import { redirect } from '@sveltejs/kit'; import { vi } from 'vitest'; -import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '@sentry/core'; import { wrapLoadWithSentry } from '../../src/client/load'; const mockCaptureException = vi.spyOn(SentrySvelte, 'captureException').mockImplementation(() => 'xx'); @@ -109,13 +109,11 @@ describe('wrapLoadWithSentry', () => { { attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route', }, op: 'function.sveltekit.load', name: '/users/[id]', status: 'ok', - metadata: { - source: 'route', - }, }, expect.any(Function), ); @@ -139,13 +137,11 @@ describe('wrapLoadWithSentry', () => { { attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url', }, op: 'function.sveltekit.load', name: '/users/123', status: 'ok', - metadata: { - source: 'url', - }, }, expect.any(Function), ); diff --git a/packages/sveltekit/test/server/handle.test.ts b/packages/sveltekit/test/server/handle.test.ts index a90c70964a03..2de92846bbd5 100644 --- a/packages/sveltekit/test/server/handle.test.ts +++ b/packages/sveltekit/test/server/handle.test.ts @@ -1,4 +1,4 @@ -import { Hub, addTracingExtensions, makeMain } from '@sentry/core'; +import { Hub, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, addTracingExtensions, makeMain } from '@sentry/core'; import { NodeClient } from '@sentry/node'; import * as SentryNode from '@sentry/node'; import type { Transaction } from '@sentry/types'; @@ -136,7 +136,7 @@ describe('handleSentry', () => { expect(ref.name).toEqual('GET /users/[id]'); expect(ref.op).toEqual('http.server'); expect(ref.status).toEqual(isError ? 'internal_error' : 'ok'); - expect(ref.metadata.source).toEqual('route'); + expect(ref.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toEqual('route'); expect(ref.endTimestamp).toBeDefined(); expect(ref.spanRecorder.spans).toHaveLength(1); @@ -172,7 +172,7 @@ describe('handleSentry', () => { expect(ref.name).toEqual('GET /users/[id]'); expect(ref.op).toEqual('http.server'); expect(ref.status).toEqual(isError ? 'internal_error' : 'ok'); - expect(ref.metadata.source).toEqual('route'); + expect(ref.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toEqual('route'); expect(ref.endTimestamp).toBeDefined(); diff --git a/packages/sveltekit/test/server/load.test.ts b/packages/sveltekit/test/server/load.test.ts index 388541a8d884..f047c6074064 100644 --- a/packages/sveltekit/test/server/load.test.ts +++ b/packages/sveltekit/test/server/load.test.ts @@ -1,4 +1,4 @@ -import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, addTracingExtensions } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, addTracingExtensions } from '@sentry/core'; import * as SentryNode from '@sentry/node'; import type { Load, ServerLoad } from '@sveltejs/kit'; import { error, redirect } from '@sveltejs/kit'; @@ -199,13 +199,11 @@ describe('wrapLoadWithSentry calls trace', () => { { attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route', }, op: 'function.sveltekit.load', name: '/users/[id]', status: 'ok', - metadata: { - source: 'route', - }, }, expect.any(Function), ); @@ -220,13 +218,11 @@ describe('wrapLoadWithSentry calls trace', () => { { attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url', }, op: 'function.sveltekit.load', name: '/users/123', status: 'ok', - metadata: { - source: 'url', - }, }, expect.any(Function), ); @@ -256,6 +252,7 @@ describe('wrapServerLoadWithSentry calls trace', () => { { attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route', }, op: 'function.sveltekit.server.load', name: '/users/[id]', @@ -275,7 +272,6 @@ describe('wrapServerLoadWithSentry calls trace', () => { trace_id: '1234567890abcdef1234567890abcdef', transaction: 'dogpark', }, - source: 'route', }, }, expect.any(Function), @@ -291,6 +287,7 @@ describe('wrapServerLoadWithSentry calls trace', () => { { attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route', }, op: 'function.sveltekit.server.load', name: '/users/[id]', @@ -298,9 +295,6 @@ describe('wrapServerLoadWithSentry calls trace', () => { data: { 'http.method': 'GET', }, - metadata: { - source: 'route', - }, }, expect.any(Function), ); @@ -315,6 +309,7 @@ describe('wrapServerLoadWithSentry calls trace', () => { { attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route', }, op: 'function.sveltekit.server.load', name: '/users/[id]', @@ -327,7 +322,6 @@ describe('wrapServerLoadWithSentry calls trace', () => { }, metadata: { dynamicSamplingContext: {}, - source: 'route', }, }, expect.any(Function), @@ -346,6 +340,7 @@ describe('wrapServerLoadWithSentry calls trace', () => { { attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.sveltekit', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url', }, op: 'function.sveltekit.server.load', name: '/users/123', @@ -365,7 +360,6 @@ describe('wrapServerLoadWithSentry calls trace', () => { trace_id: '1234567890abcdef1234567890abcdef', transaction: 'dogpark', }, - source: 'url', }, }, expect.any(Function), diff --git a/packages/tracing/test/hub.test.ts b/packages/tracing/test/hub.test.ts index b12966e6b3dc..5a96cd3f607c 100644 --- a/packages/tracing/test/hub.test.ts +++ b/packages/tracing/test/hub.test.ts @@ -305,8 +305,8 @@ describe('Hub', () => { makeMain(hub); hub.startTransaction({ name: 'dogpark', parentSampled: true }); - // length 2 because origin and op are set as attributes on span initialization - expect(Transaction.prototype.setAttribute).toHaveBeenCalledTimes(2); + // length 3 because origin, source and op are set as attributes on span initialization + expect(Transaction.prototype.setAttribute).toHaveBeenCalledTimes(3); }); it('should record sampling method and rate when sampling decision comes from traceSampleRate', () => { diff --git a/packages/tracing/test/span.test.ts b/packages/tracing/test/span.test.ts index 5634ca243d9b..3ea5d43c937f 100644 --- a/packages/tracing/test/span.test.ts +++ b/packages/tracing/test/span.test.ts @@ -176,6 +176,7 @@ describe('Span', () => { origin: 'manual', data: { 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, }); }); @@ -480,6 +481,7 @@ describe('Span', () => { trace_id: 'c', data: { 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, origin: 'manual', }); @@ -508,6 +510,7 @@ describe('Span', () => { data: { 'sentry.op': 'op', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, }); }); @@ -581,6 +584,7 @@ describe('Span', () => { data1: 'bar', 'sentry.op': 'op', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); }); }); diff --git a/packages/tracing/test/transaction.test.ts b/packages/tracing/test/transaction.test.ts index ab7cc427d3dd..55d162becc21 100644 --- a/packages/tracing/test/transaction.test.ts +++ b/packages/tracing/test/transaction.test.ts @@ -173,6 +173,7 @@ describe('`Transaction` class', () => { data: { [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom', }, span_id: transaction.spanId, trace_id: transaction.traceId, @@ -204,6 +205,7 @@ describe('`Transaction` class', () => { data: { [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: 1, [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom', }, span_id: transaction.spanId, trace_id: transaction.traceId, From 8771b70faf178bef63851ba3f746f895da5397c4 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 15 Feb 2024 16:05:44 +0000 Subject: [PATCH 06/19] tests --- packages/ember/addon/index.ts | 16 +++++++++++++--- .../integration/test/client/tracingFetch.test.ts | 1 + .../test/integration/scope.test.ts | 2 +- .../test/integration/transactions.test.ts | 2 ++ .../test/integration/transactions.test.ts | 6 +++--- 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/ember/addon/index.ts b/packages/ember/addon/index.ts index f403df54284e..5f5cbf054666 100644 --- a/packages/ember/addon/index.ts +++ b/packages/ember/addon/index.ts @@ -9,6 +9,7 @@ import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, applySdkMetadata } from '@sentry/core import { GLOBAL_OBJ } from '@sentry/utils'; import Ember from 'ember'; +import type { TransactionSource } from '@sentry/types'; import type { EmberSentryConfig, GlobalConfig, OwnConfig } from './types'; function _getSentryInitConfig(): EmberSentryConfig['sentry'] { @@ -68,11 +69,12 @@ export const instrumentRoutePerformance = (BaseRoute description: string, fn: X, args: Parameters, + source: TransactionSource, ): Promise> => { return startSpan( { attributes: { - [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'ember', + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source, }, op, name: description, @@ -94,15 +96,22 @@ export const instrumentRoutePerformance = (BaseRoute this.fullRouteName, super.beforeModel.bind(this), args, + 'custom', ); } public async model(...args: unknown[]): Promise { - return instrumentFunction('ui.ember.route.model', this.fullRouteName, super.model.bind(this), args); + return instrumentFunction('ui.ember.route.model', this.fullRouteName, super.model.bind(this), args, 'custom'); } public afterModel(...args: unknown[]): void | Promise { - return instrumentFunction('ui.ember.route.after_model', this.fullRouteName, super.afterModel.bind(this), args); + return instrumentFunction( + 'ui.ember.route.after_model', + this.fullRouteName, + super.afterModel.bind(this), + args, + 'custom', + ); } public setupController(...args: unknown[]): void | Promise { @@ -111,6 +120,7 @@ export const instrumentRoutePerformance = (BaseRoute this.fullRouteName, super.setupController.bind(this), args, + 'custom', ); } }, diff --git a/packages/nextjs/test/integration/test/client/tracingFetch.test.ts b/packages/nextjs/test/integration/test/client/tracingFetch.test.ts index 8517b4ab0fce..9b9d01774919 100644 --- a/packages/nextjs/test/integration/test/client/tracingFetch.test.ts +++ b/packages/nextjs/test/integration/test/client/tracingFetch.test.ts @@ -38,6 +38,7 @@ test('should correctly instrument `fetch` for performance tracing', async ({ pag 'http.response.status_code': 200, 'sentry.op': 'http.client', 'sentry.origin': 'auto.http.browser', + 'sentry.source': 'custom', }, description: 'GET http://example.com', op: 'http.client', diff --git a/packages/node-experimental/test/integration/scope.test.ts b/packages/node-experimental/test/integration/scope.test.ts index e800de4d41d0..2187f2020dde 100644 --- a/packages/node-experimental/test/integration/scope.test.ts +++ b/packages/node-experimental/test/integration/scope.test.ts @@ -88,7 +88,7 @@ describe('Integration | Scope', () => { expect.objectContaining({ contexts: expect.objectContaining({ trace: { - data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual' }, + data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', 'sentry.source': 'task' }, span_id: spanId, status: 'ok', trace_id: traceId, diff --git a/packages/node-experimental/test/integration/transactions.test.ts b/packages/node-experimental/test/integration/transactions.test.ts index 23edcca3c579..80187c735cbd 100644 --- a/packages/node-experimental/test/integration/transactions.test.ts +++ b/packages/node-experimental/test/integration/transactions.test.ts @@ -422,6 +422,7 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, span_id: expect.any(String), status: 'ok', @@ -552,6 +553,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'sentry.op': 'test op', 'sentry.origin': 'auto.test', + 'sentry.source': 'task', }, op: 'test op', span_id: expect.any(String), diff --git a/packages/opentelemetry/test/integration/transactions.test.ts b/packages/opentelemetry/test/integration/transactions.test.ts index 4218657f9cd2..d5af81663657 100644 --- a/packages/opentelemetry/test/integration/transactions.test.ts +++ b/packages/opentelemetry/test/integration/transactions.test.ts @@ -73,6 +73,7 @@ describe('Integration | Transactions', () => { otel: { attributes: { 'test.outer': 'test value', + 'sentry.source': 'custom', }, resource: { 'service.name': 'opentelemetry-test', @@ -109,7 +110,6 @@ describe('Integration | Transactions', () => { transaction: 'test name', }), sampleRate: 1, - source: 'task', spanMetadata: expect.any(Object), requestPath: 'test-path', }), @@ -253,7 +253,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'sentry.op': 'test op', 'sentry.origin': 'auto.test', - 'sentry.source': 'custom', + 'sentry.source': 'task', }, op: 'test op', span_id: expect.any(String), @@ -381,7 +381,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'sentry.op': 'test op', 'sentry.origin': 'auto.test', - 'sentry.source': 'custom', + 'sentry.source': 'task', }, op: 'test op', span_id: expect.any(String), From a657600bee4fd73509770ba70021449fbb67b76b Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 15 Feb 2024 16:21:22 +0000 Subject: [PATCH 07/19] gimmemytimeback --- .../test/integration/transactions.test.ts | 1 + .../opentelemetry/test/integration/transactions.test.ts | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/node-experimental/test/integration/transactions.test.ts b/packages/node-experimental/test/integration/transactions.test.ts index 80187c735cbd..d1354b95678b 100644 --- a/packages/node-experimental/test/integration/transactions.test.ts +++ b/packages/node-experimental/test/integration/transactions.test.ts @@ -466,6 +466,7 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, span_id: expect.any(String), status: 'ok', diff --git a/packages/opentelemetry/test/integration/transactions.test.ts b/packages/opentelemetry/test/integration/transactions.test.ts index d5af81663657..b19dea8b0a36 100644 --- a/packages/opentelemetry/test/integration/transactions.test.ts +++ b/packages/opentelemetry/test/integration/transactions.test.ts @@ -73,7 +73,6 @@ describe('Integration | Transactions', () => { otel: { attributes: { 'test.outer': 'test value', - 'sentry.source': 'custom', }, resource: { 'service.name': 'opentelemetry-test', @@ -89,7 +88,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'sentry.op': 'test op', 'sentry.origin': 'auto.test', - 'sentry.source': 'custom', + 'sentry.source': 'task', }, op: 'test op', span_id: expect.any(String), @@ -149,6 +148,7 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, description: 'inner span 1', origin: 'manual', @@ -164,6 +164,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'test.inner': 'test value', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, description: 'inner span 2', origin: 'manual', @@ -300,6 +301,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'sentry.op': 'test op b', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, op: 'test op b', span_id: expect.any(String), @@ -423,6 +425,7 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, description: 'inner span 1', origin: 'manual', @@ -437,6 +440,7 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, description: 'inner span 2', origin: 'manual', From 9f44cc0b1a5e86d5cf71a2e1b598eac865586793 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 16 Feb 2024 09:23:09 +0000 Subject: [PATCH 08/19] otel tests --- .../test/integration/scope.test.ts | 2 +- .../test/integration/transactions.test.ts | 8 +++++++- .../opentelemetry-node/test/spanprocessor.test.ts | 13 +++++++++---- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/node-experimental/test/integration/scope.test.ts b/packages/node-experimental/test/integration/scope.test.ts index 2187f2020dde..5ea0c9194356 100644 --- a/packages/node-experimental/test/integration/scope.test.ts +++ b/packages/node-experimental/test/integration/scope.test.ts @@ -88,7 +88,7 @@ describe('Integration | Scope', () => { expect.objectContaining({ contexts: expect.objectContaining({ trace: { - data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', 'sentry.source': 'task' }, + data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', 'sentry.source': 'custom' }, span_id: spanId, status: 'ok', trace_id: traceId, diff --git a/packages/node-experimental/test/integration/transactions.test.ts b/packages/node-experimental/test/integration/transactions.test.ts index d1354b95678b..fbe539616df2 100644 --- a/packages/node-experimental/test/integration/transactions.test.ts +++ b/packages/node-experimental/test/integration/transactions.test.ts @@ -90,6 +90,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'sentry.op': 'test op', 'sentry.origin': 'auto.test', + 'sentry.source': 'task', }, op: 'test op', span_id: expect.any(String), @@ -111,7 +112,6 @@ describe('Integration | Transactions', () => { transaction: 'test name', }), sampleRate: 1, - source: 'task', spanMetadata: expect.any(Object), requestPath: 'test-path', }), @@ -152,6 +152,7 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, description: 'inner span 1', origin: 'manual', @@ -167,6 +168,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'test.inner': 'test value', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, description: 'inner span 2', origin: 'manual', @@ -264,6 +266,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'sentry.op': 'test op', 'sentry.origin': 'auto.test', + 'sentry.source': 'task', }, op: 'test op', span_id: expect.any(String), @@ -310,6 +313,7 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'sentry.op': 'test op b', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, op: 'test op b', span_id: expect.any(String), @@ -596,6 +600,7 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, description: 'inner span 1', origin: 'manual', @@ -610,6 +615,7 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, description: 'inner span 2', origin: 'manual', diff --git a/packages/opentelemetry-node/test/spanprocessor.test.ts b/packages/opentelemetry-node/test/spanprocessor.test.ts index 768c12369130..455a13d635b4 100644 --- a/packages/opentelemetry-node/test/spanprocessor.test.ts +++ b/packages/opentelemetry-node/test/spanprocessor.test.ts @@ -5,6 +5,7 @@ import type { Span as OtelSpan } from '@opentelemetry/sdk-trace-base'; import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'; import { SemanticAttributes, SemanticResourceAttributes } from '@opentelemetry/semantic-conventions'; import type { SpanStatusType } from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '@sentry/core'; import { captureException, getCurrentScope, setCurrentClient } from '@sentry/core'; import { Span as SentrySpan, Transaction, addTracingExtensions, createTransport, spanToJSON } from '@sentry/core'; import { NodeClient } from '@sentry/node'; @@ -336,7 +337,7 @@ describe('SentrySpanProcessor', () => { const sentrySpan = getSpanForOtelSpan(child); // origin is set by default to 'manual' - expect(spanToJSON(sentrySpan!).data).toEqual({ 'sentry.origin': 'manual' }); + expect(spanToJSON(sentrySpan!).data).toEqual({ 'sentry.origin': 'manual', 'sentry.source': 'custom' }); child.end(); @@ -347,6 +348,7 @@ describe('SentrySpanProcessor', () => { 'test-attribute-3': 0, 'test-attribute-4': false, 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); }); @@ -586,6 +588,7 @@ describe('SentrySpanProcessor', () => { url: 'http://example.com/my/route/123', 'sentry.op': 'http', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); parentOtelSpan.end(); @@ -617,6 +620,7 @@ describe('SentrySpanProcessor', () => { url: 'http://example.com/my/route/123', 'sentry.op': 'http', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); expect(op).toBe('http'); @@ -651,6 +655,7 @@ describe('SentrySpanProcessor', () => { 'http.fragment': '#myHash', 'sentry.op': 'http', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }); expect(op).toBe('http'); @@ -671,7 +676,7 @@ describe('SentrySpanProcessor', () => { otelSpan.end(); // eslint-disable-next-line deprecation/deprecation - expect(sentrySpan?.transaction?.metadata.source).toBe('url'); + expect(sentrySpan?.transaction?.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toBe('url'); }); }); @@ -687,7 +692,7 @@ describe('SentrySpanProcessor', () => { otelSpan.end(); // eslint-disable-next-line deprecation/deprecation - expect(sentrySpan?.transaction?.metadata.source).toBe('route'); + expect(sentrySpan?.transaction?.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toBe('route'); }); }); @@ -703,7 +708,7 @@ describe('SentrySpanProcessor', () => { otelSpan.end(); // eslint-disable-next-line deprecation/deprecation - expect(sentrySpan?.transaction?.metadata.source).toBe('route'); + expect(sentrySpan?.transaction?.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toBe('route'); }); }); From 317190f7bcb7cacd7a468211d6661bdc2541e24f Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 16 Feb 2024 10:33:40 +0000 Subject: [PATCH 09/19] fix --- .../suites/express/multiple-routers/complex-router/server.ts | 3 +-- .../suites/tracing-experimental/apollo-graphql/test.ts | 3 +++ packages/node/src/handlers.ts | 2 +- packages/tracing-internal/src/node/integrations/express.ts | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dev-packages/node-integration-tests/suites/express/multiple-routers/complex-router/server.ts b/dev-packages/node-integration-tests/suites/express/multiple-routers/complex-router/server.ts index 8df1b9c3d988..08b3a8f024cc 100644 --- a/dev-packages/node-integration-tests/suites/express/multiple-routers/complex-router/server.ts +++ b/dev-packages/node-integration-tests/suites/express/multiple-routers/complex-router/server.ts @@ -1,6 +1,5 @@ import { loggingTransport, startExpressServerAndSendPortToRunner } from '@sentry-internal/node-integration-tests'; import * as Sentry from '@sentry/node'; -import * as Tracing from '@sentry/tracing'; import express from 'express'; const app = express(); @@ -9,7 +8,7 @@ Sentry.init({ dsn: 'https://public@dsn.ingest.sentry.io/1337', release: '1.0', // eslint-disable-next-line deprecation/deprecation - integrations: [new Sentry.Integrations.Http({ tracing: true }), new Tracing.Integrations.Express({ app })], + integrations: [new Sentry.Integrations.Http({ tracing: true }), new Sentry.Integrations.Express({ app })], tracesSampleRate: 1.0, transport: loggingTransport, }); diff --git a/dev-packages/node-integration-tests/suites/tracing-experimental/apollo-graphql/test.ts b/dev-packages/node-integration-tests/suites/tracing-experimental/apollo-graphql/test.ts index ad32799a5e79..77a64302447a 100644 --- a/dev-packages/node-integration-tests/suites/tracing-experimental/apollo-graphql/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing-experimental/apollo-graphql/test.ts @@ -11,6 +11,7 @@ describe('GraphQL/Apollo Tests', () => { 'graphql.source': '{hello}', 'otel.kind': 'INTERNAL', 'sentry.origin': 'auto.graphql.otel.graphql', + 'sentry.source': 'custom', }, description: 'query', status: 'ok', @@ -24,6 +25,7 @@ describe('GraphQL/Apollo Tests', () => { 'graphql.source': 'hello', 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', + 'sentry.source': 'custom', }, description: 'graphql.resolve hello', status: 'ok', @@ -46,6 +48,7 @@ describe('GraphQL/Apollo Tests', () => { 'graphql.source': 'mutation Mutation($email: String) {\n login(email: $email)\n}', 'otel.kind': 'INTERNAL', 'sentry.origin': 'auto.graphql.otel.graphql', + 'sentry.source': 'custom', }, description: 'mutation Mutation', status: 'ok', diff --git a/packages/node/src/handlers.ts b/packages/node/src/handlers.ts index b1140d0d9c28..220d2818028a 100644 --- a/packages/node/src/handlers.ts +++ b/packages/node/src/handlers.ts @@ -74,7 +74,7 @@ export function tracingHandler(): ( op: 'http.server', origin: 'auto.http.node.tracingHandler', ...ctx, - data: { + attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source, }, metadata: { diff --git a/packages/tracing-internal/src/node/integrations/express.ts b/packages/tracing-internal/src/node/integrations/express.ts index 7dabd973252e..617a7d981cf4 100644 --- a/packages/tracing-internal/src/node/integrations/express.ts +++ b/packages/tracing-internal/src/node/integrations/express.ts @@ -376,7 +376,7 @@ function instrumentRouter(appOrRouter: ExpressRouter): void { const transaction = res.__sentry_transaction; const attributes = (transaction && spanToJSON(transaction).data) || {}; - if (transaction && attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] !== 'custom') { + if (transaction && attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === 'url') { // If the request URL is '/' or empty, the reconstructed route will be empty. // Therefore, we fall back to setting the final route to '/' in this case. const finalRoute = req._reconstructedRoute || '/'; From 065dcfb6b3bc91b88afee9e94c01350172c3b66e Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 16 Feb 2024 10:40:10 +0000 Subject: [PATCH 10/19] source not on all spans but on txns --- packages/core/src/tracing/span.ts | 1 - packages/core/src/tracing/transaction.ts | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/core/src/tracing/span.ts b/packages/core/src/tracing/span.ts index eb6b85c1aeb1..9a9e520fab3b 100644 --- a/packages/core/src/tracing/span.ts +++ b/packages/core/src/tracing/span.ts @@ -144,7 +144,6 @@ export class Span implements SpanInterface { this.setAttributes({ [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanContext.origin || 'manual', [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op, - [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom', ...spanContext.attributes, }); diff --git a/packages/core/src/tracing/transaction.ts b/packages/core/src/tracing/transaction.ts index f699ac3557f3..170236117312 100644 --- a/packages/core/src/tracing/transaction.ts +++ b/packages/core/src/tracing/transaction.ts @@ -69,6 +69,11 @@ export class Transaction extends SpanClass implements TransactionInterface { this._trimEnd = transactionContext.trimEnd; + this._attributes = { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom', + ...this._attributes, + }; + // this is because transactions are also spans, and spans have a transaction pointer // TODO (v8): Replace this with another way to set the root span // eslint-disable-next-line deprecation/deprecation From a2d246448ba427baae717a854345c2363f47331e Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 16 Feb 2024 10:45:13 +0000 Subject: [PATCH 11/19] tests --- packages/tracing/test/hub.test.ts | 4 ++-- packages/tracing/test/span.test.ts | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/tracing/test/hub.test.ts b/packages/tracing/test/hub.test.ts index 5a96cd3f607c..b12966e6b3dc 100644 --- a/packages/tracing/test/hub.test.ts +++ b/packages/tracing/test/hub.test.ts @@ -305,8 +305,8 @@ describe('Hub', () => { makeMain(hub); hub.startTransaction({ name: 'dogpark', parentSampled: true }); - // length 3 because origin, source and op are set as attributes on span initialization - expect(Transaction.prototype.setAttribute).toHaveBeenCalledTimes(3); + // length 2 because origin and op are set as attributes on span initialization + expect(Transaction.prototype.setAttribute).toHaveBeenCalledTimes(2); }); it('should record sampling method and rate when sampling decision comes from traceSampleRate', () => { diff --git a/packages/tracing/test/span.test.ts b/packages/tracing/test/span.test.ts index 7ac884fc842e..c51a069e9c51 100644 --- a/packages/tracing/test/span.test.ts +++ b/packages/tracing/test/span.test.ts @@ -192,7 +192,6 @@ describe('Span', () => { origin: 'manual', data: { 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, }); }); @@ -509,7 +508,6 @@ describe('Span', () => { trace_id: 'c', data: { 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, origin: 'manual', }); @@ -538,7 +536,6 @@ describe('Span', () => { data: { 'sentry.op': 'op', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, }); }); @@ -612,7 +609,6 @@ describe('Span', () => { data1: 'bar', 'sentry.op': 'op', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); }); }); From c7122a8dff406e3036c0ab199b6a4520468a9b47 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 16 Feb 2024 10:53:30 +0000 Subject: [PATCH 12/19] test --- .../nextjs/test/integration/test/client/tracingFetch.test.ts | 1 - .../node-experimental/test/integration/transactions.test.ts | 4 ---- packages/opentelemetry/test/integration/transactions.test.ts | 4 ---- 3 files changed, 9 deletions(-) diff --git a/packages/nextjs/test/integration/test/client/tracingFetch.test.ts b/packages/nextjs/test/integration/test/client/tracingFetch.test.ts index 9b9d01774919..8517b4ab0fce 100644 --- a/packages/nextjs/test/integration/test/client/tracingFetch.test.ts +++ b/packages/nextjs/test/integration/test/client/tracingFetch.test.ts @@ -38,7 +38,6 @@ test('should correctly instrument `fetch` for performance tracing', async ({ pag 'http.response.status_code': 200, 'sentry.op': 'http.client', 'sentry.origin': 'auto.http.browser', - 'sentry.source': 'custom', }, description: 'GET http://example.com', op: 'http.client', diff --git a/packages/node-experimental/test/integration/transactions.test.ts b/packages/node-experimental/test/integration/transactions.test.ts index fbe539616df2..21a411191634 100644 --- a/packages/node-experimental/test/integration/transactions.test.ts +++ b/packages/node-experimental/test/integration/transactions.test.ts @@ -152,7 +152,6 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, description: 'inner span 1', origin: 'manual', @@ -168,7 +167,6 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'test.inner': 'test value', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, description: 'inner span 2', origin: 'manual', @@ -600,7 +598,6 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, description: 'inner span 1', origin: 'manual', @@ -615,7 +612,6 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, description: 'inner span 2', origin: 'manual', diff --git a/packages/opentelemetry/test/integration/transactions.test.ts b/packages/opentelemetry/test/integration/transactions.test.ts index b19dea8b0a36..08a62e93361d 100644 --- a/packages/opentelemetry/test/integration/transactions.test.ts +++ b/packages/opentelemetry/test/integration/transactions.test.ts @@ -148,7 +148,6 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, description: 'inner span 1', origin: 'manual', @@ -164,7 +163,6 @@ describe('Integration | Transactions', () => { 'otel.kind': 'INTERNAL', 'test.inner': 'test value', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, description: 'inner span 2', origin: 'manual', @@ -425,7 +423,6 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, description: 'inner span 1', origin: 'manual', @@ -440,7 +437,6 @@ describe('Integration | Transactions', () => { data: { 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, description: 'inner span 2', origin: 'manual', From d8bfeb893f3e1dbcfbb86091d655975075c33ced Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 16 Feb 2024 11:15:41 +0000 Subject: [PATCH 13/19] . --- packages/core/test/lib/tracing/span.test.ts | 21 ++++------- .../core/test/lib/utils/spanUtils.test.ts | 2 -- .../deno/test/__snapshots__/mod.test.ts.snap | 35 ------------------- packages/deno/test/normalize.ts | 4 +-- packages/sveltekit/test/server/load.test.ts | 1 + 5 files changed, 9 insertions(+), 54 deletions(-) diff --git a/packages/core/test/lib/tracing/span.test.ts b/packages/core/test/lib/tracing/span.test.ts index 8aac2340b3e6..b3c08987d4b2 100644 --- a/packages/core/test/lib/tracing/span.test.ts +++ b/packages/core/test/lib/tracing/span.test.ts @@ -86,7 +86,6 @@ describe('span', () => { arrayWithUndefined: [1, undefined, 2], // origin is set by default to 'manual' in the Span constructor 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); }); @@ -95,12 +94,12 @@ describe('span', () => { span.setAttribute('str', 'bar'); - // length 3 because `sentry.origin` and `sentry.source` are always set by default - expect(Object.keys(span['_attributes']).length).toEqual(3); + // length 2 because `sentry.origin` is always set by default + expect(Object.keys(span['_attributes']).length).toEqual(2); span.setAttribute('str', undefined); - expect(Object.keys(span['_attributes']).length).toEqual(2); + expect(Object.keys(span['_attributes']).length).toEqual(1); }); it('disallows invalid attribute types', () => { @@ -126,7 +125,6 @@ describe('span', () => { expect(initialAttributes).toEqual({ // origin is set by default to 'manual' in the Span constructor 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); const newAttributes = { @@ -154,7 +152,6 @@ describe('span', () => { boolArray: [true, false], arrayWithUndefined: [1, undefined, 2], 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); expect(span['_attributes']).not.toBe(newAttributes); @@ -175,7 +172,6 @@ describe('span', () => { boolArray: [true, false], arrayWithUndefined: [1, undefined, 2], 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); }); @@ -184,12 +180,12 @@ describe('span', () => { span.setAttribute('str', 'bar'); - // length 3 because `sentry.origin` and `sentry.source` are always set by default - expect(Object.keys(span['_attributes']).length).toEqual(3); + // length 2 because `sentry.origin` is always set by default + expect(Object.keys(span['_attributes']).length).toEqual(2); span.setAttributes({ str: undefined }); - expect(Object.keys(span['_attributes']).length).toEqual(2); + expect(Object.keys(span['_attributes']).length).toEqual(1); }); }); @@ -291,7 +287,6 @@ describe('span', () => { expect(span['_getData']()).toEqual({ // origin is set by default to 'manual' in the Span constructor 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); }); @@ -304,13 +299,11 @@ describe('span', () => { foo: 'bar', // origin is set by default to 'manual' in the Span constructor 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); expect(span['_getData']()).toStrictEqual({ // eslint-disable-next-line deprecation/deprecation ...span.data, 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); }); @@ -322,7 +315,6 @@ describe('span', () => { foo: 'bar', // origin is set by default to 'manual' in the Span constructor 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); // eslint-disable-next-line deprecation/deprecation expect(span['_getData']()).toBe(span.attributes); @@ -343,7 +335,6 @@ describe('span', () => { baz: 'baz', // origin is set by default to 'manual' in the Span constructor 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); // eslint-disable-next-line deprecation/deprecation expect(span['_getData']()).not.toBe(span.attributes); diff --git a/packages/core/test/lib/utils/spanUtils.test.ts b/packages/core/test/lib/utils/spanUtils.test.ts index 3f52daa39160..0afb59530623 100644 --- a/packages/core/test/lib/utils/spanUtils.test.ts +++ b/packages/core/test/lib/utils/spanUtils.test.ts @@ -57,7 +57,6 @@ describe('spanToJSON', () => { start_timestamp: span['_startTime'], data: { 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, }); }); @@ -94,7 +93,6 @@ describe('spanToJSON', () => { data: { 'sentry.op': 'test op', 'sentry.origin': 'auto', - 'sentry.source': 'custom', }, }); }); diff --git a/packages/deno/test/__snapshots__/mod.test.ts.snap b/packages/deno/test/__snapshots__/mod.test.ts.snap index d728072d38d6..417acf1e7639 100644 --- a/packages/deno/test/__snapshots__/mod.test.ts.snap +++ b/packages/deno/test/__snapshots__/mod.test.ts.snap @@ -41,41 +41,6 @@ snapshot[`captureException 1`] = ` }, stacktrace: { frames: [ - { - colno: 20, - filename: "ext:cli/40_testing.js", - function: "outerWrapped", - in_app: false, - lineno: 472, - }, - { - colno: 33, - filename: "ext:cli/40_testing.js", - function: "exitSanitizer", - in_app: false, - lineno: 458, - }, - { - colno: 31, - filename: "ext:cli/40_testing.js", - function: "resourceSanitizer", - in_app: false, - lineno: 410, - }, - { - colno: 33, - filename: "ext:cli/40_testing.js", - function: "asyncOpSanitizer", - in_app: false, - lineno: 177, - }, - { - colno: 11, - filename: "ext:cli/40_testing.js", - function: "innerWrapped", - in_app: false, - lineno: 526, - }, { colno: 27, context_line: " client.captureException(something());", diff --git a/packages/deno/test/normalize.ts b/packages/deno/test/normalize.ts index 64295932e00d..4dbbc8f3f6ec 100644 --- a/packages/deno/test/normalize.ts +++ b/packages/deno/test/normalize.ts @@ -152,9 +152,9 @@ function normalizeEvent(event: sentryTypes.Event): sentryTypes.Event { } if (event.exception?.values?.[0].stacktrace?.frames) { - // Exlcude Deno frames since these may change between versions + // Exclude Deno frames since these may change between versions event.exception.values[0].stacktrace.frames = event.exception.values[0].stacktrace.frames.filter( - frame => !frame.filename?.includes('deno:'), + frame => !frame.filename?.includes('deno:') && !frame.filename?.startsWith('ext:'), ); } diff --git a/packages/sveltekit/test/server/load.test.ts b/packages/sveltekit/test/server/load.test.ts index f047c6074064..790ded799106 100644 --- a/packages/sveltekit/test/server/load.test.ts +++ b/packages/sveltekit/test/server/load.test.ts @@ -292,6 +292,7 @@ describe('wrapServerLoadWithSentry calls trace', () => { op: 'function.sveltekit.server.load', name: '/users/[id]', status: 'ok', + metadata: {}, data: { 'http.method': 'GET', }, From c6918d0f5374dc845b2723be9bbcbd29e2ca7f60 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 16 Feb 2024 11:16:29 +0000 Subject: [PATCH 14/19] . --- packages/core/src/tracing/span.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/core/src/tracing/span.ts b/packages/core/src/tracing/span.ts index 9a9e520fab3b..5ded23cc386d 100644 --- a/packages/core/src/tracing/span.ts +++ b/packages/core/src/tracing/span.ts @@ -17,11 +17,7 @@ import { dropUndefinedKeys, logger, timestampInSeconds, uuid4 } from '@sentry/ut import { DEBUG_BUILD } from '../debug-build'; import { getMetricSummaryJsonForSpan } from '../metrics/metric-summary'; -import { - SEMANTIC_ATTRIBUTE_SENTRY_OP, - SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, - SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, -} from '../semanticAttributes'; +import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../semanticAttributes'; import { getRootSpan } from '../utils/getRootSpan'; import { TRACE_FLAG_NONE, From 2dbec1c47427cf9c4e290e731a89cc144636c89d Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 16 Feb 2024 13:06:12 +0000 Subject: [PATCH 15/19] . --- packages/opentelemetry-node/test/spanprocessor.test.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/opentelemetry-node/test/spanprocessor.test.ts b/packages/opentelemetry-node/test/spanprocessor.test.ts index 0ad8def44ee4..e3d741c50f3c 100644 --- a/packages/opentelemetry-node/test/spanprocessor.test.ts +++ b/packages/opentelemetry-node/test/spanprocessor.test.ts @@ -348,7 +348,6 @@ describe('SentrySpanProcessor', () => { 'test-attribute-3': 0, 'test-attribute-4': false, 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); }); @@ -588,7 +587,6 @@ describe('SentrySpanProcessor', () => { url: 'http://example.com/my/route/123', 'sentry.op': 'http', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); parentOtelSpan.end(); @@ -620,7 +618,6 @@ describe('SentrySpanProcessor', () => { url: 'http://example.com/my/route/123', 'sentry.op': 'http', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); expect(op).toBe('http'); @@ -655,7 +652,6 @@ describe('SentrySpanProcessor', () => { 'http.fragment': '#myHash', 'sentry.op': 'http', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }); expect(op).toBe('http'); From c23c59eb184bed493bf54e0211595adc073f2451 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 16 Feb 2024 13:37:25 +0000 Subject: [PATCH 16/19] =?UTF-8?q?=F0=9F=99=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../suites/tracing-experimental/apollo-graphql/test.ts | 2 -- packages/opentelemetry-node/test/spanprocessor.test.ts | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/dev-packages/node-integration-tests/suites/tracing-experimental/apollo-graphql/test.ts b/dev-packages/node-integration-tests/suites/tracing-experimental/apollo-graphql/test.ts index 77a64302447a..13ee6b246743 100644 --- a/dev-packages/node-integration-tests/suites/tracing-experimental/apollo-graphql/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing-experimental/apollo-graphql/test.ts @@ -25,7 +25,6 @@ describe('GraphQL/Apollo Tests', () => { 'graphql.source': 'hello', 'otel.kind': 'INTERNAL', 'sentry.origin': 'manual', - 'sentry.source': 'custom', }, description: 'graphql.resolve hello', status: 'ok', @@ -48,7 +47,6 @@ describe('GraphQL/Apollo Tests', () => { 'graphql.source': 'mutation Mutation($email: String) {\n login(email: $email)\n}', 'otel.kind': 'INTERNAL', 'sentry.origin': 'auto.graphql.otel.graphql', - 'sentry.source': 'custom', }, description: 'mutation Mutation', status: 'ok', diff --git a/packages/opentelemetry-node/test/spanprocessor.test.ts b/packages/opentelemetry-node/test/spanprocessor.test.ts index e3d741c50f3c..b5e2a26fa4c2 100644 --- a/packages/opentelemetry-node/test/spanprocessor.test.ts +++ b/packages/opentelemetry-node/test/spanprocessor.test.ts @@ -337,7 +337,7 @@ describe('SentrySpanProcessor', () => { const sentrySpan = getSpanForOtelSpan(child); // origin is set by default to 'manual' - expect(spanToJSON(sentrySpan!).data).toEqual({ 'sentry.origin': 'manual', 'sentry.source': 'custom' }); + expect(spanToJSON(sentrySpan!).data).toEqual({ 'sentry.origin': 'manual' }); child.end(); From 392548a07f6e2f4795eb7d4f5adbc000c3c103bf Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 16 Feb 2024 13:51:37 +0000 Subject: [PATCH 17/19] . --- .../node-experimental-fastify-app/tests/propagation.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dev-packages/e2e-tests/test-applications/node-experimental-fastify-app/tests/propagation.test.ts b/dev-packages/e2e-tests/test-applications/node-experimental-fastify-app/tests/propagation.test.ts index 9b83e882a739..cbb2c889edec 100644 --- a/dev-packages/e2e-tests/test-applications/node-experimental-fastify-app/tests/propagation.test.ts +++ b/dev-packages/e2e-tests/test-applications/node-experimental-fastify-app/tests/propagation.test.ts @@ -65,6 +65,7 @@ test('Propagates trace for outgoing http requests', async ({ baseURL }) => { 'http.response.status_code': 200, 'sentry.op': 'http.server', 'sentry.origin': 'auto.http.otel.http', + 'sentry.source': 'route', }, op: 'http.server', span_id: expect.any(String), @@ -89,6 +90,7 @@ test('Propagates trace for outgoing http requests', async ({ baseURL }) => { 'http.response.status_code': 200, 'sentry.op': 'http.server', 'sentry.origin': 'auto.http.otel.http', + 'sentry.source': 'route', }, op: 'http.server', parent_span_id: outgoingHttpSpanId, @@ -162,6 +164,7 @@ test('Propagates trace for outgoing fetch requests', async ({ baseURL }) => { 'http.response.status_code': 200, 'sentry.op': 'http.server', 'sentry.origin': 'auto.http.otel.http', + 'sentry.source': 'route', }, op: 'http.server', span_id: expect.any(String), @@ -186,6 +189,7 @@ test('Propagates trace for outgoing fetch requests', async ({ baseURL }) => { 'http.response.status_code': 200, 'sentry.op': 'http.server', 'sentry.origin': 'auto.http.otel.http', + 'sentry.source': 'route', }, op: 'http.server', parent_span_id: outgoingHttpSpanId, From 56601f164ff22d32481b509e236747250598abbc Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 16 Feb 2024 14:05:25 +0000 Subject: [PATCH 18/19] . --- .../node-experimental-fastify-app/tests/transactions.test.ts | 1 + .../suites/tracing-experimental/apollo-graphql/test.ts | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/node-experimental-fastify-app/tests/transactions.test.ts b/dev-packages/e2e-tests/test-applications/node-experimental-fastify-app/tests/transactions.test.ts index d2ab9e3d664f..0429adca8623 100644 --- a/dev-packages/e2e-tests/test-applications/node-experimental-fastify-app/tests/transactions.test.ts +++ b/dev-packages/e2e-tests/test-applications/node-experimental-fastify-app/tests/transactions.test.ts @@ -30,6 +30,7 @@ test('Sends an API route transaction', async ({ baseURL }) => { 'http.response.status_code': 200, 'sentry.op': 'http.server', 'sentry.origin': 'auto.http.otel.http', + 'sentry.source': 'route', }, op: 'http.server', span_id: expect.any(String), diff --git a/dev-packages/node-integration-tests/suites/tracing-experimental/apollo-graphql/test.ts b/dev-packages/node-integration-tests/suites/tracing-experimental/apollo-graphql/test.ts index 13ee6b246743..ad32799a5e79 100644 --- a/dev-packages/node-integration-tests/suites/tracing-experimental/apollo-graphql/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing-experimental/apollo-graphql/test.ts @@ -11,7 +11,6 @@ describe('GraphQL/Apollo Tests', () => { 'graphql.source': '{hello}', 'otel.kind': 'INTERNAL', 'sentry.origin': 'auto.graphql.otel.graphql', - 'sentry.source': 'custom', }, description: 'query', status: 'ok', From b2f77b5af145a56c12707da471bdfb1c6608373f Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 16 Feb 2024 14:50:09 +0000 Subject: [PATCH 19/19] hm --- .../suites/feedback/captureFeedback/test.ts | 1 + .../suites/feedback/captureFeedbackAndReplay/test.ts | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dev-packages/browser-integration-tests/suites/feedback/captureFeedback/test.ts b/dev-packages/browser-integration-tests/suites/feedback/captureFeedback/test.ts index 26ba665a418f..5d4ebe233c4d 100644 --- a/dev-packages/browser-integration-tests/suites/feedback/captureFeedback/test.ts +++ b/dev-packages/browser-integration-tests/suites/feedback/captureFeedback/test.ts @@ -44,6 +44,7 @@ sentryTest('should capture feedback (@sentry-internal/feedback import)', async ( const feedbackEvent = envelopeRequestParser((await feedbackRequestPromise).request()); expect(feedbackEvent).toEqual({ type: 'feedback', + breadcrumbs: expect.any(Array), contexts: { feedback: { contact_email: 'janedoe@example.org', diff --git a/dev-packages/browser-integration-tests/suites/feedback/captureFeedbackAndReplay/test.ts b/dev-packages/browser-integration-tests/suites/feedback/captureFeedbackAndReplay/test.ts index 1590c68652a3..057b5d43a1c8 100644 --- a/dev-packages/browser-integration-tests/suites/feedback/captureFeedbackAndReplay/test.ts +++ b/dev-packages/browser-integration-tests/suites/feedback/captureFeedbackAndReplay/test.ts @@ -50,15 +50,16 @@ sentryTest('should capture feedback (@sentry-internal/feedback import)', async ( expect(breadcrumbs).toEqual( expect.arrayContaining([ - { + expect.objectContaining({ category: 'sentry.feedback', data: { feedbackId: expect.any(String) }, - }, + }), ]), ); expect(feedbackEvent).toEqual({ type: 'feedback', + breadcrumbs: expect.any(Array), contexts: { feedback: { contact_email: 'janedoe@example.org',