Repository: DataDog/dd-trace-js
Pull request #5526: add feature to disable mongo heartbeats spans
Author: login: wconti27
Labels: name: semver-minor
Created: 2025-04-02T18:17:44Z | Merged: 2025-04-03T20:46:49Z

### What does this PR do?
This PR adds a plugin configuration `mongoHeartbeatDisabled` for the `mongodb-core`, along with an environment variable configuration, `DD_TRACE_MONGO_HEARTBEAT_DISABLED` that can be set to `true` to disable tracing of heartbeat spans.

### Motivation
Escalation

### Plugin Checklist
<!-- Fill this section if adding or updating a plugin. Remove otherwise. -->

- [ ] Unit tests.
- [ ] TypeScript [definitions][1].
- [ ] TypeScript [tests][2].
- [ ] API [documentation][3].
- [ ] CircleCI [jobs/workflows][4].
- [ ] Plugin is [exported][5].

[1]: https://github.com/DataDog/dd-trace-js/blob/master/index.d.ts
[2]: https://github.com/DataDog/dd-trace-js/blob/master/docs/test.ts
[3]: https://github.com/DataDog/documentation/blob/master/content/en/tracing/trace_collection/library_config/nodejs.md
[4]: https://github.com/DataDog/dd-trace-js/blob/master/.circleci/config.yml
[5]: https://github.com/DataDog/dd-trace-js/blob/master/packages/dd-trace/src/plugins/index.js

### Additional Notes
<!-- Anything else we should know when reviewing? -->





Diff:
diff --git a/packages/datadog-plugin-mongodb-core/src/index.js b/packages/datadog-plugin-mongodb-core/src/index.js
index c4e7d4ddd5..f927732390 100644
--- a/packages/datadog-plugin-mongodb-core/src/index.js
+++ b/packages/datadog-plugin-mongodb-core/src/index.js
@@ -1,6 +1,7 @@
 'use strict'
 
 const DatabasePlugin = require('../../dd-trace/src/plugins/database')
+const coalesce = require('koalas')
 
 class MongodbCorePlugin extends DatabasePlugin {
   static get id () { return 'mongodb-core' }
@@ -8,7 +9,21 @@ class MongodbCorePlugin extends DatabasePlugin {
   // avoid using db.name for peer.service since it includes the collection name
   // should be removed if one day this will be fixed
   static get peerServicePrecursors () { return [] }
+
+  configure (config) {
+    super.configure(config)
+    this.config.heartbeatEnabled = coalesce(
+      config.heartbeatEnabled,
+      process.env.DD_TRACE_MONGODB_HEARTBEAT_ENABLED,
+      true
+    )
+  }
+
   start ({ ns, ops, options = {}, name }) {
+    // heartbeat commands can be disabled if this.config.heartbeatEnabled is false
+    if (!this.config.heartbeatEnabled && isHeartbeat(ops, this.config)) {
+      return
+    }
     const query = getQuery(ops)
     const resource = truncate(getResource(this, ns, query, name))
     const service = this.serviceName({ pluginConfig: this.config })
@@ -153,4 +168,9 @@ function isBinary (val) {
   return val && val._bsontype === 'Binary'
 }
 
+function isHeartbeat (ops, config) {
+  // Check if it's a heartbeat command hello: 1 or helloOk: 1
+  return ops && typeof ops === 'object' && (ops.hello === 1 || ops.helloOk === true)
+}
+
 module.exports = MongodbCorePlugin
diff --git a/packages/datadog-plugin-mongodb-core/test/mongodb.spec.js b/packages/datadog-plugin-mongodb-core/test/mongodb.spec.js
index bf1fe8dd7f..c5f81a9143 100644
--- a/packages/datadog-plugin-mongodb-core/test/mongodb.spec.js
+++ b/packages/datadog-plugin-mongodb-core/test/mongodb.spec.js
@@ -459,6 +459,95 @@ describe('Plugin', () => {
           }).toArray()
         })
       })
+
+      describe('with heartbeatEnabled configuration', () => {
+        describe('when heartbeat tracing is disabled', () => {
+          before(() => {
+            return agent.load('mongodb-core', {
+              heartbeatEnabled: false
+            })
+          })
+
+          after(() => {
+            return agent.close({ ritmReset: false })
+          })
+
+          beforeEach(async () => {
+            client = await createClient()
+            db = client.db('test')
+          })
+
+          it('should NOT create a span for heartbeat commands', (done) => {
+            const parentSpan = tracer.startSpan('test.parent')
+
+            agent
+              .use(traces => {
+                // Should only receive the trace for the parent span
+                expect(traces[0]).to.have.length(1)
+                const span = traces[0][0]
+                expect(span.name).to.equal('test.parent')
+              })
+              .then(done)
+
+            // Activate parent span scope and trigger heartbeat command
+            tracer.scope().activate(parentSpan, async () => {
+              // Admin connect should be all that is needed to trigger heartbeat command for newer versions of mongo
+              client = await createClient()
+              db = client.db('test')
+
+              // but we should send a test heartbeat command since older versions of mongo don't auto-send heartbeats
+              db.command({ hello: 1 })
+              setTimeout(() => parentSpan.finish(), 50)
+            })
+          })
+        })
+
+        describe('when heartbeat tracing is enabled (default)', () => {
+          before(() => {
+            return agent.load('mongodb-core', {
+              heartbeatEnabled: true
+            })
+          })
+
+          after(() => {
+            return agent.close({ ritmReset: false })
+          })
+
+          beforeEach(async () => {
+          })
+
+          it('should create a child span for heartbeat commands', (done) => {
+            const parentSpan = tracer.startSpan('test.parent')
+
+            agent
+              .use(traces => {
+                expect(traces[0]).to.have.length.at.least(2)
+                const rootSpan = traces[0][0]
+
+                expect(rootSpan.name).to.equal('test.parent')
+
+                // assert that some child spans were created, these are the heartbeat spans
+                // don't assert on exact number of spans because it's dynamic
+                for (const childSpan of traces[0].slice(1)) {
+                  expect(childSpan.name).to.equal(expectedSchema.outbound.opName)
+                  expect(childSpan.parent_id.toString()).to.equal(rootSpan.span_id.toString()) // Verify parent-child
+                }
+              })
+              .then(done)
+
+            // Activate parent span scope and trigger heartbeat command
+            tracer.scope().activate(parentSpan, async () => {
+              // Admin connect should be all that is needed to trigger heartbeat command for newer versions of mongo
+              client = await createClient()
+              db = client.db('test')
+
+              // but we should send a test heartbeat command since older versions of mongo don't auto-send heartbeats
+              db.command({ hello: 1 })
+              setTimeout(() => parentSpan.finish(), 200)
+            })
+          })
+        })
+      })
     })
   })
 })


Reviews:
user: login: rochdev
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-02T18:25:21Z
user: login: rochdev
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-02T18:26:09Z
user: login: wconti27
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T14:26:20Z
user: login: wconti27
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T14:26:47Z
user: login: rochdev
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-03T20:25:05Z
user: login: rochdev
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-03T20:30:23Z
user: login: wconti27
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T20:33:18Z
user: login: wconti27
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T20:33:24Z
user: login: wconti27
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T20:33:55Z
user: login: rochdev
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-03T20:46:48Z

Review comments:
diff_hunk: @@ -767,6 +768,7 @@ class Config {
       DD_VERTEXAI_SPAN_CHAR_LIMIT,
       DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED,
       DD_TRACE_NATIVE_SPAN_EVENTS,
+      DD_TRACE_DISABLE_MONGO_HEARTBEAT,
path: packages/dd-trace/src/config.js
user: login: rochdev
body: Why not just make this a plugin-specific config? It would be closer to what other plugins do, and wouldn't pollute global config with something that only applies to `mongodb`. Something like `DD_TRACE_MONGODB_HEARTBEAT_ENABLED` that would be read by the plugin directly.
created_at: 2025-04-02T18:25:21Z
author_association: MEMBER
diff_hunk: @@ -767,6 +768,7 @@ class Config {
       DD_VERTEXAI_SPAN_CHAR_LIMIT,
       DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED,
       DD_TRACE_NATIVE_SPAN_EVENTS,
+      DD_TRACE_DISABLE_MONGO_HEARTBEAT,
path: packages/dd-trace/src/config.js
user: login: rochdev
body: Also, is there a use case for the health check? Should we just remove it entirely or disable it by default in the next major?
created_at: 2025-04-02T18:26:09Z
author_association: MEMBER
diff_hunk: @@ -767,6 +768,7 @@ class Config {
       DD_VERTEXAI_SPAN_CHAR_LIMIT,
       DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED,
       DD_TRACE_NATIVE_SPAN_EVENTS,
+      DD_TRACE_DISABLE_MONGO_HEARTBEAT,
path: packages/dd-trace/src/config.js
user: login: wconti27
body: Will fix the plugin configuration 👍 . As for disabling these spans, I can't see a valid use case for keeping them tbh. They just add noise. We can add the plugin configuration as enabled for now, then  switch it to disabled in the next major. Side note, is there a way we can track configurations that we aim to change in the next major? If not, that could be something helpful to add since something like this can easily be forgotten by the next major.
created_at: 2025-04-03T14:26:20Z
author_association: CONTRIBUTOR
diff_hunk: @@ -767,6 +768,7 @@ class Config {
       DD_VERTEXAI_SPAN_CHAR_LIMIT,
       DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED,
       DD_TRACE_NATIVE_SPAN_EVENTS,
+      DD_TRACE_DISABLE_MONGO_HEARTBEAT,
path: packages/dd-trace/src/config.js
user: login: wconti27
body: Honestly surprised that we haven't received other requests to disable them
created_at: 2025-04-03T14:26:47Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,14 +1,29 @@
 'use strict'
 
 const DatabasePlugin = require('../../dd-trace/src/plugins/database')
+const coalesce = require('koalas')
 
 class MongodbCorePlugin extends DatabasePlugin {
   static get id () { return 'mongodb-core' }
   static get component () { return 'mongodb' }
   // avoid using db.name for peer.service since it includes the collection name
   // should be removed if one day this will be fixed
   static get peerServicePrecursors () { return [] }
+
+  configure (config) {
+    super.configure(config)
+    this.config.mongoHeartbeatDisabled = coalesce(
+      config.mongoHeartbeatDisabled,
path: packages/datadog-plugin-mongodb-core/src/index.js
user: login: rochdev
body: `mongo` is redundant here
created_at: 2025-04-03T20:18:21Z
author_association: MEMBER
diff_hunk: @@ -1,14 +1,29 @@
 'use strict'
 
 const DatabasePlugin = require('../../dd-trace/src/plugins/database')
+const coalesce = require('koalas')
 
 class MongodbCorePlugin extends DatabasePlugin {
   static get id () { return 'mongodb-core' }
   static get component () { return 'mongodb' }
   // avoid using db.name for peer.service since it includes the collection name
   // should be removed if one day this will be fixed
   static get peerServicePrecursors () { return [] }
+
+  configure (config) {
+    super.configure(config)
+    this.config.mongoHeartbeatDisabled = coalesce(
+      config.mongoHeartbeatDisabled,
+      process.env.DD_TRACE_MONGO_HEARTBEAT_DISABLED,
path: packages/datadog-plugin-mongodb-core/src/index.js
user: login: rochdev
body: `DD_TRACE_MONGO_HEARTBEAT_DISABLED` should be `DD_TRACE_MONGODB_HEARTBEAT_DISABLED` to match the integration name. While this is not important for now, we might be able to automate this in the future if a standard is respected.
created_at: 2025-04-03T20:19:09Z
author_association: MEMBER
diff_hunk: @@ -1,14 +1,29 @@
 'use strict'
 
 const DatabasePlugin = require('../../dd-trace/src/plugins/database')
+const coalesce = require('koalas')
 
 class MongodbCorePlugin extends DatabasePlugin {
   static get id () { return 'mongodb-core' }
   static get component () { return 'mongodb' }
   // avoid using db.name for peer.service since it includes the collection name
   // should be removed if one day this will be fixed
   static get peerServicePrecursors () { return [] }
+
+  configure (config) {
+    super.configure(config)
+    this.config.mongoHeartbeatDisabled = coalesce(
+      config.mongoHeartbeatDisabled,
path: packages/datadog-plugin-mongodb-core/src/index.js
user: login: rochdev
body: Also for most other things we'd say `enabled` and set it to true by default, not the other way around.
created_at: 2025-04-03T20:23:09Z
author_association: MEMBER
diff_hunk: @@ -1,14 +1,29 @@
 'use strict'
 
 const DatabasePlugin = require('../../dd-trace/src/plugins/database')
+const coalesce = require('koalas')
 
 class MongodbCorePlugin extends DatabasePlugin {
   static get id () { return 'mongodb-core' }
   static get component () { return 'mongodb' }
   // avoid using db.name for peer.service since it includes the collection name
   // should be removed if one day this will be fixed
   static get peerServicePrecursors () { return [] }
+
+  configure (config) {
+    super.configure(config)
+    this.config.mongoHeartbeatDisabled = coalesce(
+      config.mongoHeartbeatDisabled,
+      process.env.DD_TRACE_MONGO_HEARTBEAT_DISABLED,
+      false
+    )
+  }
+
   start ({ ns, ops, options = {}, name }) {
+    // heartbeat commands can be disabled if this.config.mongoHeartbeatDisabled is true
+    if (isHeartbeatDisabled(ops, this.config)) {
path: packages/datadog-plugin-mongodb-core/src/index.js
user: login: rochdev
body: The name is confusing as it returns if it's a heartbeat, not if it's disabled. Or I guess it checks both which makes naming more difficult. Maybe something like `!config.heartbeatEnabled && !isHeartbeat(ops, this.config` or combine them in some sort of `shouldTrace(ops, this.config)`.
created_at: 2025-04-03T20:24:45Z
author_association: MEMBER
diff_hunk: @@ -767,6 +768,7 @@ class Config {
       DD_VERTEXAI_SPAN_CHAR_LIMIT,
       DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED,
       DD_TRACE_NATIVE_SPAN_EVENTS,
+      DD_TRACE_DISABLE_MONGO_HEARTBEAT,
path: packages/dd-trace/src/config.js
user: login: rochdev
body: > Side note, is there a way we can track configurations that we aim to change in the next major?

I don't think we have anything like that right now, at least not in code. Historically when close to releases we've been putting ideas as a checklist in a Jira card.

> Honestly surprised that we haven't received other requests to disable them

It's pretty easy to ignore in the UI so my guess is most users just do that.
created_at: 2025-04-03T20:30:23Z
author_association: MEMBER
diff_hunk: @@ -1,14 +1,29 @@
 'use strict'
 
 const DatabasePlugin = require('../../dd-trace/src/plugins/database')
+const coalesce = require('koalas')
 
 class MongodbCorePlugin extends DatabasePlugin {
   static get id () { return 'mongodb-core' }
   static get component () { return 'mongodb' }
   // avoid using db.name for peer.service since it includes the collection name
   // should be removed if one day this will be fixed
   static get peerServicePrecursors () { return [] }
+
+  configure (config) {
+    super.configure(config)
+    this.config.mongoHeartbeatDisabled = coalesce(
+      config.mongoHeartbeatDisabled,
+      process.env.DD_TRACE_MONGO_HEARTBEAT_DISABLED,
path: packages/datadog-plugin-mongodb-core/src/index.js
user: login: wconti27
body: done

created_at: 2025-04-03T20:33:18Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,14 +1,29 @@
 'use strict'
 
 const DatabasePlugin = require('../../dd-trace/src/plugins/database')
+const coalesce = require('koalas')
 
 class MongodbCorePlugin extends DatabasePlugin {
   static get id () { return 'mongodb-core' }
   static get component () { return 'mongodb' }
   // avoid using db.name for peer.service since it includes the collection name
   // should be removed if one day this will be fixed
   static get peerServicePrecursors () { return [] }
+
+  configure (config) {
+    super.configure(config)
+    this.config.mongoHeartbeatDisabled = coalesce(
+      config.mongoHeartbeatDisabled,
+      process.env.DD_TRACE_MONGO_HEARTBEAT_DISABLED,
path: packages/datadog-plugin-mongodb-core/src/index.js
user: login: wconti27
body: and makes sense
created_at: 2025-04-03T20:33:23Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,14 +1,29 @@
 'use strict'
 
 const DatabasePlugin = require('../../dd-trace/src/plugins/database')
+const coalesce = require('koalas')
 
 class MongodbCorePlugin extends DatabasePlugin {
   static get id () { return 'mongodb-core' }
   static get component () { return 'mongodb' }
   // avoid using db.name for peer.service since it includes the collection name
   // should be removed if one day this will be fixed
   static get peerServicePrecursors () { return [] }
+
+  configure (config) {
+    super.configure(config)
+    this.config.mongoHeartbeatDisabled = coalesce(
+      config.mongoHeartbeatDisabled,
path: packages/datadog-plugin-mongodb-core/src/index.js
user: login: wconti27
body: fair enough, fixed
created_at: 2025-04-03T20:33:34Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,14 +1,29 @@
 'use strict'
 
 const DatabasePlugin = require('../../dd-trace/src/plugins/database')
+const coalesce = require('koalas')
 
 class MongodbCorePlugin extends DatabasePlugin {
   static get id () { return 'mongodb-core' }
   static get component () { return 'mongodb' }
   // avoid using db.name for peer.service since it includes the collection name
   // should be removed if one day this will be fixed
   static get peerServicePrecursors () { return [] }
+
+  configure (config) {
+    super.configure(config)
+    this.config.mongoHeartbeatDisabled = coalesce(
+      config.mongoHeartbeatDisabled,
+      process.env.DD_TRACE_MONGO_HEARTBEAT_DISABLED,
+      false
+    )
+  }
+
   start ({ ns, ops, options = {}, name }) {
+    // heartbeat commands can be disabled if this.config.mongoHeartbeatDisabled is true
+    if (isHeartbeatDisabled(ops, this.config)) {
path: packages/datadog-plugin-mongodb-core/src/index.js
user: login: wconti27
body: understood, fixed the naming
created_at: 2025-04-03T20:33:49Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-02T18:18:39Z
body: 
# Overall package size

Self size: 9.24 MB
Deduped: 101.55 MB
No deduping: 102.06 MB

<details><summary>Dependency sizes</summary>
| name | version | self size | total size |
|------|---------|-----------|------------|
| @datadog/libdatadog | 0.5.0 | 29.83 MB | 29.83 MB |
| @datadog/native-appsec | 8.5.1 | 19.26 MB | 19.27 MB |
| @datadog/native-iast-taint-tracking | 3.3.0 | 13.77 MB | 13.78 MB |
| @datadog/pprof | 5.6.0 | 9.79 MB | 10.16 MB |
| @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB |
| protobufjs | 7.4.0 | 2.77 MB | 5.42 MB |
| @datadog/wasm-js-rewriter | 3.1.0 | 2.37 MB | 2.52 MB |
| @datadog/native-metrics | 3.1.0 | 1.06 MB | 1.46 MB |
| @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB |
| import-in-the-middle | 1.13.1 | 117.64 kB | 839.26 kB |
| source-map | 0.7.4 | 226 kB | 226 kB |
| opentracing | 0.14.7 | 194.81 kB | 194.81 kB |
| lru-cache | 7.18.3 | 133.92 kB | 133.92 kB |
| pprof-format | 2.1.0 | 111.69 kB | 111.69 kB |
| @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB |
| lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB |
| ignore | 5.3.2 | 53.63 kB | 53.63 kB |
| istanbul-lib-coverage | 3.2.0 | 29.34 kB | 29.34 kB |
| rfdc | 1.4.1 | 27.15 kB | 27.15 kB |
| @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB |
| tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB |
| dc-polyfill | 0.1.6 | 24.56 kB | 24.56 kB |
| shell-quote | 1.8.2 | 23.54 kB | 23.54 kB |
| limiter | 1.1.5 | 23.17 kB | 23.17 kB |
| retry | 0.13.1 | 18.85 kB | 18.85 kB |
| semifies | 1.0.0 | 15.84 kB | 15.84 kB |
| jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB |
| crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB |
| ttl-set | 1.0.0 | 4.61 kB | 9.69 kB |
| path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB |
| koalas | 1.0.2 | 6.47 kB | 6.47 kB |
| module-details-from-path | 1.0.3 | 4.47 kB | 4.47 kB |


</details>



<sub>🤖 This report was automatically generated by [heaviest-objects-in-the-universe](https://github.com/qard/heaviest-objects-in-the-universe/)<sub>
author_association: CONTRIBUTOR
user: login: codecov[bot]
created_at: 2025-04-02T18:21:15Z
body: ## [Codecov](https://app.codecov.io/gh/DataDog/dd-trace-js/pull/5526?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 79.33%. Comparing base [(`61f8a84`)](https://app.codecov.io/gh/DataDog/dd-trace-js/commit/61f8a84ca6e3c0b62cc06fcb772571017d33c2ca?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog) to head [(`9eb0e3e`)](https://app.codecov.io/gh/DataDog/dd-trace-js/commit/9eb0e3e674fbba973282bb2b50727715246afce6?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog).
> Report is 7 commits behind head on master.

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##           master    #5526      +/-   ##
==========================================
+ Coverage   79.25%   79.33%   +0.07%     
==========================================
  Files         513      513              
  Lines       23230    23248      +18     
==========================================
+ Hits        18411    18443      +32     
+ Misses       4819     4805      -14     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/DataDog/dd-trace-js/pull/5526?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog).

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
- :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
</details>
author_association: NONE
user: login: pr-commenter[bot]
created_at: 2025-04-02T18:23:54Z
body: ## Benchmarks

Benchmark execution time: 2025-04-02 18:23:50

Comparing candidate commit bdb191afc74c5ca1fc13476c8f8fadedb875a635 in PR branch `conti/configuration-to-disable-mongo-heartbeat` with baseline commit 61f8a84ca6e3c0b62cc06fcb772571017d33c2ca in branch `master`.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 945 metrics, 18 unstable metrics.


author_association: NONE
user: login: datadog-datadog-prod-us1[bot]
created_at: 2025-04-02T18:26:22Z
body: 
## Datadog Report

Branch report: [`conti/configuration-to-disable-mongo-heartbeat`](https://app.datadoghq.com/ci/test-branch/github.com%2Fdatadog%2Fdd-trace-js/dd-trace-js-integration-tests/conti%2Fconfiguration-to-disable-mongo-heartbeat?env=none&index=citest&_user_click_origin_=github)
Commit report: [`0f7fcc8`](https://app.datadoghq.com/ci/test-commit/github.com%2Fdatadog%2Fdd-trace-js/dd-trace-js-integration-tests/conti%2Fconfiguration-to-disable-mongo-heartbeat/0f7fcc81bf120edb863648850ac3ec4b8ea1ba94?env=none&index=citest&_user_click_origin_=github)
Test service: `dd-trace-js-integration-tests`

:white_check_mark: 0 Failed, 918 Passed, 0 Skipped, 11m 16.51s Total Time




author_association: NONE