dd-trace 4.36.0 → 4.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ci/init.js +7 -0
- package/ext/exporters.d.ts +2 -1
- package/ext/exporters.js +2 -1
- package/index.d.ts +14 -6
- package/package.json +4 -4
- package/packages/datadog-esbuild/index.js +8 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +4 -1
- package/packages/datadog-instrumentations/src/cucumber.js +182 -105
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
- package/packages/datadog-instrumentations/src/lodash.js +31 -0
- package/packages/datadog-instrumentations/src/playwright.js +6 -1
- package/packages/datadog-plugin-aws-sdk/src/services/index.js +3 -0
- package/packages/datadog-plugin-aws-sdk/src/services/sfn.js +7 -0
- package/packages/datadog-plugin-aws-sdk/src/services/states.js +7 -0
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +64 -0
- package/packages/datadog-plugin-cucumber/src/index.js +83 -11
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/taint-tracking/csi-methods.js +3 -0
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +10 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +55 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/hardcoded-password-analyzer.js +13 -0
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +8 -2
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +6 -6
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +56 -0
- package/packages/dd-trace/src/ci-visibility/exporters/{jest-worker → test-worker}/writer.js +7 -0
- package/packages/dd-trace/src/config.js +7 -0
- package/packages/dd-trace/src/exporter.js +2 -1
- package/packages/dd-trace/src/plugins/database.js +20 -5
- package/packages/dd-trace/src/plugins/util/test.js +7 -0
- package/packages/dd-trace/src/telemetry/index.js +9 -3
- package/packages/dd-trace/src/ci-visibility/exporters/jest-worker/index.js +0 -33
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const StoragePlugin = require('./storage')
|
|
4
|
-
const { PEER_SERVICE_KEY } = require('../constants')
|
|
4
|
+
const { PEER_SERVICE_KEY, PEER_SERVICE_SOURCE_KEY } = require('../constants')
|
|
5
5
|
|
|
6
6
|
class DatabasePlugin extends StoragePlugin {
|
|
7
7
|
static get operation () { return 'query' }
|
|
@@ -28,16 +28,31 @@ class DatabasePlugin extends StoragePlugin {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
createDBMPropagationCommentService (serviceName) {
|
|
31
|
+
createDBMPropagationCommentService (serviceName, span) {
|
|
32
32
|
this.encodingServiceTags('dddbs', 'encodedDddbs', serviceName)
|
|
33
33
|
this.encodingServiceTags('dde', 'encodedDde', this.tracer._env)
|
|
34
34
|
this.encodingServiceTags('ddps', 'encodedDdps', this.tracer._service)
|
|
35
35
|
this.encodingServiceTags('ddpv', 'encodedDdpv', this.tracer._version)
|
|
36
|
+
if (span.context()._tags['out.host']) {
|
|
37
|
+
this.encodingServiceTags('ddh', 'encodedDdh', span._spanContext._tags['out.host'])
|
|
38
|
+
}
|
|
39
|
+
if (span.context()._tags['db.name']) {
|
|
40
|
+
this.encodingServiceTags('dddb', 'encodedDddb', span._spanContext._tags['db.name'])
|
|
41
|
+
}
|
|
36
42
|
|
|
37
|
-
const { encodedDddbs, encodedDde, encodedDdps, encodedDdpv } = this.serviceTags
|
|
43
|
+
const { encodedDddb, encodedDddbs, encodedDde, encodedDdh, encodedDdps, encodedDdpv } = this.serviceTags
|
|
38
44
|
|
|
39
|
-
|
|
45
|
+
let dbmComment = `dddb='${encodedDddb}',dddbs='${encodedDddbs}',dde='${encodedDde}',ddh='${encodedDdh}',` +
|
|
40
46
|
`ddps='${encodedDdps}',ddpv='${encodedDdpv}'`
|
|
47
|
+
|
|
48
|
+
const peerData = this.getPeerService(span.context()._tags)
|
|
49
|
+
if (peerData !== undefined && peerData[PEER_SERVICE_SOURCE_KEY] === PEER_SERVICE_KEY) {
|
|
50
|
+
this.encodingServiceTags('ddprs', 'encodedDdprs', peerData[PEER_SERVICE_KEY])
|
|
51
|
+
|
|
52
|
+
const { encodedDdprs } = this.serviceTags
|
|
53
|
+
dbmComment += `,ddprs='${encodedDdprs}'`
|
|
54
|
+
}
|
|
55
|
+
return dbmComment
|
|
41
56
|
}
|
|
42
57
|
|
|
43
58
|
getDbmServiceName (span, tracerService) {
|
|
@@ -56,7 +71,7 @@ class DatabasePlugin extends StoragePlugin {
|
|
|
56
71
|
return query
|
|
57
72
|
}
|
|
58
73
|
|
|
59
|
-
const servicePropagation = this.createDBMPropagationCommentService(dbmService)
|
|
74
|
+
const servicePropagation = this.createDBMPropagationCommentService(dbmService, span)
|
|
60
75
|
|
|
61
76
|
if (isPreparedStatement || mode === 'service') {
|
|
62
77
|
return `/*${servicePropagation}*/ ${query}`
|
|
@@ -61,6 +61,8 @@ const CI_APP_ORIGIN = 'ciapp-test'
|
|
|
61
61
|
const JEST_TEST_RUNNER = 'test.jest.test_runner'
|
|
62
62
|
const JEST_DISPLAY_NAME = 'test.jest.display_name'
|
|
63
63
|
|
|
64
|
+
const CUCUMBER_IS_PARALLEL = 'test.cucumber.is_parallel'
|
|
65
|
+
|
|
64
66
|
const TEST_ITR_TESTS_SKIPPED = '_dd.ci.itr.tests_skipped'
|
|
65
67
|
const TEST_ITR_SKIPPING_ENABLED = 'test.itr.tests_skipping.enabled'
|
|
66
68
|
const TEST_ITR_SKIPPING_TYPE = 'test.itr.tests_skipping.type'
|
|
@@ -82,6 +84,9 @@ const TEST_BROWSER_VERSION = 'test.browser.version'
|
|
|
82
84
|
const JEST_WORKER_TRACE_PAYLOAD_CODE = 60
|
|
83
85
|
const JEST_WORKER_COVERAGE_PAYLOAD_CODE = 61
|
|
84
86
|
|
|
87
|
+
// cucumber worker variables
|
|
88
|
+
const CUCUMBER_WORKER_TRACE_PAYLOAD_CODE = 70
|
|
89
|
+
|
|
85
90
|
// Early flake detection util strings
|
|
86
91
|
const EFD_STRING = "Retried by Datadog's Early Flake Detection"
|
|
87
92
|
const EFD_TEST_NAME_REGEX = new RegExp(EFD_STRING + ' \\(#\\d+\\): ', 'g')
|
|
@@ -92,6 +97,7 @@ module.exports = {
|
|
|
92
97
|
TEST_FRAMEWORK_VERSION,
|
|
93
98
|
JEST_TEST_RUNNER,
|
|
94
99
|
JEST_DISPLAY_NAME,
|
|
100
|
+
CUCUMBER_IS_PARALLEL,
|
|
95
101
|
TEST_TYPE,
|
|
96
102
|
TEST_NAME,
|
|
97
103
|
TEST_SUITE,
|
|
@@ -104,6 +110,7 @@ module.exports = {
|
|
|
104
110
|
LIBRARY_VERSION,
|
|
105
111
|
JEST_WORKER_TRACE_PAYLOAD_CODE,
|
|
106
112
|
JEST_WORKER_COVERAGE_PAYLOAD_CODE,
|
|
113
|
+
CUCUMBER_WORKER_TRACE_PAYLOAD_CODE,
|
|
107
114
|
TEST_SOURCE_START,
|
|
108
115
|
TEST_SKIPPED_BY_ITR,
|
|
109
116
|
TEST_CONFIGURATION_BROWSER_NAME,
|
|
@@ -6,7 +6,8 @@ const dependencies = require('./dependencies')
|
|
|
6
6
|
const { sendData } = require('./send-data')
|
|
7
7
|
const { errors } = require('../startup-log')
|
|
8
8
|
const { manager: metricsManager } = require('./metrics')
|
|
9
|
-
const
|
|
9
|
+
const telemetryLogger = require('./logs')
|
|
10
|
+
const logger = require('../log')
|
|
10
11
|
|
|
11
12
|
const telemetryStartChannel = dc.channel('datadog:telemetry:start')
|
|
12
13
|
const telemetryStopChannel = dc.channel('datadog:telemetry:stop')
|
|
@@ -211,7 +212,7 @@ function createPayload (currReqType, currPayload = {}) {
|
|
|
211
212
|
function heartbeat (config, application, host) {
|
|
212
213
|
heartbeatTimeout = setTimeout(() => {
|
|
213
214
|
metricsManager.send(config, application, host)
|
|
214
|
-
|
|
215
|
+
telemetryLogger.send(config, application, host)
|
|
215
216
|
|
|
216
217
|
const { reqType, payload } = createPayload('app-heartbeat')
|
|
217
218
|
sendData(config, application, host, reqType, payload, updateRetryData)
|
|
@@ -235,6 +236,10 @@ function extendedHeartbeat (config) {
|
|
|
235
236
|
|
|
236
237
|
function start (aConfig, thePluginManager) {
|
|
237
238
|
if (!aConfig.telemetry.enabled) {
|
|
239
|
+
if (aConfig.sca?.enabled) {
|
|
240
|
+
logger.warn('DD_APPSEC_SCA_ENABLED requires enabling telemetry to work.')
|
|
241
|
+
}
|
|
242
|
+
|
|
238
243
|
return
|
|
239
244
|
}
|
|
240
245
|
config = aConfig
|
|
@@ -245,7 +250,7 @@ function start (aConfig, thePluginManager) {
|
|
|
245
250
|
integrations = getIntegrations()
|
|
246
251
|
|
|
247
252
|
dependencies.start(config, application, host, getRetryData, updateRetryData)
|
|
248
|
-
|
|
253
|
+
telemetryLogger.start(config)
|
|
249
254
|
|
|
250
255
|
sendData(config, application, host, 'app-started', appStarted(config))
|
|
251
256
|
|
|
@@ -318,6 +323,7 @@ function updateConfig (changes, config) {
|
|
|
318
323
|
|
|
319
324
|
for (const change of changes) {
|
|
320
325
|
const name = nameMapping[change.name] || change.name
|
|
326
|
+
|
|
321
327
|
names.push(name)
|
|
322
328
|
const { origin, value } = change
|
|
323
329
|
const entry = { name, value, origin }
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const Writer = require('./writer')
|
|
4
|
-
const {
|
|
5
|
-
JEST_WORKER_COVERAGE_PAYLOAD_CODE,
|
|
6
|
-
JEST_WORKER_TRACE_PAYLOAD_CODE
|
|
7
|
-
} = require('../../../plugins/util/test')
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Lightweight exporter whose writers only do simple JSON serialization
|
|
11
|
-
* of trace and coverage payloads, which they send to the jest main process.
|
|
12
|
-
*/
|
|
13
|
-
class JestWorkerCiVisibilityExporter {
|
|
14
|
-
constructor () {
|
|
15
|
-
this._writer = new Writer(JEST_WORKER_TRACE_PAYLOAD_CODE)
|
|
16
|
-
this._coverageWriter = new Writer(JEST_WORKER_COVERAGE_PAYLOAD_CODE)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export (payload) {
|
|
20
|
-
this._writer.append(payload)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
exportCoverage (formattedCoverage) {
|
|
24
|
-
this._coverageWriter.append(formattedCoverage)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
flush () {
|
|
28
|
-
this._writer.flush()
|
|
29
|
-
this._coverageWriter.flush()
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
module.exports = JestWorkerCiVisibilityExporter
|