From 9033c29584ce2aa48dd0230ab1b001b7eaa2beb6 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Mon, 23 Mar 2026 14:10:13 +0100 Subject: [PATCH 01/15] chore: gitignore node-*-junit.xml files (#7837) For example: node-22.22.0-junit.xml --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 5fa3333489..01f82f977c 100644 --- a/.gitignore +++ b/.gitignore @@ -89,6 +89,9 @@ typings/ # Output of tap .tap/* +# JUnit artifacts emitted by local/agent CI-style Mocha runs +node-*-junit.xml + ### VSCode ### .vscode/* From b162e5f75dc7cac1dd5476c28e8daae905ebfa0d Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Mon, 23 Mar 2026 14:29:08 +0100 Subject: [PATCH 02/15] test(integration): use stopProc in package tests (#7839) Replace direct proc.kill() teardown in package-hosted integration specs with await stopProc(proc). This makes process shutdown consistent with the root integration tests and reduces flakiness from leaked child process state. Add an optional signal to preserve the existing SIGINT-based Azure teardown behavior. --- integration-tests/helpers/index.js | 14 +++++++++----- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/sqs.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 6 ++---- .../batchSpanContextRegressionTest/client.spec.js | 3 ++- .../test/integration-test/core-test/client.spec.js | 3 ++- .../tryAddRegressionTest/client.spec.js | 3 ++- .../eventhubs-test/eventhubs.spec.js | 3 ++- .../test/integration-test/http-test/client.spec.js | 3 ++- .../servicebus-test/servicebus.spec.js | 3 ++- .../test/integration-test/core-test/client.spec.js | 3 ++- .../tryAddMessageRegressionTest/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 10 +++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 10 +++++++--- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/esm-test/esm.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 5 +++-- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 10 +++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 3 ++- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 11 ++++++++--- .../test/integration-test/client.spec.js | 3 ++- .../api_security_sampling.integration.spec.js | 4 ++-- .../appsec/downstream_requests.integration.spec.js | 4 ++-- .../appsec/iast/code_injection.integration.spec.js | 4 ++-- .../iast/overhead-controller.integration.spec.js | 4 ++-- .../rasp/command_injection.integration.spec.js | 10 ++++++++-- .../rasp/lfi.integration.express.plugin.spec.js | 4 ++-- .../appsec/rasp/rasp-metrics.integration.spec.js | 6 +++--- .../sql_injection.integration.pg.plugin.spec.js | 4 ++-- .../test/appsec/waf-metrics.integration.spec.js | 8 ++++---- .../test/llmobs/sdk/typescript/index.spec.js | 3 ++- 97 files changed, 322 insertions(+), 155 deletions(-) diff --git a/integration-tests/helpers/index.js b/integration-tests/helpers/index.js index 141d68cb40..33743387fb 100644 --- a/integration-tests/helpers/index.js +++ b/integration-tests/helpers/index.js @@ -265,21 +265,25 @@ function spawnProcAndExpectExit (filename, options = {}, stdioHandler, stderrHan /** * Stop a process and wait for it to fully exit. * - * Sends `SIGTERM` first, waits up to `timeoutMs`, and escalates to `SIGKILL` if needed. + * Sends `signal` first, waits up to `timeoutMs`, and escalates to `SIGKILL` if needed. * * @param {childProcess.ChildProcess|undefined} proc - Process to stop. * @param {object} [options] - Stop options. + * @param {NodeJS.Signals} [options.signal='SIGTERM'] - Signal to send before escalating. * @param {number} [options.timeoutMs=defaultStopProcTimeoutMs] - Max wait per signal in milliseconds. * @returns {Promise} */ -async function stopProc (proc, { timeoutMs = defaultStopProcTimeoutMs } = {}) { +async function stopProc (proc, options = {}) { if (!proc) return if (proc.exitCode !== null || proc.signalCode !== null) return - proc.kill() + const signal = options.signal ?? 'SIGTERM' + const timeoutMs = options.timeoutMs ?? defaultStopProcTimeoutMs - const exitedAfterSigterm = await waitForProcExit(proc, timeoutMs) - if (exitedAfterSigterm) return + proc.kill(signal) + + const exitedAfterInitialSignal = await waitForProcExit(proc, timeoutMs) + if (exitedAfterInitialSignal) return proc.kill('SIGKILL') const exitedAfterSigkill = await waitForProcExit(proc, timeoutMs) diff --git a/packages/datadog-plugin-ai/test/integration-test/client.spec.js b/packages/datadog-plugin-ai/test/integration-test/client.spec.js index f8187dcbf0..8f922f4f60 100644 --- a/packages/datadog-plugin-ai/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-ai/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { useSandbox, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -42,7 +43,7 @@ describe('esm', () => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-amqp10/test/integration-test/client.spec.js b/packages/datadog-plugin-amqp10/test/integration-test/client.spec.js index 6af340642a..440cbba457 100644 --- a/packages/datadog-plugin-amqp10/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-amqp10/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-amqplib/test/integration-test/client.spec.js b/packages/datadog-plugin-amqplib/test/integration-test/client.spec.js index 627fa0d009..4190df17a9 100644 --- a/packages/datadog-plugin-amqplib/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-amqplib/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -30,7 +31,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-anthropic/test/integration-test/client.spec.js b/packages/datadog-plugin-anthropic/test/integration-test/client.spec.js index 7f21ee775d..73067bce34 100644 --- a/packages/datadog-plugin-anthropic/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-anthropic/test/integration-test/client.spec.js @@ -10,6 +10,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -34,7 +35,7 @@ describe('esm', () => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-aws-sdk/test/integration-test/client.spec.js b/packages/datadog-plugin-aws-sdk/test/integration-test/client.spec.js index 6109185f1b..d2dcc9243d 100644 --- a/packages/datadog-plugin-aws-sdk/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-aws-sdk/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-aws-sdk/test/integration-test/sqs.spec.js b/packages/datadog-plugin-aws-sdk/test/integration-test/sqs.spec.js index 237f8b7fa8..f4398267b4 100644 --- a/packages/datadog-plugin-aws-sdk/test/integration-test/sqs.spec.js +++ b/packages/datadog-plugin-aws-sdk/test/integration-test/sqs.spec.js @@ -7,6 +7,7 @@ const { useSandbox, checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +24,7 @@ describe('recursion regression test', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-axios/test/integration-test/client.spec.js b/packages/datadog-plugin-axios/test/integration-test/client.spec.js index 4a1f8fe566..27a9c2e887 100644 --- a/packages/datadog-plugin-axios/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-axios/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') describe('esm', () => { let agent @@ -27,7 +28,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-azure-durable-functions/test/integration-test/client.spec.js b/packages/datadog-plugin-azure-durable-functions/test/integration-test/client.spec.js index dc35ca5276..3f99b4450a 100644 --- a/packages/datadog-plugin-azure-durable-functions/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-azure-durable-functions/test/integration-test/client.spec.js @@ -11,6 +11,7 @@ const { useSandbox, curlAndAssertMessage, assertObjectContains, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -35,10 +36,7 @@ describe('esm', () => { afterEach(async () => { // after each test, kill process and wait for exit before continuing - if (proc) { - proc.kill('SIGINT') - await new Promise(resolve => proc.on('exit', resolve)) - } + await stopProc(proc, { signal: 'SIGINT' }) await agent.stop() }) diff --git a/packages/datadog-plugin-azure-event-hubs/test/integration-test/batchSpanContextRegressionTest/client.spec.js b/packages/datadog-plugin-azure-event-hubs/test/integration-test/batchSpanContextRegressionTest/client.spec.js index f9df5442c9..3e2fc97ad6 100644 --- a/packages/datadog-plugin-azure-event-hubs/test/integration-test/batchSpanContextRegressionTest/client.spec.js +++ b/packages/datadog-plugin-azure-event-hubs/test/integration-test/batchSpanContextRegressionTest/client.spec.js @@ -6,6 +6,7 @@ const { sandboxCwd, useSandbox, spawnPluginIntegrationTestProcAndExpectExit, + stopProc, } = require('../../../../../integration-tests/helpers') const { withVersions } = require('../../../../dd-trace/test/setup/mocha') @@ -25,7 +26,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-azure-event-hubs/test/integration-test/core-test/client.spec.js b/packages/datadog-plugin-azure-event-hubs/test/integration-test/core-test/client.spec.js index 9c99ea5861..4fee17f2df 100644 --- a/packages/datadog-plugin-azure-event-hubs/test/integration-test/core-test/client.spec.js +++ b/packages/datadog-plugin-azure-event-hubs/test/integration-test/core-test/client.spec.js @@ -11,6 +11,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../../integration-tests/helpers') const { withVersions } = require('../../../../dd-trace/test/setup/mocha') @@ -31,7 +32,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-azure-event-hubs/test/integration-test/tryAddRegressionTest/client.spec.js b/packages/datadog-plugin-azure-event-hubs/test/integration-test/tryAddRegressionTest/client.spec.js index 3b292742f5..001501ec24 100644 --- a/packages/datadog-plugin-azure-event-hubs/test/integration-test/tryAddRegressionTest/client.spec.js +++ b/packages/datadog-plugin-azure-event-hubs/test/integration-test/tryAddRegressionTest/client.spec.js @@ -6,6 +6,7 @@ const { sandboxCwd, useSandbox, spawnPluginIntegrationTestProcAndExpectExit, + stopProc, } = require('../../../../../integration-tests/helpers') const { withVersions } = require('../../../../dd-trace/test/setup/mocha') @@ -25,7 +26,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-azure-functions/test/integration-test/eventhubs-test/eventhubs.spec.js b/packages/datadog-plugin-azure-functions/test/integration-test/eventhubs-test/eventhubs.spec.js index aa417fb785..18eef9de5d 100644 --- a/packages/datadog-plugin-azure-functions/test/integration-test/eventhubs-test/eventhubs.spec.js +++ b/packages/datadog-plugin-azure-functions/test/integration-test/eventhubs-test/eventhubs.spec.js @@ -10,6 +10,7 @@ const { sandboxCwd, useSandbox, curlAndAssertMessage, + stopProc, } = require('../../../../../integration-tests/helpers') const { withVersions } = require('../../../../dd-trace/test/setup/mocha') @@ -32,7 +33,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill('SIGINT') + await stopProc(proc, { signal: 'SIGINT' }) await agent.stop() }) diff --git a/packages/datadog-plugin-azure-functions/test/integration-test/http-test/client.spec.js b/packages/datadog-plugin-azure-functions/test/integration-test/http-test/client.spec.js index 473aad9758..09a729772b 100644 --- a/packages/datadog-plugin-azure-functions/test/integration-test/http-test/client.spec.js +++ b/packages/datadog-plugin-azure-functions/test/integration-test/http-test/client.spec.js @@ -10,6 +10,7 @@ const { sandboxCwd, useSandbox, curlAndAssertMessage, + stopProc, } = require('../../../../../integration-tests/helpers') const { withVersions } = require('../../../../dd-trace/test/setup/mocha') @@ -31,7 +32,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill('SIGINT') + await stopProc(proc, { signal: 'SIGINT' }) await agent.stop() }) diff --git a/packages/datadog-plugin-azure-functions/test/integration-test/servicebus-test/servicebus.spec.js b/packages/datadog-plugin-azure-functions/test/integration-test/servicebus-test/servicebus.spec.js index 4ab9661e9d..9e197db2e1 100644 --- a/packages/datadog-plugin-azure-functions/test/integration-test/servicebus-test/servicebus.spec.js +++ b/packages/datadog-plugin-azure-functions/test/integration-test/servicebus-test/servicebus.spec.js @@ -10,6 +10,7 @@ const { sandboxCwd, useSandbox, curlAndAssertMessage, + stopProc, } = require('../../../../../integration-tests/helpers') const { withVersions } = require('../../../../dd-trace/test/setup/mocha') @@ -32,7 +33,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill('SIGINT') + await stopProc(proc, { signal: 'SIGINT' }) await agent.stop() }) diff --git a/packages/datadog-plugin-azure-service-bus/test/integration-test/core-test/client.spec.js b/packages/datadog-plugin-azure-service-bus/test/integration-test/core-test/client.spec.js index ed9b2628e9..942bd7d37b 100644 --- a/packages/datadog-plugin-azure-service-bus/test/integration-test/core-test/client.spec.js +++ b/packages/datadog-plugin-azure-service-bus/test/integration-test/core-test/client.spec.js @@ -9,6 +9,7 @@ const { useSandbox, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../../integration-tests/helpers') const { withVersions } = require('../../../../dd-trace/test/setup/mocha') @@ -33,7 +34,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-azure-service-bus/test/integration-test/tryAddMessageRegressionTest/client.spec.js b/packages/datadog-plugin-azure-service-bus/test/integration-test/tryAddMessageRegressionTest/client.spec.js index 48dc1603f8..d307c7a67c 100644 --- a/packages/datadog-plugin-azure-service-bus/test/integration-test/tryAddMessageRegressionTest/client.spec.js +++ b/packages/datadog-plugin-azure-service-bus/test/integration-test/tryAddMessageRegressionTest/client.spec.js @@ -6,6 +6,7 @@ const { sandboxCwd, useSandbox, spawnPluginIntegrationTestProcAndExpectExit, + stopProc, } = require('../../../../../integration-tests/helpers') const { withVersions } = require('../../../../dd-trace/test/setup/mocha') @@ -25,7 +26,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-body-parser/test/integration-test/client.spec.js b/packages/datadog-plugin-body-parser/test/integration-test/client.spec.js index 013872b280..7609622e6d 100644 --- a/packages/datadog-plugin-body-parser/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-body-parser/test/integration-test/client.spec.js @@ -3,8 +3,12 @@ const assert = require('node:assert/strict') const axios = require('axios') const { - sandboxCwd, useSandbox, varySandbox, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -24,7 +28,7 @@ withVersions('body-parser', 'body-parser', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-bullmq/test/integration-test/client.spec.js b/packages/datadog-plugin-bullmq/test/integration-test/client.spec.js index 25823d845a..ea04f63dc6 100644 --- a/packages/datadog-plugin-bullmq/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-bullmq/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -26,7 +27,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-bunyan/test/integration-test/client.spec.js b/packages/datadog-plugin-bunyan/test/integration-test/client.spec.js index 64637ee48c..b1441c0dd7 100644 --- a/packages/datadog-plugin-bunyan/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-bunyan/test/integration-test/client.spec.js @@ -7,6 +7,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -28,7 +29,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) for (const variant of varySandbox.VARIANTS) { diff --git a/packages/datadog-plugin-cassandra-driver/test/integration-test/client.spec.js b/packages/datadog-plugin-cassandra-driver/test/integration-test/client.spec.js index e8319cf5f5..83d7e4f47e 100644 --- a/packages/datadog-plugin-cassandra-driver/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-cassandra-driver/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -30,7 +31,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-confluentinc-kafka-javascript/test/integration-test/client.spec.js b/packages/datadog-plugin-confluentinc-kafka-javascript/test/integration-test/client.spec.js index 73ec154116..41706381dd 100644 --- a/packages/datadog-plugin-confluentinc-kafka-javascript/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-confluentinc-kafka-javascript/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-connect/test/integration-test/client.spec.js b/packages/datadog-plugin-connect/test/integration-test/client.spec.js index f32d4d8b91..32385a67ff 100644 --- a/packages/datadog-plugin-connect/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-connect/test/integration-test/client.spec.js @@ -10,6 +10,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -30,7 +31,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-cookie-parser/test/integration-test/client.spec.js b/packages/datadog-plugin-cookie-parser/test/integration-test/client.spec.js index 568a9681ff..948576449c 100644 --- a/packages/datadog-plugin-cookie-parser/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-cookie-parser/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - sandboxCwd, useSandbox, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +28,7 @@ withVersions('cookie-parser', 'cookie-parser', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-cookie/test/integration-test/client.spec.js b/packages/datadog-plugin-cookie/test/integration-test/client.spec.js index 254a81cae5..eb40fedf46 100644 --- a/packages/datadog-plugin-cookie/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-cookie/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - sandboxCwd, useSandbox, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +28,7 @@ withVersions('cookie', 'cookie', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-couchbase/test/integration-test/client.spec.js b/packages/datadog-plugin-couchbase/test/integration-test/client.spec.js index e4bd3fedf2..515674a734 100644 --- a/packages/datadog-plugin-couchbase/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-couchbase/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -31,7 +32,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-crypto/test/integration-test/client.spec.js b/packages/datadog-plugin-crypto/test/integration-test/client.spec.js index b778941919..47d2605213 100644 --- a/packages/datadog-plugin-crypto/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-crypto/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - useSandbox, sandboxCwd, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + useSandbox, + sandboxCwd, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') describe('ESM', () => { @@ -21,7 +26,7 @@ describe('ESM', () => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-dns/test/integration-test/client.spec.js b/packages/datadog-plugin-dns/test/integration-test/client.spec.js index 20756f91fd..af95d4f7f1 100644 --- a/packages/datadog-plugin-dns/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-dns/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') describe('esm', () => { let agent @@ -27,7 +28,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-elasticsearch/test/integration-test/client.spec.js b/packages/datadog-plugin-elasticsearch/test/integration-test/client.spec.js index f06a4789fa..4c0a9c6902 100644 --- a/packages/datadog-plugin-elasticsearch/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-elasticsearch/test/integration-test/client.spec.js @@ -10,6 +10,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -37,7 +38,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-express-mongo-sanitize/test/integration-test/client.spec.js b/packages/datadog-plugin-express-mongo-sanitize/test/integration-test/client.spec.js index 1e609db71a..b0bb36edfc 100644 --- a/packages/datadog-plugin-express-mongo-sanitize/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-express-mongo-sanitize/test/integration-test/client.spec.js @@ -3,8 +3,12 @@ const assert = require('node:assert/strict') const axios = require('axios') const { - sandboxCwd, useSandbox, varySandbox, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -24,7 +28,7 @@ withVersions('express-mongo-sanitize', 'express-mongo-sanitize', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-express-session/test/integration-test/client.spec.js b/packages/datadog-plugin-express-session/test/integration-test/client.spec.js index 3bf882eab1..a0a915e4b4 100644 --- a/packages/datadog-plugin-express-session/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-express-session/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - sandboxCwd, useSandbox, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +28,7 @@ withVersions('express-session', 'express-session', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-express/test/integration-test/client.spec.js b/packages/datadog-plugin-express/test/integration-test/client.spec.js index 89d7c0bda5..0abbf42ebd 100644 --- a/packages/datadog-plugin-express/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-express/test/integration-test/client.spec.js @@ -10,6 +10,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -31,7 +32,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) for (const variant of varySandbox.VARIANTS) { diff --git a/packages/datadog-plugin-fastify/test/integration-test/client.spec.js b/packages/datadog-plugin-fastify/test/integration-test/client.spec.js index e4e747da39..28fa302436 100644 --- a/packages/datadog-plugin-fastify/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-fastify/test/integration-test/client.spec.js @@ -8,6 +8,7 @@ const { curlAndAssertMessage, checkSpansForServiceName, spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions, insertVersionDep } = require('../../../dd-trace/test/setup/mocha') @@ -27,7 +28,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-fetch/test/integration-test/client.spec.js b/packages/datadog-plugin-fetch/test/integration-test/client.spec.js index ff5b5950d0..e6d69268c6 100644 --- a/packages/datadog-plugin-fetch/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-fetch/test/integration-test/client.spec.js @@ -7,6 +7,7 @@ const { sandboxCwd, useSandbox, spawnPluginIntegrationTestProcAndExpectExit, + stopProc, } = require('../../../../integration-tests/helpers') const describe = globalThis.fetch ? globalThis.describe : globalThis.describe.skip @@ -22,7 +23,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-generic-pool/test/integration-test/client.spec.js b/packages/datadog-plugin-generic-pool/test/integration-test/client.spec.js index 2488cb7a8f..79d14b252c 100644 --- a/packages/datadog-plugin-generic-pool/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-generic-pool/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - sandboxCwd, useSandbox, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +28,7 @@ withVersions('generic-pool', 'generic-pool', '<3', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-google-cloud-pubsub/test/integration-test/client.spec.js b/packages/datadog-plugin-google-cloud-pubsub/test/integration-test/client.spec.js index 0f3083f68e..4ada3b83c1 100644 --- a/packages/datadog-plugin-google-cloud-pubsub/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-google-cloud-pubsub/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -30,7 +31,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-google-cloud-vertexai/test/integration-test/client.spec.js b/packages/datadog-plugin-google-cloud-vertexai/test/integration-test/client.spec.js index 1a26fae85a..5537c881c8 100644 --- a/packages/datadog-plugin-google-cloud-vertexai/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-google-cloud-vertexai/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -34,7 +35,7 @@ describe('esm', () => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-google-genai/test/integration-test/client.spec.js b/packages/datadog-plugin-google-genai/test/integration-test/client.spec.js index 9cc15d8299..8a2220fbdd 100644 --- a/packages/datadog-plugin-google-genai/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-google-genai/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -33,7 +34,7 @@ describe('esm', () => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-graphql/test/esm-test/esm.spec.js b/packages/datadog-plugin-graphql/test/esm-test/esm.spec.js index 3875ecf63c..06181ef450 100644 --- a/packages/datadog-plugin-graphql/test/esm-test/esm.spec.js +++ b/packages/datadog-plugin-graphql/test/esm-test/esm.spec.js @@ -10,6 +10,7 @@ const { useSandbox, checkSpansForServiceName, spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -27,7 +28,7 @@ describe('Plugin (ESM)', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-graphql/test/integration-test/client.spec.js b/packages/datadog-plugin-graphql/test/integration-test/client.spec.js index 4df3563609..838d8d50da 100644 --- a/packages/datadog-plugin-graphql/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-graphql/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -30,7 +31,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-grpc/test/integration-test/client.spec.js b/packages/datadog-plugin-grpc/test/integration-test/client.spec.js index 9d404059bd..8288a97c59 100644 --- a/packages/datadog-plugin-grpc/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-grpc/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProc, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') const { NODE_MAJOR } = require('../../../../version') @@ -33,7 +34,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-handlebars/test/integration-test/client.spec.js b/packages/datadog-plugin-handlebars/test/integration-test/client.spec.js index e8f11e01bd..c0d7ab2107 100644 --- a/packages/datadog-plugin-handlebars/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-handlebars/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - sandboxCwd, useSandbox, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +28,7 @@ withVersions('handlebars', 'handlebars', '>=4.0.0', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-hapi/test/integration-test/client.spec.js b/packages/datadog-plugin-hapi/test/integration-test/client.spec.js index 1f64336e51..83f9e204cb 100644 --- a/packages/datadog-plugin-hapi/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-hapi/test/integration-test/client.spec.js @@ -10,6 +10,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProc, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') const { assertObjectContains } = require('../../../../integration-tests/helpers') @@ -32,7 +33,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-hono/test/integration-test/client.spec.js b/packages/datadog-plugin-hono/test/integration-test/client.spec.js index e554da9933..d3c01de38d 100644 --- a/packages/datadog-plugin-hono/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-hono/test/integration-test/client.spec.js @@ -8,6 +8,7 @@ const { spawnPluginIntegrationTestProc, assertObjectContains, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -29,7 +30,7 @@ describe('esm integration test', () => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-http/test/integration-test/client.spec.js b/packages/datadog-plugin-http/test/integration-test/client.spec.js index 0f1eb48f68..ef88fc98ce 100644 --- a/packages/datadog-plugin-http/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-http/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { curlAndAssertMessage, spawnPluginIntegrationTestProc, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') describe('esm', () => { let agent @@ -27,7 +28,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-http2/test/integration-test/client.spec.js b/packages/datadog-plugin-http2/test/integration-test/client.spec.js index a0cae7ae52..b1d08c5d77 100644 --- a/packages/datadog-plugin-http2/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-http2/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') describe('esm', () => { @@ -28,7 +29,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-ioredis/test/integration-test/client.spec.js b/packages/datadog-plugin-ioredis/test/integration-test/client.spec.js index b30ce7d7df..cfa037bddb 100644 --- a/packages/datadog-plugin-ioredis/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-ioredis/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-iovalkey/test/integration-test/client.spec.js b/packages/datadog-plugin-iovalkey/test/integration-test/client.spec.js index 11a3b8c8ce..f4c4cb9c5a 100644 --- a/packages/datadog-plugin-iovalkey/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-iovalkey/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -30,7 +31,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-kafkajs/test/integration-test/client.spec.js b/packages/datadog-plugin-kafkajs/test/integration-test/client.spec.js index d192c2d04a..fdb09c2fc0 100644 --- a/packages/datadog-plugin-kafkajs/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-kafkajs/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-knex/test/integration-test/client.spec.js b/packages/datadog-plugin-knex/test/integration-test/client.spec.js index 593bde00ae..d7487ff075 100644 --- a/packages/datadog-plugin-knex/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-knex/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - sandboxCwd, useSandbox, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +28,7 @@ withVersions('knex', 'knex', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-koa/test/integration-test/client.spec.js b/packages/datadog-plugin-koa/test/integration-test/client.spec.js index 3daf75f081..e248921c04 100644 --- a/packages/datadog-plugin-koa/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-koa/test/integration-test/client.spec.js @@ -10,6 +10,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProc, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -26,7 +27,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-langchain/test/integration-test/client.spec.js b/packages/datadog-plugin-langchain/test/integration-test/client.spec.js index edc9a3c9af..e3789de211 100644 --- a/packages/datadog-plugin-langchain/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-langchain/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -34,7 +35,7 @@ describe('esm', () => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-ldapjs/test/integration-test/client.spec.js b/packages/datadog-plugin-ldapjs/test/integration-test/client.spec.js index e61d43229c..e9fcd9c9f5 100644 --- a/packages/datadog-plugin-ldapjs/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-ldapjs/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - sandboxCwd, useSandbox, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +28,7 @@ withVersions('ldapjs', 'ldapjs', '>=2', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-light-my-request/test/integration-test/client.spec.js b/packages/datadog-plugin-light-my-request/test/integration-test/client.spec.js index 5870277cb3..47506d2493 100644 --- a/packages/datadog-plugin-light-my-request/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-light-my-request/test/integration-test/client.spec.js @@ -8,6 +8,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-limitd-client/test/integration-test/client.spec.js b/packages/datadog-plugin-limitd-client/test/integration-test/client.spec.js index 05f471b658..27f9978a1b 100644 --- a/packages/datadog-plugin-limitd-client/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-limitd-client/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) for (const variant of varySandbox.VARIANTS) { diff --git a/packages/datadog-plugin-lodash/test/integration-test/client.spec.js b/packages/datadog-plugin-lodash/test/integration-test/client.spec.js index 576ca05790..7e3d45fa72 100644 --- a/packages/datadog-plugin-lodash/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-lodash/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - sandboxCwd, useSandbox, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +28,7 @@ withVersions('lodash', 'lodash', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-mariadb/test/integration-test/client.spec.js b/packages/datadog-plugin-mariadb/test/integration-test/client.spec.js index 75f89fdb56..f50bd29156 100644 --- a/packages/datadog-plugin-mariadb/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-mariadb/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -30,7 +31,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-memcached/test/integration-test/client.spec.js b/packages/datadog-plugin-memcached/test/integration-test/client.spec.js index 0953722b7d..d11ddaf46d 100644 --- a/packages/datadog-plugin-memcached/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-memcached/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -25,7 +26,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-microgateway-core/test/integration-test/client.spec.js b/packages/datadog-plugin-microgateway-core/test/integration-test/client.spec.js index c0b44501ce..68f9246e3c 100644 --- a/packages/datadog-plugin-microgateway-core/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-microgateway-core/test/integration-test/client.spec.js @@ -10,6 +10,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProc, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -31,7 +32,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-moleculer/test/integration-test/client.spec.js b/packages/datadog-plugin-moleculer/test/integration-test/client.spec.js index 31a4966e20..56e3ae5865 100644 --- a/packages/datadog-plugin-moleculer/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-moleculer/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -31,7 +32,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-mongodb-core/test/integration-test/client.spec.js b/packages/datadog-plugin-mongodb-core/test/integration-test/client.spec.js index e51826e6eb..c3c0d6105f 100644 --- a/packages/datadog-plugin-mongodb-core/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-mongodb-core/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) @@ -62,7 +63,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-mongoose/test/integration-test/client.spec.js b/packages/datadog-plugin-mongoose/test/integration-test/client.spec.js index a727330b9d..79f6ce6873 100644 --- a/packages/datadog-plugin-mongoose/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-mongoose/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) for (const variant of varySandbox.VARIANTS) { diff --git a/packages/datadog-plugin-multer/test/integration-test/client.spec.js b/packages/datadog-plugin-multer/test/integration-test/client.spec.js index 7986bcc4a4..8352b241a5 100644 --- a/packages/datadog-plugin-multer/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-multer/test/integration-test/client.spec.js @@ -3,8 +3,12 @@ const assert = require('node:assert/strict') const axios = require('axios') const { - useSandbox, sandboxCwd, varySandbox, - FakeAgent, spawnPluginIntegrationTestProc, + useSandbox, + sandboxCwd, + varySandbox, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -24,7 +28,7 @@ withVersions('multer', 'multer', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-mysql/test/integration-test/client.spec.js b/packages/datadog-plugin-mysql/test/integration-test/client.spec.js index 41f669584d..12060be9b6 100644 --- a/packages/datadog-plugin-mysql/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-mysql/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -30,7 +31,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-mysql2/test/integration-test/client.spec.js b/packages/datadog-plugin-mysql2/test/integration-test/client.spec.js index 67422b775e..4106d24250 100644 --- a/packages/datadog-plugin-mysql2/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-mysql2/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -30,7 +31,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-net/test/integration-test/client.spec.js b/packages/datadog-plugin-net/test/integration-test/client.spec.js index ca6d392cf2..06f4d63441 100644 --- a/packages/datadog-plugin-net/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-net/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') describe('esm', () => { let agent @@ -27,7 +28,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-next/test/integration-test/client.spec.js b/packages/datadog-plugin-next/test/integration-test/client.spec.js index f9fc1e737b..1a55047f14 100644 --- a/packages/datadog-plugin-next/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-next/test/integration-test/client.spec.js @@ -11,6 +11,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') const { assertObjectContains } = require('../../../../integration-tests/helpers') @@ -47,7 +48,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-node-serialize/test/integration-test/client.spec.js b/packages/datadog-plugin-node-serialize/test/integration-test/client.spec.js index 5ca16c3fd8..1e94ed8d7b 100644 --- a/packages/datadog-plugin-node-serialize/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-node-serialize/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - useSandbox, sandboxCwd, varySandbox, - FakeAgent, spawnPluginIntegrationTestProc, curl, + useSandbox, + sandboxCwd, + varySandbox, + FakeAgent, + spawnPluginIntegrationTestProc, + curl, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +28,7 @@ withVersions('node-serialize', 'node-serialize', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-openai/test/integration-test/client.spec.js b/packages/datadog-plugin-openai/test/integration-test/client.spec.js index 9d5eaeb457..f5a53db1f6 100644 --- a/packages/datadog-plugin-openai/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-openai/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -40,7 +41,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-opensearch/test/integration-test/client.spec.js b/packages/datadog-plugin-opensearch/test/integration-test/client.spec.js index a7910d5984..55c2784104 100644 --- a/packages/datadog-plugin-opensearch/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-opensearch/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-oracledb/test/integration-test/client.spec.js b/packages/datadog-plugin-oracledb/test/integration-test/client.spec.js index 8993ac7758..300ba86f09 100644 --- a/packages/datadog-plugin-oracledb/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-oracledb/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -30,7 +31,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-passport-http/test/integration-test/client.spec.js b/packages/datadog-plugin-passport-http/test/integration-test/client.spec.js index 0d4d91a4ed..c79cd3f14a 100644 --- a/packages/datadog-plugin-passport-http/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-passport-http/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - sandboxCwd, useSandbox, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +28,7 @@ withVersions('passport-http', 'passport-http', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-pg/test/integration-test/client.spec.js b/packages/datadog-plugin-pg/test/integration-test/client.spec.js index fbc179fb08..2bed625b18 100644 --- a/packages/datadog-plugin-pg/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-pg/test/integration-test/client.spec.js @@ -10,6 +10,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -39,7 +40,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-pino/test/integration-test/client.spec.js b/packages/datadog-plugin-pino/test/integration-test/client.spec.js index 433ba01650..e308064b2d 100644 --- a/packages/datadog-plugin-pino/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-pino/test/integration-test/client.spec.js @@ -7,6 +7,7 @@ const { sandboxCwd, useSandbox, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -28,7 +29,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-prisma/test/integration-test/client.spec.js b/packages/datadog-plugin-prisma/test/integration-test/client.spec.js index 01612ebda2..063ab2bd6b 100644 --- a/packages/datadog-plugin-prisma/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-prisma/test/integration-test/client.spec.js @@ -14,6 +14,7 @@ const { spawnPluginIntegrationTestProcAndExpectExit, assertObjectContains, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') const externals = require('../../../dd-trace/test/plugins/externals') @@ -299,7 +300,7 @@ describe('esm', () => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent?.stop() }) diff --git a/packages/datadog-plugin-process/test/integration-test/client.spec.js b/packages/datadog-plugin-process/test/integration-test/client.spec.js index fc56a4b83a..0212418b1a 100644 --- a/packages/datadog-plugin-process/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-process/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - useSandbox, sandboxCwd, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + useSandbox, + sandboxCwd, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') describe('ESM', () => { @@ -21,7 +26,7 @@ describe('ESM', () => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-pug/test/integration-test/client.spec.js b/packages/datadog-plugin-pug/test/integration-test/client.spec.js index 797809def9..0a2cfa8442 100644 --- a/packages/datadog-plugin-pug/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-pug/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - sandboxCwd, useSandbox, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +28,7 @@ withVersions('pug', 'pug', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-redis/test/integration-test/client.spec.js b/packages/datadog-plugin-redis/test/integration-test/client.spec.js index a30539f395..1372e95fe9 100644 --- a/packages/datadog-plugin-redis/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-redis/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -30,7 +31,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-restify/test/integration-test/client.spec.js b/packages/datadog-plugin-restify/test/integration-test/client.spec.js index 0227e34fc8..7e1506752a 100644 --- a/packages/datadog-plugin-restify/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-restify/test/integration-test/client.spec.js @@ -10,6 +10,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProc, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -32,7 +33,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-rhea/test/integration-test/client.spec.js b/packages/datadog-plugin-rhea/test/integration-test/client.spec.js index eda3c044d9..8a263a4dc6 100644 --- a/packages/datadog-plugin-rhea/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-rhea/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-router/test/integration-test/client.spec.js b/packages/datadog-plugin-router/test/integration-test/client.spec.js index 86ad224cfa..b221a4a471 100644 --- a/packages/datadog-plugin-router/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-router/test/integration-test/client.spec.js @@ -10,6 +10,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProc, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -31,7 +32,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-sequelize/test/integration-test/client.spec.js b/packages/datadog-plugin-sequelize/test/integration-test/client.spec.js index 642aa45448..c57d2bab05 100644 --- a/packages/datadog-plugin-sequelize/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-sequelize/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - sandboxCwd, useSandbox, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + sandboxCwd, + useSandbox, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -23,7 +28,7 @@ withVersions('sequelize', 'sequelize', version => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-sharedb/test/integration-test/client.spec.js b/packages/datadog-plugin-sharedb/test/integration-test/client.spec.js index 36419167b3..7f30753a8b 100644 --- a/packages/datadog-plugin-sharedb/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-sharedb/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') describe('esm', () => { @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-tedious/test/integration-test/client.spec.js b/packages/datadog-plugin-tedious/test/integration-test/client.spec.js index 3e897f7f52..6b6c283cfd 100644 --- a/packages/datadog-plugin-tedious/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-tedious/test/integration-test/client.spec.js @@ -9,6 +9,7 @@ const { checkSpansForServiceName, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const version = require('../../../../version.js') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -37,7 +38,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-url/test/integration-test/client.spec.js b/packages/datadog-plugin-url/test/integration-test/client.spec.js index 7340717bfe..8bc656c99b 100644 --- a/packages/datadog-plugin-url/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-url/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - useSandbox, sandboxCwd, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + useSandbox, + sandboxCwd, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') describe('ESM', () => { @@ -21,7 +26,7 @@ describe('ESM', () => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-vm/test/integration-test/client.spec.js b/packages/datadog-plugin-vm/test/integration-test/client.spec.js index e4d1f20461..1be4c65a3f 100644 --- a/packages/datadog-plugin-vm/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-vm/test/integration-test/client.spec.js @@ -2,8 +2,13 @@ const assert = require('node:assert/strict') const { - useSandbox, sandboxCwd, varySandbox, curl, - FakeAgent, spawnPluginIntegrationTestProc, + useSandbox, + sandboxCwd, + varySandbox, + curl, + FakeAgent, + spawnPluginIntegrationTestProc, + stopProc, } = require('../../../../integration-tests/helpers') describe('ESM', () => { @@ -21,7 +26,7 @@ describe('ESM', () => { }) afterEach(async () => { - proc?.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/datadog-plugin-winston/test/integration-test/client.spec.js b/packages/datadog-plugin-winston/test/integration-test/client.spec.js index c65dd321db..70f98181f0 100644 --- a/packages/datadog-plugin-winston/test/integration-test/client.spec.js +++ b/packages/datadog-plugin-winston/test/integration-test/client.spec.js @@ -7,6 +7,7 @@ const { useSandbox, spawnPluginIntegrationTestProcAndExpectExit, varySandbox, + stopProc, } = require('../../../../integration-tests/helpers') const { withVersions } = require('../../../dd-trace/test/setup/mocha') @@ -29,7 +30,7 @@ describe('esm', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/dd-trace/test/appsec/api_security_sampling.integration.spec.js b/packages/dd-trace/test/appsec/api_security_sampling.integration.spec.js index a2304048bb..1979067d3a 100644 --- a/packages/dd-trace/test/appsec/api_security_sampling.integration.spec.js +++ b/packages/dd-trace/test/appsec/api_security_sampling.integration.spec.js @@ -4,7 +4,7 @@ const assert = require('node:assert/strict') const path = require('path') const Axios = require('axios') -const { sandboxCwd, useSandbox, FakeAgent, spawnProc } = require('../../../../integration-tests/helpers') +const { sandboxCwd, useSandbox, FakeAgent, spawnProc, stopProc } = require('../../../../integration-tests/helpers') const { calculateHttpEndpoint } = require('../../src/plugins/util/url') describe('API Security sampling integration', () => { @@ -59,7 +59,7 @@ describe('API Security sampling integration', () => { }) afterEach(async () => { - proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/dd-trace/test/appsec/downstream_requests.integration.spec.js b/packages/dd-trace/test/appsec/downstream_requests.integration.spec.js index f0196285b4..40a0c450fa 100644 --- a/packages/dd-trace/test/appsec/downstream_requests.integration.spec.js +++ b/packages/dd-trace/test/appsec/downstream_requests.integration.spec.js @@ -3,7 +3,7 @@ const assert = require('node:assert/strict') const path = require('path') const Axios = require('axios') -const { sandboxCwd, useSandbox, FakeAgent, spawnProc } = require('../../../../integration-tests/helpers') +const { sandboxCwd, useSandbox, FakeAgent, spawnProc, stopProc } = require('../../../../integration-tests/helpers') describe('RASP - downstream request integration', () => { let cwd, appFile @@ -36,7 +36,7 @@ describe('RASP - downstream request integration', () => { } async function teardownTest (agent, proc) { - proc.kill() + await stopProc(proc) await agent.stop() } diff --git a/packages/dd-trace/test/appsec/iast/code_injection.integration.spec.js b/packages/dd-trace/test/appsec/iast/code_injection.integration.spec.js index 01316b8223..dc56c2eed3 100644 --- a/packages/dd-trace/test/appsec/iast/code_injection.integration.spec.js +++ b/packages/dd-trace/test/appsec/iast/code_injection.integration.spec.js @@ -4,7 +4,7 @@ const assert = require('node:assert/strict') const path = require('path') const Axios = require('axios') -const { sandboxCwd, useSandbox, FakeAgent, spawnProc } = require('../../../../../integration-tests/helpers') +const { sandboxCwd, useSandbox, FakeAgent, spawnProc, stopProc } = require('../../../../../integration-tests/helpers') describe('IAST - code_injection - integration', () => { let axios, cwd, agent, proc @@ -24,7 +24,7 @@ describe('IAST - code_injection - integration', () => { }) afterEach(async () => { - proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/dd-trace/test/appsec/iast/overhead-controller.integration.spec.js b/packages/dd-trace/test/appsec/iast/overhead-controller.integration.spec.js index 90d675b863..3e1ab4c4fb 100644 --- a/packages/dd-trace/test/appsec/iast/overhead-controller.integration.spec.js +++ b/packages/dd-trace/test/appsec/iast/overhead-controller.integration.spec.js @@ -4,7 +4,7 @@ const assert = require('node:assert/strict') const path = require('path') const Axios = require('axios') -const { sandboxCwd, useSandbox, FakeAgent, spawnProc } = require('../../../../../integration-tests/helpers') +const { sandboxCwd, useSandbox, FakeAgent, spawnProc, stopProc } = require('../../../../../integration-tests/helpers') describe('IAST - overhead-controller - integration', () => { let axios, cwd, agent, proc @@ -24,7 +24,7 @@ describe('IAST - overhead-controller - integration', () => { }) afterEach(async () => { - proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/dd-trace/test/appsec/rasp/command_injection.integration.spec.js b/packages/dd-trace/test/appsec/rasp/command_injection.integration.spec.js index ea289cf319..912f4e9508 100644 --- a/packages/dd-trace/test/appsec/rasp/command_injection.integration.spec.js +++ b/packages/dd-trace/test/appsec/rasp/command_injection.integration.spec.js @@ -6,7 +6,13 @@ const path = require('node:path') const Axios = require('axios') const { describe, it, before, beforeEach, afterEach } = require('mocha') -const { sandboxCwd, useSandbox, FakeAgent, spawnProc } = require('../../../../../integration-tests/helpers') +const { + sandboxCwd, + useSandbox, + FakeAgent, + spawnProc, + stopProc, +} = require('../../../../../integration-tests/helpers') describe('RASP - command_injection - integration', () => { let axios, cwd, appFile, agent, proc @@ -39,7 +45,7 @@ describe('RASP - command_injection - integration', () => { }) afterEach(async () => { - proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/dd-trace/test/appsec/rasp/lfi.integration.express.plugin.spec.js b/packages/dd-trace/test/appsec/rasp/lfi.integration.express.plugin.spec.js index e9522a8cc7..8d431f8e69 100644 --- a/packages/dd-trace/test/appsec/rasp/lfi.integration.express.plugin.spec.js +++ b/packages/dd-trace/test/appsec/rasp/lfi.integration.express.plugin.spec.js @@ -4,7 +4,7 @@ const assert = require('node:assert/strict') const path = require('path') const Axios = require('axios') -const { sandboxCwd, useSandbox, FakeAgent, spawnProc } = require('../../../../../integration-tests/helpers') +const { sandboxCwd, useSandbox, FakeAgent, spawnProc, stopProc } = require('../../../../../integration-tests/helpers') describe('RASP - lfi - integration - sync', () => { let axios, cwd, appFile, agent, proc @@ -33,7 +33,7 @@ describe('RASP - lfi - integration - sync', () => { }) afterEach(async () => { - proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/dd-trace/test/appsec/rasp/rasp-metrics.integration.spec.js b/packages/dd-trace/test/appsec/rasp/rasp-metrics.integration.spec.js index 419e22c288..bf9731a724 100644 --- a/packages/dd-trace/test/appsec/rasp/rasp-metrics.integration.spec.js +++ b/packages/dd-trace/test/appsec/rasp/rasp-metrics.integration.spec.js @@ -4,7 +4,7 @@ const assert = require('node:assert/strict') const path = require('path') const Axios = require('axios') -const { sandboxCwd, useSandbox, FakeAgent, spawnProc } = require('../../../../../integration-tests/helpers') +const { sandboxCwd, useSandbox, FakeAgent, spawnProc, stopProc } = require('../../../../../integration-tests/helpers') describe('RASP metrics', () => { let axios, cwd, appFile @@ -39,7 +39,7 @@ describe('RASP metrics', () => { }) afterEach(async () => { - proc.kill() + await stopProc(proc) await agent.stop() }) @@ -91,7 +91,7 @@ describe('RASP metrics', () => { }) afterEach(async () => { - proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/dd-trace/test/appsec/rasp/sql_injection.integration.pg.plugin.spec.js b/packages/dd-trace/test/appsec/rasp/sql_injection.integration.pg.plugin.spec.js index 9136c4ca56..bfa904d136 100644 --- a/packages/dd-trace/test/appsec/rasp/sql_injection.integration.pg.plugin.spec.js +++ b/packages/dd-trace/test/appsec/rasp/sql_injection.integration.pg.plugin.spec.js @@ -4,7 +4,7 @@ const assert = require('node:assert/strict') const path = require('path') const Axios = require('axios') -const { sandboxCwd, useSandbox, FakeAgent, spawnProc } = require('../../../../../integration-tests/helpers') +const { sandboxCwd, useSandbox, FakeAgent, spawnProc, stopProc } = require('../../../../../integration-tests/helpers') // These test are here and not in the integration tests // because they require postgres instance describe('RASP - sql_injection - integration', () => { @@ -35,7 +35,7 @@ describe('RASP - sql_injection - integration', () => { }) afterEach(async () => { - proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/dd-trace/test/appsec/waf-metrics.integration.spec.js b/packages/dd-trace/test/appsec/waf-metrics.integration.spec.js index 973888d5fb..ccf1421bed 100644 --- a/packages/dd-trace/test/appsec/waf-metrics.integration.spec.js +++ b/packages/dd-trace/test/appsec/waf-metrics.integration.spec.js @@ -4,7 +4,7 @@ const assert = require('node:assert/strict') const path = require('path') const Axios = require('axios') -const { sandboxCwd, useSandbox, FakeAgent, spawnProc } = require('../../../../integration-tests/helpers') +const { sandboxCwd, useSandbox, FakeAgent, spawnProc, stopProc } = require('../../../../integration-tests/helpers') describe('WAF Metrics', () => { let axios, cwd, appFile @@ -37,7 +37,7 @@ describe('WAF Metrics', () => { }) afterEach(async () => { - proc.kill() + await stopProc(proc) await agent.stop() }) @@ -99,7 +99,7 @@ describe('WAF Metrics', () => { }) afterEach(async () => { - proc.kill() + await stopProc(proc) await agent.stop() }) @@ -151,7 +151,7 @@ describe('WAF Metrics', () => { }) afterEach(async () => { - proc.kill() + await stopProc(proc) await agent.stop() }) diff --git a/packages/dd-trace/test/llmobs/sdk/typescript/index.spec.js b/packages/dd-trace/test/llmobs/sdk/typescript/index.spec.js index 86785ef75b..e54d5839f5 100644 --- a/packages/dd-trace/test/llmobs/sdk/typescript/index.spec.js +++ b/packages/dd-trace/test/llmobs/sdk/typescript/index.spec.js @@ -9,6 +9,7 @@ const { sandboxCwd, useSandbox, spawnProcAndExpectExit, + stopProc, } = require('../../../../../../integration-tests/helpers') const { assertLlmObsSpanEvent } = require('../../util') @@ -83,7 +84,7 @@ describe('typescript', () => { }) afterEach(async () => { - proc && proc.kill() + await stopProc(proc) await agent.stop() }) From abc71631f90f1ad967acf6040ffa1ce06a35f15b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 14:30:02 +0100 Subject: [PATCH 03/15] chore(deps): bump flatted from 3.3.4 to 3.4.2 (#7826) Bumps [flatted](https://github.com/WebReflection/flatted) from 3.3.4 to 3.4.2. - [Commits](https://github.com/WebReflection/flatted/compare/v3.3.4...v3.4.2) --- updated-dependencies: - dependency-name: flatted dependency-version: 3.4.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5678e05365..0c077ff9e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2183,9 +2183,9 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.9: - version "3.3.4" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.4.tgz#0986e681008f0f13f58e18656c47967682db5ff6" - integrity sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA== + version "3.4.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726" + integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA== follow-redirects@^1.15.11: version "1.15.11" From f81add4f3655b6256e3f32458f682c21d9d45971 Mon Sep 17 00:00:00 2001 From: "gh-worker-campaigns-3e9aa4[bot]" <244854796+gh-worker-campaigns-3e9aa4[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 13:30:14 +0000 Subject: [PATCH 04/15] chore(ci) update one-pipeline (#7833) Co-authored-by: gh-worker-campaigns-3e9aa4[bot] <244854796+gh-worker-campaigns-3e9aa4[bot]@users.noreply.github.com> --- .gitlab/one-pipeline.locked.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/one-pipeline.locked.yml b/.gitlab/one-pipeline.locked.yml index 3e1f1a6259..d4f90914ed 100644 --- a/.gitlab/one-pipeline.locked.yml +++ b/.gitlab/one-pipeline.locked.yml @@ -1,4 +1,4 @@ # DO NOT EDIT THIS FILE MANUALLY # This file is auto-generated by automation. include: - - remote: https://gitlab-templates.ddbuild.io/libdatadog/one-pipeline/ca/f14ac28614630d12bcfe6cba4fd8d72dce142c62ff0b053ba7c323622104ebd7/one-pipeline.yml + - remote: https://gitlab-templates.ddbuild.io/libdatadog/one-pipeline/ca/9cf7d7609ff62e4723c9cbc061ca2a25345ce5d6055b9acad9a13dbf736261f0/one-pipeline.yml From 784a17815ec15351c6db667da55237c0f5e75e86 Mon Sep 17 00:00:00 2001 From: Attila Szegedi Date: Mon, 23 Mar 2026 15:02:06 +0100 Subject: [PATCH 05/15] feat(profiling): Start profilers synchronously within tracer initialization (#5906) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(profiler): make profiler startup synchronous Replace `await SourceMapper.create()` with a synchronous `new SourceMapper()` constructor call followed by a fire-and-forget `loadDirectory()`. The mapper is handed to profilers immediately (with an initially empty `infoMap`); `#sourceMapCount` is updated in the background `.then()` callback once the filesystem scan completes. This removes the only `await` from `_start()`, making it — and the entire profiler start path — synchronous. `start()` now uses try/catch instead of `.catch()` chaining. `proxy.js` is updated accordingly: `_profilerStarted` is stored as a plain boolean and `profilerStarted()` wraps it in `Promise.resolve()` for backwards compatibility with existing callers. We also move zlib/compression setup out of the synchronous startup path into a lazy `#getCompressionFn()` private method, initialized on first call. `zlib` and `util.promisify` are now required inside that method rather than at module load time, keeping the startup path free of I/O-adjacent module loading. Co-Authored-By: Claude Sonnet 4.6 --- integration-tests/profiler/profiler.spec.js | 5 +- packages/dd-trace/src/profiling/profiler.js | 111 +++++++++++------- packages/dd-trace/src/proxy.js | 7 +- .../dd-trace/test/profiling/profiler.spec.js | 61 ++++------ 4 files changed, 99 insertions(+), 85 deletions(-) diff --git a/integration-tests/profiler/profiler.spec.js b/integration-tests/profiler/profiler.spec.js index c9be0d306c..fa1980a901 100644 --- a/integration-tests/profiler/profiler.spec.js +++ b/integration-tests/profiler/profiler.spec.js @@ -278,8 +278,9 @@ async function gatherTimelineEvents (cwd, scriptFilePath, agentPort, eventType, // Gather only tested events if (event === eventValue) { if (process.platform !== 'win32') { - assert.notStrictEqual(spanId, undefined, encoded) - assert.notStrictEqual(localRootSpanId, undefined, encoded) + // Skip events without span IDs: these are from internal operations (e.g. background + // source map loading) that occur outside any user span and are not relevant to the test. + if (spanId === undefined || localRootSpanId === undefined) continue } else { assert.strictEqual(spanId, undefined, encoded) assert.strictEqual(localRootSpanId, undefined, encoded) diff --git a/packages/dd-trace/src/profiling/profiler.js b/packages/dd-trace/src/profiling/profiler.js index 91c4bba8ae..a3f25b904f 100644 --- a/packages/dd-trace/src/profiling/profiler.js +++ b/packages/dd-trace/src/profiling/profiler.js @@ -1,8 +1,6 @@ 'use strict' const { EventEmitter } = require('events') -const { promisify } = require('util') -const zlib = require('zlib') const dc = require('dc-polyfill') const crashtracker = require('../crashtracking') const log = require('../log') @@ -42,6 +40,7 @@ function processInfo (infos, info, type) { class Profiler extends EventEmitter { #compressionFn + #compressionFnInitialized = false #compressionOptions #config #enabled = false @@ -116,11 +115,13 @@ class Profiler extends EventEmitter { reportHostname, } - return this._start(options).catch((err) => { + try { + return this._start(options) + } catch (err) { logError(logger, 'Error starting profiler. For troubleshooting tips, see ' + '', err) return false - }) + } } get enabled () { @@ -131,7 +132,50 @@ class Profiler extends EventEmitter { logError(this.#logger, err) } - async _start (options) { + #getCompressionFn () { + if (!this.#compressionFnInitialized) { + this.#compressionFnInitialized = true + try { + const { promisify } = require('util') + const zlib = require('zlib') + const { method, level: clevel } = this.#config.uploadCompression + switch (method) { + case 'gzip': + this.#compressionFn = promisify(zlib.gzip) + if (clevel !== undefined) { + this.#compressionOptions = { + level: clevel, + } + } + break + case 'zstd': + // eslint-disable-next-line n/no-unsupported-features/node-builtins + if (typeof zlib.zstdCompress === 'function') { + // eslint-disable-next-line n/no-unsupported-features/node-builtins + this.#compressionFn = promisify(zlib.zstdCompress) + if (clevel !== undefined) { + this.#compressionOptions = { + params: { + // eslint-disable-next-line n/no-unsupported-features/node-builtins + [zlib.constants.ZSTD_c_compressionLevel]: clevel, + }, + } + } + } else { + const zstdCompress = require('@datadog/libdatadog').load('datadog-js-zstd').zstd_compress + const level = clevel ?? 0 // 0 is zstd default compression level + this.#compressionFn = (buffer) => Promise.resolve(Buffer.from(zstdCompress(buffer, level))) + } + break + } + } catch (err) { + this.#logError(err) + } + } + return this.#compressionFn + } + + _start (options) { if (this.enabled) return true const config = this.#config = new Config(options) @@ -148,45 +192,21 @@ class Profiler extends EventEmitter { setLogger(config.logger) if (config.sourceMap) { - mapper = await SourceMapper.create([process.cwd()], config.debugSourceMaps) - this.#sourceMapCount = mapper.infoMap.size - if (config.debugSourceMaps) { - this.#logger.debug(() => { - return this.#sourceMapCount === 0 - ? 'Found no source maps' - : `Found source maps for following files: [${[...mapper.infoMap.keys()].join(', ')}]` - }) - } - } - - const clevel = config.uploadCompression.level - switch (config.uploadCompression.method) { - case 'gzip': - this.#compressionFn = promisify(zlib.gzip) - if (clevel !== undefined) { - this.#compressionOptions = { - level: clevel, - } - } - break - case 'zstd': - if (typeof zlib.zstdCompress === 'function') { // eslint-disable-line n/no-unsupported-features/node-builtins - // eslint-disable-next-line n/no-unsupported-features/node-builtins - this.#compressionFn = promisify(zlib.zstdCompress) - if (clevel !== undefined) { - this.#compressionOptions = { - params: { - // eslint-disable-next-line n/no-unsupported-features/node-builtins - [zlib.constants.ZSTD_c_compressionLevel]: clevel, - }, - } + mapper = new SourceMapper(config.debugSourceMaps) + mapper.loadDirectory(process.cwd()) + .then(() => { + this.#sourceMapCount = mapper.infoMap.size + if (config.debugSourceMaps) { + this.#logger.debug(() => { + return this.#sourceMapCount === 0 + ? 'Found no source maps' + : `Found source maps for following files: [${[...mapper.infoMap.keys()].join(', ')}]` + }) } - } else { - const zstdCompress = require('@datadog/libdatadog').load('datadog-js-zstd').zstd_compress - const level = clevel ?? 0 // 0 is zstd default compression level - this.#compressionFn = (buffer) => Promise.resolve(Buffer.from(zstdCompress(buffer, level))) - } - break + }) + .catch((err) => { + this.#logError(err) + }) } } catch (err) { this.#logError(err) @@ -332,13 +352,14 @@ class Profiler extends EventEmitter { const encodedProfiles = {} const infos = this.#createInitialInfos() + const compressionFn = this.#getCompressionFn() // encode and export asynchronously await Promise.all(profiles.map(async ({ profiler, profile, info }) => { try { const encoded = await profiler.encode(profile) - const compressed = encoded instanceof Buffer && this.#compressionFn !== undefined - ? await this.#compressionFn(encoded, this.#compressionOptions) + const compressed = encoded instanceof Buffer && compressionFn !== undefined + ? await compressionFn(encoded, this.#compressionOptions) : encoded encodedProfiles[profiler.type] = compressed processInfo(infos, info, profiler.type) diff --git a/packages/dd-trace/src/proxy.js b/packages/dd-trace/src/proxy.js index 7595ab0ef6..015e91f78c 100644 --- a/packages/dd-trace/src/proxy.js +++ b/packages/dd-trace/src/proxy.js @@ -180,7 +180,7 @@ class Tracer extends NoopProxy { if (config.profiling.enabled === 'true') { this._profilerStarted = this._startProfiler(config) } else { - this._profilerStarted = Promise.resolve(false) + this._profilerStarted = false if (config.profiling.enabled === 'auto') { const { SSIHeuristics } = require('./profiling/ssi-heuristics') const ssiHeuristics = new SSIHeuristics(config) @@ -252,6 +252,7 @@ class Tracer extends NoopProxy { 'Error starting profiler. For troubleshooting tips, see ', e ) + return false } } @@ -329,11 +330,11 @@ class Tracer extends NoopProxy { * @override */ profilerStarted () { - if (!this._profilerStarted) { + if (this._profilerStarted === undefined) { // injection hardening: this is only ever invoked from tests. throw new Error('profilerStarted() must be called after init()') } - return this._profilerStarted + return Promise.resolve(this._profilerStarted) } /** diff --git a/packages/dd-trace/test/profiling/profiler.spec.js b/packages/dd-trace/test/profiling/profiler.spec.js index da2ab499ae..eefbd0e64c 100644 --- a/packages/dd-trace/test/profiling/profiler.spec.js +++ b/packages/dd-trace/test/profiling/profiler.spec.js @@ -24,7 +24,8 @@ describe('profiler', function () { let profilers let consoleLogger let logger - let sourceMapCreate + let SourceMapperStub + let mapperInstance let interval function waitForExport () { @@ -79,7 +80,11 @@ describe('profiler', function () { exporters = [exporter] profilers = [wallProfiler, spaceProfiler] - sourceMapCreate = sinon.stub() + mapperInstance = { + infoMap: new Map(), + loadDirectory: sinon.stub().resolves(), + } + SourceMapperStub = sinon.stub().returns(mapperInstance) } function makeStartOptions (overrides = {}) { @@ -95,9 +100,7 @@ describe('profiler', function () { function initProfiler () { Profiler = proxyquire('../../src/profiling/profiler', { '@datadog/pprof': { - SourceMapper: { - create: sourceMapCreate, - }, + SourceMapper: SourceMapperStub, }, }).Profiler @@ -347,19 +350,19 @@ describe('profiler', function () { }) it('should pass source mapper to profilers when enabled', async () => { - const mapper = { infoMap: new Map() } - sourceMapCreate.returns(Promise.resolve(mapper)) - await profiler._start(makeStartOptions({ sourceMap: true })) + profiler._start(makeStartOptions({ sourceMap: true })) const options = profilers[0].start.args[0][0] assert.ok(Object.hasOwn(options, 'mapper')) - assert.strictEqual(mapper, options.mapper) + assert.strictEqual(mapperInstance, options.mapper) }) it('should work with a root working dir and source maps on', async () => { const error = new Error('fail') - sourceMapCreate.rejects(error) - await profiler._start(makeStartOptions({ logger, sourceMap: true })) + mapperInstance.loadDirectory.rejects(error) + profiler._start(makeStartOptions({ logger, sourceMap: true })) + await Promise.resolve() // let .then() propagate the rejection + await Promise.resolve() // let .catch() callback run assert.strictEqual(consoleLogger.error.args[0][0], error) assert.strictEqual(profiler.enabled, true) }) @@ -403,9 +406,6 @@ describe('profiler', function () { }) it('should include sourceMapCount: 0 when no source maps are found', async () => { - const mapper = { infoMap: new Map() } - sourceMapCreate.returns(Promise.resolve(mapper)) - exporterPromise = new Promise(resolve => { exporter.export = (exportSpec) => { resolve(exportSpec) @@ -413,7 +413,8 @@ describe('profiler', function () { } }) - await profiler._start(makeStartOptions({ sourceMap: true })) + profiler._start(makeStartOptions({ sourceMap: true })) + await Promise.resolve() // flush .then() callback so #sourceMapCount is set clock.tick(interval) @@ -423,14 +424,9 @@ describe('profiler', function () { }) it('should include sourceMapCount with the number of loaded source maps', async () => { - const mapper = { - infoMap: new Map([ - ['file1.js', {}], - ['file2.js', {}], - ['file3.js', {}], - ]), - } - sourceMapCreate.returns(Promise.resolve(mapper)) + mapperInstance.infoMap.set('file1.js', {}) + mapperInstance.infoMap.set('file2.js', {}) + mapperInstance.infoMap.set('file3.js', {}) exporterPromise = new Promise(resolve => { exporter.export = (exportSpec) => { @@ -439,7 +435,8 @@ describe('profiler', function () { } }) - await profiler._start(makeStartOptions({ sourceMap: true })) + profiler._start(makeStartOptions({ sourceMap: true })) + await Promise.resolve() // flush .then() callback so #sourceMapCount is set clock.tick(interval) @@ -455,9 +452,7 @@ describe('profiler', function () { function initServerlessProfiler () { Profiler = proxyquire('../../src/profiling/profiler', { '@datadog/pprof': { - SourceMapper: { - create: sourceMapCreate, - }, + SourceMapper: SourceMapperStub, }, }).ServerlessProfiler @@ -526,13 +521,8 @@ describe('profiler', function () { }) it('should include sourceMapCount in export infos', async () => { - const mapper = { - infoMap: new Map([ - ['file1.js', {}], - ['file2.js', {}], - ]), - } - sourceMapCreate.returns(Promise.resolve(mapper)) + mapperInstance.infoMap.set('file1.js', {}) + mapperInstance.infoMap.set('file2.js', {}) exporterPromise = new Promise(resolve => { exporter.export = (exportSpec) => { @@ -541,7 +531,8 @@ describe('profiler', function () { } }) - await profiler._start(makeStartOptions({ sourceMap: true })) + profiler._start(makeStartOptions({ sourceMap: true })) + await Promise.resolve() // flush .then() callback so #sourceMapCount is set // flushAfterIntervals + 1 because it flushes after last interval for (let i = 0; i < flushAfterIntervals + 1; i++) { From 0aa7d6fa621012e397bd4615021be85d1f0ca2c5 Mon Sep 17 00:00:00 2001 From: Attila Szegedi Date: Mon, 23 Mar 2026 15:36:01 +0100 Subject: [PATCH 06/15] profiling: replace sourceMapCount with hasMissingSourceMaps (#7843) Replace the `sourceMapCount` info field with a boolean `hasMissingSourceMaps` that checks each profile's comments for the `dd:has-missing-map-files` token emitted by @datadog/pprof when source files declare a sourceMappingURL but the map file is missing. Co-authored-by: Claude Opus 4.6 (1M context) --- packages/dd-trace/src/profiling/profiler.js | 18 +++++-- .../dd-trace/test/profiling/profiler.spec.js | 51 +++++++------------ 2 files changed, 32 insertions(+), 37 deletions(-) diff --git a/packages/dd-trace/src/profiling/profiler.js b/packages/dd-trace/src/profiling/profiler.js index a3f25b904f..c107fc8275 100644 --- a/packages/dd-trace/src/profiling/profiler.js +++ b/packages/dd-trace/src/profiling/profiler.js @@ -32,6 +32,14 @@ function findWebSpan (startedSpans, spanId) { return false } +const MISSING_SOURCE_MAPS_TOKEN = 'dd:has-missing-map-files' + +function profileHasMissingSourceMaps (profile) { + const strings = profile?.stringTable?.strings + if (!strings) return false + return profile.comment?.some(idx => strings[idx] === MISSING_SOURCE_MAPS_TOKEN) ?? false +} + function processInfo (infos, info, type) { if (Object.keys(info).length > 0) { infos[type] = info @@ -49,7 +57,6 @@ class Profiler extends EventEmitter { #logger #profileSeq = 0 #spanFinishListener - #sourceMapCount = 0 #timer constructor () { @@ -195,10 +202,10 @@ class Profiler extends EventEmitter { mapper = new SourceMapper(config.debugSourceMaps) mapper.loadDirectory(process.cwd()) .then(() => { - this.#sourceMapCount = mapper.infoMap.size if (config.debugSourceMaps) { + const count = mapper.infoMap.size this.#logger.debug(() => { - return this.#sourceMapCount === 0 + return count === 0 ? 'Found no source maps' : `Found source maps for following files: [${[...mapper.infoMap.keys()].join(', ')}]` }) @@ -315,7 +322,7 @@ class Profiler extends EventEmitter { return { serverless: this.serverless, settings: this.#config.systemInfoReport, - sourceMapCount: this.#sourceMapCount, + hasMissingSourceMaps: false, } } @@ -362,6 +369,9 @@ class Profiler extends EventEmitter { ? await compressionFn(encoded, this.#compressionOptions) : encoded encodedProfiles[profiler.type] = compressed + if (profileHasMissingSourceMaps(profile)) { + infos.hasMissingSourceMaps = true + } processInfo(infos, info, profiler.type) this.#logger.debug(() => { const profileJson = JSON.stringify(profile, (_, value) => { diff --git a/packages/dd-trace/test/profiling/profiler.spec.js b/packages/dd-trace/test/profiling/profiler.spec.js index eefbd0e64c..0b0b405e8a 100644 --- a/packages/dd-trace/test/profiling/profiler.spec.js +++ b/packages/dd-trace/test/profiling/profiler.spec.js @@ -388,24 +388,13 @@ describe('profiler', function () { assert.strictEqual(infos.serverless, false) }) - it('should include sourceMapCount: 0 when source maps are disabled', async () => { - exporterPromise = new Promise(resolve => { - exporter.export = (exportSpec) => { - resolve(exportSpec) - return Promise.resolve() - } + it('should set hasMissingSourceMaps to true when any profile has the comment token', async () => { + const token = 'dd:has-missing-map-files' + wallProfiler.profile.returns({ + comment: [1], + stringTable: { strings: ['', token] }, }) - await profiler._start(makeStartOptions({ sourceMap: false })) - - clock.tick(interval) - - const { infos } = await exporterPromise - - assert.strictEqual(infos.sourceMapCount, 0) - }) - - it('should include sourceMapCount: 0 when no source maps are found', async () => { exporterPromise = new Promise(resolve => { exporter.export = (exportSpec) => { resolve(exportSpec) @@ -413,21 +402,16 @@ describe('profiler', function () { } }) - profiler._start(makeStartOptions({ sourceMap: true })) - await Promise.resolve() // flush .then() callback so #sourceMapCount is set + await profiler._start(makeStartOptions()) clock.tick(interval) const { infos } = await exporterPromise - assert.strictEqual(infos.sourceMapCount, 0) + assert.strictEqual(infos.hasMissingSourceMaps, true) }) - it('should include sourceMapCount with the number of loaded source maps', async () => { - mapperInstance.infoMap.set('file1.js', {}) - mapperInstance.infoMap.set('file2.js', {}) - mapperInstance.infoMap.set('file3.js', {}) - + it('should set hasMissingSourceMaps to false when no profile has the comment token', async () => { exporterPromise = new Promise(resolve => { exporter.export = (exportSpec) => { resolve(exportSpec) @@ -435,14 +419,13 @@ describe('profiler', function () { } }) - profiler._start(makeStartOptions({ sourceMap: true })) - await Promise.resolve() // flush .then() callback so #sourceMapCount is set + await profiler._start(makeStartOptions()) clock.tick(interval) const { infos } = await exporterPromise - assert.strictEqual(infos.sourceMapCount, 3) + assert.strictEqual(infos.hasMissingSourceMaps, false) }) }) @@ -520,9 +503,12 @@ describe('profiler', function () { assert.strictEqual(infos.serverless, true) }) - it('should include sourceMapCount in export infos', async () => { - mapperInstance.infoMap.set('file1.js', {}) - mapperInstance.infoMap.set('file2.js', {}) + it('should set hasMissingSourceMaps to true when any profile has the comment token', async () => { + const token = 'dd:has-missing-map-files' + wallProfiler.profile.returns({ + comment: [1], + stringTable: { strings: ['', token] }, + }) exporterPromise = new Promise(resolve => { exporter.export = (exportSpec) => { @@ -531,8 +517,7 @@ describe('profiler', function () { } }) - profiler._start(makeStartOptions({ sourceMap: true })) - await Promise.resolve() // flush .then() callback so #sourceMapCount is set + profiler._start(makeStartOptions()) // flushAfterIntervals + 1 because it flushes after last interval for (let i = 0; i < flushAfterIntervals + 1; i++) { @@ -541,7 +526,7 @@ describe('profiler', function () { const { infos } = await exporterPromise - assert.strictEqual(infos.sourceMapCount, 2) + assert.strictEqual(infos.hasMissingSourceMaps, true) }) }) }) From 93941292bb597d6c27546ceff093153c864406c3 Mon Sep 17 00:00:00 2001 From: Roch Devost Date: Mon, 23 Mar 2026 10:53:25 -0400 Subject: [PATCH 07/15] ci: fix race condition in all-green job causing invalid summary (#7836) * fix race condition in all-green script causing invalid output * add console logging of the summary --- scripts/all-green.mjs | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/scripts/all-green.mjs b/scripts/all-green.mjs index 8092dd749e..373284ba35 100644 --- a/scripts/all-green.mjs +++ b/scripts/all-green.mjs @@ -55,15 +55,16 @@ async function hasCompleted () { } async function checkCompleted () { - if (RETRIES && retries > RETRIES) { - throw new Error(`State is still pending after ${RETRIES} retries.`) - } - if (!await hasCompleted()) { + retries++ + + if (RETRIES && retries > RETRIES) { + throw new Error(`State is still pending after ${RETRIES} retries.`) + } + console.log(`Status is still pending, waiting for ${POLLING_INTERVAL} minutes before retrying.`) await setTimeout(POLLING_INTERVAL * 60_000) console.log('Retrying.') - retries++ await checkCompleted() } } @@ -108,6 +109,18 @@ async function checkAllGreen () { } async function printSummary (checkRuns) { + const runs = checkRuns.map(run => ({ + name: run.name, + status: run.status, + conclusion: run.conclusion + ? `${run.conclusion} ${checkConclusionEmojis[run.conclusion]}` + : ' ', + started_at: run.started_at, + completed_at: run.completed_at ?? ' ', + })) + + console.table(runs) + const header = [ { data: 'name', header: true }, { data: 'status', header: true }, @@ -116,12 +129,12 @@ async function printSummary (checkRuns) { { data: 'completed_at', header: true }, ] - const body = checkRuns.map(run => [ + const body = runs.map(run => [ run.name, run.status, - run.conclusion ? `${run.conclusion} ${checkConclusionEmojis[run.conclusion]}` : ' ', + run.conclusion, run.started_at, - run.completed_at ?? ' ', + run.completed_at, ]) await summary From e599f2f2e390a42d2e164f2de7b83fbc786726a0 Mon Sep 17 00:00:00 2001 From: ManuelPalenzuelaDD <144776385+ManuelPalenzuelaDD@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:27:08 +0100 Subject: [PATCH 08/15] ci: add Datadog code coverage upload (#7759) * Add Datadog code coverage upload alongside Codecov Add Datadog coverage upload to all CI jobs that produce coverage reports, running side-by-side with existing Codecov uploads for migration validation. Changes: - Add Datadog upload step to .github/actions/coverage composite action - Pass DD_API_KEY to all 62 coverage action invocations across 10 workflows - Add standalone Datadog upload for stripe job in appsec.yml Co-Authored-By: Claude Opus 4.6 * Apply PR review feedback - Make dd_api_key required in .github/actions/coverage/action.yml - Replace manual codecov + DD upload steps in appsec.yml stripe job with the .github/actions/coverage composite action Co-Authored-By: Claude Opus 4.6 --- .github/actions/coverage/action.yml | 14 ++++++++++- .../actions/instrumentations/test/action.yml | 1 + .../plugins/test-and-upstream/action.yml | 1 + .github/actions/plugins/test/action.yml | 1 + .github/actions/plugins/upstream/action.yml | 1 + .github/workflows/aiguard.yml | 3 +++ .github/workflows/apm-capabilities.yml | 3 +++ .github/workflows/apm-integrations.yml | 16 +++++++++++++ .github/workflows/appsec.yml | 23 ++++++++++++++++++- .github/workflows/debugger.yml | 1 + .github/workflows/llmobs.yml | 8 +++++++ .github/workflows/openfeature.yml | 1 + .github/workflows/platform.yml | 6 +++++ .github/workflows/profiling.yml | 3 +++ .github/workflows/serverless.yml | 3 +++ 15 files changed, 83 insertions(+), 2 deletions(-) diff --git a/.github/actions/coverage/action.yml b/.github/actions/coverage/action.yml index 914b9bbcb4..a143978b01 100644 --- a/.github/actions/coverage/action.yml +++ b/.github/actions/coverage/action.yml @@ -1,5 +1,5 @@ name: coverage -description: Verify coverage output and upload it to Codecov. +description: Verify coverage output and upload it to Codecov and Datadog. inputs: flags: @@ -9,6 +9,9 @@ inputs: description: "Coverage report directory (defaults to 'coverage')" required: false default: coverage + dd_api_key: + description: "Datadog API key for coverage upload" + required: true runs: using: composite @@ -21,3 +24,12 @@ runs: uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 with: flags: ${{ inputs.flags }} + + - name: Upload coverage to Datadog + if: always() + continue-on-error: true + uses: DataDog/coverage-upload-github-action@d2cf302a39c05e0ad22063360a2bf6ce0cc4906c # v1 + with: + api_key: ${{ inputs.dd_api_key }} + files: . + flags: ${{ inputs.flags }} diff --git a/.github/actions/instrumentations/test/action.yml b/.github/actions/instrumentations/test/action.yml index 0e3a97b007..c39d580784 100644 --- a/.github/actions/instrumentations/test/action.yml +++ b/.github/actions/instrumentations/test/action.yml @@ -17,6 +17,7 @@ runs: - uses: ./.github/actions/coverage with: flags: instrumentations-${{ github.job }} + dd_api_key: ${{ inputs.dd_api_key }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: diff --git a/.github/actions/plugins/test-and-upstream/action.yml b/.github/actions/plugins/test-and-upstream/action.yml index 28df1e9ad3..8cec126b91 100644 --- a/.github/actions/plugins/test-and-upstream/action.yml +++ b/.github/actions/plugins/test-and-upstream/action.yml @@ -22,6 +22,7 @@ runs: - uses: ./.github/actions/coverage with: flags: plugins-test-and-upstream-${{ github.job }} + dd_api_key: ${{ inputs.dd_api_key }} - if: always() uses: ./.github/actions/testagent/logs with: diff --git a/.github/actions/plugins/test/action.yml b/.github/actions/plugins/test/action.yml index a5527693ee..92637478ea 100644 --- a/.github/actions/plugins/test/action.yml +++ b/.github/actions/plugins/test/action.yml @@ -18,6 +18,7 @@ runs: - uses: ./.github/actions/coverage with: flags: plugins-${{ github.job }} + dd_api_key: ${{ inputs.dd_api_key }} - if: always() uses: ./.github/actions/testagent/logs with: diff --git a/.github/actions/plugins/upstream/action.yml b/.github/actions/plugins/upstream/action.yml index 862af3377c..77afcd88cf 100644 --- a/.github/actions/plugins/upstream/action.yml +++ b/.github/actions/plugins/upstream/action.yml @@ -18,6 +18,7 @@ runs: - uses: ./.github/actions/coverage with: flags: plugins-upstream-${{ github.job }} + dd_api_key: ${{ inputs.dd_api_key }} - if: always() uses: ./.github/actions/testagent/logs with: diff --git a/.github/workflows/aiguard.yml b/.github/workflows/aiguard.yml index bf37e560df..4c6352dedc 100644 --- a/.github/workflows/aiguard.yml +++ b/.github/workflows/aiguard.yml @@ -26,6 +26,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: aiguard-macos + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -48,6 +49,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: aiguard-ubuntu + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -66,6 +68,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: aiguard-windows + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: diff --git a/.github/workflows/apm-capabilities.yml b/.github/workflows/apm-capabilities.yml index 1cd1024d10..592ec3f48f 100644 --- a/.github/workflows/apm-capabilities.yml +++ b/.github/workflows/apm-capabilities.yml @@ -32,6 +32,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-capabilities-tracing-macos + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -53,6 +54,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-capabilities-tracing-ubuntu + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -70,6 +72,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-capabilities-tracing-windows + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: diff --git a/.github/workflows/apm-integrations.yml b/.github/workflows/apm-integrations.yml index 18f28026c1..0d70eda4fe 100644 --- a/.github/workflows/apm-integrations.yml +++ b/.github/workflows/apm-integrations.yml @@ -80,6 +80,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-aerospike-${{ matrix.node-version }}-${{ matrix.range_clean }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -222,6 +223,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-child-process + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -290,6 +292,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-confluentinc-kafka-javascript-${{ matrix.node-version }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -351,6 +354,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-couchbase-${{ matrix.node-version }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -389,6 +393,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-dns + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -419,6 +424,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-elasticsearch + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -567,6 +573,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-http-${{ matrix.node-version }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -595,6 +602,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-http2 + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -646,6 +654,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-kafkajs-${{ matrix.node-version }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -897,6 +906,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-net + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -954,6 +964,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-next-${{ matrix.range_clean }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -1032,6 +1043,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-oracledb + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -1058,6 +1070,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-pino + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -1150,6 +1163,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-prisma-${{ matrix.node-version }}-${{ matrix.range_clean }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -1306,6 +1320,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-sharedb + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -1339,6 +1354,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: apm-integrations-tedious + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: diff --git a/.github/workflows/appsec.yml b/.github/workflows/appsec.yml index 90f3389075..5f8da2c7f7 100644 --- a/.github/workflows/appsec.yml +++ b/.github/workflows/appsec.yml @@ -33,6 +33,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-macos + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -55,6 +56,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-ubuntu + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -73,6 +75,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-windows + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -104,6 +107,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-ldapjs + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -133,6 +137,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-postgres + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -162,6 +167,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-mysql + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -182,6 +188,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-express + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -202,6 +209,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-fastify + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -222,6 +230,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-graphql + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -248,6 +257,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-mongodb-core + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -274,6 +284,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-mongoose + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -297,6 +308,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-sourcing + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -357,6 +369,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-next-${{ matrix.version }}-${{ matrix.range_clean }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -377,6 +390,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-lodash + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -414,6 +428,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-passport + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -433,6 +448,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-template + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -453,6 +469,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-node-serialize + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -491,6 +508,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: appsec-kafka + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -507,7 +525,10 @@ jobs: - run: yarn test:appsec:plugins:ci - uses: ./.github/actions/node/latest - run: yarn test:appsec:plugins:ci - - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 + - uses: ./.github/actions/coverage + with: + flags: appsec-stripe + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: diff --git a/.github/workflows/debugger.yml b/.github/workflows/debugger.yml index eafbaad62b..a7c3766e8d 100644 --- a/.github/workflows/debugger.yml +++ b/.github/workflows/debugger.yml @@ -38,6 +38,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: debugger-ubuntu-${{ matrix.version }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: diff --git a/.github/workflows/llmobs.yml b/.github/workflows/llmobs.yml index 0e7d3afe02..1f8f911d13 100644 --- a/.github/workflows/llmobs.yml +++ b/.github/workflows/llmobs.yml @@ -42,6 +42,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: llmobs-sdk-${{ matrix.version }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -66,6 +67,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: llmobs-${{ github.job }} + dd_api_key: ${{ secrets.DD_API_KEY }} - if: always() uses: ./.github/actions/testagent/logs with: @@ -94,6 +96,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: llmobs-${{ github.job }} + dd_api_key: ${{ secrets.DD_API_KEY }} - if: always() uses: ./.github/actions/testagent/logs with: @@ -120,6 +123,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: llmobs-${{ github.job }} + dd_api_key: ${{ secrets.DD_API_KEY }} - if: always() uses: ./.github/actions/testagent/logs with: @@ -148,6 +152,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: llmobs-${{ github.job }} + dd_api_key: ${{ secrets.DD_API_KEY }} - if: always() uses: ./.github/actions/testagent/logs with: @@ -176,6 +181,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: llmobs-${{ github.job }} + dd_api_key: ${{ secrets.DD_API_KEY }} - if: always() uses: ./.github/actions/testagent/logs with: @@ -204,6 +210,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: llmobs-${{ github.job }} + dd_api_key: ${{ secrets.DD_API_KEY }} - if: always() uses: ./.github/actions/testagent/logs with: @@ -232,6 +239,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: llmobs-${{ github.job }} + dd_api_key: ${{ secrets.DD_API_KEY }} - if: always() uses: ./.github/actions/testagent/logs with: diff --git a/.github/workflows/openfeature.yml b/.github/workflows/openfeature.yml index 0b6bad6947..a8b5e3aa66 100644 --- a/.github/workflows/openfeature.yml +++ b/.github/workflows/openfeature.yml @@ -36,6 +36,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: openfeature-unit-${{ matrix.version }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: diff --git a/.github/workflows/platform.yml b/.github/workflows/platform.yml index 500c8046d2..33893761c8 100644 --- a/.github/workflows/platform.yml +++ b/.github/workflows/platform.yml @@ -88,6 +88,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: platform-core + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -115,6 +116,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: platform-esbuild + dd_api_key: ${{ secrets.DD_API_KEY }} instrumentation-bluebird: runs-on: ubuntu-latest @@ -240,6 +242,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: instrumentations-${{ github.job }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -420,6 +423,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: platform-instrumentations-misc + dd_api_key: ${{ secrets.DD_API_KEY }} - if: always() uses: ./.github/actions/testagent/logs with: @@ -465,6 +469,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: platform-unit-guardrails + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -523,6 +528,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: platform-shimmer + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: diff --git a/.github/workflows/profiling.yml b/.github/workflows/profiling.yml index 182588fd94..90e5383585 100644 --- a/.github/workflows/profiling.yml +++ b/.github/workflows/profiling.yml @@ -34,6 +34,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: profiling-macos + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -60,6 +61,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: profiling-ubuntu + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -79,6 +81,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: profiling-windows + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: diff --git a/.github/workflows/serverless.yml b/.github/workflows/serverless.yml index ca666e1e28..18ed56e1fa 100644 --- a/.github/workflows/serverless.yml +++ b/.github/workflows/serverless.yml @@ -43,6 +43,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: serverless-lambda + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -119,6 +120,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: serverless-aws-sdk-${{ matrix.node-version }}-${{ matrix.spec }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: @@ -220,6 +222,7 @@ jobs: - uses: ./.github/actions/coverage with: flags: serverless-azure-functions-${{ matrix.spec }} + dd_api_key: ${{ secrets.DD_API_KEY }} - uses: ./.github/actions/push_to_test_optimization if: "!cancelled()" with: From 4665a0bc57c81e9f0e5e2f9603fcfa998bcb3206 Mon Sep 17 00:00:00 2001 From: simon-id Date: Mon, 23 Mar 2026 18:43:20 +0100 Subject: [PATCH 09/15] maxActiveRequest use payload size (#7794) --- .../dd-trace/src/exporters/common/request.js | 43 +++++++++------- .../test/exporters/common/request.spec.js | 50 +++++++++++++++++++ 2 files changed, 76 insertions(+), 17 deletions(-) diff --git a/packages/dd-trace/src/exporters/common/request.js b/packages/dd-trace/src/exporters/common/request.js index fe9986fbba..f21daa0de5 100644 --- a/packages/dd-trace/src/exporters/common/request.js +++ b/packages/dd-trace/src/exporters/common/request.js @@ -14,9 +14,9 @@ const { urlToHttpOptions } = require('./url-to-http-options-polyfill') const docker = require('./docker') const { httpAgent, httpsAgent } = require('./agents') -const maxActiveRequests = 8 +const maxActiveBufferSize = 1024 * 1024 * 64 -let activeRequests = 0 +let activeBufferSize = 0 function parseUrl (urlObjOrString) { if (urlObjOrString !== null && typeof urlObjOrString === 'object') return urlToHttpOptions(urlObjOrString) @@ -50,7 +50,22 @@ function request (data, options, callback) { } } - const isReadable = data instanceof Readable + if (data instanceof Readable) { + const chunks = [] + + data + .on('data', (data) => { + chunks.push(data) + }) + .on('end', () => { + request(Buffer.concat(chunks), options, callback) + }) + .on('error', (err) => { + callback(err) + }) + + return + } // The timeout should be kept low to avoid excessive queueing. const timeout = options.timeout || 2000 @@ -58,12 +73,10 @@ function request (data, options, callback) { const client = isSecure ? https : http let dataArray = data - if (!isReadable) { - if (!Array.isArray(data)) { - dataArray = [data] - } - options.headers['Content-Length'] = byteLength(dataArray) + if (!Array.isArray(data)) { + dataArray = [data] } + options.headers['Content-Length'] = byteLength(dataArray) docker.inject(options.headers) @@ -126,14 +139,14 @@ function request (data, options, callback) { return callback(null) } - activeRequests++ + activeBufferSize += options.headers['Content-Length'] ?? 0 storage('legacy').run({ noop: true }, () => { let finished = false const finalize = () => { if (finished) return finished = true - activeRequests-- + activeBufferSize -= options.headers['Content-Length'] ?? 0 } const req = client.request(options, (res) => onResponse(res, finalize)) @@ -158,12 +171,8 @@ function request (data, options, callback) { } }) - if (isReadable) { - data.pipe(req) // TODO: Validate whether this is actually retriable. - } else { - for (const buffer of dataArray) req.write(buffer) - req.end() - } + for (const buffer of dataArray) req.write(buffer) + req.end() }) } @@ -183,7 +192,7 @@ function byteLength (data) { Object.defineProperty(request, 'writable', { get () { - return activeRequests < maxActiveRequests + return activeBufferSize < maxActiveBufferSize }, }) diff --git a/packages/dd-trace/test/exporters/common/request.spec.js b/packages/dd-trace/test/exporters/common/request.spec.js index a82334cb95..63d6cdad6e 100644 --- a/packages/dd-trace/test/exporters/common/request.spec.js +++ b/packages/dd-trace/test/exporters/common/request.spec.js @@ -3,6 +3,7 @@ const assert = require('node:assert/strict') const http = require('node:http') const zlib = require('node:zlib') +const stream = require('node:stream') const { describe, it, beforeEach, afterEach } = require('mocha') const sinon = require('sinon') @@ -434,4 +435,53 @@ describe('request', function () { }) }) }) + + it('should drop requests when too much data is buffered', (done) => { + const bufferSize = 8 * 1024 * 1024 + const buffer = Buffer.alloc(bufferSize).fill(69) + + nock('http://test:123', { + reqheaders: { + 'content-type': 'application/octet-stream', + 'content-length': bufferSize, + }, + }) + .put('/path') + .times(10) + .reply(200, 'OK') + + let okCount = 0 + let koCount = 0 + + for (let i = 0; i < 10; i++) { + request( + stream.Readable.from(buffer), + { + protocol: 'http:', + hostname: 'test', + port: 123, + path: '/path', + method: 'PUT', + headers: { + 'Content-Type': 'application/octet-stream', + }, + }, + (err, res) => { + if (err) return done(err) + + if (res) { + assert.strictEqual(res, 'OK') + okCount++ + } else { + koCount++ + } + + if (okCount + koCount === 10) { + assert.strictEqual(okCount, 8) + assert.strictEqual(koCount, 2) + done() + } + }) + } + }) }) From 692a96333a2631019c309cd09f19f8e2d17f047e Mon Sep 17 00:00:00 2001 From: pablomartinezbernardo <134320516+pablomartinezbernardo@users.noreply.github.com> Date: Tue, 24 Mar 2026 09:06:52 +0100 Subject: [PATCH 10/15] Cleanup peerServerless on aws request complete (#7842) --- packages/datadog-plugin-aws-sdk/src/base.js | 5 +++ .../test/serverless-peer-service.spec.js | 45 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/packages/datadog-plugin-aws-sdk/src/base.js b/packages/datadog-plugin-aws-sdk/src/base.js index 9303a80764..da8e40a56f 100644 --- a/packages/datadog-plugin-aws-sdk/src/base.js +++ b/packages/datadog-plugin-aws-sdk/src/base.js @@ -154,6 +154,11 @@ class BaseAwsSdkPlugin extends ClientPlugin { }) this.finish(ctx) + + if (IS_SERVERLESS) { + const peerStore = storage('peerServerless').getStore() + if (peerStore) delete peerStore.peerHostname + } }) this.addBind(`apm:aws:response:start:${this.serviceIdentifier}`, ctx => { diff --git a/packages/datadog-plugin-aws-sdk/test/serverless-peer-service.spec.js b/packages/datadog-plugin-aws-sdk/test/serverless-peer-service.spec.js index 672c5e4328..346fc7b731 100644 --- a/packages/datadog-plugin-aws-sdk/test/serverless-peer-service.spec.js +++ b/packages/datadog-plugin-aws-sdk/test/serverless-peer-service.spec.js @@ -79,6 +79,51 @@ describe('Plugin', () => { }), ]) }) + + it('does not leak DynamoDB peer.service to subsequent unrelated HTTP spans', async () => { + const http = require('http') + + const server = http.createServer((req, res) => res.end('ok')) + await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve)) + const port = server.address().port + + try { + const send = toPromise(dynamo, dynamo.putItem) + const allSpans = [] + const peerService = 'dynamodb.us-east-1.amazonaws.com' + + const tracesPromise = agent.assertSomeTraces(traces => { + allSpans.push(...traces.flat()) + assert.ok(allSpans.find(s => s.name === 'aws.request'), 'expected aws.request span') + assert.ok( + allSpans.find(s => s.name === 'http.request' && s.meta['http.url']?.includes('/unrelated')), + 'expected unrelated http.request span' + ) + }, { timeoutMs: 15000 }) + + await send({ TableName: tableName, Item: { id: { S: 'leak-test' } } }) + + await new Promise((resolve, reject) => { + http.get(`http://127.0.0.1:${port}/unrelated`, (res) => { + res.on('data', () => {}) + res.on('end', resolve) + }).on('error', reject) + }) + + await tracesPromise + + const unrelatedHttpSpan = allSpans.find( + s => s.name === 'http.request' && s.meta['http.url']?.includes('/unrelated') + ) + assert.notStrictEqual( + unrelatedHttpSpan.meta['peer.service'], + peerService, + 'unrelated HTTP span should not inherit DynamoDB peer.service' + ) + } finally { + server.close() + } + }) }) describe('Kinesis-Serverless', () => { From 1c7df6eb7d35e6c96a0f6273f905e5e7952cd8d4 Mon Sep 17 00:00:00 2001 From: moezein0 <169095174+moezein0@users.noreply.github.com> Date: Wed, 25 Mar 2026 12:08:57 -0400 Subject: [PATCH 11/15] chore: disable automated dependency updater config [incident-51602] (#7859) Signed-off-by: Moe Zein --- .github/{dependabot.yml => dependabot.yml.disabled} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{dependabot.yml => dependabot.yml.disabled} (100%) diff --git a/.github/dependabot.yml b/.github/dependabot.yml.disabled similarity index 100% rename from .github/dependabot.yml rename to .github/dependabot.yml.disabled From e914ffa9023c623a61f35a3a9226616017d59d57 Mon Sep 17 00:00:00 2001 From: Thomas Hunter II Date: Wed, 25 Mar 2026 10:13:56 -0700 Subject: [PATCH 12/15] feat(process-discovery): include process_tags and container_id, disable crashtracker ARM64 musl (#7816) --------- Co-authored-by: Claude Opus 4.6 (1M context) --- package.json | 2 +- packages/dd-trace/src/crashtracking/index.js | 8 +- .../dd-trace/src/exporters/common/docker.js | 1 + packages/dd-trace/src/tracer_metadata.js | 11 +- .../dd-trace/test/tracer_metadata.spec.js | 123 ++++++++++++++++++ yarn.lock | 8 +- 6 files changed, 146 insertions(+), 7 deletions(-) create mode 100644 packages/dd-trace/test/tracer_metadata.spec.js diff --git a/package.json b/package.json index 540384bf3d..de52cecaa9 100644 --- a/package.json +++ b/package.json @@ -138,7 +138,7 @@ "import-in-the-middle": "^3.0.0" }, "optionalDependencies": { - "@datadog/libdatadog": "0.8.1", + "@datadog/libdatadog": "0.9.2", "@datadog/native-appsec": "11.0.1", "@datadog/native-iast-taint-tracking": "4.1.0", "@datadog/native-metrics": "3.1.1", diff --git a/packages/dd-trace/src/crashtracking/index.js b/packages/dd-trace/src/crashtracking/index.js index 2ba38e7265..5addf3864e 100644 --- a/packages/dd-trace/src/crashtracking/index.js +++ b/packages/dd-trace/src/crashtracking/index.js @@ -1,9 +1,15 @@ 'use strict' +const { existsSync } = require('node:fs') const { isMainThread } = require('worker_threads') const log = require('../log') -if (isMainThread) { +// libdatadog v29 crashtracker segfaults during init on ARM64 musl (Alpine). +// The segfault bypasses JS try/catch so we must avoid loading it entirely. +// See: https://github.com/DataDog/libdatadog-nodejs/issues/114 +const isArm64Musl = process.arch === 'arm64' && existsSync('/etc/alpine-release') + +if (isMainThread && !isArm64Musl) { try { module.exports = require('./crashtracker') } catch (e) { diff --git a/packages/dd-trace/src/exporters/common/docker.js b/packages/dd-trace/src/exporters/common/docker.js index fd3700c19c..311b9581ca 100644 --- a/packages/dd-trace/src/exporters/common/docker.js +++ b/packages/dd-trace/src/exporters/common/docker.js @@ -35,6 +35,7 @@ if (inodePath) { const entityId = containerId ? `ci-${containerId}` : inode && `in-${inode}` module.exports = { + containerId, entityId, inject (carrier) { diff --git a/packages/dd-trace/src/tracer_metadata.js b/packages/dd-trace/src/tracer_metadata.js index 3226f8cf59..9a780cdf75 100644 --- a/packages/dd-trace/src/tracer_metadata.js +++ b/packages/dd-trace/src/tracer_metadata.js @@ -11,13 +11,22 @@ function storeConfig (config) { return } + const { containerId } = require('./exporters/common/docker') + const processTags = require('./process-tags') + + const processTagsSerialized = config.propagateProcessTags?.enabled + ? (processTags.serialized || null) + : null + const metadata = new processDiscovery.TracerMetadata( config.tags['runtime-id'], tracerVersion, config.hostname, config.service || null, config.env || null, - config.version || null + config.version || null, + processTagsSerialized, + containerId || null ) return processDiscovery.storeMetadata(metadata) diff --git a/packages/dd-trace/test/tracer_metadata.spec.js b/packages/dd-trace/test/tracer_metadata.spec.js new file mode 100644 index 0000000000..90b38205fc --- /dev/null +++ b/packages/dd-trace/test/tracer_metadata.spec.js @@ -0,0 +1,123 @@ +'use strict' + +const assert = require('node:assert/strict') +const { describe, it, beforeEach, afterEach } = require('mocha') +const proxyquire = require('proxyquire') +const sinon = require('sinon') + +describe('tracer_metadata', () => { + let storeConfig + let storeMetadataStub + let TracerMetadataStub + let processDiscoveryStub + let libdatadogStub + let dockerStub + let processTagsStub + + const baseConfig = { + tags: { 'runtime-id': 'test-runtime-id' }, + hostname: 'test-host', + service: 'test-service', + env: 'test-env', + version: '1.0.0', + propagateProcessTags: { enabled: false }, + } + + beforeEach(() => { + storeMetadataStub = sinon.stub().returns({ handle: 'mock-handle' }) + TracerMetadataStub = sinon.stub() + + processDiscoveryStub = { + TracerMetadata: TracerMetadataStub, + storeMetadata: storeMetadataStub, + } + + libdatadogStub = { + maybeLoad: sinon.stub().withArgs('process-discovery').returns(processDiscoveryStub), + } + + dockerStub = { containerId: undefined } + processTagsStub = { serialized: 'tag1:val1,tag2:val2' } + + storeConfig = proxyquire('../src/tracer_metadata', { + '@datadog/libdatadog': libdatadogStub, + './exporters/common/docker': dockerStub, + './process-tags': processTagsStub, + }) + }) + + afterEach(() => { + sinon.restore() + }) + + it('calls storeMetadata with correct base fields', () => { + storeConfig(baseConfig) + + sinon.assert.calledOnce(TracerMetadataStub) + const args = TracerMetadataStub.firstCall.args + assert.strictEqual(args[0], 'test-runtime-id') + assert.strictEqual(args[2], 'test-host') + assert.strictEqual(args[3], 'test-service') + assert.strictEqual(args[4], 'test-env') + assert.strictEqual(args[5], '1.0.0') + + sinon.assert.calledOnce(storeMetadataStub) + }) + + it('passes null for process_tags when propagateProcessTags is disabled', () => { + storeConfig({ ...baseConfig, propagateProcessTags: { enabled: false } }) + + const args = TracerMetadataStub.firstCall.args + assert.strictEqual(args[6], null) + }) + + it('passes serialized process tags when propagateProcessTags is enabled', () => { + storeConfig({ ...baseConfig, propagateProcessTags: { enabled: true } }) + + const args = TracerMetadataStub.firstCall.args + assert.strictEqual(args[6], 'tag1:val1,tag2:val2') + }) + + it('passes container_id when available', () => { + dockerStub.containerId = 'abc123container' + + storeConfig(baseConfig) + + const args = TracerMetadataStub.firstCall.args + assert.strictEqual(args[7], 'abc123container') + }) + + it('passes null for container_id when not in a container', () => { + dockerStub.containerId = undefined + + storeConfig(baseConfig) + + const args = TracerMetadataStub.firstCall.args + assert.strictEqual(args[7], null) + }) + + it('passes null for service when config.service is falsy', () => { + storeConfig({ ...baseConfig, service: undefined }) + + const args = TracerMetadataStub.firstCall.args + assert.strictEqual(args[3], null) + }) + + it('returns undefined and does not throw when process-discovery is unavailable', () => { + libdatadogStub.maybeLoad.returns(undefined) + + const result = storeConfig(baseConfig) + assert.strictEqual(result, undefined) + }) + + it('returns undefined and does not throw when libdatadog throws', () => { + const storeConfigWithThrow = proxyquire('../src/tracer_metadata', { + '@datadog/libdatadog': { maybeLoad: () => { throw new Error('load error') } }, + './exporters/common/docker': dockerStub, + './process-tags': processTagsStub, + }) + + const result = storeConfigWithThrow(baseConfig) + assert.strictEqual(result, undefined) + }) +}) diff --git a/yarn.lock b/yarn.lock index 0c077ff9e6..eb3d8574f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -197,10 +197,10 @@ dependencies: spark-md5 "^3.0.2" -"@datadog/libdatadog@0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@datadog/libdatadog/-/libdatadog-0.8.1.tgz#370c7aaf03102399740dcdee52c118da41847c1f" - integrity sha512-WeWPw24cVRmEWfRRw3+h4k7f8mf9vbWEq6MYg1eOd+FycG7q4LaV8/uKROWoKFoD6ScoNvZXxOjKHW3AdYgM+A== +"@datadog/libdatadog@0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@datadog/libdatadog/-/libdatadog-0.9.2.tgz#d7a0193ab656bd9cc40649f300ef6c54d9bea52d" + integrity sha512-grOerTYuU3wHuFIOBGg3jB144A3KEthEdVEL3meeiXYo7E7fBXXGRgAOwVE42VXFXfl0r8kDKCL7KupBc511tg== "@datadog/native-appsec@11.0.1": version "11.0.1" From 1a72ce5d61d5983fc9a1335084cae98e0d192604 Mon Sep 17 00:00:00 2001 From: Brian Marks Date: Wed, 25 Mar 2026 13:49:06 -0400 Subject: [PATCH 13/15] fix(tracing): format _dd.p.ksr with decimal notation instead of scientific notation (#7846) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(tracing): format _dd.p.ksr with decimal notation instead of scientific notation Very small sampling rates (e.g. 0.0000001) were formatted using toPrecision(6) + toString() which outputs scientific notation like "1e-7". This changes to explicit rounding at the integer level and toFixed(6) formatting to always produce decimal notation with up to 6 decimal digits, trailing zeros stripped (e.g. "0.000001"). Fixes APMAPI-1869 Co-Authored-By: Claude Opus 4.6 (1M context) * fix(tracing): replace regex with loop in formatKnuthRate for hot-path perf Addresses PR review feedback: replaces the regex-based trailing-zero strip with a manual loop to avoid regex overhead on the hot path. Also adds Number() coercion as defensive measure per reviewer suggestion. Math.round pre-rounding is intentionally kept — toFixed(6) has imprecise rounding for sub-precision values in V8 (e.g. 0.0000005.toFixed(6) returns '0.000000' in Node 23). JSDoc updated to explain this. Co-Authored-By: Claude Sonnet 4.6 * fix(tracing): simplify formatKnuthRate loop per review feedback Drop Math.round pre-rounding — the edge case (0.0000005 rounding down in V8) is acceptable imprecision. Test updated to use 0.00000051 which rounds up unambiguously without Math.round. Drop indexOf('.') — check for '.' directly in the loop instead, which handles integer rates (0, 1) without the overhead of a separate scan. Co-Authored-By: Claude Sonnet 4.6 * Update packages/dd-trace/src/priority_sampler.js Co-authored-by: Ruben Bridgewater * fix(tracing): resolve lint errors in formatKnuthRate - Flip negated conditions to positive checks (unicorn/no-negated-condition) - Remove @returns tag since linter can't statically verify loop always returns (jsdoc/require-returns-check) - Preserve BridgeAR's single-check-per-iteration optimization Co-Authored-By: Claude Opus 4.6 (1M context) --------- Co-authored-by: Claude Opus 4.6 (1M context) Co-authored-by: Ruben Bridgewater --- packages/dd-trace/src/priority_sampler.js | 9 +++-- .../dd-trace/test/priority_sampler.spec.js | 39 +++++++++++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/packages/dd-trace/src/priority_sampler.js b/packages/dd-trace/src/priority_sampler.js index 4e586bc6a9..6edfc39c81 100644 --- a/packages/dd-trace/src/priority_sampler.js +++ b/packages/dd-trace/src/priority_sampler.js @@ -37,13 +37,16 @@ const { const DEFAULT_KEY = 'service:,env:' /** - * Formats a sampling rate as a string with up to 6 significant digits and no trailing zeros. + * Formats a sampling rate as a string with up to 6 decimal digits and no trailing zeros. * * @param {number} rate - * @returns {string} */ function formatKnuthRate (rate) { - return Number(rate.toPrecision(6)).toString() + const string = Number(rate).toFixed(6) + for (let i = string.length - 1; i > 0; i--) { + if (string[i] === '0') continue + return string.slice(0, i + (string[i] === '.' ? 0 : 1)) + } } const defaultSampler = new Sampler(AUTO_KEEP) diff --git a/packages/dd-trace/test/priority_sampler.spec.js b/packages/dd-trace/test/priority_sampler.spec.js index 39bbf2f153..7e2c821b01 100644 --- a/packages/dd-trace/test/priority_sampler.spec.js +++ b/packages/dd-trace/test/priority_sampler.spec.js @@ -421,6 +421,45 @@ describe('PrioritySampler', () => { assert.strictEqual(typeof context._trace.tags[SAMPLING_KNUTH_RATE], 'string') }) + it('should format _dd.p.ksr with decimal notation for very small rates', () => { + Sampler.withArgs(0.000001).returns({ + isSampled: sinon.stub().returns(true), + rate: sinon.stub().returns(0.000001), + }) + prioritySampler = new PrioritySampler('test', { + sampleRate: 0.000001, + }) + prioritySampler.sample(span) + + assert.strictEqual(context._trace.tags[SAMPLING_KNUTH_RATE], '0.000001') + }) + + it('should round _dd.p.ksr to zero when rate is below 6 decimal precision', () => { + Sampler.withArgs(0.0000001).returns({ + isSampled: sinon.stub().returns(true), + rate: sinon.stub().returns(0.0000001), + }) + prioritySampler = new PrioritySampler('test', { + sampleRate: 0.0000001, + }) + prioritySampler.sample(span) + + assert.strictEqual(context._trace.tags[SAMPLING_KNUTH_RATE], '0') + }) + + it('should round _dd.p.ksr up to 0.000001 when rate rounds up', () => { + Sampler.withArgs(0.00000051).returns({ + isSampled: sinon.stub().returns(true), + rate: sinon.stub().returns(0.00000051), + }) + prioritySampler = new PrioritySampler('test', { + sampleRate: 0.00000051, + }) + prioritySampler.sample(span) + + assert.strictEqual(context._trace.tags[SAMPLING_KNUTH_RATE], '0.000001') + }) + it('should not set _dd.p.ksr tag for manual sampling', () => { context._tags[MANUAL_KEEP] = undefined From 4807915df833a7edeac8b42c5487ca0917d84a5d Mon Sep 17 00:00:00 2001 From: Thomas Hunter II Date: Wed, 25 Mar 2026 11:04:33 -0700 Subject: [PATCH 14/15] feat(config): enable process tags by default (#7850) Process tags are now enabled by default via DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED. Users can still disable them by setting the environment variable to "false". Co-authored-by: Claude Opus 4.6 (1M context) --- .../dd-trace/src/config/supported-configurations.json | 4 ++-- packages/dd-trace/test/process-tags.spec.js | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/dd-trace/src/config/supported-configurations.json b/packages/dd-trace/src/config/supported-configurations.json index c3fa3368af..5bca7736dc 100644 --- a/packages/dd-trace/src/config/supported-configurations.json +++ b/packages/dd-trace/src/config/supported-configurations.json @@ -744,9 +744,9 @@ ], "DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED": [ { - "implementation": "A", + "implementation": "B", "type": "boolean", - "default": "false", + "default": "true", "configurationNames": [ "propagateProcessTags.enabled" ] diff --git a/packages/dd-trace/test/process-tags.spec.js b/packages/dd-trace/test/process-tags.spec.js index b35d7c6158..facfc7e636 100644 --- a/packages/dd-trace/test/process-tags.spec.js +++ b/packages/dd-trace/test/process-tags.spec.js @@ -302,19 +302,21 @@ describe('process-tags', () => { assert.strictEqual(processor._processTags, false) }) - it('should disable process tags propagation when not set', () => { - // Don't set the environment variable + it('should enable process tags propagation when not set', () => { + // Don't set the environment variable — default is enabled const config = getConfigFresh() const processTagsModule = require('../src/process-tags') processTagsModule.initialize() - assert.notStrictEqual(config.propagateProcessTags?.enabled, true) + assert.ok(config.propagateProcessTags) + assert.strictEqual(config.propagateProcessTags.enabled, true) SpanProcessor = require('../src/span_processor') const processor = new SpanProcessor(undefined, undefined, config) - assert.strictEqual(processor._processTags, false) + assert.ok(typeof processor._processTags === 'string') + assert.match(processor._processTags, /entrypoint/) }) }) }) From 7ec31e28651b111230a65e7c01b23982025fd6a8 Mon Sep 17 00:00:00 2001 From: rochdev Date: Thu, 26 Mar 2026 05:36:19 +0000 Subject: [PATCH 15/15] v5.93.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index de52cecaa9..9d151a2d62 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dd-trace", - "version": "5.92.0", + "version": "5.93.0", "description": "Datadog APM tracing client for JavaScript", "main": "index.js", "typings": "index.d.ts",