Skip to content

Commit f30da60

Browse files
authored
feat(tracing): Improve data collection for prisma spans (#8779)
1 parent fc7344f commit f30da60

File tree

4 files changed

+66
-8
lines changed

4 files changed

+66
-8
lines changed

packages/node-integration-tests/suites/tracing-new/prisma-orm/test.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,21 @@ conditionalTest({ min: 12 })('Prisma ORM Integration', () => {
88
assertSentryTransaction(envelope[2], {
99
transaction: 'Test Transaction',
1010
spans: [
11-
{ description: 'User create', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } },
12-
{ description: 'User findMany', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } },
13-
{ description: 'User deleteMany', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } },
11+
{
12+
description: 'User create',
13+
op: 'db.sql.prisma',
14+
data: { 'db.system': 'postgresql', 'db.operation': 'create', 'db.prisma.version': '3.12.0' },
15+
},
16+
{
17+
description: 'User findMany',
18+
op: 'db.sql.prisma',
19+
data: { 'db.system': 'postgresql', 'db.operation': 'findMany', 'db.prisma.version': '3.12.0' },
20+
},
21+
{
22+
description: 'User deleteMany',
23+
op: 'db.sql.prisma',
24+
data: { 'db.system': 'postgresql', 'db.operation': 'deleteMany', 'db.prisma.version': '3.12.0' },
25+
},
1426
],
1527
});
1628
});

packages/node-integration-tests/suites/tracing/prisma-orm/test.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,21 @@ conditionalTest({ min: 12 })('Prisma ORM Integration', () => {
88
assertSentryTransaction(envelope[2], {
99
transaction: 'Test Transaction',
1010
spans: [
11-
{ description: 'User create', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } },
12-
{ description: 'User findMany', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } },
13-
{ description: 'User deleteMany', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } },
11+
{
12+
description: 'User create',
13+
op: 'db.sql.prisma',
14+
data: { 'db.system': 'postgresql', 'db.operation': 'create', 'db.prisma.version': '3.12.0' },
15+
},
16+
{
17+
description: 'User findMany',
18+
op: 'db.sql.prisma',
19+
data: { 'db.system': 'postgresql', 'db.operation': 'findMany', 'db.prisma.version': '3.12.0' },
20+
},
21+
{
22+
description: 'User deleteMany',
23+
op: 'db.sql.prisma',
24+
data: { 'db.system': 'postgresql', 'db.operation': 'deleteMany', 'db.prisma.version': '3.12.0' },
25+
},
1426
],
1527
});
1628
});

packages/tracing-internal/src/node/integrations/prisma.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ type PrismaMiddleware<T = unknown> = (
3636

3737
interface PrismaClient {
3838
_sentryInstrumented?: boolean;
39+
_engineConfig?: {
40+
activeProvider?: string;
41+
clientVersion?: string;
42+
};
3943
$use: (cb: PrismaMiddleware) => void;
4044
}
4145

@@ -70,15 +74,36 @@ export class Prisma implements Integration {
7074
// eslint-disable-next-line @typescript-eslint/no-explicit-any
7175
addNonEnumerableProperty(options.client as any, '_sentryInstrumented', true);
7276

77+
const clientData: Record<string, string | number> = {};
78+
try {
79+
const engineConfig = (options.client as PrismaClient)._engineConfig;
80+
if (engineConfig) {
81+
const { activeProvider, clientVersion } = engineConfig;
82+
if (activeProvider) {
83+
clientData['db.system'] = activeProvider;
84+
}
85+
if (clientVersion) {
86+
clientData['db.prisma.version'] = clientVersion;
87+
}
88+
}
89+
} catch (e) {
90+
// ignore
91+
}
92+
7393
options.client.$use((params, next: (params: PrismaMiddlewareParams) => Promise<unknown>) => {
7494
if (shouldDisableAutoInstrumentation(getCurrentHub)) {
7595
return next(params);
7696
}
7797

7898
const action = params.action;
7999
const model = params.model;
100+
80101
return trace(
81-
{ name: model ? `${model} ${action}` : action, op: 'db.sql.prisma', data: { 'db.system': 'prisma' } },
102+
{
103+
name: model ? `${model} ${action}` : action,
104+
op: 'db.sql.prisma',
105+
data: { ...clientData, 'db.operation': action },
106+
},
82107
() => next(params),
83108
);
84109
});

packages/tracing/test/integrations/node/prisma.test.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ class PrismaClient {
2525
create: () => this._middleware?.({ action: 'create', model: 'user' }, () => Promise.resolve('result')),
2626
};
2727

28+
public _engineConfig = {
29+
activeProvider: 'postgresql',
30+
clientVersion: '3.1.2',
31+
};
32+
2833
private _middleware?: PrismaMiddleware;
2934

3035
constructor() {
@@ -48,7 +53,11 @@ describe('setupOnce', function () {
4853
void prismaClient.user.create()?.then(() => {
4954
expect(mockTrace).toHaveBeenCalledTimes(1);
5055
expect(mockTrace).toHaveBeenLastCalledWith(
51-
{ name: 'user create', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } },
56+
{
57+
name: 'user create',
58+
op: 'db.sql.prisma',
59+
data: { 'db.system': 'postgresql', 'db.prisma.version': '3.1.2', 'db.operation': 'create' },
60+
},
5261
expect.any(Function),
5362
);
5463
done();

0 commit comments

Comments
 (0)