Skip to content

Commit 37fbd75

Browse files
authored
feat(v8/node): Do not overwrite prisma db.system in newer Prisma versions (#14772)
Backport of #14771
1 parent 8e0db86 commit 37fbd75

File tree

5 files changed

+186
-143
lines changed

5 files changed

+186
-143
lines changed

dev-packages/node-integration-tests/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"@nestjs/common": "10.4.6",
3131
"@nestjs/core": "10.4.6",
3232
"@nestjs/platform-express": "10.4.6",
33-
"@prisma/client": "5.9.1",
33+
"@prisma/client": "5.22.0",
3434
"@sentry/aws-serverless": "8.46.0",
3535
"@sentry/core": "8.46.0",
3636
"@sentry/node": "8.46.0",

dev-packages/node-integration-tests/suites/tracing/prisma-orm/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"author": "",
1717
"license": "ISC",
1818
"dependencies": {
19-
"@prisma/client": "5.9.1",
20-
"prisma": "^5.9.1"
19+
"@prisma/client": "5.22.0",
20+
"prisma": "5.22.0"
2121
}
2222
}

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

+131-97
Original file line numberDiff line numberDiff line change
@@ -3,103 +3,137 @@ import { createRunner } from '../../../utils/runner';
33

44
conditionalTest({ min: 16 })('Prisma ORM Tests', () => {
55
test('CJS - should instrument PostgreSQL queries from Prisma ORM', done => {
6-
const EXPECTED_TRANSACTION = {
7-
transaction: 'Test Transaction',
8-
spans: expect.arrayContaining([
9-
expect.objectContaining({
10-
data: {
11-
method: 'create',
12-
model: 'User',
13-
name: 'User.create',
14-
'sentry.origin': 'auto.db.otel.prisma',
15-
},
16-
description: 'prisma:client:operation',
17-
status: 'ok',
18-
}),
19-
expect.objectContaining({
20-
data: {
21-
'sentry.origin': 'auto.db.otel.prisma',
22-
},
23-
description: 'prisma:client:serialize',
24-
status: 'ok',
25-
}),
26-
expect.objectContaining({
27-
data: {
28-
'sentry.origin': 'auto.db.otel.prisma',
29-
},
30-
description: 'prisma:client:connect',
31-
status: 'ok',
32-
}),
33-
expect.objectContaining({
34-
data: {
35-
'sentry.origin': 'auto.db.otel.prisma',
36-
},
37-
description: 'prisma:engine',
38-
status: 'ok',
39-
}),
40-
expect.objectContaining({
41-
data: {
42-
'db.type': 'postgres',
43-
'sentry.origin': 'auto.db.otel.prisma',
44-
},
45-
description: 'prisma:engine:connection',
46-
status: 'ok',
47-
}),
48-
expect.objectContaining({
49-
data: {
50-
'db.statement': expect.stringContaining(
51-
'INSERT INTO "public"."User" ("createdAt","email","name") VALUES ($1,$2,$3) RETURNING "public"."User"."id", "public"."User"."createdAt", "public"."User"."email", "public"."User"."name" /* traceparent',
52-
),
53-
'sentry.origin': 'auto.db.otel.prisma',
54-
'db.system': 'prisma',
55-
'sentry.op': 'db',
56-
},
57-
description: expect.stringContaining(
58-
'INSERT INTO "public"."User" ("createdAt","email","name") VALUES ($1,$2,$3) RETURNING "public"."User"."id", "public"."User"."createdAt", "public"."User"."email", "public"."User"."name" /* traceparent',
59-
),
60-
status: 'ok',
61-
}),
62-
expect.objectContaining({
63-
data: {
64-
'sentry.origin': 'auto.db.otel.prisma',
65-
},
66-
description: 'prisma:engine:serialize',
67-
status: 'ok',
68-
}),
69-
expect.objectContaining({
70-
data: {
71-
'sentry.origin': 'auto.db.otel.prisma',
72-
},
73-
description: 'prisma:engine:response_json_serialization',
74-
status: 'ok',
75-
}),
76-
expect.objectContaining({
77-
data: {
78-
method: 'findMany',
79-
model: 'User',
80-
name: 'User.findMany',
81-
'sentry.origin': 'auto.db.otel.prisma',
82-
},
83-
description: 'prisma:client:operation',
84-
status: 'ok',
85-
}),
86-
expect.objectContaining({
87-
data: {
88-
'sentry.origin': 'auto.db.otel.prisma',
89-
},
90-
description: 'prisma:client:serialize',
91-
status: 'ok',
92-
}),
93-
expect.objectContaining({
94-
data: {
95-
'sentry.origin': 'auto.db.otel.prisma',
96-
},
97-
description: 'prisma:engine',
98-
status: 'ok',
99-
}),
100-
]),
101-
};
6+
createRunner(__dirname, 'scenario.js')
7+
.expect({
8+
transaction: transaction => {
9+
expect(transaction.transaction).toBe('Test Transaction');
10210

103-
createRunner(__dirname, 'scenario.js').expect({ transaction: EXPECTED_TRANSACTION }).start(done);
11+
const spans = transaction.spans || [];
12+
expect(spans.length).toBeGreaterThanOrEqual(5);
13+
14+
expect(spans).toContainEqual(
15+
expect.objectContaining({
16+
data: {
17+
method: 'create',
18+
model: 'User',
19+
name: 'User.create',
20+
'sentry.origin': 'auto.db.otel.prisma',
21+
},
22+
description: 'prisma:client:operation',
23+
status: 'ok',
24+
}),
25+
);
26+
27+
expect(spans).toContainEqual(
28+
expect.objectContaining({
29+
data: {
30+
'sentry.origin': 'auto.db.otel.prisma',
31+
},
32+
description: 'prisma:client:serialize',
33+
status: 'ok',
34+
}),
35+
);
36+
37+
expect(spans).toContainEqual(
38+
expect.objectContaining({
39+
data: {
40+
'sentry.origin': 'auto.db.otel.prisma',
41+
},
42+
description: 'prisma:client:connect',
43+
status: 'ok',
44+
}),
45+
);
46+
47+
expect(spans).toContainEqual(
48+
expect.objectContaining({
49+
data: {
50+
'sentry.origin': 'auto.db.otel.prisma',
51+
},
52+
description: 'prisma:engine',
53+
status: 'ok',
54+
}),
55+
);
56+
expect(spans).toContainEqual(
57+
expect.objectContaining({
58+
data: {
59+
'sentry.origin': 'auto.db.otel.prisma',
60+
'sentry.op': 'db',
61+
'db.system': 'postgresql',
62+
},
63+
description: 'prisma:engine:connection',
64+
status: 'ok',
65+
op: 'db',
66+
}),
67+
);
68+
69+
expect(spans).toContainEqual(
70+
expect.objectContaining({
71+
data: {
72+
'db.statement': expect.stringContaining(
73+
'INSERT INTO "public"."User" ("createdAt","email","name") VALUES ($1,$2,$3) RETURNING "public"."User"."id", "public"."User"."createdAt", "public"."User"."email", "public"."User"."name" /* traceparent',
74+
),
75+
'sentry.origin': 'auto.db.otel.prisma',
76+
'sentry.op': 'db',
77+
'db.system': 'postgresql',
78+
'otel.kind': 'CLIENT',
79+
},
80+
description: expect.stringContaining(
81+
'INSERT INTO "public"."User" ("createdAt","email","name") VALUES ($1,$2,$3) RETURNING "public"."User"."id", "public"."User"."createdAt", "public"."User"."email", "public"."User"."name" /* traceparent',
82+
),
83+
status: 'ok',
84+
op: 'db',
85+
}),
86+
);
87+
expect(spans).toContainEqual(
88+
expect.objectContaining({
89+
data: {
90+
'sentry.origin': 'auto.db.otel.prisma',
91+
},
92+
description: 'prisma:engine:serialize',
93+
status: 'ok',
94+
}),
95+
);
96+
expect(spans).toContainEqual(
97+
expect.objectContaining({
98+
data: {
99+
'sentry.origin': 'auto.db.otel.prisma',
100+
},
101+
description: 'prisma:engine:response_json_serialization',
102+
status: 'ok',
103+
}),
104+
);
105+
expect(spans).toContainEqual(
106+
expect.objectContaining({
107+
data: {
108+
method: 'findMany',
109+
model: 'User',
110+
name: 'User.findMany',
111+
'sentry.origin': 'auto.db.otel.prisma',
112+
},
113+
description: 'prisma:client:operation',
114+
status: 'ok',
115+
}),
116+
);
117+
expect(spans).toContainEqual(
118+
expect.objectContaining({
119+
data: {
120+
'sentry.origin': 'auto.db.otel.prisma',
121+
},
122+
description: 'prisma:client:serialize',
123+
status: 'ok',
124+
}),
125+
);
126+
expect(spans).toContainEqual(
127+
expect.objectContaining({
128+
data: {
129+
'sentry.origin': 'auto.db.otel.prisma',
130+
},
131+
description: 'prisma:engine',
132+
status: 'ok',
133+
}),
134+
);
135+
},
136+
})
137+
.start(done);
104138
});
105139
});

dev-packages/node-integration-tests/suites/tracing/prisma-orm/yarn.lock

+49-42
Original file line numberDiff line numberDiff line change
@@ -2,50 +2,57 @@
22
# yarn lockfile v1
33

44

5-
"@prisma/client@5.9.1":
6-
version "5.9.1"
7-
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.9.1.tgz#d92bd2f7f006e0316cb4fda9d73f235965cf2c64"
8-
integrity sha512-caSOnG4kxcSkhqC/2ShV7rEoWwd3XrftokxJqOCMVvia4NYV/TPtJlS9C2os3Igxw/Qyxumj9GBQzcStzECvtQ==
9-
10-
"@prisma/debug@5.9.1":
11-
version "5.9.1"
12-
resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-5.9.1.tgz#906274e73d3267f88b69459199fa3c51cd9511a3"
13-
integrity sha512-yAHFSFCg8KVoL0oRUno3m60GAjsUKYUDkQ+9BA2X2JfVR3kRVSJFc/GpQ2fSORi4pSHZR9orfM4UC9OVXIFFTA==
14-
15-
"@prisma/engines-version@5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64":
16-
version "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64"
17-
resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64.tgz#54d2164f28d23e09d41cf9eb0bddbbe7f3aaa660"
18-
integrity sha512-HFl7275yF0FWbdcNvcSRbbu9JCBSLMcurYwvWc8WGDnpu7APxQo2ONtZrUggU3WxLxUJ2uBX+0GOFIcJeVeOOQ==
19-
20-
"@prisma/engines@5.9.1":
21-
version "5.9.1"
22-
resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.9.1.tgz#767539afc6f193a182d0495b30b027f61f279073"
23-
integrity sha512-gkdXmjxQ5jktxWNdDA5aZZ6R8rH74JkoKq6LD5mACSvxd2vbqWeWIOV0Py5wFC8vofOYShbt6XUeCIUmrOzOnQ==
5+
"@prisma/client@5.22.0":
6+
version "5.22.0"
7+
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.22.0.tgz#da1ca9c133fbefe89e0da781c75e1c59da5f8802"
8+
integrity sha512-M0SVXfyHnQREBKxCgyo7sffrKttwE6R8PMq330MIUF0pTwjUhLbW84pFDlf06B27XyCR++VtjugEnIHdr07SVA==
9+
10+
"@prisma/debug@5.22.0":
11+
version "5.22.0"
12+
resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-5.22.0.tgz#58af56ed7f6f313df9fb1042b6224d3174bbf412"
13+
integrity sha512-AUt44v3YJeggO2ZU5BkXI7M4hu9BF2zzH2iF2V5pyXT/lRTyWiElZ7It+bRH1EshoMRxHgpYg4VB6rCM+mG5jQ==
14+
15+
"@prisma/engines-version@5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2":
16+
version "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2"
17+
resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2.tgz#d534dd7235c1ba5a23bacd5b92cc0ca3894c28f4"
18+
integrity sha512-2PTmxFR2yHW/eB3uqWtcgRcgAbG1rwG9ZriSvQw+nnb7c4uCr3RAcGMb6/zfE88SKlC1Nj2ziUvc96Z379mHgQ==
19+
20+
"@prisma/engines@5.22.0":
21+
version "5.22.0"
22+
resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.22.0.tgz#28f3f52a2812c990a8b66eb93a0987816a5b6d84"
23+
integrity sha512-UNjfslWhAt06kVL3CjkuYpHAWSO6L4kDCVPegV6itt7nD1kSJavd3vhgAEhjglLJJKEdJ7oIqDJ+yHk6qO8gPA==
2424
dependencies:
25-
"@prisma/debug" "5.9.1"
26-
"@prisma/engines-version" "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64"
27-
"@prisma/fetch-engine" "5.9.1"
28-
"@prisma/get-platform" "5.9.1"
29-
30-
"@prisma/fetch-engine@5.9.1":
31-
version "5.9.1"
32-
resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-5.9.1.tgz#5d3b2c9af54a242e37b3f9561b59ab72f8e92818"
33-
integrity sha512-l0goQOMcNVOJs1kAcwqpKq3ylvkD9F04Ioe1oJoCqmz05mw22bNAKKGWuDd3zTUoUZr97va0c/UfLNru+PDmNA==
25+
"@prisma/debug" "5.22.0"
26+
"@prisma/engines-version" "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2"
27+
"@prisma/fetch-engine" "5.22.0"
28+
"@prisma/get-platform" "5.22.0"
29+
30+
"@prisma/fetch-engine@5.22.0":
31+
version "5.22.0"
32+
resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-5.22.0.tgz#4fb691b483a450c5548aac2f837b267dd50ef52e"
33+
integrity sha512-bkrD/Mc2fSvkQBV5EpoFcZ87AvOgDxbG99488a5cexp5Ccny+UM6MAe/UFkUC0wLYD9+9befNOqGiIJhhq+HbA==
3434
dependencies:
35-
"@prisma/debug" "5.9.1"
36-
"@prisma/engines-version" "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64"
37-
"@prisma/get-platform" "5.9.1"
38-
39-
"@prisma/get-platform@5.9.1":
40-
version "5.9.1"
41-
resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-5.9.1.tgz#a66bb46ab4d30db786c84150ef074ab0aad4549e"
42-
integrity sha512-6OQsNxTyhvG+T2Ksr8FPFpuPeL4r9u0JF0OZHUBI/Uy9SS43sPyAIutt4ZEAyqWQt104ERh70EZedkHZKsnNbg==
35+
"@prisma/debug" "5.22.0"
36+
"@prisma/engines-version" "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2"
37+
"@prisma/get-platform" "5.22.0"
38+
39+
"@prisma/get-platform@5.22.0":
40+
version "5.22.0"
41+
resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-5.22.0.tgz#fc675bc9d12614ca2dade0506c9c4a77e7dddacd"
42+
integrity sha512-pHhpQdr1UPFpt+zFfnPazhulaZYCUqeIcPpJViYoq9R+D/yw4fjE+CtnsnKzPYm0ddUbeXUzjGVGIRVgPDCk4Q==
4343
dependencies:
44-
"@prisma/debug" "5.9.1"
44+
"@prisma/debug" "5.22.0"
4545

46-
prisma@^5.9.1:
47-
version "5.9.1"
48-
resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.9.1.tgz#baa3dd635fbf71504980978f10f55ea11068f6aa"
49-
integrity sha512-Hy/8KJZz0ELtkw4FnG9MS9rNWlXcJhf98Z2QMqi0QiVMoS8PzsBkpla0/Y5hTlob8F3HeECYphBjqmBxrluUrQ==
46+
47+
version "2.3.3"
48+
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
49+
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
50+
51+
52+
version "5.22.0"
53+
resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.22.0.tgz#1f6717ff487cdef5f5799cc1010459920e2e6197"
54+
integrity sha512-vtpjW3XuYCSnMsNVBjLMNkTj6OZbudcPPTPYHqX0CJfpcdWciI1dM8uHETwmDxxiqEwCIE6WvXucWUetJgfu/A==
5055
dependencies:
51-
"@prisma/engines" "5.9.1"
56+
"@prisma/engines" "5.22.0"
57+
optionalDependencies:
58+
fsevents "2.3.3"

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ const _prismaIntegration = (() => {
2929
span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.db.otel.prisma');
3030
}
3131

32-
if (spanJSON.description === 'prisma:engine:db_query') {
32+
// In Prisma v5.22+, the `db.system` attribute is automatically set
33+
// On older versions, this is missing, so we add it here
34+
if (spanJSON.description === 'prisma:engine:db_query' && !spanJSON.data?.['db.system']) {
3335
span.setAttribute('db.system', 'prisma');
3436
}
3537
});

0 commit comments

Comments
 (0)