dd-trace 5.96.0 → 5.98.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 +60 -2
- package/package.json +9 -7
- package/packages/datadog-esbuild/index.js +20 -9
- package/packages/datadog-instrumentations/src/child_process.js +7 -17
- package/packages/datadog-instrumentations/src/crypto.js +1 -2
- package/packages/datadog-instrumentations/src/cucumber.js +69 -4
- package/packages/datadog-instrumentations/src/cypress-config.js +318 -0
- package/packages/datadog-instrumentations/src/cypress.js +86 -4
- package/packages/datadog-instrumentations/src/dns.js +1 -2
- package/packages/datadog-instrumentations/src/express.js +4 -4
- package/packages/datadog-instrumentations/src/fs.js +27 -29
- package/packages/datadog-instrumentations/src/graphql.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/bundler-register.js +41 -13
- package/packages/datadog-instrumentations/src/helpers/hook.js +31 -6
- package/packages/datadog-instrumentations/src/helpers/hooks.js +12 -19
- package/packages/datadog-instrumentations/src/helpers/instrument.js +27 -13
- package/packages/datadog-instrumentations/src/helpers/register.js +103 -142
- package/packages/datadog-instrumentations/src/http/client.js +2 -3
- package/packages/datadog-instrumentations/src/http/server.js +2 -5
- package/packages/datadog-instrumentations/src/http2/client.js +1 -3
- package/packages/datadog-instrumentations/src/http2/server.js +1 -3
- package/packages/datadog-instrumentations/src/jest.js +117 -16
- package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
- package/packages/datadog-instrumentations/src/mocha/utils.js +12 -1
- package/packages/datadog-instrumentations/src/net.js +2 -8
- package/packages/datadog-instrumentations/src/pino.js +1 -1
- package/packages/datadog-instrumentations/src/playwright.js +4 -1
- package/packages/datadog-instrumentations/src/prisma.js +1 -2
- package/packages/datadog-instrumentations/src/redis.js +12 -6
- package/packages/datadog-instrumentations/src/selenium.js +4 -1
- package/packages/datadog-instrumentations/src/sequelize.js +1 -1
- package/packages/datadog-instrumentations/src/url.js +1 -3
- package/packages/datadog-instrumentations/src/vitest.js +5 -1
- package/packages/datadog-instrumentations/src/vm.js +1 -3
- package/packages/datadog-plugin-aws-sdk/src/base.js +5 -4
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +1 -0
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +1 -0
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +1 -0
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -0
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -0
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +1 -0
- package/packages/datadog-plugin-cucumber/src/index.js +13 -3
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +166 -6
- package/packages/datadog-plugin-cypress/src/index.js +59 -2
- package/packages/datadog-plugin-fs/src/index.js +1 -1
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +2 -1
- package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +2 -7
- package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
- package/packages/datadog-plugin-http/src/client.js +1 -1
- package/packages/datadog-plugin-http/src/server.js +10 -2
- package/packages/datadog-plugin-http2/src/client.js +1 -1
- package/packages/datadog-plugin-http2/src/server.js +10 -2
- package/packages/datadog-plugin-jest/src/index.js +4 -2
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +31 -4
- package/packages/datadog-plugin-mocha/src/index.js +5 -2
- package/packages/datadog-plugin-mongodb-core/src/index.js +3 -3
- package/packages/datadog-plugin-mysql/src/index.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +10 -16
- package/packages/datadog-plugin-openai/src/services.js +1 -0
- package/packages/datadog-plugin-pg/src/index.js +1 -1
- package/packages/datadog-plugin-tedious/src/index.js +1 -1
- package/packages/datadog-plugin-ws/src/close.js +1 -1
- package/packages/datadog-plugin-ws/src/receiver.js +1 -1
- package/packages/datadog-webpack/index.js +3 -3
- package/packages/dd-trace/index.js +12 -10
- package/packages/dd-trace/src/agent/url.js +2 -2
- package/packages/dd-trace/src/aiguard/sdk.js +26 -22
- package/packages/dd-trace/src/appsec/blocked_templates.js +4 -3
- package/packages/dd-trace/src/appsec/blocking.js +64 -33
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +1 -1
- package/packages/dd-trace/src/appsec/remote_config.js +1 -0
- package/packages/dd-trace/src/appsec/sdk/index.js +4 -0
- package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/track_event.js +5 -5
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/utils.js +4 -2
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +6 -1
- package/packages/dd-trace/src/ci-visibility/test-api-manual/test-api-manual-plugin.js +4 -0
- package/packages/dd-trace/src/config/defaults.js +315 -146
- package/packages/dd-trace/src/config/generated-config-types.d.ts +9 -1
- package/packages/dd-trace/src/config/helper.js +59 -10
- package/packages/dd-trace/src/config/index.js +587 -1496
- package/packages/dd-trace/src/config/parsers.js +256 -0
- package/packages/dd-trace/src/config/remote_config.js +59 -2
- package/packages/dd-trace/src/config/supported-configurations.json +406 -432
- package/packages/dd-trace/src/constants.js +1 -0
- package/packages/dd-trace/src/crashtracking/crashtracker.js +7 -1
- package/packages/dd-trace/src/crashtracking/index.js +1 -7
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +5 -2
- package/packages/dd-trace/src/debugger/index.js +1 -1
- package/packages/dd-trace/src/dogstatsd.js +12 -9
- package/packages/dd-trace/src/encode/0.4.js +8 -7
- package/packages/dd-trace/src/encode/span-stats.js +4 -1
- package/packages/dd-trace/src/exporters/agent/writer.js +7 -1
- package/packages/dd-trace/src/exporters/common/request.js +9 -0
- package/packages/dd-trace/src/exporters/common/writer.js +12 -2
- package/packages/dd-trace/src/heap_snapshots.js +3 -0
- package/packages/dd-trace/src/index.js +5 -2
- package/packages/dd-trace/src/lambda/runtime/ritm.js +6 -6
- package/packages/dd-trace/src/llmobs/index.js +4 -1
- package/packages/dd-trace/src/llmobs/plugins/ai/index.js +5 -1
- package/packages/dd-trace/src/llmobs/plugins/ai/util.js +60 -12
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +4 -2
- package/packages/dd-trace/src/llmobs/sdk.js +12 -8
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +9 -6
- package/packages/dd-trace/src/llmobs/writers/base.js +2 -0
- package/packages/dd-trace/src/llmobs/writers/util.js +3 -0
- package/packages/dd-trace/src/log/index.js +20 -59
- package/packages/dd-trace/src/log/writer.js +7 -19
- package/packages/dd-trace/src/noop/proxy.js +8 -0
- package/packages/dd-trace/src/openfeature/remote_config.js +6 -1
- package/packages/dd-trace/src/opentelemetry/context_manager.js +6 -4
- package/packages/dd-trace/src/opentelemetry/logs/index.js +1 -1
- package/packages/dd-trace/src/opentelemetry/metrics/index.js +1 -1
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +17 -2
- package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +14 -2
- package/packages/dd-trace/src/opentelemetry/otlp/trace.proto +358 -0
- package/packages/dd-trace/src/opentelemetry/otlp/trace_service.proto +78 -0
- package/packages/dd-trace/src/opentelemetry/trace/index.js +75 -0
- package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +66 -0
- package/packages/dd-trace/src/opentelemetry/trace/otlp_transformer.js +332 -0
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +9 -4
- package/packages/dd-trace/src/opentracing/tracer.js +9 -4
- package/packages/dd-trace/src/payload-tagging/config/index.js +6 -5
- package/packages/dd-trace/src/plugin_manager.js +8 -6
- package/packages/dd-trace/src/plugins/ci_plugin.js +4 -0
- package/packages/dd-trace/src/plugins/log_plugin.js +3 -0
- package/packages/dd-trace/src/plugins/plugin.js +11 -13
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/tracing.js +22 -5
- package/packages/dd-trace/src/plugins/util/test.js +2 -0
- package/packages/dd-trace/src/plugins/util/web.js +6 -88
- package/packages/dd-trace/src/process-tags/index.js +3 -0
- package/packages/dd-trace/src/profiler.js +27 -2
- package/packages/dd-trace/src/profiling/config.js +73 -241
- package/packages/dd-trace/src/profiling/exporter_cli.js +1 -4
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +6 -2
- package/packages/dd-trace/src/profiling/profiler.js +78 -109
- package/packages/dd-trace/src/profiling/profilers/events.js +2 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +89 -6
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +4 -1
- package/packages/dd-trace/src/propagation-hash/index.js +2 -1
- package/packages/dd-trace/src/proxy.js +40 -6
- package/packages/dd-trace/src/remote_config/index.js +3 -0
- package/packages/dd-trace/src/require-package-json.js +8 -4
- package/packages/dd-trace/src/ritm.js +58 -26
- package/packages/dd-trace/src/runtime_metrics/index.js +3 -0
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +18 -11
- package/packages/dd-trace/src/sampler.js +1 -1
- package/packages/dd-trace/src/service-naming/index.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/definition.js +4 -1
- package/packages/dd-trace/src/service-naming/schemas/util.js +15 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +24 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +60 -0
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +17 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/websocket.js +5 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +17 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/web.js +11 -1
- package/packages/dd-trace/src/service-naming/schemas/v1/websocket.js +6 -0
- package/packages/dd-trace/src/span_stats.js +5 -1
- package/packages/dd-trace/src/standalone/index.js +3 -0
- package/packages/dd-trace/src/telemetry/index.js +2 -3
- package/packages/dd-trace/src/telemetry/send-data.js +5 -19
- package/packages/dd-trace/src/telemetry/session-propagation.js +19 -44
- package/packages/dd-trace/src/telemetry/telemetry.js +28 -171
- package/packages/dd-trace/src/tracer.js +2 -2
- package/packages/dd-trace/src/util.js +0 -9
- package/vendor/dist/@apm-js-collab/code-transformer/index.js +28 -6
- package/vendor/dist/protobufjs/index.js +1 -1
- package/packages/dd-trace/src/log/utils.js +0 -16
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { optionServiceSource } = require('../util')
|
|
4
|
+
|
|
3
5
|
function configWithFallback ({ tracerService, pluginConfig }) {
|
|
4
6
|
return pluginConfig.service || tracerService
|
|
5
7
|
}
|
|
@@ -7,11 +9,13 @@ function configWithFallback ({ tracerService, pluginConfig }) {
|
|
|
7
9
|
const redisNaming = {
|
|
8
10
|
opName: () => 'redis.command',
|
|
9
11
|
serviceName: configWithFallback,
|
|
12
|
+
serviceSource: optionServiceSource,
|
|
10
13
|
}
|
|
11
14
|
|
|
12
15
|
const mySQLNaming = {
|
|
13
16
|
opName: () => 'mysql.query',
|
|
14
17
|
serviceName: withFunction,
|
|
18
|
+
serviceSource: optionServiceSource,
|
|
15
19
|
}
|
|
16
20
|
|
|
17
21
|
function withFunction ({ tracerService, pluginConfig, params }) {
|
|
@@ -27,58 +31,71 @@ const storage = {
|
|
|
27
31
|
aerospike: {
|
|
28
32
|
opName: () => 'aerospike.command',
|
|
29
33
|
serviceName: configWithFallback,
|
|
34
|
+
serviceSource: optionServiceSource,
|
|
30
35
|
},
|
|
31
36
|
'cassandra-driver': {
|
|
32
37
|
opName: () => 'cassandra.query',
|
|
33
38
|
serviceName: configWithFallback,
|
|
39
|
+
serviceSource: optionServiceSource,
|
|
34
40
|
},
|
|
35
41
|
couchbase: {
|
|
36
42
|
opName: () => 'couchbase.query',
|
|
37
43
|
serviceName: configWithFallback,
|
|
44
|
+
serviceSource: optionServiceSource,
|
|
38
45
|
},
|
|
39
46
|
elasticsearch: {
|
|
40
47
|
opName: () => 'elasticsearch.query',
|
|
41
48
|
serviceName: configWithFallback,
|
|
49
|
+
serviceSource: optionServiceSource,
|
|
42
50
|
},
|
|
43
51
|
ioredis: redisNaming,
|
|
44
52
|
iovalkey: {
|
|
45
53
|
opName: () => 'valkey.command',
|
|
46
54
|
serviceName: configWithFallback,
|
|
55
|
+
serviceSource: optionServiceSource,
|
|
47
56
|
},
|
|
48
57
|
mariadb: {
|
|
49
58
|
opName: () => 'mariadb.query',
|
|
50
59
|
serviceName: withFunction,
|
|
60
|
+
serviceSource: optionServiceSource,
|
|
51
61
|
},
|
|
52
62
|
memcached: {
|
|
53
63
|
opName: () => 'memcached.command',
|
|
54
64
|
serviceName: configWithFallback,
|
|
65
|
+
serviceSource: optionServiceSource,
|
|
55
66
|
},
|
|
56
67
|
'mongodb-core': {
|
|
57
68
|
opName: () => 'mongodb.query',
|
|
58
69
|
serviceName: configWithFallback,
|
|
70
|
+
serviceSource: optionServiceSource,
|
|
59
71
|
},
|
|
60
72
|
mysql: mySQLNaming,
|
|
61
73
|
mysql2: mySQLNaming,
|
|
62
74
|
opensearch: {
|
|
63
75
|
opName: () => 'opensearch.query',
|
|
64
76
|
serviceName: configWithFallback,
|
|
77
|
+
serviceSource: optionServiceSource,
|
|
65
78
|
},
|
|
66
79
|
oracledb: {
|
|
67
80
|
opName: () => 'oracle.query',
|
|
68
81
|
serviceName: withFunction,
|
|
82
|
+
serviceSource: optionServiceSource,
|
|
69
83
|
},
|
|
70
84
|
pg: {
|
|
71
85
|
opName: () => 'postgresql.query',
|
|
72
86
|
serviceName: withFunction,
|
|
87
|
+
serviceSource: optionServiceSource,
|
|
73
88
|
},
|
|
74
89
|
prisma: {
|
|
75
90
|
opName: ({ operation }) => `prisma.${operation}`,
|
|
76
91
|
serviceName: configWithFallback,
|
|
92
|
+
serviceSource: optionServiceSource,
|
|
77
93
|
},
|
|
78
94
|
redis: redisNaming,
|
|
79
95
|
tedious: {
|
|
80
96
|
opName: () => 'mssql.query',
|
|
81
97
|
serviceName: configWithFallback,
|
|
98
|
+
serviceSource: optionServiceSource,
|
|
82
99
|
},
|
|
83
100
|
},
|
|
84
101
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { identityService, httpPluginClientService } = require('../util')
|
|
3
|
+
const { identityService, httpPluginClientService, optionServiceSource } = require('../util')
|
|
4
4
|
|
|
5
5
|
const web = {
|
|
6
6
|
client: {
|
|
@@ -15,18 +15,22 @@ const web = {
|
|
|
15
15
|
http: {
|
|
16
16
|
opName: () => 'http.client.request',
|
|
17
17
|
serviceName: httpPluginClientService,
|
|
18
|
+
serviceSource: optionServiceSource,
|
|
18
19
|
},
|
|
19
20
|
genai: {
|
|
20
21
|
opName: () => 'google_genai.request',
|
|
21
22
|
serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
|
|
23
|
+
serviceSource: optionServiceSource,
|
|
22
24
|
},
|
|
23
25
|
fetch: {
|
|
24
26
|
opName: () => 'http.client.request',
|
|
25
27
|
serviceName: httpPluginClientService,
|
|
28
|
+
serviceSource: optionServiceSource,
|
|
26
29
|
},
|
|
27
30
|
http2: {
|
|
28
31
|
opName: () => 'http.client.request',
|
|
29
32
|
serviceName: httpPluginClientService,
|
|
33
|
+
serviceSource: optionServiceSource,
|
|
30
34
|
},
|
|
31
35
|
aws: {
|
|
32
36
|
opName: ({ awsService }) => `aws.${awsService}.request`,
|
|
@@ -45,26 +49,32 @@ const web = {
|
|
|
45
49
|
'apollo.gateway.request': {
|
|
46
50
|
opName: () => 'apollo.gateway.request',
|
|
47
51
|
serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
|
|
52
|
+
serviceSource: optionServiceSource,
|
|
48
53
|
},
|
|
49
54
|
'apollo.gateway.plan': {
|
|
50
55
|
opName: () => 'apollo.gateway.plan',
|
|
51
56
|
serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
|
|
57
|
+
serviceSource: optionServiceSource,
|
|
52
58
|
},
|
|
53
59
|
'apollo.gateway.validate': {
|
|
54
60
|
opName: () => 'apollo.gateway.validate',
|
|
55
61
|
serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
|
|
62
|
+
serviceSource: optionServiceSource,
|
|
56
63
|
},
|
|
57
64
|
'apollo.gateway.execute': {
|
|
58
65
|
opName: () => 'apollo.gateway.execute',
|
|
59
66
|
serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
|
|
67
|
+
serviceSource: optionServiceSource,
|
|
60
68
|
},
|
|
61
69
|
'apollo.gateway.fetch': {
|
|
62
70
|
opName: () => 'apollo.gateway.fetch',
|
|
63
71
|
serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
|
|
72
|
+
serviceSource: optionServiceSource,
|
|
64
73
|
},
|
|
65
74
|
'apollo.gateway.postprocessing': {
|
|
66
75
|
opName: () => 'apollo.gateway.postprocessing',
|
|
67
76
|
serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
|
|
77
|
+
serviceSource: optionServiceSource,
|
|
68
78
|
},
|
|
69
79
|
grpc: {
|
|
70
80
|
opName: () => 'grpc.server.request',
|
|
@@ -1,28 +1,34 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { optionServiceSource } = require('../util')
|
|
4
|
+
|
|
3
5
|
const websocket = {
|
|
4
6
|
request: {
|
|
5
7
|
ws: {
|
|
6
8
|
opName: () => 'web.request',
|
|
7
9
|
serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
|
|
10
|
+
serviceSource: optionServiceSource,
|
|
8
11
|
},
|
|
9
12
|
},
|
|
10
13
|
producer: {
|
|
11
14
|
ws: {
|
|
12
15
|
opName: () => 'websocket.send',
|
|
13
16
|
serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
|
|
17
|
+
serviceSource: optionServiceSource,
|
|
14
18
|
},
|
|
15
19
|
},
|
|
16
20
|
consumer: {
|
|
17
21
|
ws: {
|
|
18
22
|
opName: () => 'websocket.receive',
|
|
19
23
|
serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
|
|
24
|
+
serviceSource: optionServiceSource,
|
|
20
25
|
},
|
|
21
26
|
},
|
|
22
27
|
close: {
|
|
23
28
|
ws: {
|
|
24
29
|
opName: () => 'websocket.close',
|
|
25
30
|
serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
|
|
31
|
+
serviceSource: optionServiceSource,
|
|
26
32
|
},
|
|
27
33
|
},
|
|
28
34
|
}
|
|
@@ -11,7 +11,7 @@ const {
|
|
|
11
11
|
HTTP_ROUTE,
|
|
12
12
|
HTTP_METHOD,
|
|
13
13
|
} = require('../../../ext/tags')
|
|
14
|
-
const { ORIGIN_KEY, TOP_LEVEL_KEY } = require('./constants')
|
|
14
|
+
const { ORIGIN_KEY, TOP_LEVEL_KEY, SVC_SRC_KEY } = require('./constants')
|
|
15
15
|
const { version } = require('./pkg')
|
|
16
16
|
const processTags = require('./process-tags')
|
|
17
17
|
|
|
@@ -60,6 +60,7 @@ class SpanAggStats {
|
|
|
60
60
|
synthetics,
|
|
61
61
|
method,
|
|
62
62
|
endpoint,
|
|
63
|
+
srvSrc,
|
|
63
64
|
} = this.aggKey
|
|
64
65
|
|
|
65
66
|
return {
|
|
@@ -71,6 +72,7 @@ class SpanAggStats {
|
|
|
71
72
|
Synthetics: synthetics,
|
|
72
73
|
HTTPMethod: method,
|
|
73
74
|
HTTPEndpoint: endpoint,
|
|
75
|
+
srv_src: srvSrc,
|
|
74
76
|
Hits: this.hits,
|
|
75
77
|
TopLevelHits: this.topLevelHits,
|
|
76
78
|
Errors: this.errors,
|
|
@@ -91,6 +93,7 @@ class SpanAggKey {
|
|
|
91
93
|
this.synthetics = span.meta[ORIGIN_KEY] === 'synthetics'
|
|
92
94
|
this.endpoint = span.meta[HTTP_ROUTE] || span.meta[HTTP_ENDPOINT] || ''
|
|
93
95
|
this.method = span.meta[HTTP_METHOD] || ''
|
|
96
|
+
this.srvSrc = span.meta[SVC_SRC_KEY] || ''
|
|
94
97
|
}
|
|
95
98
|
|
|
96
99
|
toString () {
|
|
@@ -103,6 +106,7 @@ class SpanAggKey {
|
|
|
103
106
|
this.synthetics,
|
|
104
107
|
this.method,
|
|
105
108
|
this.endpoint,
|
|
109
|
+
this.srvSrc,
|
|
106
110
|
].join(',')
|
|
107
111
|
}
|
|
108
112
|
}
|
|
@@ -11,6 +11,9 @@ const startCh = channel('dd-trace:span:start')
|
|
|
11
11
|
const injectCh = channel('dd-trace:span:inject')
|
|
12
12
|
const extractCh = channel('dd-trace:span:extract')
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* @param {import('../config/config-base')} config - Tracer configuration
|
|
16
|
+
*/
|
|
14
17
|
function configure (config) {
|
|
15
18
|
if (startCh.hasSubscribers) startCh.unsubscribe(onSpanStart)
|
|
16
19
|
if (injectCh.hasSubscribers) injectCh.unsubscribe(onSpanInject)
|
|
@@ -5,15 +5,14 @@ let telemetry
|
|
|
5
5
|
// Lazy load the telemetry module to avoid the performance impact of loading it unconditionally
|
|
6
6
|
module.exports = {
|
|
7
7
|
start (config, ...args) {
|
|
8
|
+
if (!config.telemetry.enabled) return
|
|
8
9
|
telemetry ??= require('./telemetry')
|
|
9
10
|
telemetry.start(config, ...args)
|
|
10
11
|
},
|
|
11
|
-
stop () {
|
|
12
|
-
telemetry?.stop()
|
|
13
|
-
},
|
|
14
12
|
// This might be called before `start` so we have to trigger loading the
|
|
15
13
|
// underlying module here as well.
|
|
16
14
|
updateConfig (changes, config, ...args) {
|
|
15
|
+
if (!config.telemetry.enabled) return
|
|
17
16
|
telemetry ??= require('./telemetry')
|
|
18
17
|
telemetry.updateConfig(changes, config, ...args)
|
|
19
18
|
},
|
|
@@ -62,19 +62,6 @@ const { getValueFromEnvSources } = require('../config/helper')
|
|
|
62
62
|
* kernel_name?: string
|
|
63
63
|
* } & Record<string, unknown>} TelemetryHost
|
|
64
64
|
*/
|
|
65
|
-
/**
|
|
66
|
-
* @typedef {{
|
|
67
|
-
* hostname?: string,
|
|
68
|
-
* port?: string | number,
|
|
69
|
-
* url?: string | URL,
|
|
70
|
-
* site?: string,
|
|
71
|
-
* apiKey?: string,
|
|
72
|
-
* isCiVisibility?: boolean,
|
|
73
|
-
* spanAttributeSchema?: string,
|
|
74
|
-
* tags: Record<string, string>,
|
|
75
|
-
* telemetry?: { debug?: boolean }
|
|
76
|
-
* }} TelemetryConfig
|
|
77
|
-
*/
|
|
78
65
|
/**
|
|
79
66
|
* @callback SendDataCallback
|
|
80
67
|
* @param {Error | null | undefined} error
|
|
@@ -85,23 +72,22 @@ const { getValueFromEnvSources } = require('../config/helper')
|
|
|
85
72
|
let agentTelemetry = true
|
|
86
73
|
|
|
87
74
|
/**
|
|
88
|
-
* @param {
|
|
75
|
+
* @param {import('../config/config-base')} config
|
|
89
76
|
* @param {TelemetryApplication} application
|
|
90
77
|
* @param {TelemetryRequestType} reqType
|
|
91
78
|
* @returns {Record<string, string>}
|
|
92
79
|
*/
|
|
93
80
|
function getHeaders (config, application, reqType) {
|
|
94
|
-
const sessionId = config.tags['runtime-id']
|
|
95
81
|
const headers = {
|
|
96
82
|
'content-type': 'application/json',
|
|
97
83
|
'dd-telemetry-api-version': 'v2',
|
|
98
84
|
'dd-telemetry-request-type': reqType,
|
|
99
85
|
'dd-client-library-language': application.language_name,
|
|
100
86
|
'dd-client-library-version': application.tracer_version,
|
|
101
|
-
'dd-session-id':
|
|
87
|
+
'dd-session-id': config.tags['runtime-id'],
|
|
102
88
|
}
|
|
103
|
-
if (config.
|
|
104
|
-
headers['dd-root-session-id'] = config.
|
|
89
|
+
if (config.DD_ROOT_JS_SESSION_ID) {
|
|
90
|
+
headers['dd-root-session-id'] = config.DD_ROOT_JS_SESSION_ID
|
|
105
91
|
}
|
|
106
92
|
const debug = config.telemetry && config.telemetry.debug
|
|
107
93
|
if (debug) {
|
|
@@ -141,7 +127,7 @@ function getPayload (payload) {
|
|
|
141
127
|
|
|
142
128
|
// TODO(BridgeAR): Simplify this code. A lot does not need to be recalculated on every call.
|
|
143
129
|
/**
|
|
144
|
-
* @param {
|
|
130
|
+
* @param {import('../config/config-base')} config
|
|
145
131
|
* @param {TelemetryApplication} application
|
|
146
132
|
* @param {TelemetryHost} host
|
|
147
133
|
* @param {TelemetryRequestType} reqType
|
|
@@ -1,53 +1,37 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const dc = require('dc-polyfill')
|
|
4
|
-
|
|
3
|
+
const dc = /** @type {typeof import('diagnostics_channel')} */ (require('dc-polyfill'))
|
|
5
4
|
const childProcessChannel = dc.tracingChannel('datadog:child_process:execution')
|
|
6
5
|
|
|
7
6
|
let subscribed = false
|
|
8
|
-
let rootSessionId
|
|
9
7
|
let runtimeId
|
|
10
8
|
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
const base = existingEnv == null ? process.env : existingEnv
|
|
14
|
-
return {
|
|
15
|
-
...base,
|
|
16
|
-
DD_ROOT_JS_SESSION_ID: rootSessionId,
|
|
17
|
-
DD_PARENT_JS_SESSION_ID: runtimeId,
|
|
18
|
-
}
|
|
9
|
+
function isOptionsObject (value) {
|
|
10
|
+
return value != null && typeof value === 'object' && !Array.isArray(value) && value
|
|
19
11
|
}
|
|
20
12
|
|
|
21
|
-
function
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
if (args[1] != null && typeof args[1] === 'object') {
|
|
26
|
-
return { index: 1, exists: true }
|
|
27
|
-
}
|
|
28
|
-
if (!shell && args[2] != null && typeof args[2] === 'object') {
|
|
29
|
-
return { index: 2, exists: true }
|
|
30
|
-
}
|
|
31
|
-
return { index: shell ? 1 : 2, exists: false }
|
|
13
|
+
function getEnvWithRuntimeId (env) {
|
|
14
|
+
// eslint-disable-next-line eslint-rules/eslint-process-env
|
|
15
|
+
return { ...(env ?? process.env), DD_ROOT_JS_SESSION_ID: runtimeId }
|
|
32
16
|
}
|
|
33
17
|
|
|
34
18
|
function onChildProcessStart (context) {
|
|
35
|
-
if (!context.callArgs) return
|
|
36
|
-
|
|
37
19
|
const args = context.callArgs
|
|
38
|
-
|
|
20
|
+
if (!args) return
|
|
39
21
|
|
|
40
|
-
|
|
41
|
-
|
|
22
|
+
const index = Array.isArray(args[1]) || (!context.shell && !isOptionsObject(args[1])) ? 2 : 1
|
|
23
|
+
const options = isOptionsObject(args[index]) ? args[index] : undefined
|
|
24
|
+
|
|
25
|
+
if (options) {
|
|
26
|
+
args[index] = { ...options, env: getEnvWithRuntimeId(options.env) }
|
|
42
27
|
return
|
|
43
28
|
}
|
|
44
29
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (!context.shell && !Array.isArray(args[1])) {
|
|
30
|
+
if (index === 2 && !Array.isArray(args[1])) {
|
|
48
31
|
args.splice(1, 0, [])
|
|
49
32
|
}
|
|
50
33
|
|
|
34
|
+
const opts = { env: getEnvWithRuntimeId() }
|
|
51
35
|
if (typeof args[index] === 'function') {
|
|
52
36
|
args.splice(index, 0, opts)
|
|
53
37
|
} else {
|
|
@@ -55,24 +39,15 @@ function onChildProcessStart (context) {
|
|
|
55
39
|
}
|
|
56
40
|
}
|
|
57
41
|
|
|
58
|
-
const handler = { start: onChildProcessStart }
|
|
59
|
-
|
|
60
42
|
function start (config) {
|
|
61
43
|
if (!config.telemetry?.enabled || subscribed) return
|
|
62
44
|
subscribed = true
|
|
63
45
|
|
|
64
|
-
|
|
65
|
-
runtimeId = config.tags['runtime-id']
|
|
66
|
-
|
|
67
|
-
childProcessChannel.subscribe(handler)
|
|
68
|
-
}
|
|
46
|
+
runtimeId = config.DD_ROOT_JS_SESSION_ID || config.tags['runtime-id']
|
|
69
47
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
subscribed = false
|
|
74
|
-
rootSessionId = undefined
|
|
75
|
-
runtimeId = undefined
|
|
48
|
+
childProcessChannel.subscribe(
|
|
49
|
+
/** @type {import('diagnostics_channel').TracingChannelSubscribers<object>} */ ({ start: onChildProcessStart })
|
|
50
|
+
)
|
|
76
51
|
}
|
|
77
52
|
|
|
78
|
-
module.exports = { start
|
|
53
|
+
module.exports = { start }
|