dd-trace 5.38.0 → 5.40.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/index.d.ts +30 -21
- package/package.json +4 -2
- package/packages/datadog-instrumentations/src/apollo-server-core.js +1 -1
- package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
- package/packages/datadog-instrumentations/src/express-session.js +41 -0
- package/packages/datadog-instrumentations/src/fetch.js +27 -6
- package/packages/datadog-instrumentations/src/helpers/fetch.js +6 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
- package/packages/datadog-instrumentations/src/jest.js +16 -10
- package/packages/datadog-instrumentations/src/mocha/main.js +2 -1
- package/packages/datadog-instrumentations/src/nyc.js +2 -1
- package/packages/datadog-instrumentations/src/vitest.js +4 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +1 -1
- package/packages/datadog-plugin-amqplib/src/producer.js +1 -2
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/base.js +5 -1
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +9 -8
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +1 -4
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -2
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +1 -2
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +1 -1
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +1 -2
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +5 -2
- package/packages/datadog-plugin-kafkajs/src/producer.js +4 -3
- package/packages/datadog-plugin-mongodb-core/src/index.js +10 -13
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +1 -1
- package/packages/datadog-plugin-rhea/src/consumer.js +1 -1
- package/packages/datadog-plugin-rhea/src/producer.js +1 -2
- package/packages/datadog-shimmer/src/shimmer.js +95 -95
- package/packages/dd-trace/src/appsec/addresses.js +1 -0
- package/packages/dd-trace/src/appsec/channels.js +1 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/iast-context.js +2 -2
- package/packages/dd-trace/src/appsec/iast/index.js +0 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +1 -2
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +3 -5
- package/packages/dd-trace/src/appsec/index.js +23 -1
- package/packages/dd-trace/src/appsec/reporter.js +3 -8
- package/packages/dd-trace/src/appsec/rule_manager.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/set_user.js +9 -5
- package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/common.js +24 -0
- package/packages/dd-trace/src/appsec/telemetry/index.js +126 -0
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +35 -0
- package/packages/dd-trace/src/appsec/telemetry/user.js +24 -0
- package/packages/dd-trace/src/appsec/telemetry/waf.js +92 -0
- package/packages/dd-trace/src/appsec/user_tracking.js +2 -4
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +16 -4
- package/packages/dd-trace/src/config.js +31 -14
- package/packages/dd-trace/src/constants.js +1 -1
- package/packages/dd-trace/src/{data_streams.js → datastreams/checkpointer.js} +1 -1
- package/packages/dd-trace/src/{data_streams_context.js → datastreams/context.js} +2 -2
- package/packages/dd-trace/src/datastreams/index.js +104 -0
- package/packages/dd-trace/src/datastreams/manager.js +27 -0
- package/packages/dd-trace/src/datastreams/processor.js +1 -44
- package/packages/dd-trace/src/datastreams/size.js +53 -0
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +2 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +22 -15
- package/packages/dd-trace/src/dogstatsd.js +23 -4
- package/packages/dd-trace/src/exporters/agent/index.js +2 -2
- package/packages/dd-trace/src/flare/index.js +3 -0
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -0
- package/packages/dd-trace/src/opentelemetry/tracer.js +45 -1
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +11 -47
- package/packages/dd-trace/src/opentracing/propagation/text_map_dsm.js +1 -1
- package/packages/dd-trace/src/opentracing/span.js +12 -2
- package/packages/dd-trace/src/payload-tagging/config/aws.json +8 -0
- package/packages/dd-trace/src/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +2 -2
- package/packages/dd-trace/src/priority_sampler.js +5 -3
- package/packages/dd-trace/src/profiling/profiler.js +1 -1
- package/packages/dd-trace/src/profiling/profilers/wall.js +15 -4
- package/packages/dd-trace/src/proxy.js +41 -22
- package/packages/dd-trace/src/{appsec/remote_config → remote_config}/capabilities.js +1 -0
- package/packages/dd-trace/src/{appsec/remote_config → remote_config}/index.js +8 -5
- package/packages/dd-trace/src/{appsec/remote_config → remote_config}/manager.js +5 -5
- package/packages/dd-trace/src/runtime_metrics/index.js +34 -0
- package/packages/dd-trace/src/{runtime_metrics.js → runtime_metrics/runtime_metrics.js} +4 -4
- package/packages/dd-trace/src/serverless.js +10 -1
- package/packages/dd-trace/src/service-naming/index.js +12 -4
- package/packages/dd-trace/src/span_processor.js +7 -4
- package/packages/dd-trace/src/span_stats.js +1 -2
- package/packages/dd-trace/src/standalone/index.js +70 -0
- package/packages/dd-trace/src/standalone/product.js +24 -0
- package/packages/dd-trace/src/standalone/tracesource.js +22 -0
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +47 -0
- package/packages/dd-trace/src/telemetry/index.js +16 -387
- package/packages/dd-trace/src/telemetry/telemetry.js +394 -0
- package/packages/dd-trace/src/tracer.js +7 -15
- package/packages/dd-trace/src/appsec/standalone.js +0 -130
- package/packages/dd-trace/src/appsec/telemetry.js +0 -218
- package/packages/dd-trace/src/service-naming/schemas/index.js +0 -6
- /package/packages/dd-trace/src/{appsec/remote_config → remote_config}/apply_states.js +0 -0
- /package/packages/dd-trace/src/{appsec/remote_config → remote_config}/scheduler.js +0 -0
|
@@ -1,394 +1,23 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
-
const tracerVersion = require('../../../../package.json').version
|
|
3
|
-
const dc = require('dc-polyfill')
|
|
4
|
-
const os = require('os')
|
|
5
|
-
const dependencies = require('./dependencies')
|
|
6
|
-
const { sendData } = require('./send-data')
|
|
7
|
-
const { errors } = require('../startup-log')
|
|
8
|
-
const { manager: metricsManager } = require('./metrics')
|
|
9
|
-
const telemetryLogger = require('./logs')
|
|
10
|
-
const logger = require('../log')
|
|
11
2
|
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const telemetryAppClosingChannel = dc.channel('datadog:telemetry:app-closing')
|
|
3
|
+
const activate = () => {
|
|
4
|
+
const active = require('./telemetry')
|
|
15
5
|
|
|
16
|
-
|
|
17
|
-
let pluginManager
|
|
18
|
-
|
|
19
|
-
let application
|
|
20
|
-
let host
|
|
21
|
-
let heartbeatTimeout
|
|
22
|
-
let heartbeatInterval
|
|
23
|
-
let extendedInterval
|
|
24
|
-
let integrations
|
|
25
|
-
let configWithOrigin = []
|
|
26
|
-
let retryData = null
|
|
27
|
-
const extendedHeartbeatPayload = {}
|
|
28
|
-
|
|
29
|
-
const sentIntegrations = new Set()
|
|
30
|
-
|
|
31
|
-
function getRetryData () {
|
|
32
|
-
return retryData
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function updateRetryData (error, retryObj) {
|
|
36
|
-
if (error) {
|
|
37
|
-
if (retryObj.reqType === 'message-batch') {
|
|
38
|
-
const payload = retryObj.payload[0].payload
|
|
39
|
-
const reqType = retryObj.payload[0].request_type
|
|
40
|
-
retryData = { payload, reqType }
|
|
41
|
-
|
|
42
|
-
// Since this payload failed twice it now gets save in to the extended heartbeat
|
|
43
|
-
const failedPayload = retryObj.payload[1].payload
|
|
44
|
-
const failedReqType = retryObj.payload[1].request_type
|
|
45
|
-
|
|
46
|
-
// save away the dependencies and integration request for extended heartbeat.
|
|
47
|
-
if (failedReqType === 'app-integrations-change') {
|
|
48
|
-
if (extendedHeartbeatPayload.integrations) {
|
|
49
|
-
extendedHeartbeatPayload.integrations.push(failedPayload)
|
|
50
|
-
} else {
|
|
51
|
-
extendedHeartbeatPayload.integrations = [failedPayload]
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
if (failedReqType === 'app-dependencies-loaded') {
|
|
55
|
-
if (extendedHeartbeatPayload.dependencies) {
|
|
56
|
-
extendedHeartbeatPayload.dependencies.push(failedPayload)
|
|
57
|
-
} else {
|
|
58
|
-
extendedHeartbeatPayload.dependencies = [failedPayload]
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
} else {
|
|
62
|
-
retryData = retryObj
|
|
63
|
-
}
|
|
64
|
-
} else {
|
|
65
|
-
retryData = null
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function getIntegrations () {
|
|
70
|
-
const newIntegrations = []
|
|
71
|
-
for (const pluginName in pluginManager._pluginsByName) {
|
|
72
|
-
if (sentIntegrations.has(pluginName)) {
|
|
73
|
-
continue
|
|
74
|
-
}
|
|
75
|
-
newIntegrations.push({
|
|
76
|
-
name: pluginName,
|
|
77
|
-
enabled: pluginManager._pluginsByName[pluginName]._enabled,
|
|
78
|
-
auto_enabled: true
|
|
79
|
-
})
|
|
80
|
-
sentIntegrations.add(pluginName)
|
|
81
|
-
}
|
|
82
|
-
return newIntegrations
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function getProducts (config) {
|
|
86
|
-
const products = {
|
|
87
|
-
appsec: {
|
|
88
|
-
enabled: config.appsec.enabled
|
|
89
|
-
},
|
|
90
|
-
profiler: {
|
|
91
|
-
version: tracerVersion,
|
|
92
|
-
enabled: profilingEnabledToBoolean(config.profiling.enabled)
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if (errors.profilingError) {
|
|
96
|
-
products.profiler.error = errors.profilingError
|
|
97
|
-
errors.profilingError = {}
|
|
98
|
-
}
|
|
99
|
-
return products
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function getInstallSignature (config) {
|
|
103
|
-
const { installSignature: sig } = config
|
|
104
|
-
if (sig && (sig.id || sig.time || sig.type)) {
|
|
105
|
-
return {
|
|
106
|
-
install_id: sig.id,
|
|
107
|
-
install_time: sig.time,
|
|
108
|
-
install_type: sig.type
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function appStarted (config) {
|
|
114
|
-
const app = {
|
|
115
|
-
products: getProducts(config),
|
|
116
|
-
configuration: configWithOrigin
|
|
117
|
-
}
|
|
118
|
-
const installSignature = getInstallSignature(config)
|
|
119
|
-
if (installSignature) {
|
|
120
|
-
app.install_signature = installSignature
|
|
121
|
-
}
|
|
122
|
-
// TODO: add app.error with correct error codes
|
|
123
|
-
// if (errors.agentError) {
|
|
124
|
-
// app.error = errors.agentError
|
|
125
|
-
// errors.agentError = {}
|
|
126
|
-
// }
|
|
127
|
-
return app
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
function appClosing () {
|
|
131
|
-
if (!config?.telemetry?.enabled) {
|
|
132
|
-
return
|
|
133
|
-
}
|
|
134
|
-
// Give chance to listeners to update metrics before shutting down.
|
|
135
|
-
telemetryAppClosingChannel.publish()
|
|
136
|
-
const { reqType, payload } = createPayload('app-closing')
|
|
137
|
-
sendData(config, application, host, reqType, payload)
|
|
138
|
-
// We flush before shutting down.
|
|
139
|
-
metricsManager.send(config, application, host)
|
|
140
|
-
telemetryLogger.send(config, application, host)
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function onBeforeExit () {
|
|
144
|
-
process.removeListener('beforeExit', onBeforeExit)
|
|
145
|
-
appClosing()
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
function createAppObject (config) {
|
|
149
|
-
return {
|
|
150
|
-
service_name: config.service,
|
|
151
|
-
env: config.env,
|
|
152
|
-
service_version: config.version,
|
|
153
|
-
tracer_version: tracerVersion,
|
|
154
|
-
language_name: 'nodejs',
|
|
155
|
-
language_version: process.versions.node
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function createHostObject () {
|
|
160
|
-
const osName = os.type()
|
|
161
|
-
|
|
162
|
-
if (osName === 'Linux' || osName === 'Darwin') {
|
|
163
|
-
return {
|
|
164
|
-
hostname: os.hostname(),
|
|
165
|
-
os: osName,
|
|
166
|
-
architecture: os.arch(),
|
|
167
|
-
kernel_version: os.version(),
|
|
168
|
-
kernel_release: os.release(),
|
|
169
|
-
kernel_name: osName
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
if (osName === 'Windows_NT') {
|
|
174
|
-
return {
|
|
175
|
-
hostname: os.hostname(),
|
|
176
|
-
os: osName,
|
|
177
|
-
architecture: os.arch(),
|
|
178
|
-
os_version: os.version()
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
return {
|
|
183
|
-
hostname: os.hostname(), // TODO is this enough?
|
|
184
|
-
os: osName
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
function getTelemetryData () {
|
|
189
|
-
return { config, application, host, heartbeatInterval }
|
|
6
|
+
return Object.setPrototypeOf(module.exports, active)
|
|
190
7
|
}
|
|
191
8
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
return
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if (getRetryData()) {
|
|
205
|
-
const payload = { reqType: currReqType, payload: currPayload }
|
|
206
|
-
const batchPayload = createBatchPayload([payload, retryData])
|
|
207
|
-
return { reqType: 'message-batch', payload: batchPayload }
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
return { reqType: currReqType, payload: currPayload }
|
|
9
|
+
const inactive = {
|
|
10
|
+
start (config, ...args) {
|
|
11
|
+
return config?.telemetry?.enabled && activate().start(config, ...args)
|
|
12
|
+
},
|
|
13
|
+
stop () {},
|
|
14
|
+
// This might be called before `start` so we have to trigger loading the
|
|
15
|
+
// underlying module here as well.
|
|
16
|
+
updateConfig (changes, config, ...args) {
|
|
17
|
+
return config?.telemetry?.enabled && activate().updateConfig(changes, config, ...args)
|
|
18
|
+
},
|
|
19
|
+
updateIntegrations () {},
|
|
20
|
+
appClosing () {}
|
|
211
21
|
}
|
|
212
22
|
|
|
213
|
-
|
|
214
|
-
heartbeatTimeout = setTimeout(() => {
|
|
215
|
-
metricsManager.send(config, application, host)
|
|
216
|
-
telemetryLogger.send(config, application, host)
|
|
217
|
-
|
|
218
|
-
const { reqType, payload } = createPayload('app-heartbeat')
|
|
219
|
-
sendData(config, application, host, reqType, payload, updateRetryData)
|
|
220
|
-
heartbeat(config, application, host)
|
|
221
|
-
}, heartbeatInterval).unref()
|
|
222
|
-
return heartbeatTimeout
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
function extendedHeartbeat (config) {
|
|
226
|
-
extendedInterval = setInterval(() => {
|
|
227
|
-
const appPayload = appStarted(config)
|
|
228
|
-
const payload = {
|
|
229
|
-
...appPayload,
|
|
230
|
-
...extendedHeartbeatPayload
|
|
231
|
-
}
|
|
232
|
-
sendData(config, application, host, 'app-extended-heartbeat', payload)
|
|
233
|
-
Object.keys(extendedHeartbeatPayload).forEach(key => delete extendedHeartbeatPayload[key])
|
|
234
|
-
}, 1000 * 60 * 60 * 24).unref()
|
|
235
|
-
return extendedInterval
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
function start (aConfig, thePluginManager) {
|
|
239
|
-
if (!aConfig.telemetry.enabled) {
|
|
240
|
-
if (aConfig.sca?.enabled) {
|
|
241
|
-
logger.warn('DD_APPSEC_SCA_ENABLED requires enabling telemetry to work.')
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
return
|
|
245
|
-
}
|
|
246
|
-
config = aConfig
|
|
247
|
-
pluginManager = thePluginManager
|
|
248
|
-
application = createAppObject(config)
|
|
249
|
-
host = createHostObject()
|
|
250
|
-
heartbeatInterval = config.telemetry.heartbeatInterval
|
|
251
|
-
integrations = getIntegrations()
|
|
252
|
-
|
|
253
|
-
dependencies.start(config, application, host, getRetryData, updateRetryData)
|
|
254
|
-
telemetryLogger.start(config)
|
|
255
|
-
|
|
256
|
-
sendData(config, application, host, 'app-started', appStarted(config))
|
|
257
|
-
|
|
258
|
-
if (integrations.length > 0) {
|
|
259
|
-
sendData(config, application, host, 'app-integrations-change',
|
|
260
|
-
{ integrations }, updateRetryData)
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
heartbeat(config, application, host)
|
|
264
|
-
|
|
265
|
-
extendedHeartbeat(config)
|
|
266
|
-
|
|
267
|
-
process.on('beforeExit', onBeforeExit)
|
|
268
|
-
telemetryStartChannel.publish(getTelemetryData())
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
function stop () {
|
|
272
|
-
if (!config) {
|
|
273
|
-
return
|
|
274
|
-
}
|
|
275
|
-
clearInterval(extendedInterval)
|
|
276
|
-
clearTimeout(heartbeatTimeout)
|
|
277
|
-
process.removeListener('beforeExit', onBeforeExit)
|
|
278
|
-
|
|
279
|
-
telemetryStopChannel.publish(getTelemetryData())
|
|
280
|
-
|
|
281
|
-
config = undefined
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
function updateIntegrations () {
|
|
285
|
-
if (!config || !config.telemetry.enabled) {
|
|
286
|
-
return
|
|
287
|
-
}
|
|
288
|
-
const integrations = getIntegrations()
|
|
289
|
-
if (integrations.length === 0) {
|
|
290
|
-
return
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
const { reqType, payload } = createPayload('app-integrations-change', { integrations })
|
|
294
|
-
|
|
295
|
-
sendData(config, application, host, reqType, payload, updateRetryData)
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
function formatMapForTelemetry (map) {
|
|
299
|
-
// format from an object to a string map in order for
|
|
300
|
-
// telemetry intake to accept the configuration
|
|
301
|
-
return map
|
|
302
|
-
? Object.entries(map).map(([key, value]) => `${key}:${value}`).join(',')
|
|
303
|
-
: ''
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
function updateConfig (changes, config) {
|
|
307
|
-
if (!config.telemetry.enabled) return
|
|
308
|
-
if (changes.length === 0) return
|
|
309
|
-
|
|
310
|
-
logger.trace(changes)
|
|
311
|
-
|
|
312
|
-
const application = createAppObject(config)
|
|
313
|
-
const host = createHostObject()
|
|
314
|
-
|
|
315
|
-
const nameMapping = {
|
|
316
|
-
sampleRate: 'DD_TRACE_SAMPLE_RATE',
|
|
317
|
-
logInjection: 'DD_LOG_INJECTION',
|
|
318
|
-
headerTags: 'DD_TRACE_HEADER_TAGS',
|
|
319
|
-
tags: 'DD_TAGS',
|
|
320
|
-
'sampler.rules': 'DD_TRACE_SAMPLING_RULES',
|
|
321
|
-
traceEnabled: 'DD_TRACE_ENABLED',
|
|
322
|
-
url: 'DD_TRACE_AGENT_URL',
|
|
323
|
-
'sampler.rateLimit': 'DD_TRACE_RATE_LIMIT',
|
|
324
|
-
queryStringObfuscation: 'DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP',
|
|
325
|
-
version: 'DD_VERSION',
|
|
326
|
-
env: 'DD_ENV',
|
|
327
|
-
service: 'DD_SERVICE',
|
|
328
|
-
clientIpHeader: 'DD_TRACE_CLIENT_IP_HEADER',
|
|
329
|
-
'grpc.client.error.statuses': 'DD_GRPC_CLIENT_ERROR_STATUSES',
|
|
330
|
-
'grpc.server.error.statuses': 'DD_GRPC_SERVER_ERROR_STATUSES',
|
|
331
|
-
traceId128BitLoggingEnabled: 'DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED'
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
const namesNeedFormatting = new Set(['DD_TAGS', 'peerServiceMapping', 'serviceMapping'])
|
|
335
|
-
|
|
336
|
-
const configuration = []
|
|
337
|
-
const names = [] // list of config names whose values have been changed
|
|
338
|
-
|
|
339
|
-
for (const change of changes) {
|
|
340
|
-
const name = nameMapping[change.name] || change.name
|
|
341
|
-
|
|
342
|
-
names.push(name)
|
|
343
|
-
const { origin, value } = change
|
|
344
|
-
const entry = { name, value, origin }
|
|
345
|
-
|
|
346
|
-
if (namesNeedFormatting.has(entry.name)) {
|
|
347
|
-
entry.value = formatMapForTelemetry(entry.value)
|
|
348
|
-
} else if (entry.name === 'url') {
|
|
349
|
-
if (entry.value) {
|
|
350
|
-
entry.value = entry.value.toString()
|
|
351
|
-
}
|
|
352
|
-
} else if (entry.name === 'DD_TRACE_SAMPLING_RULES') {
|
|
353
|
-
entry.value = JSON.stringify(entry.value)
|
|
354
|
-
} else if (Array.isArray(entry.value)) {
|
|
355
|
-
entry.value = value.join(',')
|
|
356
|
-
}
|
|
357
|
-
configuration.push(entry)
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
function isNotModified (entry) {
|
|
361
|
-
return !names.includes(entry.name)
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
if (!configWithOrigin.length) {
|
|
365
|
-
configWithOrigin = configuration
|
|
366
|
-
} else {
|
|
367
|
-
// update configWithOrigin to contain up-to-date full list of config values for app-extended-heartbeat
|
|
368
|
-
configWithOrigin = configWithOrigin.filter(isNotModified)
|
|
369
|
-
configWithOrigin = configWithOrigin.concat(configuration)
|
|
370
|
-
const { reqType, payload } = createPayload('app-client-configuration-change', { configuration })
|
|
371
|
-
sendData(config, application, host, reqType, payload, updateRetryData)
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
function profilingEnabledToBoolean (profilingEnabled) {
|
|
376
|
-
if (typeof profilingEnabled === 'boolean') {
|
|
377
|
-
return profilingEnabled
|
|
378
|
-
}
|
|
379
|
-
if (['auto', 'true'].includes(profilingEnabled)) {
|
|
380
|
-
return true
|
|
381
|
-
}
|
|
382
|
-
if (profilingEnabled === 'false') {
|
|
383
|
-
return false
|
|
384
|
-
}
|
|
385
|
-
return undefined
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
module.exports = {
|
|
389
|
-
start,
|
|
390
|
-
stop,
|
|
391
|
-
updateIntegrations,
|
|
392
|
-
updateConfig,
|
|
393
|
-
appClosing
|
|
394
|
-
}
|
|
23
|
+
module.exports = Object.setPrototypeOf({}, inactive)
|