dd-trace 2.33.0 → 2.34.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/index.d.ts +8 -1
- package/package.json +4 -3
- package/packages/datadog-instrumentations/src/helpers/register.js +4 -0
- package/packages/datadog-instrumentations/src/jest.js +20 -17
- package/packages/datadog-instrumentations/src/next.js +6 -1
- package/packages/datadog-plugin-aws-sdk/src/base.js +3 -0
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +2 -1
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +4 -2
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +4 -3
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +2 -1
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -0
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +2 -1
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +2 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +8 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +7 -1
- package/packages/datadog-plugin-http/src/client.js +2 -1
- package/packages/datadog-plugin-http2/src/client.js +2 -1
- package/packages/datadog-plugin-jest/src/util.js +10 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +2 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +2 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +22 -5
- package/packages/dd-trace/src/appsec/iast/analyzers/sql-injection-analyzer.js +40 -4
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +2 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +2 -1
- package/packages/dd-trace/src/appsec/iast/index.js +1 -1
- package/packages/dd-trace/src/appsec/iast/path-line.js +2 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +37 -0
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +29 -0
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +35 -0
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +95 -0
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +144 -0
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +113 -0
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +8 -0
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +4 -76
- package/packages/dd-trace/src/config.js +58 -8
- package/packages/dd-trace/src/constants.js +3 -1
- package/packages/dd-trace/src/git_metadata_tagger.js +17 -0
- package/packages/dd-trace/src/git_properties.js +32 -0
- package/packages/dd-trace/src/plugins/util/ci.js +62 -7
- package/packages/dd-trace/src/plugins/util/tags.js +5 -1
- package/packages/dd-trace/src/profiling/constants.js +0 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +1 -3
- package/packages/dd-trace/src/proxy.js +4 -0
- package/packages/dd-trace/src/serverless.js +25 -0
- package/packages/dd-trace/src/span_processor.js +3 -0
- package/packages/dd-trace/src/tracer.js +3 -2
- package/version.js +9 -0
|
@@ -20,7 +20,9 @@ const {
|
|
|
20
20
|
CI_STAGE_NAME,
|
|
21
21
|
CI_ENV_VARS,
|
|
22
22
|
GIT_COMMIT_COMMITTER_NAME,
|
|
23
|
-
GIT_COMMIT_COMMITTER_EMAIL
|
|
23
|
+
GIT_COMMIT_COMMITTER_EMAIL,
|
|
24
|
+
CI_NODE_LABELS,
|
|
25
|
+
CI_NODE_NAME
|
|
24
26
|
} = require('./tags')
|
|
25
27
|
|
|
26
28
|
// Receives a string with the form 'John Doe <john.doe@gmail.com>'
|
|
@@ -108,7 +110,9 @@ module.exports = {
|
|
|
108
110
|
GIT_COMMIT: JENKINS_GIT_COMMIT,
|
|
109
111
|
GIT_URL: JENKINS_GIT_REPOSITORY_URL,
|
|
110
112
|
GIT_URL_1: JENKINS_GIT_REPOSITORY_URL_1,
|
|
111
|
-
DD_CUSTOM_TRACE_ID
|
|
113
|
+
DD_CUSTOM_TRACE_ID,
|
|
114
|
+
NODE_NAME,
|
|
115
|
+
NODE_LABELS
|
|
112
116
|
} = env
|
|
113
117
|
|
|
114
118
|
tags = {
|
|
@@ -119,7 +123,18 @@ module.exports = {
|
|
|
119
123
|
[GIT_COMMIT_SHA]: JENKINS_GIT_COMMIT,
|
|
120
124
|
[GIT_REPOSITORY_URL]: JENKINS_GIT_REPOSITORY_URL || JENKINS_GIT_REPOSITORY_URL_1,
|
|
121
125
|
[CI_WORKSPACE_PATH]: WORKSPACE,
|
|
122
|
-
[CI_ENV_VARS]: JSON.stringify({ DD_CUSTOM_TRACE_ID })
|
|
126
|
+
[CI_ENV_VARS]: JSON.stringify({ DD_CUSTOM_TRACE_ID }),
|
|
127
|
+
[CI_NODE_NAME]: NODE_NAME
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (NODE_LABELS) {
|
|
131
|
+
let nodeLabels
|
|
132
|
+
try {
|
|
133
|
+
nodeLabels = JSON.stringify(NODE_LABELS.split(' '))
|
|
134
|
+
tags[CI_NODE_LABELS] = nodeLabels
|
|
135
|
+
} catch (e) {
|
|
136
|
+
// ignore errors
|
|
137
|
+
}
|
|
123
138
|
}
|
|
124
139
|
|
|
125
140
|
const isTag = JENKINS_GIT_BRANCH && JENKINS_GIT_BRANCH.includes('tags/')
|
|
@@ -159,7 +174,9 @@ module.exports = {
|
|
|
159
174
|
CI_COMMIT_TIMESTAMP,
|
|
160
175
|
CI_COMMIT_AUTHOR,
|
|
161
176
|
CI_PROJECT_URL: GITLAB_PROJECT_URL,
|
|
162
|
-
CI_JOB_ID: GITLAB_CI_JOB_ID
|
|
177
|
+
CI_JOB_ID: GITLAB_CI_JOB_ID,
|
|
178
|
+
CI_RUNNER_ID,
|
|
179
|
+
CI_RUNNER_TAGS
|
|
163
180
|
} = env
|
|
164
181
|
|
|
165
182
|
const { name, email } = parseEmailAndName(CI_COMMIT_AUTHOR)
|
|
@@ -186,7 +203,9 @@ module.exports = {
|
|
|
186
203
|
CI_PROJECT_URL: GITLAB_PROJECT_URL,
|
|
187
204
|
CI_PIPELINE_ID: GITLAB_PIPELINE_ID,
|
|
188
205
|
CI_JOB_ID: GITLAB_CI_JOB_ID
|
|
189
|
-
})
|
|
206
|
+
}),
|
|
207
|
+
[CI_NODE_LABELS]: CI_RUNNER_TAGS,
|
|
208
|
+
[CI_NODE_NAME]: CI_RUNNER_ID
|
|
190
209
|
}
|
|
191
210
|
}
|
|
192
211
|
|
|
@@ -448,9 +467,17 @@ module.exports = {
|
|
|
448
467
|
BUILDKITE_BUILD_CHECKOUT_PATH,
|
|
449
468
|
BUILDKITE_BUILD_AUTHOR,
|
|
450
469
|
BUILDKITE_BUILD_AUTHOR_EMAIL,
|
|
451
|
-
BUILDKITE_MESSAGE
|
|
470
|
+
BUILDKITE_MESSAGE,
|
|
471
|
+
BUILDKITE_AGENT_ID
|
|
452
472
|
} = env
|
|
453
473
|
|
|
474
|
+
const extraTags = Object.keys(env).filter(envVar =>
|
|
475
|
+
envVar.startsWith('BUILDKITE_AGENT_META_DATA_')
|
|
476
|
+
).map((metadataKey) => {
|
|
477
|
+
const key = metadataKey.replace('BUILDKITE_AGENT_META_DATA_', '').toLowerCase()
|
|
478
|
+
return `${key}:${env[metadataKey]}`
|
|
479
|
+
})
|
|
480
|
+
|
|
454
481
|
tags = {
|
|
455
482
|
[CI_PROVIDER_NAME]: 'buildkite',
|
|
456
483
|
[CI_PIPELINE_ID]: BUILDKITE_BUILD_ID,
|
|
@@ -469,7 +496,9 @@ module.exports = {
|
|
|
469
496
|
[CI_ENV_VARS]: JSON.stringify({
|
|
470
497
|
BUILDKITE_BUILD_ID,
|
|
471
498
|
BUILDKITE_JOB_ID
|
|
472
|
-
})
|
|
499
|
+
}),
|
|
500
|
+
[CI_NODE_NAME]: BUILDKITE_AGENT_ID,
|
|
501
|
+
[CI_NODE_LABELS]: JSON.stringify(extraTags)
|
|
473
502
|
}
|
|
474
503
|
}
|
|
475
504
|
|
|
@@ -546,6 +575,32 @@ module.exports = {
|
|
|
546
575
|
}
|
|
547
576
|
}
|
|
548
577
|
|
|
578
|
+
if (env.CF_BUILD_ID) {
|
|
579
|
+
const {
|
|
580
|
+
CF_BUILD_ID,
|
|
581
|
+
CF_PIPELINE_NAME,
|
|
582
|
+
CF_BUILD_URL,
|
|
583
|
+
CF_STEP_NAME,
|
|
584
|
+
CF_BRANCH
|
|
585
|
+
} = env
|
|
586
|
+
tags = {
|
|
587
|
+
[CI_PROVIDER_NAME]: 'codefresh',
|
|
588
|
+
[CI_PIPELINE_ID]: CF_BUILD_ID,
|
|
589
|
+
[CI_PIPELINE_NAME]: CF_PIPELINE_NAME,
|
|
590
|
+
[CI_PIPELINE_URL]: CF_BUILD_URL,
|
|
591
|
+
[CI_JOB_NAME]: CF_STEP_NAME,
|
|
592
|
+
[CI_ENV_VARS]: JSON.stringify({
|
|
593
|
+
CF_BUILD_ID
|
|
594
|
+
})
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
const isTag = CF_BRANCH && CF_BRANCH.includes('tags/')
|
|
598
|
+
const refKey = isTag ? GIT_TAG : GIT_BRANCH
|
|
599
|
+
const ref = normalizeRef(CF_BRANCH)
|
|
600
|
+
|
|
601
|
+
tags[refKey] = ref
|
|
602
|
+
}
|
|
603
|
+
|
|
549
604
|
normalizeTag(tags, CI_WORKSPACE_PATH, resolveTilde)
|
|
550
605
|
normalizeTag(tags, GIT_REPOSITORY_URL, filterSensitiveInfoFromRepository)
|
|
551
606
|
normalizeTag(tags, GIT_BRANCH, normalizeRef)
|
|
@@ -19,6 +19,8 @@ const CI_WORKSPACE_PATH = 'ci.workspace_path'
|
|
|
19
19
|
const CI_JOB_URL = 'ci.job.url'
|
|
20
20
|
const CI_JOB_NAME = 'ci.job.name'
|
|
21
21
|
const CI_STAGE_NAME = 'ci.stage.name'
|
|
22
|
+
const CI_NODE_NAME = 'ci.node.name'
|
|
23
|
+
const CI_NODE_LABELS = 'ci.node.labels'
|
|
22
24
|
|
|
23
25
|
const CI_ENV_VARS = '_dd.ci.env_vars'
|
|
24
26
|
|
|
@@ -43,5 +45,7 @@ module.exports = {
|
|
|
43
45
|
CI_JOB_URL,
|
|
44
46
|
CI_JOB_NAME,
|
|
45
47
|
CI_STAGE_NAME,
|
|
46
|
-
CI_ENV_VARS
|
|
48
|
+
CI_ENV_VARS,
|
|
49
|
+
CI_NODE_NAME,
|
|
50
|
+
CI_NODE_LABELS
|
|
47
51
|
}
|
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
const { oomExportStrategies } = require('../constants')
|
|
4
4
|
|
|
5
5
|
function strategiesToCallbackMode (strategies, callbackMode) {
|
|
6
|
-
|
|
7
|
-
const hasCallback = strategies.includes(oomExportStrategies.ASYNC_CALLBACK) ? callbackMode.Async : 0
|
|
8
|
-
return hasInterrupt | hasCallback
|
|
6
|
+
return strategies.includes(oomExportStrategies.ASYNC_CALLBACK) ? callbackMode.Async : 0
|
|
9
7
|
}
|
|
10
8
|
|
|
11
9
|
class NativeSpaceProfiler {
|
|
@@ -30,6 +30,10 @@ class Tracer extends NoopProxy {
|
|
|
30
30
|
remoteConfig.enable(config)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
if (config.isGCPFunction) {
|
|
34
|
+
require('./serverless').maybeStartServerlessMiniAgent()
|
|
35
|
+
}
|
|
36
|
+
|
|
33
37
|
if (config.profiling.enabled) {
|
|
34
38
|
// do not stop tracer initialization if the profiler fails to be imported
|
|
35
39
|
try {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
function maybeStartServerlessMiniAgent () {
|
|
4
|
+
let rustBinaryPath =
|
|
5
|
+
'/workspace/node_modules/@datadog/sma/datadog-serverless-agent-linux-amd64/datadog-serverless-trace-mini-agent'
|
|
6
|
+
if (process.env.DD_MINI_AGENT_PATH !== undefined) {
|
|
7
|
+
rustBinaryPath = process.env.DD_MINI_AGENT_PATH
|
|
8
|
+
}
|
|
9
|
+
const log = require('./log')
|
|
10
|
+
const fs = require('fs')
|
|
11
|
+
|
|
12
|
+
// trying to spawn with an invalid path will return a non-descriptive error, so we want to catch
|
|
13
|
+
// invalid paths and log our own error.
|
|
14
|
+
if (!fs.existsSync(rustBinaryPath)) {
|
|
15
|
+
log.error('Serverless Mini Agent did not start. Could not find mini agent binary.')
|
|
16
|
+
return
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
require('child_process').spawn(rustBinaryPath, { stdio: 'inherit' })
|
|
20
|
+
} catch (err) {
|
|
21
|
+
log.error(`Error spawning mini agent process: ${err}`)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
module.exports = { maybeStartServerlessMiniAgent }
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const log = require('./log')
|
|
4
4
|
const format = require('./format')
|
|
5
5
|
const SpanSampler = require('./span_sampler')
|
|
6
|
+
const GitMetadataTagger = require('./git_metadata_tagger')
|
|
6
7
|
|
|
7
8
|
const { SpanStatsProcessor } = require('./span_stats')
|
|
8
9
|
|
|
@@ -18,6 +19,7 @@ class SpanProcessor {
|
|
|
18
19
|
|
|
19
20
|
this._stats = new SpanStatsProcessor(config)
|
|
20
21
|
this._spanSampler = new SpanSampler(config.sampler)
|
|
22
|
+
this._gitMetadataTagger = new GitMetadataTagger(config)
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
process (span) {
|
|
@@ -32,6 +34,7 @@ class SpanProcessor {
|
|
|
32
34
|
if (started.length === finished.length || finished.length >= flushMinSpans) {
|
|
33
35
|
this._prioritySampler.sample(spanContext)
|
|
34
36
|
this._spanSampler.sample(spanContext)
|
|
37
|
+
this._gitMetadataTagger.tagGitMetadata(spanContext)
|
|
35
38
|
|
|
36
39
|
for (const span of started) {
|
|
37
40
|
if (span._duration !== undefined) {
|
|
@@ -7,6 +7,7 @@ const { storage } = require('../../datadog-core')
|
|
|
7
7
|
const { isError } = require('./util')
|
|
8
8
|
const { setStartupLogConfig } = require('./startup-log')
|
|
9
9
|
const { ERROR_MESSAGE, ERROR_TYPE, ERROR_STACK } = require('../../dd-trace/src/constants')
|
|
10
|
+
const { MAJOR } = require('../../../version')
|
|
10
11
|
|
|
11
12
|
const SPAN_TYPE = tags.SPAN_TYPE
|
|
12
13
|
const RESOURCE_NAME = tags.RESOURCE_NAME
|
|
@@ -26,7 +27,7 @@ class DatadogTracer extends Tracer {
|
|
|
26
27
|
childOf: this.scope().active()
|
|
27
28
|
}, options)
|
|
28
29
|
|
|
29
|
-
if (!options.childOf && options.orphanable === false) {
|
|
30
|
+
if (!options.childOf && options.orphanable === false && MAJOR < 4) {
|
|
30
31
|
return fn(null, () => {})
|
|
31
32
|
}
|
|
32
33
|
|
|
@@ -81,7 +82,7 @@ class DatadogTracer extends Tracer {
|
|
|
81
82
|
optionsObj = optionsObj.apply(this, arguments)
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
if (optionsObj && optionsObj.orphanable === false && !tracer.scope().active()) {
|
|
85
|
+
if (optionsObj && optionsObj.orphanable === false && !tracer.scope().active() && MAJOR < 4) {
|
|
85
86
|
return fn.apply(this, arguments)
|
|
86
87
|
}
|
|
87
88
|
|