From b9f6b13b915b519b35f92b7223db04d865f41a4f Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 25 Apr 2023 11:16:04 +0200 Subject: [PATCH 1/5] feat(tracing): Add `db.system` span data to DB spans --- packages/tracing-internal/src/extensions.ts | 2 +- packages/tracing-internal/src/node/integrations/mongo.ts | 1 + packages/tracing-internal/src/node/integrations/mysql.ts | 3 +++ packages/tracing-internal/src/node/integrations/postgres.ts | 3 +++ packages/tracing-internal/src/node/integrations/prisma.ts | 5 ++++- 5 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/tracing-internal/src/extensions.ts b/packages/tracing-internal/src/extensions.ts index 555a1451b55e..0d4c2b112e47 100644 --- a/packages/tracing-internal/src/extensions.ts +++ b/packages/tracing-internal/src/extensions.ts @@ -22,7 +22,7 @@ function _autoloadDatabaseIntegrations(): void { const integration = dynamicRequire(module, './node/integrations/mongo') as { Mongo: IntegrationClass; }; - return new integration.Mongo({ mongoose: true }); + return new integration.Mongo(); }, mysql() { const integration = dynamicRequire(module, './node/integrations/mysql') as { diff --git a/packages/tracing-internal/src/node/integrations/mongo.ts b/packages/tracing-internal/src/node/integrations/mongo.ts index dd5474dd4d51..e7118378cb4c 100644 --- a/packages/tracing-internal/src/node/integrations/mongo.ts +++ b/packages/tracing-internal/src/node/integrations/mongo.ts @@ -231,6 +231,7 @@ export class Mongo implements LazyLoadedIntegration { collectionName: collection.collectionName, dbName: collection.dbName, namespace: collection.namespace, + 'db.system': 'mongodb', }; const spanContext: SpanContext = { op: 'db', diff --git a/packages/tracing-internal/src/node/integrations/mysql.ts b/packages/tracing-internal/src/node/integrations/mysql.ts index 529e3b859bc2..e907b30e379a 100644 --- a/packages/tracing-internal/src/node/integrations/mysql.ts +++ b/packages/tracing-internal/src/node/integrations/mysql.ts @@ -55,6 +55,9 @@ export class Mysql implements LazyLoadedIntegration { const span = parentSpan?.startChild({ description: typeof options === 'string' ? options : (options as { sql: string }).sql, op: 'db', + data: { + 'db.system': 'mysql', + }, }); if (typeof callback === 'function') { diff --git a/packages/tracing-internal/src/node/integrations/postgres.ts b/packages/tracing-internal/src/node/integrations/postgres.ts index be7e299cf6aa..3c33099eabf0 100644 --- a/packages/tracing-internal/src/node/integrations/postgres.ts +++ b/packages/tracing-internal/src/node/integrations/postgres.ts @@ -79,6 +79,9 @@ export class Postgres implements LazyLoadedIntegration { const span = parentSpan?.startChild({ description: typeof config === 'string' ? config : (config as { text: string }).text, op: 'db', + data: { + 'db.system': 'postgresql', + }, }); if (typeof callback === 'function') { diff --git a/packages/tracing-internal/src/node/integrations/prisma.ts b/packages/tracing-internal/src/node/integrations/prisma.ts index 7d23cf6adbb5..20a84aa36aaf 100644 --- a/packages/tracing-internal/src/node/integrations/prisma.ts +++ b/packages/tracing-internal/src/node/integrations/prisma.ts @@ -91,7 +91,10 @@ export class Prisma implements Integration { this._client.$use((params, next: (params: PrismaMiddlewareParams) => Promise) => { const action = params.action; const model = params.model; - return trace({ name: model ? `${model} ${action}` : action, op: 'db.sql.prisma' }, () => next(params)); + return trace( + { name: model ? `${model} ${action}` : action, op: 'db.sql.prisma', data: { 'db.system': 'prisma' } }, + () => next(params), + ); }); } } From fc65e88c2528f07e3f26611913b35d255b22f4df Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 25 Apr 2023 11:18:01 +0200 Subject: [PATCH 2/5] update prisma tests --- .../suites/tracing-new/prisma-orm/test.ts | 6 +++--- .../suites/tracing/prisma-orm/test.ts | 6 +++--- packages/tracing/test/integrations/node/prisma.test.ts | 5 ++++- 3 files changed, 10 insertions(+), 7 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 e3393f5fe2f8..654e61c6a5e1 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,9 @@ conditionalTest({ min: 12 })('Prisma ORM Integration', () => { assertSentryTransaction(envelope[2], { transaction: 'Test Transaction', spans: [ - { description: 'User create', op: 'db.sql.prisma' }, - { description: 'User findMany', op: 'db.sql.prisma' }, - { description: 'User deleteMany', op: 'db.sql.prisma' }, + { 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' } }, ], }); }); 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 e3393f5fe2f8..654e61c6a5e1 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,9 @@ conditionalTest({ min: 12 })('Prisma ORM Integration', () => { assertSentryTransaction(envelope[2], { transaction: 'Test Transaction', spans: [ - { description: 'User create', op: 'db.sql.prisma' }, - { description: 'User findMany', op: 'db.sql.prisma' }, - { description: 'User deleteMany', op: 'db.sql.prisma' }, + { 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' } }, ], }); }); diff --git a/packages/tracing/test/integrations/node/prisma.test.ts b/packages/tracing/test/integrations/node/prisma.test.ts index 1eb85a251704..3096401ec43a 100644 --- a/packages/tracing/test/integrations/node/prisma.test.ts +++ b/packages/tracing/test/integrations/node/prisma.test.ts @@ -54,7 +54,10 @@ describe('setupOnce', function () { it('should add middleware with $use method correctly', done => { void Client.user.create()?.then(() => { expect(mockTrace).toHaveBeenCalledTimes(1); - expect(mockTrace).toHaveBeenLastCalledWith({ name: 'user create', op: 'db.sql.prisma' }, expect.any(Function)); + expect(mockTrace).toHaveBeenLastCalledWith( + { name: 'user create', op: 'db.sql.prisma', data: { 'db.system': 'prisma' } }, + expect.any(Function), + ); done(); }); }); From c6b55ecd37fdbd06bad28b15443fc947c9ad1176 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 25 Apr 2023 11:22:20 +0200 Subject: [PATCH 3/5] rest of the tests --- .../suites/tracing-new/auto-instrument/mongodb/test.ts | 5 +++++ .../suites/tracing-new/auto-instrument/mysql/test.ts | 6 ++++++ .../suites/tracing-new/auto-instrument/pg/test.ts | 9 +++++++++ .../suites/tracing/auto-instrument/mongodb/test.ts | 5 +++++ .../suites/tracing/auto-instrument/mysql/test.ts | 6 ++++++ .../suites/tracing/auto-instrument/pg/test.ts | 9 +++++++++ packages/tracing/test/integrations/node/mongo.test.ts | 3 +++ packages/tracing/test/integrations/node/postgres.test.ts | 9 +++++++++ 8 files changed, 52 insertions(+) diff --git a/packages/node-integration-tests/suites/tracing-new/auto-instrument/mongodb/test.ts b/packages/node-integration-tests/suites/tracing-new/auto-instrument/mongodb/test.ts index 5664aac9422b..8511841c6da8 100644 --- a/packages/node-integration-tests/suites/tracing-new/auto-instrument/mongodb/test.ts +++ b/packages/node-integration-tests/suites/tracing-new/auto-instrument/mongodb/test.ts @@ -34,6 +34,7 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { dbName: 'admin', namespace: 'admin.movies', doc: '{"title":"Rick and Morty"}', + 'db.system': 'mongodb', }, description: 'insertOne', op: 'db', @@ -44,6 +45,7 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { dbName: 'admin', namespace: 'admin.movies', query: '{"title":"Back to the Future"}', + 'db.system': 'mongodb', }, description: 'findOne', op: 'db', @@ -55,6 +57,7 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { namespace: 'admin.movies', filter: '{"title":"Back to the Future"}', update: '{"$set":{"title":"South Park"}}', + 'db.system': 'mongodb', }, description: 'updateOne', op: 'db', @@ -65,6 +68,7 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { dbName: 'admin', namespace: 'admin.movies', query: '{"title":"South Park"}', + 'db.system': 'mongodb', }, description: 'findOne', op: 'db', @@ -75,6 +79,7 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { dbName: 'admin', namespace: 'admin.movies', query: '{"title":"South Park"}', + 'db.system': 'mongodb', }, description: 'find', op: 'db', diff --git a/packages/node-integration-tests/suites/tracing-new/auto-instrument/mysql/test.ts b/packages/node-integration-tests/suites/tracing-new/auto-instrument/mysql/test.ts index 3b96f2cafec0..dbdd658f6ef4 100644 --- a/packages/node-integration-tests/suites/tracing-new/auto-instrument/mysql/test.ts +++ b/packages/node-integration-tests/suites/tracing-new/auto-instrument/mysql/test.ts @@ -12,11 +12,17 @@ test('should auto-instrument `mysql` package.', async () => { { description: 'SELECT 1 + 1 AS solution', op: 'db', + data: { + 'db.system': 'mysql', + }, }, { description: 'SELECT NOW()', op: 'db', + data: { + 'db.system': 'mysql', + }, }, ], }); diff --git a/packages/node-integration-tests/suites/tracing-new/auto-instrument/pg/test.ts b/packages/node-integration-tests/suites/tracing-new/auto-instrument/pg/test.ts index edfa67cee9d7..359e04d7d5f0 100644 --- a/packages/node-integration-tests/suites/tracing-new/auto-instrument/pg/test.ts +++ b/packages/node-integration-tests/suites/tracing-new/auto-instrument/pg/test.ts @@ -40,14 +40,23 @@ test('should auto-instrument `pg` package.', async () => { { description: 'SELECT * FROM foo where bar ilike "baz%"', op: 'db', + data: { + 'db.system': 'postgresql', + }, }, { description: 'SELECT * FROM bazz', op: 'db', + data: { + 'db.system': 'postgresql', + }, }, { description: 'SELECT NOW()', op: 'db', + data: { + 'db.system': 'postgresql', + }, }, ], }); diff --git a/packages/node-integration-tests/suites/tracing/auto-instrument/mongodb/test.ts b/packages/node-integration-tests/suites/tracing/auto-instrument/mongodb/test.ts index 5664aac9422b..8511841c6da8 100644 --- a/packages/node-integration-tests/suites/tracing/auto-instrument/mongodb/test.ts +++ b/packages/node-integration-tests/suites/tracing/auto-instrument/mongodb/test.ts @@ -34,6 +34,7 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { dbName: 'admin', namespace: 'admin.movies', doc: '{"title":"Rick and Morty"}', + 'db.system': 'mongodb', }, description: 'insertOne', op: 'db', @@ -44,6 +45,7 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { dbName: 'admin', namespace: 'admin.movies', query: '{"title":"Back to the Future"}', + 'db.system': 'mongodb', }, description: 'findOne', op: 'db', @@ -55,6 +57,7 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { namespace: 'admin.movies', filter: '{"title":"Back to the Future"}', update: '{"$set":{"title":"South Park"}}', + 'db.system': 'mongodb', }, description: 'updateOne', op: 'db', @@ -65,6 +68,7 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { dbName: 'admin', namespace: 'admin.movies', query: '{"title":"South Park"}', + 'db.system': 'mongodb', }, description: 'findOne', op: 'db', @@ -75,6 +79,7 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { dbName: 'admin', namespace: 'admin.movies', query: '{"title":"South Park"}', + 'db.system': 'mongodb', }, description: 'find', op: 'db', diff --git a/packages/node-integration-tests/suites/tracing/auto-instrument/mysql/test.ts b/packages/node-integration-tests/suites/tracing/auto-instrument/mysql/test.ts index 3b96f2cafec0..dbdd658f6ef4 100644 --- a/packages/node-integration-tests/suites/tracing/auto-instrument/mysql/test.ts +++ b/packages/node-integration-tests/suites/tracing/auto-instrument/mysql/test.ts @@ -12,11 +12,17 @@ test('should auto-instrument `mysql` package.', async () => { { description: 'SELECT 1 + 1 AS solution', op: 'db', + data: { + 'db.system': 'mysql', + }, }, { description: 'SELECT NOW()', op: 'db', + data: { + 'db.system': 'mysql', + }, }, ], }); diff --git a/packages/node-integration-tests/suites/tracing/auto-instrument/pg/test.ts b/packages/node-integration-tests/suites/tracing/auto-instrument/pg/test.ts index edfa67cee9d7..359e04d7d5f0 100644 --- a/packages/node-integration-tests/suites/tracing/auto-instrument/pg/test.ts +++ b/packages/node-integration-tests/suites/tracing/auto-instrument/pg/test.ts @@ -40,14 +40,23 @@ test('should auto-instrument `pg` package.', async () => { { description: 'SELECT * FROM foo where bar ilike "baz%"', op: 'db', + data: { + 'db.system': 'postgresql', + }, }, { description: 'SELECT * FROM bazz', op: 'db', + data: { + 'db.system': 'postgresql', + }, }, { description: 'SELECT NOW()', op: 'db', + data: { + 'db.system': 'postgresql', + }, }, ], }); diff --git a/packages/tracing/test/integrations/node/mongo.test.ts b/packages/tracing/test/integrations/node/mongo.test.ts index 8c406a6ecd14..547b7708b55e 100644 --- a/packages/tracing/test/integrations/node/mongo.test.ts +++ b/packages/tracing/test/integrations/node/mongo.test.ts @@ -78,6 +78,7 @@ describe('patchOperation()', () => { dbName: 'mockedDbName', doc: JSON.stringify(doc), namespace: 'mockedNamespace', + 'db.system': 'mongodb', }, op: 'db', description: 'insertOne', @@ -96,6 +97,7 @@ describe('patchOperation()', () => { dbName: 'mockedDbName', doc: JSON.stringify(doc), namespace: 'mockedNamespace', + 'db.system': 'mongodb', }, op: 'db', description: 'insertOne', @@ -111,6 +113,7 @@ describe('patchOperation()', () => { collectionName: 'mockedCollectionName', dbName: 'mockedDbName', namespace: 'mockedNamespace', + 'db.system': 'mongodb', }, op: 'db', description: 'initializeOrderedBulkOp', diff --git a/packages/tracing/test/integrations/node/postgres.test.ts b/packages/tracing/test/integrations/node/postgres.test.ts index 6a965b1ed9f8..9417be05bf10 100644 --- a/packages/tracing/test/integrations/node/postgres.test.ts +++ b/packages/tracing/test/integrations/node/postgres.test.ts @@ -72,6 +72,9 @@ describe('setupOnce', () => { expect(parentSpan.startChild).toBeCalledWith({ description: 'SELECT NOW()', op: 'db', + data: { + 'db.system': 'postgres', + }, }); expect(childSpan.finish).toBeCalled(); done(); @@ -84,6 +87,9 @@ describe('setupOnce', () => { expect(parentSpan.startChild).toBeCalledWith({ description: 'SELECT NOW()', op: 'db', + data: { + 'db.system': 'postgres', + }, }); expect(childSpan.finish).toBeCalled(); done(); @@ -96,6 +102,9 @@ describe('setupOnce', () => { expect(parentSpan.startChild).toBeCalledWith({ description: 'SELECT NOW()', op: 'db', + data: { + 'db.system': 'postgres', + }, }); expect(childSpan.finish).toBeCalled(); }); From 093530f0d481f61997cb427782cef9c461209516 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 25 Apr 2023 13:42:55 +0200 Subject: [PATCH 4/5] update postgres db.system --- packages/tracing/test/integrations/node/postgres.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tracing/test/integrations/node/postgres.test.ts b/packages/tracing/test/integrations/node/postgres.test.ts index 9417be05bf10..0b2c55b52c9f 100644 --- a/packages/tracing/test/integrations/node/postgres.test.ts +++ b/packages/tracing/test/integrations/node/postgres.test.ts @@ -73,7 +73,7 @@ describe('setupOnce', () => { description: 'SELECT NOW()', op: 'db', data: { - 'db.system': 'postgres', + 'db.system': 'postgresql', }, }); expect(childSpan.finish).toBeCalled(); From 5e000c0b745479f8dbef7956495a07b64aa2f721 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 25 Apr 2023 13:53:08 +0200 Subject: [PATCH 5/5] Apply suggestions from code review Co-authored-by: Francesco Novy --- packages/tracing/test/integrations/node/postgres.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tracing/test/integrations/node/postgres.test.ts b/packages/tracing/test/integrations/node/postgres.test.ts index 0b2c55b52c9f..d1b1f03b7914 100644 --- a/packages/tracing/test/integrations/node/postgres.test.ts +++ b/packages/tracing/test/integrations/node/postgres.test.ts @@ -88,7 +88,7 @@ describe('setupOnce', () => { description: 'SELECT NOW()', op: 'db', data: { - 'db.system': 'postgres', + 'db.system': 'postgresql', }, }); expect(childSpan.finish).toBeCalled(); @@ -103,7 +103,7 @@ describe('setupOnce', () => { description: 'SELECT NOW()', op: 'db', data: { - 'db.system': 'postgres', + 'db.system': 'postgresql', }, }); expect(childSpan.finish).toBeCalled();