diff --git a/dev-packages/e2e-tests/test-applications/nestjs-11/tests/span-decorator.test.ts b/dev-packages/e2e-tests/test-applications/nestjs-11/tests/span-decorator.test.ts index 3d63c1d17953..344ba18223cc 100644 --- a/dev-packages/e2e-tests/test-applications/nestjs-11/tests/span-decorator.test.ts +++ b/dev-packages/e2e-tests/test-applications/nestjs-11/tests/span-decorator.test.ts @@ -22,7 +22,7 @@ test('Transaction includes span and correct value for decorated async function', span_id: expect.stringMatching(/[a-f0-9]{16}/), trace_id: expect.stringMatching(/[a-f0-9]{32}/), data: { - 'sentry.origin': 'manual', + 'sentry.origin': 'auto.function.nestjs.sentry_traced', 'sentry.op': 'wait and return a string', }, description: 'wait', @@ -30,7 +30,7 @@ test('Transaction includes span and correct value for decorated async function', start_timestamp: expect.any(Number), status: 'ok', op: 'wait and return a string', - origin: 'manual', + origin: 'auto.function.nestjs.sentry_traced', }), ]), ); @@ -57,7 +57,7 @@ test('Transaction includes span and correct value for decorated sync function', span_id: expect.stringMatching(/[a-f0-9]{16}/), trace_id: expect.stringMatching(/[a-f0-9]{32}/), data: { - 'sentry.origin': 'manual', + 'sentry.origin': 'auto.function.nestjs.sentry_traced', 'sentry.op': 'return a string', }, description: 'getString', @@ -65,7 +65,7 @@ test('Transaction includes span and correct value for decorated sync function', start_timestamp: expect.any(Number), status: 'ok', op: 'return a string', - origin: 'manual', + origin: 'auto.function.nestjs.sentry_traced', }), ]), ); diff --git a/dev-packages/e2e-tests/test-applications/nestjs-8/tests/span-decorator.test.ts b/dev-packages/e2e-tests/test-applications/nestjs-8/tests/span-decorator.test.ts index 57eca5bc9dfe..961586bacb7f 100644 --- a/dev-packages/e2e-tests/test-applications/nestjs-8/tests/span-decorator.test.ts +++ b/dev-packages/e2e-tests/test-applications/nestjs-8/tests/span-decorator.test.ts @@ -22,7 +22,7 @@ test('Transaction includes span and correct value for decorated async function', span_id: expect.stringMatching(/[a-f0-9]{16}/), trace_id: expect.stringMatching(/[a-f0-9]{32}/), data: { - 'sentry.origin': 'manual', + 'sentry.origin': 'auto.function.nestjs.sentry_traced', 'sentry.op': 'wait and return a string', }, description: 'wait', @@ -30,7 +30,7 @@ test('Transaction includes span and correct value for decorated async function', start_timestamp: expect.any(Number), status: 'ok', op: 'wait and return a string', - origin: 'manual', + origin: 'auto.function.nestjs.sentry_traced', }), ]), ); @@ -57,7 +57,7 @@ test('Transaction includes span and correct value for decorated sync function', span_id: expect.stringMatching(/[a-f0-9]{16}/), trace_id: expect.stringMatching(/[a-f0-9]{32}/), data: { - 'sentry.origin': 'manual', + 'sentry.origin': 'auto.function.nestjs.sentry_traced', 'sentry.op': 'return a string', }, description: 'getString', @@ -65,7 +65,7 @@ test('Transaction includes span and correct value for decorated sync function', start_timestamp: expect.any(Number), status: 'ok', op: 'return a string', - origin: 'manual', + origin: 'auto.function.nestjs.sentry_traced', }), ]), ); diff --git a/dev-packages/e2e-tests/test-applications/nestjs-basic/tests/span-decorator.test.ts b/dev-packages/e2e-tests/test-applications/nestjs-basic/tests/span-decorator.test.ts index b82213e6157a..87d66a0a2d4d 100644 --- a/dev-packages/e2e-tests/test-applications/nestjs-basic/tests/span-decorator.test.ts +++ b/dev-packages/e2e-tests/test-applications/nestjs-basic/tests/span-decorator.test.ts @@ -22,7 +22,7 @@ test('Transaction includes span and correct value for decorated async function', span_id: expect.stringMatching(/[a-f0-9]{16}/), trace_id: expect.stringMatching(/[a-f0-9]{32}/), data: { - 'sentry.origin': 'manual', + 'sentry.origin': 'auto.function.nestjs.sentry_traced', 'sentry.op': 'wait and return a string', }, description: 'wait', @@ -30,7 +30,7 @@ test('Transaction includes span and correct value for decorated async function', start_timestamp: expect.any(Number), status: 'ok', op: 'wait and return a string', - origin: 'manual', + origin: 'auto.function.nestjs.sentry_traced', }), ]), ); @@ -57,7 +57,7 @@ test('Transaction includes span and correct value for decorated sync function', span_id: expect.stringMatching(/[a-f0-9]{16}/), trace_id: expect.stringMatching(/[a-f0-9]{32}/), data: { - 'sentry.origin': 'manual', + 'sentry.origin': 'auto.function.nestjs.sentry_traced', 'sentry.op': 'return a string', }, description: 'getString', @@ -65,7 +65,7 @@ test('Transaction includes span and correct value for decorated sync function', start_timestamp: expect.any(Number), status: 'ok', op: 'return a string', - origin: 'manual', + origin: 'auto.function.nestjs.sentry_traced', }), ]), ); diff --git a/dev-packages/e2e-tests/test-applications/nestjs-fastify/tests/span-decorator.test.ts b/dev-packages/e2e-tests/test-applications/nestjs-fastify/tests/span-decorator.test.ts index 6efb193751b9..14e53bf5912e 100644 --- a/dev-packages/e2e-tests/test-applications/nestjs-fastify/tests/span-decorator.test.ts +++ b/dev-packages/e2e-tests/test-applications/nestjs-fastify/tests/span-decorator.test.ts @@ -22,7 +22,7 @@ test('Transaction includes span and correct value for decorated async function', span_id: expect.stringMatching(/[a-f0-9]{16}/), trace_id: expect.stringMatching(/[a-f0-9]{32}/), data: { - 'sentry.origin': 'manual', + 'sentry.origin': 'auto.function.nestjs.sentry_traced', 'sentry.op': 'wait and return a string', }, description: 'wait', @@ -30,7 +30,7 @@ test('Transaction includes span and correct value for decorated async function', start_timestamp: expect.any(Number), status: 'ok', op: 'wait and return a string', - origin: 'manual', + origin: 'auto.function.nestjs.sentry_traced', }), ]), ); @@ -57,7 +57,7 @@ test('Transaction includes span and correct value for decorated sync function', span_id: expect.stringMatching(/[a-f0-9]{16}/), trace_id: expect.stringMatching(/[a-f0-9]{32}/), data: { - 'sentry.origin': 'manual', + 'sentry.origin': 'auto.function.nestjs.sentry_traced', 'sentry.op': 'return a string', }, description: 'getString', @@ -65,7 +65,7 @@ test('Transaction includes span and correct value for decorated sync function', start_timestamp: expect.any(Number), status: 'ok', op: 'return a string', - origin: 'manual', + origin: 'auto.function.nestjs.sentry_traced', }), ]), ); diff --git a/packages/nestjs/src/decorators.ts b/packages/nestjs/src/decorators.ts index 7ac4941be877..449c884b1008 100644 --- a/packages/nestjs/src/decorators.ts +++ b/packages/nestjs/src/decorators.ts @@ -1,5 +1,10 @@ import type { MonitorConfig } from '@sentry/core'; -import { captureException, isThenable } from '@sentry/core'; +import { + captureException, + isThenable, + SEMANTIC_ATTRIBUTE_SENTRY_OP, + SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, +} from '@sentry/core'; import * as Sentry from '@sentry/node'; import { startSpan } from '@sentry/node'; import { isExpectedError } from './helpers'; @@ -52,6 +57,10 @@ export function SentryTraced(op: string = 'function') { { op: op, name: propertyKey, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.nestjs.sentry_traced', + [SEMANTIC_ATTRIBUTE_SENTRY_OP]: op, + }, }, () => { return originalMethod.apply(this, args); diff --git a/packages/nestjs/test/decorators.test.ts b/packages/nestjs/test/decorators.test.ts index 329f2fbe8fa4..07bd8922f373 100644 --- a/packages/nestjs/test/decorators.test.ts +++ b/packages/nestjs/test/decorators.test.ts @@ -1,5 +1,6 @@ import 'reflect-metadata'; import * as core from '@sentry/core'; +import { SEMANTIC_ATTRIBUTE_SENTRY_OP, 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'; @@ -38,6 +39,10 @@ describe('SentryTraced decorator', () => { { op: 'test-operation', name: 'testMethod', + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.nestjs.sentry_traced', + [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'test-operation', + }, }, expect.any(Function), ); @@ -67,6 +72,10 @@ describe('SentryTraced decorator', () => { { op: 'function', // default value name: 'testDefaultOp', + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.nestjs.sentry_traced', + [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'function', + }, }, expect.any(Function), ); @@ -96,6 +105,10 @@ describe('SentryTraced decorator', () => { { op: 'sync-operation', name: 'syncMethod', + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.nestjs.sentry_traced', + [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'sync-operation', + }, }, expect.any(Function), );