diff --git a/dev-packages/node-integration-tests/suites/tracing-new/auto-instrument/mongodb/test.ts b/dev-packages/node-integration-tests/suites/tracing-new/auto-instrument/mongodb/test.ts index 7c65cc25df25..d2ce56f314ee 100644 --- a/dev-packages/node-integration-tests/suites/tracing-new/auto-instrument/mongodb/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing-new/auto-instrument/mongodb/test.ts @@ -34,7 +34,6 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { 'db.name': 'admin', 'db.operation': 'insertOne', 'db.mongodb.collection': 'movies', - 'db.mongodb.doc': '{"title":"Rick and Morty"}', }, description: 'insertOne', op: 'db', @@ -45,7 +44,6 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { 'db.name': 'admin', 'db.operation': 'findOne', 'db.mongodb.collection': 'movies', - 'db.mongodb.query': '{"title":"Back to the Future"}', }, description: 'findOne', op: 'db', @@ -56,8 +54,6 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { 'db.name': 'admin', 'db.operation': 'updateOne', 'db.mongodb.collection': 'movies', - 'db.mongodb.filter': '{"title":"Back to the Future"}', - 'db.mongodb.update': '{"$set":{"title":"South Park"}}', }, description: 'updateOne', op: 'db', @@ -68,7 +64,6 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { 'db.name': 'admin', 'db.operation': 'findOne', 'db.mongodb.collection': 'movies', - 'db.mongodb.query': '{"title":"South Park"}', }, description: 'findOne', op: 'db', @@ -79,7 +74,6 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { 'db.name': 'admin', 'db.operation': 'find', 'db.mongodb.collection': 'movies', - 'db.mongodb.query': '{"title":"South Park"}', }, description: 'find', op: 'db', diff --git a/dev-packages/node-integration-tests/suites/tracing/auto-instrument/mongodb/test.ts b/dev-packages/node-integration-tests/suites/tracing/auto-instrument/mongodb/test.ts index 7c65cc25df25..d2ce56f314ee 100644 --- a/dev-packages/node-integration-tests/suites/tracing/auto-instrument/mongodb/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/auto-instrument/mongodb/test.ts @@ -34,7 +34,6 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { 'db.name': 'admin', 'db.operation': 'insertOne', 'db.mongodb.collection': 'movies', - 'db.mongodb.doc': '{"title":"Rick and Morty"}', }, description: 'insertOne', op: 'db', @@ -45,7 +44,6 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { 'db.name': 'admin', 'db.operation': 'findOne', 'db.mongodb.collection': 'movies', - 'db.mongodb.query': '{"title":"Back to the Future"}', }, description: 'findOne', op: 'db', @@ -56,8 +54,6 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { 'db.name': 'admin', 'db.operation': 'updateOne', 'db.mongodb.collection': 'movies', - 'db.mongodb.filter': '{"title":"Back to the Future"}', - 'db.mongodb.update': '{"$set":{"title":"South Park"}}', }, description: 'updateOne', op: 'db', @@ -68,7 +64,6 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { 'db.name': 'admin', 'db.operation': 'findOne', 'db.mongodb.collection': 'movies', - 'db.mongodb.query': '{"title":"South Park"}', }, description: 'findOne', op: 'db', @@ -79,7 +74,6 @@ conditionalTest({ min: 12 })('MongoDB Test', () => { 'db.name': 'admin', 'db.operation': 'find', 'db.mongodb.collection': 'movies', - 'db.mongodb.query': '{"title":"South Park"}', }, description: 'find', op: 'db', diff --git a/packages/tracing-internal/src/node/integrations/mongo.ts b/packages/tracing-internal/src/node/integrations/mongo.ts index 61001b94c8cd..27646e12b6bf 100644 --- a/packages/tracing-internal/src/node/integrations/mongo.ts +++ b/packages/tracing-internal/src/node/integrations/mongo.ts @@ -175,15 +175,21 @@ export class Mongo implements LazyLoadedIntegration { return function (this: unknown, ...args: unknown[]) { const lastArg = args[args.length - 1]; // eslint-disable-next-line deprecation/deprecation - const scope = getCurrentHub().getScope(); + const hub = getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation + const scope = hub.getScope(); + // eslint-disable-next-line deprecation/deprecation + const client = hub.getClient(); // eslint-disable-next-line deprecation/deprecation const parentSpan = scope.getSpan(); + const sendDefaultPii = client?.getOptions().sendDefaultPii; + // Check if the operation was passed a callback. (mapReduce requires a different check, as // its (non-callback) arguments can also be functions.) if (typeof lastArg !== 'function' || (operation === 'mapReduce' && args.length === 2)) { // eslint-disable-next-line deprecation/deprecation - const span = parentSpan?.startChild(getSpanContext(this, operation, args)); + const span = parentSpan?.startChild(getSpanContext(this, operation, args, sendDefaultPii)); const maybePromiseOrCursor = orig.call(this, ...args); if (isThenable(maybePromiseOrCursor)) { @@ -232,6 +238,7 @@ export class Mongo implements LazyLoadedIntegration { collection: MongoCollection, operation: Operation, args: unknown[], + sendDefaultPii: boolean | undefined = false, ): SpanContext { const data: { [key: string]: string } = { 'db.system': 'mongodb', @@ -254,7 +261,7 @@ export class Mongo implements LazyLoadedIntegration { ? this._describeOperations.includes(operation) : this._describeOperations; - if (!signature || !shouldDescribe) { + if (!signature || !shouldDescribe || !sendDefaultPii) { return spanContext; } diff --git a/packages/tracing/test/integrations/node/mongo.test.ts b/packages/tracing/test/integrations/node/mongo.test.ts index e2ab62ab2e04..8caa5f35750f 100644 --- a/packages/tracing/test/integrations/node/mongo.test.ts +++ b/packages/tracing/test/integrations/node/mongo.test.ts @@ -50,13 +50,14 @@ describe('patchOperation()', () => { let scope = new Scope(); let parentSpan: Span; let childSpan: Span; + let testClient = getTestClient({}); beforeAll(() => { new Integrations.Mongo({ operations: ['insertOne', 'initializeOrderedBulkOp'], }).setupOnce( () => undefined, - () => new Hub(undefined, scope), + () => new Hub(testClient, scope), ); }); @@ -64,6 +65,7 @@ describe('patchOperation()', () => { scope = new Scope(); parentSpan = new Span(); childSpan = parentSpan.startChild(); + testClient = getTestClient({}); jest.spyOn(scope, 'getSpan').mockReturnValueOnce(parentSpan); jest.spyOn(parentSpan, 'startChild').mockReturnValueOnce(childSpan); jest.spyOn(childSpan, 'end'); @@ -77,7 +79,6 @@ describe('patchOperation()', () => { 'db.mongodb.collection': 'mockedCollectionName', 'db.name': 'mockedDbName', 'db.operation': 'insertOne', - 'db.mongodb.doc': JSON.stringify(doc), 'db.system': 'mongodb', }, op: 'db', @@ -97,7 +98,25 @@ describe('patchOperation()', () => { 'db.mongodb.collection': 'mockedCollectionName', 'db.name': 'mockedDbName', 'db.operation': 'insertOne', - 'db.mongodb.doc': JSON.stringify(doc), + 'db.system': 'mongodb', + }, + op: 'db', + origin: 'auto.db.mongo', + description: 'insertOne', + }); + expect(childSpan.end).toBeCalled(); + }); + + it('attaches mongodb operation spans if sendDefaultPii is enabled', async () => { + testClient.getOptions().sendDefaultPii = true; + await collection.insertOne(doc, {}); + expect(scope.getSpan).toBeCalled(); + expect(parentSpan.startChild).toBeCalledWith({ + data: { + 'db.mongodb.collection': 'mockedCollectionName', + 'db.mongodb.doc': '{"name":"PickleRick","answer":42}', + 'db.name': 'mockedDbName', + 'db.operation': 'insertOne', 'db.system': 'mongodb', }, op: 'db',