Skip to content

Commit e59be58

Browse files
authored
feat(core)!: Use rpc span op for tRPC spans (#22914)
Replace `rpc.server` with `rpc` from conventions for trpc spans Part of #22446
1 parent a6bb0eb commit e59be58

6 files changed

Lines changed: 30 additions & 14 deletions

File tree

dev-packages/e2e-tests/test-applications/node-express-streaming/tests/trpc.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type { AppRouter } from '../src/app';
55

66
test('Should record streamed span for trpc query', async ({ baseURL }) => {
77
const trpcSpanPromise = waitForStreamedSpan('node-express-streaming', span => {
8-
return span.name === 'trpc/getSomething' && getSpanOp(span) === 'rpc.server';
8+
return span.name === 'trpc/getSomething' && getSpanOp(span) === 'rpc';
99
});
1010

1111
const trpcClient = createTRPCProxyClient<AppRouter>({
@@ -21,13 +21,13 @@ test('Should record streamed span for trpc query', async ({ baseURL }) => {
2121
const trpcSpan = await trpcSpanPromise;
2222
expect(trpcSpan).toBeDefined();
2323
expect(trpcSpan.name).toBe('trpc/getSomething');
24-
expect(getSpanOp(trpcSpan)).toBe('rpc.server');
24+
expect(getSpanOp(trpcSpan)).toBe('rpc');
2525
expect(trpcSpan.attributes['sentry.origin']?.value).toBe('auto.rpc.trpc');
2626
});
2727

2828
test('Should record streamed span for trpc mutation', async ({ baseURL }) => {
2929
const trpcSpanPromise = waitForStreamedSpan('node-express-streaming', span => {
30-
return span.name === 'trpc/createSomething' && getSpanOp(span) === 'rpc.server';
30+
return span.name === 'trpc/createSomething' && getSpanOp(span) === 'rpc';
3131
});
3232

3333
const trpcClient = createTRPCProxyClient<AppRouter>({
@@ -43,13 +43,13 @@ test('Should record streamed span for trpc mutation', async ({ baseURL }) => {
4343
const trpcSpan = await trpcSpanPromise;
4444
expect(trpcSpan).toBeDefined();
4545
expect(trpcSpan.name).toBe('trpc/createSomething');
46-
expect(getSpanOp(trpcSpan)).toBe('rpc.server');
46+
expect(getSpanOp(trpcSpan)).toBe('rpc');
4747
expect(trpcSpan.attributes['sentry.origin']?.value).toBe('auto.rpc.trpc');
4848
});
4949

5050
test('Should record streamed span and error for a crashing trpc handler', async ({ baseURL }) => {
5151
const trpcSpanPromise = waitForStreamedSpan('node-express-streaming', span => {
52-
return span.name === 'trpc/crashSomething' && getSpanOp(span) === 'rpc.server';
52+
return span.name === 'trpc/crashSomething' && getSpanOp(span) === 'rpc';
5353
});
5454

5555
const errorEventPromise = waitForError('node-express-streaming', errorEvent => {
@@ -83,7 +83,7 @@ test('Should record streamed span and error for a crashing trpc handler', async
8383

8484
test('Should record streamed span and error for a trpc handler that returns a status code', async ({ baseURL }) => {
8585
const trpcSpanPromise = waitForStreamedSpan('node-express-streaming', span => {
86-
return span.name === 'trpc/badRequest' && getSpanOp(span) === 'rpc.server';
86+
return span.name === 'trpc/badRequest' && getSpanOp(span) === 'rpc';
8787
});
8888

8989
const errorEventPromise = waitForError('node-express-streaming', errorEvent => {

dev-packages/e2e-tests/test-applications/node-express-v5/tests/trpc.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ test('Should record span for trpc query', async ({ baseURL }) => {
2727
expect(transaction.spans).toContainEqual(
2828
expect.objectContaining({
2929
data: expect.objectContaining({
30-
'sentry.op': 'rpc.server',
30+
'sentry.op': 'rpc',
3131
'sentry.origin': 'auto.rpc.trpc',
3232
}),
3333
description: `trpc/getSomething`,
@@ -59,7 +59,7 @@ test('Should record transaction for trpc mutation', async ({ baseURL }) => {
5959
expect(transaction.spans).toContainEqual(
6060
expect.objectContaining({
6161
data: expect.objectContaining({
62-
'sentry.op': 'rpc.server',
62+
'sentry.op': 'rpc',
6363
'sentry.origin': 'auto.rpc.trpc',
6464
}),
6565
description: `trpc/createSomething`,

dev-packages/e2e-tests/test-applications/node-express/tests/trpc.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ test('Should record span for trpc query', async ({ baseURL }) => {
2727
expect(transaction.spans).toContainEqual(
2828
expect.objectContaining({
2929
data: expect.objectContaining({
30-
'sentry.op': 'rpc.server',
30+
'sentry.op': 'rpc',
3131
'sentry.origin': 'auto.rpc.trpc',
3232
}),
3333
description: `trpc/getSomething`,
@@ -59,7 +59,7 @@ test('Should record transaction for trpc mutation', async ({ baseURL }) => {
5959
expect(transaction.spans).toContainEqual(
6060
expect.objectContaining({
6161
data: expect.objectContaining({
62-
'sentry.op': 'rpc.server',
62+
'sentry.op': 'rpc',
6363
'sentry.origin': 'auto.rpc.trpc',
6464
}),
6565
description: `trpc/createSomething`,

dev-packages/e2e-tests/test-applications/tsx-express/tests/trpc.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ test('Records span for trpc query', async ({ baseURL }) => {
2727
expect(transaction.spans).toContainEqual(
2828
expect.objectContaining({
2929
data: expect.objectContaining({
30-
'sentry.op': 'rpc.server',
30+
'sentry.op': 'rpc',
3131
'sentry.origin': 'auto.rpc.trpc',
3232
}),
3333
description: `trpc/getSomething`,
@@ -59,7 +59,7 @@ test('Records transaction for trpc mutation', async ({ baseURL }) => {
5959
expect(transaction.spans).toContainEqual(
6060
expect.objectContaining({
6161
data: expect.objectContaining({
62-
'sentry.op': 'rpc.server',
62+
'sentry.op': 'rpc',
6363
'sentry.origin': 'auto.rpc.trpc',
6464
}),
6565
description: `trpc/createSomething`,

packages/core/src/trpc.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
import {
2+
RPC_METHOD,
3+
RPC_SYSTEM_NAME,
4+
SENTRY_OP,
5+
TRPC_PROCEDURE_PATH,
6+
TRPC_PROCEDURE_TYPE,
7+
} from '@sentry/conventions/attributes';
8+
import { WEB_SERVER_RPC_SPAN_OP } from '@sentry/conventions/op';
19
import { getClient, withIsolationScope } from './currentScopes';
210
import { captureException } from './exports';
311
import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from './semanticAttributes';
@@ -85,10 +93,14 @@ export function trpcMiddleware(options: SentryTrpcMiddlewareOptions = {}) {
8593
return startSpanManual(
8694
{
8795
name: `trpc/${path}`,
88-
op: 'rpc.server',
8996
attributes: {
97+
[SENTRY_OP]: WEB_SERVER_RPC_SPAN_OP,
9098
[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',
9199
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.rpc.trpc',
100+
[RPC_SYSTEM_NAME]: 'trpc',
101+
[RPC_METHOD]: String(path),
102+
[TRPC_PROCEDURE_PATH]: String(path),
103+
[TRPC_PROCEDURE_TYPE]: String(type),
92104
},
93105
forceTransaction: !!options.forceTransaction,
94106
},

packages/core/test/lib/trpc.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,14 @@ describe('trpcMiddleware', () => {
5959
expect(tracing.startSpanManual).toHaveBeenCalledWith(
6060
{
6161
name: 'trpc/test.procedure',
62-
op: 'rpc.server',
6362
attributes: {
63+
'sentry.op': 'rpc',
6464
'sentry.origin': 'auto.rpc.trpc',
6565
'sentry.source': 'route',
66+
'rpc.system.name': 'trpc',
67+
'rpc.method': 'test.procedure',
68+
'trpc.procedure_path': 'test.procedure',
69+
'trpc.procedure_type': 'query',
6670
},
6771
forceTransaction: false,
6872
},

0 commit comments

Comments
 (0)