From f4f765ee064aa7d43f24bbff88a4418d87ae56fc Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Wed, 9 Aug 2023 23:52:27 -0400 Subject: [PATCH 1/3] feat(tracing): Improve data collection for prisma spans --- .../suites/tracing/prisma-orm/test.ts | 18 ++++++++++--- .../src/node/integrations/prisma.ts | 27 ++++++++++++++++++- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/packages/node-integration-tests/suites/tracing/prisma-orm/test.ts b/packages/node-integration-tests/suites/tracing/prisma-orm/test.ts index 654e61c6a5e1..040f3890fc11 100644 --- a/packages/node-integration-tests/suites/tracing/prisma-orm/test.ts +++ b/packages/node-integration-tests/suites/tracing/prisma-orm/test.ts @@ -8,9 +8,21 @@ conditionalTest({ min: 12 })('Prisma ORM Integration', () => { assertSentryTransaction(envelope[2], { transaction: 'Test Transaction', spans: [ - { description: 'User create', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } }, - { description: 'User findMany', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } }, - { description: 'User deleteMany', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } }, + { + description: 'User create', + op: 'db.sql.prisma', + data: { 'db.system': 'postgresql', 'db.operation': 'create', 'db.prisma.version': '3.12.0' }, + }, + { + description: 'User findMany', + op: 'db.sql.prisma', + data: { 'db.system': 'postgresql', 'db.operation': 'findMany', 'db.prisma.version': '3.12.0' }, + }, + { + description: 'User deleteMany', + op: 'db.sql.prisma', + data: { 'db.system': 'postgresql', 'db.operation': 'deleteMany', 'db.prisma.version': '3.12.0' }, + }, ], }); }); diff --git a/packages/tracing-internal/src/node/integrations/prisma.ts b/packages/tracing-internal/src/node/integrations/prisma.ts index c87562dca98b..b8cb6ebff7b3 100644 --- a/packages/tracing-internal/src/node/integrations/prisma.ts +++ b/packages/tracing-internal/src/node/integrations/prisma.ts @@ -36,6 +36,10 @@ type PrismaMiddleware = ( interface PrismaClient { _sentryInstrumented?: boolean; + _engineConfig?: { + activeProvider?: string; + clientVersion?: string; + }; $use: (cb: PrismaMiddleware) => void; } @@ -70,6 +74,22 @@ export class Prisma implements Integration { // eslint-disable-next-line @typescript-eslint/no-explicit-any addNonEnumerableProperty(options.client as any, '_sentryInstrumented', true); + const clientData: Record = {}; + try { + const engineConfig = (options.client as PrismaClient)._engineConfig; + if (engineConfig) { + const { activeProvider, clientVersion } = engineConfig; + if (activeProvider) { + clientData['db.system'] = activeProvider; + } + if (clientVersion) { + clientData['db.prisma.version'] = clientVersion; + } + } + } catch (e) { + // ignore + } + options.client.$use((params, next: (params: PrismaMiddlewareParams) => Promise) => { if (shouldDisableAutoInstrumentation(getCurrentHub)) { return next(params); @@ -77,8 +97,13 @@ export class Prisma implements Integration { const action = params.action; const model = params.model; + return trace( - { name: model ? `${model} ${action}` : action, op: 'db.sql.prisma', data: { 'db.system': 'prisma' } }, + { + name: model ? `${model} ${action}` : action, + op: 'db.sql.prisma', + data: { ...clientData, 'db.operation': action }, + }, () => next(params), ); }); From 664621acafefd5ef5a1e6f018e30d1f2cf778f88 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Thu, 10 Aug 2023 09:31:30 -0400 Subject: [PATCH 2/3] update test --- .../tracing/test/integrations/node/prisma.test.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/tracing/test/integrations/node/prisma.test.ts b/packages/tracing/test/integrations/node/prisma.test.ts index 61c0e5fb07f6..43d7fe6b5570 100644 --- a/packages/tracing/test/integrations/node/prisma.test.ts +++ b/packages/tracing/test/integrations/node/prisma.test.ts @@ -25,6 +25,11 @@ class PrismaClient { create: () => this._middleware?.({ action: 'create', model: 'user' }, () => Promise.resolve('result')), }; + public _engineConfig = { + activeProvider: 'postgresql', + clientVersion: '3.1.2', + }; + private _middleware?: PrismaMiddleware; constructor() { @@ -48,7 +53,11 @@ describe('setupOnce', function () { void prismaClient.user.create()?.then(() => { expect(mockTrace).toHaveBeenCalledTimes(1); expect(mockTrace).toHaveBeenLastCalledWith( - { name: 'user create', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } }, + { + name: 'user create', + op: 'db.sql.prisma', + data: { 'db.system': 'postgresql', 'db.prisma.version': '3.1.2', 'db.operation': 'create' }, + }, expect.any(Function), ); done(); From 8984134c16b485fee81ca5ca51136185f2cac23f Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Thu, 10 Aug 2023 09:58:02 -0400 Subject: [PATCH 3/3] update other test --- .../suites/tracing-new/prisma-orm/test.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/node-integration-tests/suites/tracing-new/prisma-orm/test.ts b/packages/node-integration-tests/suites/tracing-new/prisma-orm/test.ts index 654e61c6a5e1..040f3890fc11 100644 --- a/packages/node-integration-tests/suites/tracing-new/prisma-orm/test.ts +++ b/packages/node-integration-tests/suites/tracing-new/prisma-orm/test.ts @@ -8,9 +8,21 @@ conditionalTest({ min: 12 })('Prisma ORM Integration', () => { assertSentryTransaction(envelope[2], { transaction: 'Test Transaction', spans: [ - { description: 'User create', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } }, - { description: 'User findMany', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } }, - { description: 'User deleteMany', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } }, + { + description: 'User create', + op: 'db.sql.prisma', + data: { 'db.system': 'postgresql', 'db.operation': 'create', 'db.prisma.version': '3.12.0' }, + }, + { + description: 'User findMany', + op: 'db.sql.prisma', + data: { 'db.system': 'postgresql', 'db.operation': 'findMany', 'db.prisma.version': '3.12.0' }, + }, + { + description: 'User deleteMany', + op: 'db.sql.prisma', + data: { 'db.system': 'postgresql', 'db.operation': 'deleteMany', 'db.prisma.version': '3.12.0' }, + }, ], }); });