dd-trace 6.9.0 → 6.10.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/vitest-no-worker-init-setup.mjs +112 -10
- package/index.d.ts +42 -0
- package/package.json +4 -3
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +111 -6
- package/packages/datadog-instrumentations/src/helpers/pool-acquire.js +629 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -1
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/webdriverio.js +81 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/targets.json +1 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +83 -1
- package/packages/datadog-instrumentations/src/jest.js +1 -1
- package/packages/datadog-instrumentations/src/mocha/main.js +1 -1
- package/packages/datadog-instrumentations/src/mocha/utils.js +2 -8
- package/packages/datadog-instrumentations/src/mysql.js +45 -15
- package/packages/datadog-instrumentations/src/mysql2.js +119 -18
- package/packages/datadog-instrumentations/src/path-to-regexp.js +67 -1
- package/packages/datadog-instrumentations/src/pg.js +116 -92
- package/packages/datadog-instrumentations/src/vitest-main-no-worker-init.js +43 -4
- package/packages/datadog-instrumentations/src/vitest-main.js +169 -17
- package/packages/datadog-instrumentations/src/vitest-util.js +64 -5
- package/packages/datadog-instrumentations/src/vitest-worker.js +150 -25
- package/packages/datadog-instrumentations/src/webdriverio.js +31 -17
- package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/trace-checkpoint.js +12 -6
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +2 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +1 -5
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +1 -1
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +31 -17
- package/packages/datadog-plugin-jest/src/index.js +5 -4
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +2 -3
- package/packages/datadog-plugin-kafkajs/src/consumer.js +2 -3
- package/packages/datadog-plugin-kafkajs/src/producer.js +3 -2
- package/packages/datadog-plugin-kafkajs/src/utils.js +65 -7
- package/packages/datadog-plugin-mocha/src/index.js +550 -39
- package/packages/datadog-plugin-mysql/src/index.js +37 -0
- package/packages/datadog-plugin-next/src/index.js +1 -19
- package/packages/datadog-plugin-openai-agents/src/integration.js +278 -69
- package/packages/datadog-plugin-openai-agents/src/processor.js +16 -4
- package/packages/datadog-plugin-pg/src/index.js +1 -0
- package/packages/datadog-plugin-vitest/src/index.js +8 -20
- package/packages/datadog-plugin-ws/src/util.js +2 -1
- package/packages/dd-trace/src/appsec/api_security/normalized-route.js +453 -0
- package/packages/dd-trace/src/appsec/handlers/http-request.js +13 -0
- package/packages/dd-trace/src/carrier.js +356 -0
- package/packages/dd-trace/src/config/generated-config-types.d.ts +3 -0
- package/packages/dd-trace/src/config/supported-configurations.json +10 -0
- package/packages/dd-trace/src/datastreams/context.js +6 -1
- package/packages/dd-trace/src/datastreams/manager.js +5 -1
- package/packages/dd-trace/src/datastreams/pathway.js +23 -22
- package/packages/dd-trace/src/datastreams/processor.js +3 -2
- package/packages/dd-trace/src/llmobs/constants/tags.js +5 -0
- package/packages/dd-trace/src/llmobs/index.js +34 -2
- package/packages/dd-trace/src/llmobs/span_processor.js +16 -0
- package/packages/dd-trace/src/llmobs/tagger.js +96 -0
- package/packages/dd-trace/src/llmobs/util.js +78 -0
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +126 -120
- package/packages/dd-trace/src/opentracing/propagation/text_map_dsm.js +4 -8
- package/packages/dd-trace/src/plugin_manager.js +2 -0
- package/packages/{datadog-plugin-jest/src/util.js → dd-trace/src/plugins/util/jest.js} +1 -62
- package/packages/dd-trace/src/plugins/util/test.js +84 -5
- package/packages/dd-trace/src/plugins/util/web.js +53 -2
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const dc = require('dc-polyfill')
|
|
4
|
-
const { getMessageSize } = require('../../dd-trace/src/datastreams')
|
|
5
4
|
const ConsumerPlugin = require('../../dd-trace/src/plugins/consumer')
|
|
6
|
-
const { convertToTextMap } = require('./utils')
|
|
5
|
+
const { convertToTextMap, getKafkaMessageSize } = require('./utils')
|
|
7
6
|
const afterStartCh = dc.channel('dd-trace:kafkajs:consumer:afterStart')
|
|
8
7
|
const beforeFinishCh = dc.channel('dd-trace:kafkajs:consumer:beforeFinish')
|
|
9
8
|
|
|
@@ -69,7 +68,7 @@ class KafkajsConsumerPlugin extends ConsumerPlugin {
|
|
|
69
68
|
if (!headers) return
|
|
70
69
|
|
|
71
70
|
const { span } = ctx.currentStore
|
|
72
|
-
const payloadSize =
|
|
71
|
+
const payloadSize = getKafkaMessageSize(message)
|
|
73
72
|
this.tracer.decodeDataStreamsContext(headers)
|
|
74
73
|
const edgeTags = ['direction:in', `group:${groupId}`, `topic:${topic}`, 'type:kafka']
|
|
75
74
|
if (clusterId) {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const ProducerPlugin = require('../../dd-trace/src/plugins/producer')
|
|
4
|
-
const { DsmPathwayCodec
|
|
4
|
+
const { DsmPathwayCodec } = require('../../dd-trace/src/datastreams')
|
|
5
|
+
const { getKafkaMessageSize } = require('./utils')
|
|
5
6
|
|
|
6
7
|
const BOOTSTRAP_SERVERS_KEY = 'messaging.kafka.bootstrap.servers'
|
|
7
8
|
const MESSAGING_DESTINATION_KEY = 'messaging.destination.name'
|
|
@@ -77,7 +78,7 @@ class KafkajsProducerPlugin extends ProducerPlugin {
|
|
|
77
78
|
|
|
78
79
|
for (const message of messages) {
|
|
79
80
|
if (message !== null && typeof message === 'object') {
|
|
80
|
-
const payloadSize =
|
|
81
|
+
const payloadSize = getKafkaMessageSize(message)
|
|
81
82
|
const edgeTags = ['direction:out', `topic:${topic}`, 'type:kafka']
|
|
82
83
|
|
|
83
84
|
if (clusterId) {
|
|
@@ -1,27 +1,85 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { getSizeOrZero } = require('../../dd-trace/src/datastreams')
|
|
4
|
+
|
|
5
|
+
/** @typedef {string | Buffer | null | undefined} KafkaHeaderValue */
|
|
6
|
+
/** @typedef {Record<string, KafkaHeaderValue | KafkaHeaderValue[]>} KafkaHeaderMap */
|
|
7
|
+
/** @typedef {Array<Record<string, KafkaHeaderValue>>} NativeHeaderList */
|
|
8
|
+
|
|
9
|
+
/** @typedef {Record<string, string | string[]>} TextMap */
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @param {TextMap} textMap
|
|
13
|
+
* @param {string} key
|
|
14
|
+
* @param {KafkaHeaderValue} value
|
|
15
|
+
*/
|
|
16
|
+
function addHeaderValue (textMap, key, value) {
|
|
17
|
+
if (value === null || value === undefined) return
|
|
18
|
+
|
|
19
|
+
const existing = textMap[key]
|
|
20
|
+
if (existing === undefined) {
|
|
21
|
+
textMap[key] = value.toString()
|
|
22
|
+
} else if (typeof existing === 'string') {
|
|
23
|
+
textMap[key] = [existing, value.toString()]
|
|
24
|
+
} else {
|
|
25
|
+
existing.push(value.toString())
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** @param {KafkaHeaderMap | NativeHeaderList | null | undefined} bufferMap */
|
|
3
30
|
function convertToTextMap (bufferMap) {
|
|
4
31
|
if (!bufferMap) return null
|
|
5
32
|
|
|
6
|
-
//
|
|
33
|
+
// A `toString` or `__proto__` wire key would read an inherited value back as a repeat.
|
|
34
|
+
/** @type {TextMap} */
|
|
35
|
+
const textMap = Object.create(null)
|
|
36
|
+
|
|
37
|
+
// rdKafka reports one single-key record per wire field.
|
|
7
38
|
if (Array.isArray(bufferMap)) {
|
|
8
|
-
const headers = {}
|
|
9
39
|
for (const headerMap of bufferMap) {
|
|
10
40
|
for (const key of Object.keys(headerMap)) {
|
|
11
|
-
|
|
41
|
+
addHeaderValue(textMap, key, headerMap[key])
|
|
12
42
|
}
|
|
13
43
|
}
|
|
14
|
-
return
|
|
44
|
+
return textMap
|
|
15
45
|
}
|
|
16
46
|
|
|
17
|
-
const textMap = {}
|
|
18
47
|
for (const key of Object.keys(bufferMap)) {
|
|
19
|
-
|
|
20
|
-
|
|
48
|
+
const value = bufferMap[key]
|
|
49
|
+
if (Array.isArray(value)) {
|
|
50
|
+
for (const repeated of value) {
|
|
51
|
+
addHeaderValue(textMap, key, repeated)
|
|
52
|
+
}
|
|
53
|
+
} else {
|
|
54
|
+
addHeaderValue(textMap, key, value)
|
|
55
|
+
}
|
|
21
56
|
}
|
|
22
57
|
return textMap
|
|
23
58
|
}
|
|
24
59
|
|
|
60
|
+
/**
|
|
61
|
+
* A KafkaJS header value array becomes one wire record per element, so its key
|
|
62
|
+
* counts once per value. A native header array already holds one record per
|
|
63
|
+
* entry, where the array indices are not wire bytes.
|
|
64
|
+
*
|
|
65
|
+
* @param {{ key?: unknown, value?: unknown,
|
|
66
|
+
* headers?: KafkaHeaderMap | NativeHeaderList | null }} message
|
|
67
|
+
*/
|
|
68
|
+
function getKafkaMessageSize (message) {
|
|
69
|
+
const { key, value, headers } = message
|
|
70
|
+
let size = getSizeOrZero(key) + getSizeOrZero(value)
|
|
71
|
+
if (headers === undefined || headers === null) return size
|
|
72
|
+
if (Array.isArray(headers)) return size + getSizeOrZero(headers)
|
|
73
|
+
|
|
74
|
+
for (const headerKey of Object.keys(headers)) {
|
|
75
|
+
const headerValue = headers[headerKey]
|
|
76
|
+
const keySize = Buffer.byteLength(headerKey, 'utf8')
|
|
77
|
+
size += (Array.isArray(headerValue) ? keySize * headerValue.length : keySize) + getSizeOrZero(headerValue)
|
|
78
|
+
}
|
|
79
|
+
return size
|
|
80
|
+
}
|
|
81
|
+
|
|
25
82
|
module.exports = {
|
|
26
83
|
convertToTextMap,
|
|
84
|
+
getKafkaMessageSize,
|
|
27
85
|
}
|