dd-trace 5.17.0 → 5.18.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/LICENSE-3rdparty.csv +1 -0
- package/ext/exporters.d.ts +1 -1
- package/index.d.ts +47 -1
- package/init.js +40 -1
- package/initialize.mjs +8 -5
- package/package.json +24 -20
- package/packages/datadog-core/src/storage/index.js +1 -10
- package/packages/datadog-esbuild/index.js +5 -1
- package/packages/datadog-instrumentations/src/aws-sdk.js +2 -1
- package/packages/datadog-instrumentations/src/cucumber.js +76 -34
- package/packages/datadog-instrumentations/src/helpers/hook.js +8 -3
- package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
- package/packages/datadog-instrumentations/src/helpers/instrument.js +4 -3
- package/packages/datadog-instrumentations/src/helpers/register.js +56 -5
- package/packages/datadog-instrumentations/src/mocha/main.js +12 -1
- package/packages/datadog-instrumentations/src/mocha/utils.js +58 -14
- package/packages/datadog-instrumentations/src/mocha/worker.js +1 -0
- package/packages/datadog-instrumentations/src/playwright.js +1 -1
- package/packages/datadog-instrumentations/src/vitest.js +303 -0
- package/packages/datadog-plugin-aws-sdk/src/base.js +8 -1
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +9 -3
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +6 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +23 -5
- package/packages/datadog-plugin-child_process/src/index.js +1 -1
- package/packages/datadog-plugin-cucumber/src/index.js +24 -1
- package/packages/datadog-plugin-mocha/src/index.js +25 -4
- package/packages/datadog-plugin-openai/src/index.js +52 -30
- package/packages/datadog-plugin-openai/src/token-estimator.js +20 -0
- package/packages/datadog-plugin-vitest/src/index.js +156 -0
- package/packages/dd-trace/src/appsec/iast/path-line.js +2 -19
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +4 -0
- package/packages/dd-trace/src/appsec/index.js +1 -1
- package/packages/dd-trace/src/appsec/rasp.js +32 -5
- package/packages/dd-trace/src/appsec/recommended.json +208 -3
- package/packages/dd-trace/src/appsec/reporter.js +64 -20
- package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -0
- package/packages/dd-trace/src/appsec/stack_trace.js +90 -0
- package/packages/dd-trace/src/appsec/standalone.js +130 -0
- package/packages/dd-trace/src/appsec/telemetry.js +33 -1
- package/packages/dd-trace/src/appsec/waf/index.js +2 -2
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +4 -2
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +4 -2
- package/packages/dd-trace/src/config.js +110 -40
- package/packages/dd-trace/src/constants.js +3 -1
- package/packages/dd-trace/src/datastreams/processor.js +2 -1
- package/packages/dd-trace/src/exporters/agent/index.js +2 -2
- package/packages/dd-trace/src/format.js +1 -0
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +12 -0
- package/packages/dd-trace/src/opentracing/span.js +4 -1
- package/packages/dd-trace/src/opentracing/tracer.js +2 -2
- package/packages/dd-trace/src/plugins/ci_plugin.js +7 -0
- package/packages/dd-trace/src/plugins/index.js +2 -0
- package/packages/dd-trace/src/plugins/util/test.js +5 -1
- package/packages/dd-trace/src/priority_sampler.js +2 -5
- package/packages/dd-trace/src/profiling/profiler.js +1 -1
- package/packages/dd-trace/src/proxy.js +3 -1
- package/packages/dd-trace/src/rate_limiter.js +2 -2
- package/packages/dd-trace/src/span_stats.js +4 -3
- package/packages/dd-trace/src/telemetry/init-telemetry.js +75 -0
- package/packages/dd-trace/src/tracer.js +2 -2
- package/packages/dd-trace/src/util.js +6 -1
- package/packages/datadog-core/src/storage/async_hooks.js +0 -49
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const fs = require('fs')
|
|
4
|
+
const { spawn } = require('child_process')
|
|
5
|
+
const tracerVersion = require('../../../../package.json').version
|
|
6
|
+
const log = require('../log')
|
|
7
|
+
|
|
8
|
+
module.exports = sendTelemetry
|
|
9
|
+
|
|
10
|
+
if (!process.env.DD_INJECTION_ENABLED) {
|
|
11
|
+
module.exports = () => {}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (!process.env.DD_TELEMETRY_FORWARDER_PATH) {
|
|
15
|
+
module.exports = () => {}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (!fs.existsSync(process.env.DD_TELEMETRY_FORWARDER_PATH)) {
|
|
19
|
+
module.exports = () => {}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const metadata = {
|
|
23
|
+
language_name: 'nodejs',
|
|
24
|
+
language_version: process.versions.node,
|
|
25
|
+
runtime_name: 'nodejs',
|
|
26
|
+
runtime_version: process.versions.node,
|
|
27
|
+
tracer_version: tracerVersion,
|
|
28
|
+
pid: process.pid
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const seen = []
|
|
32
|
+
function hasSeen (point) {
|
|
33
|
+
if (point.name === 'abort') {
|
|
34
|
+
// This one can only be sent once, regardless of tags
|
|
35
|
+
return seen.includes('abort')
|
|
36
|
+
}
|
|
37
|
+
if (point.name === 'abort.integration') {
|
|
38
|
+
// For now, this is the only other one we want to dedupe
|
|
39
|
+
const compiledPoint = point.name + point.tags.join('')
|
|
40
|
+
return seen.includes(compiledPoint)
|
|
41
|
+
}
|
|
42
|
+
return false
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function sendTelemetry (name, tags = []) {
|
|
46
|
+
let points = name
|
|
47
|
+
if (typeof name === 'string') {
|
|
48
|
+
points = [{ name, tags }]
|
|
49
|
+
}
|
|
50
|
+
if (['1', 'true', 'True'].includes(process.env.DD_INJECT_FORCE)) {
|
|
51
|
+
points = points.filter(p => ['error', 'complete'].includes(p.name))
|
|
52
|
+
}
|
|
53
|
+
points = points.filter(p => !hasSeen(p))
|
|
54
|
+
points.forEach(p => {
|
|
55
|
+
p.name = `library_entrypoint.${p.name}`
|
|
56
|
+
})
|
|
57
|
+
if (points.length === 0) {
|
|
58
|
+
return
|
|
59
|
+
}
|
|
60
|
+
const proc = spawn(process.env.DD_TELEMETRY_FORWARDER_PATH, ['library_entrypoint'], {
|
|
61
|
+
stdio: 'pipe'
|
|
62
|
+
})
|
|
63
|
+
proc.on('error', () => {
|
|
64
|
+
log.error('Failed to spawn telemetry forwarder')
|
|
65
|
+
})
|
|
66
|
+
proc.on('exit', (code) => {
|
|
67
|
+
if (code !== 0) {
|
|
68
|
+
log.error(`Telemetry forwarder exited with code ${code}`)
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
proc.stdin.on('error', () => {
|
|
72
|
+
log.error('Failed to write telemetry data to telemetry forwarder')
|
|
73
|
+
})
|
|
74
|
+
proc.stdin.end(JSON.stringify({ metadata, points }))
|
|
75
|
+
}
|
|
@@ -20,8 +20,8 @@ const SERVICE_NAME = tags.SERVICE_NAME
|
|
|
20
20
|
const MEASURED = tags.MEASURED
|
|
21
21
|
|
|
22
22
|
class DatadogTracer extends Tracer {
|
|
23
|
-
constructor (config) {
|
|
24
|
-
super(config)
|
|
23
|
+
constructor (config, prioritySampler) {
|
|
24
|
+
super(config, prioritySampler)
|
|
25
25
|
this._dataStreamsProcessor = new DataStreamsProcessor(config)
|
|
26
26
|
this._scope = new Scope()
|
|
27
27
|
setStartupLogConfig(config)
|
|
@@ -69,10 +69,15 @@ function calculateDDBasePath (dirname) {
|
|
|
69
69
|
return dirSteps.slice(0, packagesIndex + 1).join(path.sep) + path.sep
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
function hasOwn (object, prop) {
|
|
73
|
+
return Object.prototype.hasOwnProperty.call(object, prop)
|
|
74
|
+
}
|
|
75
|
+
|
|
72
76
|
module.exports = {
|
|
73
77
|
isTrue,
|
|
74
78
|
isFalse,
|
|
75
79
|
isError,
|
|
76
80
|
globMatch,
|
|
77
|
-
calculateDDBasePath
|
|
81
|
+
calculateDDBasePath,
|
|
82
|
+
hasOwn
|
|
78
83
|
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const { executionAsyncId } = require('async_hooks')
|
|
4
|
-
const AsyncResourceStorage = require('./async_resource')
|
|
5
|
-
|
|
6
|
-
class AsyncHooksStorage extends AsyncResourceStorage {
|
|
7
|
-
constructor () {
|
|
8
|
-
super()
|
|
9
|
-
|
|
10
|
-
this._resources = new Map()
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
disable () {
|
|
14
|
-
super.disable()
|
|
15
|
-
|
|
16
|
-
this._resources.clear()
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
_createHook () {
|
|
20
|
-
return {
|
|
21
|
-
...super._createHook(),
|
|
22
|
-
destroy: this._destroy.bind(this)
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
_init (asyncId, type, triggerAsyncId, resource) {
|
|
27
|
-
super._init.apply(this, arguments)
|
|
28
|
-
|
|
29
|
-
this._resources.set(asyncId, resource)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
_destroy (asyncId) {
|
|
33
|
-
this._resources.delete(asyncId)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
_executionAsyncResource () {
|
|
37
|
-
const asyncId = executionAsyncId()
|
|
38
|
-
|
|
39
|
-
let resource = this._resources.get(asyncId)
|
|
40
|
-
|
|
41
|
-
if (!resource) {
|
|
42
|
-
this._resources.set(asyncId, resource = {})
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return resource
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
module.exports = AsyncHooksStorage
|