dd-trace 5.8.0 → 5.9.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 +0 -1
- package/ci/init.js +3 -3
- package/package.json +4 -5
- package/packages/datadog-esbuild/index.js +2 -2
- package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
- package/packages/datadog-instrumentations/src/apollo.js +5 -3
- package/packages/datadog-instrumentations/src/aws-sdk.js +4 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
- package/packages/datadog-instrumentations/src/cucumber.js +6 -2
- package/packages/datadog-instrumentations/src/fs.js +0 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +56 -56
- package/packages/datadog-instrumentations/src/helpers/instrument.js +2 -2
- package/packages/datadog-instrumentations/src/http/client.js +1 -0
- package/packages/datadog-instrumentations/src/jest.js +12 -13
- package/packages/datadog-instrumentations/src/kafkajs.js +2 -1
- package/packages/datadog-instrumentations/src/ldapjs.js +2 -1
- package/packages/datadog-instrumentations/src/mocha.js +1 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +3 -3
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/passport-utils.js +1 -0
- package/packages/datadog-instrumentations/src/playwright.js +8 -2
- package/packages/datadog-instrumentations/src/rhea.js +5 -2
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/fetch.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/plan.js +0 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +2 -17
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +6 -2
- package/packages/datadog-plugin-aws-sdk/src/base.js +3 -3
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +2 -2
- package/packages/datadog-plugin-child_process/src/index.js +1 -1
- package/packages/datadog-plugin-couchbase/src/index.js +2 -1
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +1 -0
- package/packages/datadog-plugin-fetch/src/index.js +1 -1
- package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/server.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +2 -2
- package/packages/datadog-plugin-http2/src/client.js +4 -3
- package/packages/datadog-plugin-jest/src/index.js +1 -0
- package/packages/datadog-plugin-kafkajs/src/consumer.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/producer.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +1 -1
- package/packages/datadog-plugin-openai/src/index.js +4 -4
- package/packages/datadog-plugin-playwright/src/index.js +7 -2
- package/packages/datadog-plugin-rhea/src/consumer.js +1 -1
- package/packages/datadog-plugin-rhea/src/producer.js +1 -1
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-tedious/src/index.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +17 -17
- package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +132 -132
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +1 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +2 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +4 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +27 -18
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +7 -4
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +0 -1
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -1
- package/packages/dd-trace/src/ci-visibility/test-api-manual/test-api-manual-plugin.js +1 -0
- package/packages/dd-trace/src/config.js +13 -13
- package/packages/dd-trace/src/datastreams/pathway.js +1 -1
- package/packages/dd-trace/src/datastreams/processor.js +15 -15
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/exporters/common/request.js +1 -0
- package/packages/dd-trace/src/exporters/span-stats/writer.js +0 -1
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/opentelemetry/span.js +2 -0
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +1 -1
- package/packages/dd-trace/src/opentracing/span.js +1 -1
- package/packages/dd-trace/src/plugins/apollo.js +3 -1
- package/packages/dd-trace/src/plugins/ci_plugin.js +2 -1
- package/packages/dd-trace/src/plugins/composite.js +3 -4
- package/packages/dd-trace/src/plugins/database.js +1 -0
- package/packages/dd-trace/src/plugins/index.js +43 -43
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/tracing.js +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +2 -1
- package/packages/dd-trace/src/plugins/util/web.js +4 -4
- package/packages/dd-trace/src/profiling/config.js +1 -1
- package/packages/dd-trace/src/profiling/loggers/console.js +1 -1
- package/packages/dd-trace/src/runtime_metrics.js +8 -5
- package/packages/dd-trace/src/serverless.js +3 -2
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +0 -1
- package/packages/dd-trace/src/span_processor.js +2 -2
- package/packages/dd-trace/src/span_stats.js +1 -1
- package/packages/dd-trace/src/telemetry/dependencies.js +4 -5
- package/packages/dd-trace/src/telemetry/index.js +12 -13
- package/packages/dd-trace/src/telemetry/send-data.js +0 -1
- package/packages/dd-trace/src/util.js +7 -7
package/LICENSE-3rdparty.csv
CHANGED
|
@@ -48,7 +48,6 @@ dev,eslint-config-standard,MIT,Copyright Feross Aboukhadijeh
|
|
|
48
48
|
dev,eslint-plugin-import,MIT,Copyright 2015 Ben Mosher
|
|
49
49
|
dev,eslint-plugin-mocha,MIT,Copyright 2014 Mathias Schreck
|
|
50
50
|
dev,eslint-plugin-n,MIT,Copyright 2015 Toru Nagashima
|
|
51
|
-
dev,eslint-plugin-node,MIT,Copyright 2015 Toru Nagashima
|
|
52
51
|
dev,eslint-plugin-promise,ISC,jden and other contributors
|
|
53
52
|
dev,eslint-plugin-standard,MIT,Copyright 2015 Jamund Ferguson
|
|
54
53
|
dev,express,MIT,Copyright 2009-2014 TJ Holowaychuk 2013-2014 Roman Shtylman 2014-2015 Douglas Christopher Wilson
|
package/ci/init.js
CHANGED
|
@@ -20,9 +20,9 @@ if (isAgentlessEnabled) {
|
|
|
20
20
|
exporter: 'datadog'
|
|
21
21
|
}
|
|
22
22
|
} else {
|
|
23
|
-
console.error(
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
console.error('DD_CIVISIBILITY_AGENTLESS_ENABLED is set, but neither ' +
|
|
24
|
+
'DD_API_KEY nor DATADOG_API_KEY are set in your environment, so ' +
|
|
25
|
+
'dd-trace will not be initialized.')
|
|
26
26
|
shouldInit = false
|
|
27
27
|
}
|
|
28
28
|
} else {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dd-trace",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.9.0",
|
|
4
4
|
"description": "Datadog APM tracing client for JavaScript",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"typings": "index.d.ts",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"@datadog/native-iast-rewriter": "2.3.0",
|
|
74
74
|
"@datadog/native-iast-taint-tracking": "1.7.0",
|
|
75
75
|
"@datadog/native-metrics": "^2.0.0",
|
|
76
|
-
"@datadog/pprof": "5.
|
|
76
|
+
"@datadog/pprof": "5.2.0",
|
|
77
77
|
"@datadog/sketches-js": "^2.1.0",
|
|
78
78
|
"@opentelemetry/api": "^1.0.0",
|
|
79
79
|
"@opentelemetry/core": "^1.14.0",
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"node-abort-controller": "^3.1.1",
|
|
96
96
|
"opentracing": ">=0.12.1",
|
|
97
97
|
"path-to-regexp": "^0.1.2",
|
|
98
|
-
"pprof-format": "^2.0
|
|
98
|
+
"pprof-format": "^2.1.0",
|
|
99
99
|
"protobufjs": "^7.2.5",
|
|
100
100
|
"retry": "^0.13.1",
|
|
101
101
|
"semver": "^7.5.4",
|
|
@@ -116,11 +116,10 @@
|
|
|
116
116
|
"dotenv": "16.3.1",
|
|
117
117
|
"esbuild": "0.16.12",
|
|
118
118
|
"eslint": "^8.23.0",
|
|
119
|
-
"eslint-config-standard": "^
|
|
119
|
+
"eslint-config-standard": "^17.1.0",
|
|
120
120
|
"eslint-plugin-import": "^2.8.0",
|
|
121
121
|
"eslint-plugin-mocha": "^10.1.0",
|
|
122
122
|
"eslint-plugin-n": "^15.7.0",
|
|
123
|
-
"eslint-plugin-node": "^5.2.1",
|
|
124
123
|
"eslint-plugin-promise": "^3.6.0",
|
|
125
124
|
"eslint-plugin-standard": "^3.0.1",
|
|
126
125
|
"express": "^4.18.2",
|
|
@@ -89,7 +89,7 @@ module.exports.setup = function (build) {
|
|
|
89
89
|
|
|
90
90
|
let pathToPackageJson
|
|
91
91
|
try {
|
|
92
|
-
pathToPackageJson = require.resolve(`${extracted.pkg}/package.json`, { paths: [
|
|
92
|
+
pathToPackageJson = require.resolve(`${extracted.pkg}/package.json`, { paths: [args.resolveDir] })
|
|
93
93
|
} catch (err) {
|
|
94
94
|
if (err.code === 'MODULE_NOT_FOUND') {
|
|
95
95
|
if (!internal) {
|
|
@@ -173,7 +173,7 @@ function dotFriendlyResolve (path, directory) {
|
|
|
173
173
|
path = '../'
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
return require.resolve(path, { paths: [
|
|
176
|
+
return require.resolve(path, { paths: [directory] })
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
/**
|
|
@@ -14,14 +14,14 @@ const CHANNELS = {
|
|
|
14
14
|
'gateway.postprocessing': tracingChannel('apm:apollo:gateway:postprocessing')
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
const executorCh = channel('apm:apollo:gateway:request:executor')
|
|
18
17
|
const generalErrorCh = channel('apm:apollo:gateway:general:error')
|
|
19
18
|
|
|
20
19
|
function wrapExecutor (executor) {
|
|
21
20
|
return function (...args) {
|
|
21
|
+
const channel = CHANNELS['gateway.request']
|
|
22
22
|
const ctx = { requestContext: args[0], gateway: this }
|
|
23
|
-
|
|
24
|
-
return
|
|
23
|
+
|
|
24
|
+
return channel.tracePromise(executor, ctx, this, ...args)
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -67,7 +67,9 @@ function wrapStartActiveSpan (startActiveSpan) {
|
|
|
67
67
|
}
|
|
68
68
|
break
|
|
69
69
|
}
|
|
70
|
+
// Patch `executor` instead so the requestContext can be captured.
|
|
70
71
|
case 'gateway.request':
|
|
72
|
+
break
|
|
71
73
|
case 'gateway.execute':
|
|
72
74
|
case 'gateway.postprocessing' :
|
|
73
75
|
case 'gateway.fetch': {
|
|
@@ -111,6 +111,7 @@ function wrapSmithySend (send) {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
function wrapCb (cb, serviceName, request, ar) {
|
|
114
|
+
// eslint-disable-next-line n/handle-callback-err
|
|
114
115
|
return function wrappedCb (err, response) {
|
|
115
116
|
const obj = { request, response }
|
|
116
117
|
return ar.runInAsyncScope(() => {
|
|
@@ -163,7 +164,9 @@ function getChannelSuffix (name) {
|
|
|
163
164
|
's3',
|
|
164
165
|
'sns',
|
|
165
166
|
'sqs'
|
|
166
|
-
].includes(name)
|
|
167
|
+
].includes(name)
|
|
168
|
+
? name
|
|
169
|
+
: 'default'
|
|
167
170
|
}
|
|
168
171
|
|
|
169
172
|
addHook({ name: '@smithy/smithy-client', versions: ['>=1.0.3'] }, smithy => {
|
|
@@ -10,7 +10,7 @@ const shimmer = require('../../datadog-shimmer')
|
|
|
10
10
|
const startCh = channel('apm:cassandra-driver:query:start')
|
|
11
11
|
const finishCh = channel('apm:cassandra-driver:query:finish')
|
|
12
12
|
const errorCh = channel('apm:cassandra-driver:query:error')
|
|
13
|
-
const connectCh = channel(
|
|
13
|
+
const connectCh = channel('apm:cassandra-driver:query:connect')
|
|
14
14
|
|
|
15
15
|
addHook({ name: 'cassandra-driver', versions: ['>=3.0.0'] }, cassandra => {
|
|
16
16
|
shimmer.wrap(cassandra.Client.prototype, 'batch', batch => function (queries, options, callback) {
|
|
@@ -132,7 +132,8 @@ function wrapRun (pl, isLatestVersion) {
|
|
|
132
132
|
promise.finally(() => {
|
|
133
133
|
const result = this.getWorstStepResult()
|
|
134
134
|
const { status, skipReason, errorMessage } = isLatestVersion
|
|
135
|
-
? getStatusFromResultLatest(result)
|
|
135
|
+
? getStatusFromResultLatest(result)
|
|
136
|
+
: getStatusFromResult(result)
|
|
136
137
|
|
|
137
138
|
if (lastStatusByPickleId.has(this.pickle.id)) {
|
|
138
139
|
lastStatusByPickleId.get(this.pickle.id).push(status)
|
|
@@ -177,7 +178,8 @@ function wrapRun (pl, isLatestVersion) {
|
|
|
177
178
|
|
|
178
179
|
promise.then((result) => {
|
|
179
180
|
const { status, skipReason, errorMessage } = isLatestVersion
|
|
180
|
-
? getStatusFromResultLatest(result)
|
|
181
|
+
? getStatusFromResultLatest(result)
|
|
182
|
+
: getStatusFromResult(result)
|
|
181
183
|
|
|
182
184
|
testFinishCh.publish({ isStep: true, status, skipReason, errorMessage })
|
|
183
185
|
})
|
|
@@ -290,6 +292,8 @@ function getWrappedStart (start, frameworkVersion) {
|
|
|
290
292
|
const knownTestsResponse = await knownTestsPromise
|
|
291
293
|
if (!knownTestsResponse.err) {
|
|
292
294
|
knownTests = knownTestsResponse.knownTests
|
|
295
|
+
} else {
|
|
296
|
+
isEarlyFlakeDetectionEnabled = false
|
|
293
297
|
}
|
|
294
298
|
}
|
|
295
299
|
|
|
@@ -11,7 +11,7 @@ const requestStartCh = channel('apm:google-cloud-pubsub:request:start')
|
|
|
11
11
|
const requestFinishCh = channel('apm:google-cloud-pubsub:request:finish')
|
|
12
12
|
const requestErrorCh = channel('apm:google-cloud-pubsub:request:error')
|
|
13
13
|
|
|
14
|
-
const receiveStartCh = channel(
|
|
14
|
+
const receiveStartCh = channel('apm:google-cloud-pubsub:receive:start')
|
|
15
15
|
const receiveFinishCh = channel('apm:google-cloud-pubsub:receive:finish')
|
|
16
16
|
const receiveErrorCh = channel('apm:google-cloud-pubsub:receive:error')
|
|
17
17
|
|
|
@@ -23,62 +23,62 @@ module.exports = {
|
|
|
23
23
|
'@opentelemetry/sdk-trace-node': () => require('../otel-sdk-trace'),
|
|
24
24
|
'@redis/client': () => require('../redis'),
|
|
25
25
|
'@smithy/smithy-client': () => require('../aws-sdk'),
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
aerospike: () => require('../aerospike'),
|
|
27
|
+
amqp10: () => require('../amqp10'),
|
|
28
|
+
amqplib: () => require('../amqplib'),
|
|
29
29
|
'aws-sdk': () => require('../aws-sdk'),
|
|
30
|
-
|
|
30
|
+
bluebird: () => require('../bluebird'),
|
|
31
31
|
'body-parser': () => require('../body-parser'),
|
|
32
|
-
|
|
32
|
+
bunyan: () => require('../bunyan'),
|
|
33
33
|
'cassandra-driver': () => require('../cassandra-driver'),
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
child_process: () => require('../child_process'),
|
|
35
|
+
connect: () => require('../connect'),
|
|
36
|
+
cookie: () => require('../cookie'),
|
|
37
37
|
'cookie-parser': () => require('../cookie-parser'),
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
couchbase: () => require('../couchbase'),
|
|
39
|
+
crypto: () => require('../crypto'),
|
|
40
|
+
cypress: () => require('../cypress'),
|
|
41
|
+
dns: () => require('../dns'),
|
|
42
|
+
elasticsearch: () => require('../elasticsearch'),
|
|
43
|
+
express: () => require('../express'),
|
|
44
44
|
'express-mongo-sanitize': () => require('../express-mongo-sanitize'),
|
|
45
|
-
|
|
45
|
+
fastify: () => require('../fastify'),
|
|
46
46
|
'find-my-way': () => require('../find-my-way'),
|
|
47
|
-
|
|
47
|
+
fs: () => require('../fs'),
|
|
48
48
|
'generic-pool': () => require('../generic-pool'),
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
graphql: () => require('../graphql'),
|
|
50
|
+
grpc: () => require('../grpc'),
|
|
51
|
+
hapi: () => require('../hapi'),
|
|
52
|
+
http: () => require('../http'),
|
|
53
|
+
http2: () => require('../http2'),
|
|
54
|
+
https: () => require('../http'),
|
|
55
|
+
ioredis: () => require('../ioredis'),
|
|
56
56
|
'jest-circus': () => require('../jest'),
|
|
57
57
|
'jest-config': () => require('../jest'),
|
|
58
58
|
'jest-environment-node': () => require('../jest'),
|
|
59
59
|
'jest-environment-jsdom': () => require('../jest'),
|
|
60
60
|
'jest-jasmine2': () => require('../jest'),
|
|
61
61
|
'jest-worker': () => require('../jest'),
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
knex: () => require('../knex'),
|
|
63
|
+
koa: () => require('../koa'),
|
|
64
64
|
'koa-router': () => require('../koa'),
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
kafkajs: () => require('../kafkajs'),
|
|
66
|
+
ldapjs: () => require('../ldapjs'),
|
|
67
67
|
'limitd-client': () => require('../limitd-client'),
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
mariadb: () => require('../mariadb'),
|
|
69
|
+
memcached: () => require('../memcached'),
|
|
70
70
|
'microgateway-core': () => require('../microgateway-core'),
|
|
71
|
-
|
|
71
|
+
mocha: () => require('../mocha'),
|
|
72
72
|
'mocha-each': () => require('../mocha'),
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
moleculer: () => require('../moleculer'),
|
|
74
|
+
mongodb: () => require('../mongodb'),
|
|
75
75
|
'mongodb-core': () => require('../mongodb-core'),
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
mongoose: () => require('../mongoose'),
|
|
77
|
+
mquery: () => require('../mquery'),
|
|
78
|
+
mysql: () => require('../mysql'),
|
|
79
|
+
mysql2: () => require('../mysql2'),
|
|
80
|
+
net: () => require('../net'),
|
|
81
|
+
next: () => require('../next'),
|
|
82
82
|
'node:child_process': () => require('../child_process'),
|
|
83
83
|
'node:crypto': () => require('../crypto'),
|
|
84
84
|
'node:dns': () => require('../dns'),
|
|
@@ -86,26 +86,26 @@ module.exports = {
|
|
|
86
86
|
'node:http2': () => require('../http2'),
|
|
87
87
|
'node:https': () => require('../http'),
|
|
88
88
|
'node:net': () => require('../net'),
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
oracledb: () => require('../oracledb'),
|
|
90
|
+
openai: () => require('../openai'),
|
|
91
|
+
paperplane: () => require('../paperplane'),
|
|
92
92
|
'passport-http': () => require('../passport-http'),
|
|
93
93
|
'passport-local': () => require('../passport-local'),
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
pg: () => require('../pg'),
|
|
95
|
+
pino: () => require('../pino'),
|
|
96
96
|
'pino-pretty': () => require('../pino'),
|
|
97
|
-
|
|
97
|
+
playwright: () => require('../playwright'),
|
|
98
98
|
'promise-js': () => require('../promise-js'),
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
99
|
+
promise: () => require('../promise'),
|
|
100
|
+
q: () => require('../q'),
|
|
101
|
+
qs: () => require('../qs'),
|
|
102
|
+
redis: () => require('../redis'),
|
|
103
|
+
restify: () => require('../restify'),
|
|
104
|
+
rhea: () => require('../rhea'),
|
|
105
|
+
router: () => require('../router'),
|
|
106
|
+
sharedb: () => require('../sharedb'),
|
|
107
|
+
sequelize: () => require('../sequelize'),
|
|
108
|
+
tedious: () => require('../tedious'),
|
|
109
|
+
when: () => require('../when'),
|
|
110
|
+
winston: () => require('../winston')
|
|
111
111
|
}
|
|
@@ -56,13 +56,13 @@ if (semver.satisfies(process.versions.node, '>=17.8.0')) {
|
|
|
56
56
|
bound = this.runInAsyncScope.bind(this, fn, thisArg)
|
|
57
57
|
}
|
|
58
58
|
Object.defineProperties(bound, {
|
|
59
|
-
|
|
59
|
+
length: {
|
|
60
60
|
configurable: true,
|
|
61
61
|
enumerable: false,
|
|
62
62
|
value: fn.length,
|
|
63
63
|
writable: false
|
|
64
64
|
},
|
|
65
|
-
|
|
65
|
+
asyncResource: {
|
|
66
66
|
configurable: true,
|
|
67
67
|
enumerable: true,
|
|
68
68
|
value: this,
|
|
@@ -10,7 +10,7 @@ const {
|
|
|
10
10
|
getTestLineStart,
|
|
11
11
|
getTestSuitePath,
|
|
12
12
|
getTestParametersString,
|
|
13
|
-
|
|
13
|
+
addEfdStringToTestName,
|
|
14
14
|
removeEfdStringFromTestName
|
|
15
15
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
16
16
|
const {
|
|
@@ -63,11 +63,11 @@ let hasFilteredSkippableSuites = false
|
|
|
63
63
|
const sessionAsyncResource = new AsyncResource('bound-anonymous-fn')
|
|
64
64
|
|
|
65
65
|
const specStatusToTestStatus = {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
66
|
+
pending: 'skip',
|
|
67
|
+
disabled: 'skip',
|
|
68
|
+
todo: 'skip',
|
|
69
|
+
passed: 'pass',
|
|
70
|
+
failed: 'fail'
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
const asyncResources = new WeakMap()
|
|
@@ -101,10 +101,6 @@ function getTestEnvironmentOptions (config) {
|
|
|
101
101
|
return {}
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
function getEfdTestName (testName, numAttempt) {
|
|
105
|
-
return `${EFD_STRING} (#${numAttempt}): ${testName}`
|
|
106
|
-
}
|
|
107
|
-
|
|
108
104
|
function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
109
105
|
return class DatadogEnvironment extends BaseEnvironment {
|
|
110
106
|
constructor (config, context) {
|
|
@@ -156,7 +152,8 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
156
152
|
// we use its describe block to get the full name
|
|
157
153
|
getTestNameFromAddTestEvent (event, state) {
|
|
158
154
|
const describeSuffix = getJestTestName(state.currentDescribeBlock)
|
|
159
|
-
|
|
155
|
+
const fullTestName = describeSuffix ? `${describeSuffix} ${event.testName}` : event.testName
|
|
156
|
+
return removeEfdStringFromTestName(fullTestName)
|
|
160
157
|
}
|
|
161
158
|
|
|
162
159
|
async handleTestEvent (event, state) {
|
|
@@ -197,7 +194,6 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
197
194
|
retriedTestsToNumAttempts.set(originalTestName, numEfdRetry + 1)
|
|
198
195
|
}
|
|
199
196
|
}
|
|
200
|
-
|
|
201
197
|
asyncResource.runInAsyncScope(() => {
|
|
202
198
|
testStartCh.publish({
|
|
203
199
|
name: removeEfdStringFromTestName(testName),
|
|
@@ -223,7 +219,7 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
223
219
|
retriedTestsToNumAttempts.set(testName, 0)
|
|
224
220
|
for (let retryIndex = 0; retryIndex < earlyFlakeDetectionNumRetries; retryIndex++) {
|
|
225
221
|
if (this.global.test) {
|
|
226
|
-
this.global.test(
|
|
222
|
+
this.global.test(addEfdStringToTestName(event.testName, retryIndex), event.fn, event.timeout)
|
|
227
223
|
} else {
|
|
228
224
|
log.error('Early flake detection could not retry test because global.test is undefined')
|
|
229
225
|
}
|
|
@@ -405,6 +401,9 @@ function cliWrapper (cli, jestVersion) {
|
|
|
405
401
|
const { err, knownTests: receivedKnownTests } = await knownTestsPromise
|
|
406
402
|
if (!err) {
|
|
407
403
|
knownTests = receivedKnownTests
|
|
404
|
+
} else {
|
|
405
|
+
// We disable EFD if there has been an error in the known tests request
|
|
406
|
+
isEarlyFlakeDetectionEnabled = false
|
|
408
407
|
}
|
|
409
408
|
} catch (err) {
|
|
410
409
|
log.error(err)
|
|
@@ -38,7 +38,8 @@ addHook({ name: 'kafkajs', file: 'src/index.js', versions: ['>=1.4'] }, (BaseKaf
|
|
|
38
38
|
constructor (options) {
|
|
39
39
|
super(options)
|
|
40
40
|
this._brokers = (options.brokers && typeof options.brokers !== 'function')
|
|
41
|
-
? options.brokers.join(',')
|
|
41
|
+
? options.brokers.join(',')
|
|
42
|
+
: undefined
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
45
|
|
|
@@ -76,8 +76,9 @@ addHook({ name: 'ldapjs', versions: ['>=2'] }, ldapjs => {
|
|
|
76
76
|
const callbackIndex = getCallbackArgIndex(arguments)
|
|
77
77
|
if (callbackIndex > -1) {
|
|
78
78
|
const callback = arguments[callbackIndex]
|
|
79
|
+
// eslint-disable-next-line n/handle-callback-err
|
|
79
80
|
arguments[callbackIndex] = shimmer.wrap(callback, function (err, corkedEmitter) {
|
|
80
|
-
if (typeof corkedEmitter === 'object' && typeof corkedEmitter
|
|
81
|
+
if (typeof corkedEmitter === 'object' && typeof corkedEmitter.on === 'function') {
|
|
81
82
|
wrapEmitter(corkedEmitter)
|
|
82
83
|
}
|
|
83
84
|
callback.apply(this, arguments)
|
|
@@ -483,7 +483,7 @@ addHook({
|
|
|
483
483
|
*/
|
|
484
484
|
shimmer.wrap(Mocha.prototype, 'run', run => function () {
|
|
485
485
|
if (this.options.parallel) {
|
|
486
|
-
log.warn(
|
|
486
|
+
log.warn('Unable to initialize CI Visibility because Mocha is running in parallel mode.')
|
|
487
487
|
return run.apply(this, arguments)
|
|
488
488
|
}
|
|
489
489
|
|
|
@@ -7,9 +7,9 @@ const {
|
|
|
7
7
|
} = require('./helpers/instrument')
|
|
8
8
|
const shimmer = require('../../datadog-shimmer')
|
|
9
9
|
|
|
10
|
-
const startCh = channel(
|
|
11
|
-
const finishCh = channel(
|
|
12
|
-
const errorCh = channel(
|
|
10
|
+
const startCh = channel('apm:mongodb:query:start')
|
|
11
|
+
const finishCh = channel('apm:mongodb:query:finish')
|
|
12
|
+
const errorCh = channel('apm:mongodb:query:error')
|
|
13
13
|
|
|
14
14
|
addHook({ name: 'mongodb-core', versions: ['2 - 3.1.9'] }, Server => {
|
|
15
15
|
const serverProto = Server.Server.prototype
|
|
@@ -15,7 +15,7 @@ const startTCPCh = channel('apm:net:tcp:start')
|
|
|
15
15
|
const finishTCPCh = channel('apm:net:tcp:finish')
|
|
16
16
|
const errorTCPCh = channel('apm:net:tcp:error')
|
|
17
17
|
|
|
18
|
-
const connectionCh = channel(
|
|
18
|
+
const connectionCh = channel('apm:net:tcp:connection')
|
|
19
19
|
|
|
20
20
|
const names = ['net', 'node:net']
|
|
21
21
|
|
|
@@ -10,6 +10,7 @@ function wrapVerifiedAndPublish (username, password, verified, type) {
|
|
|
10
10
|
return verified
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
// eslint-disable-next-line n/handle-callback-err
|
|
13
14
|
return shimmer.wrap(verified, function (err, user, info) {
|
|
14
15
|
const credentials = { type, username }
|
|
15
16
|
passportVerifyChannel.publish({ credentials, user })
|
|
@@ -36,7 +36,7 @@ const STATUS_TO_TEST_STATUS = {
|
|
|
36
36
|
let remainingTestsByFile = {}
|
|
37
37
|
let isEarlyFlakeDetectionEnabled = false
|
|
38
38
|
let earlyFlakeDetectionNumRetries = 0
|
|
39
|
-
let knownTests =
|
|
39
|
+
let knownTests = {}
|
|
40
40
|
let rootDir = ''
|
|
41
41
|
const MINIMUM_SUPPORTED_VERSION_EFD = '1.38.0'
|
|
42
42
|
|
|
@@ -407,6 +407,8 @@ function runnerHook (runnerExport, playwrightVersion) {
|
|
|
407
407
|
const { err, knownTests: receivedKnownTests } = await knownTestsPromise
|
|
408
408
|
if (!err) {
|
|
409
409
|
knownTests = receivedKnownTests
|
|
410
|
+
} else {
|
|
411
|
+
isEarlyFlakeDetectionEnabled = false
|
|
410
412
|
}
|
|
411
413
|
} catch (err) {
|
|
412
414
|
log.error(err)
|
|
@@ -434,7 +436,11 @@ function runnerHook (runnerExport, playwrightVersion) {
|
|
|
434
436
|
onDone = resolve
|
|
435
437
|
})
|
|
436
438
|
testSessionAsyncResource.runInAsyncScope(() => {
|
|
437
|
-
testSessionFinishCh.publish({
|
|
439
|
+
testSessionFinishCh.publish({
|
|
440
|
+
status: STATUS_TO_TEST_STATUS[sessionStatus],
|
|
441
|
+
isEarlyFlakeDetectionEnabled,
|
|
442
|
+
onDone
|
|
443
|
+
})
|
|
438
444
|
})
|
|
439
445
|
await flushWait
|
|
440
446
|
|
|
@@ -45,7 +45,9 @@ addHook({ name: 'rhea', versions: ['>=1'], file: 'lib/link.js' }, obj => {
|
|
|
45
45
|
const { host, port } = getHostAndPort(this.connection)
|
|
46
46
|
|
|
47
47
|
const targetAddress = this.options && this.options.target &&
|
|
48
|
-
this.options.target.address
|
|
48
|
+
this.options.target.address
|
|
49
|
+
? this.options.target.address
|
|
50
|
+
: undefined
|
|
49
51
|
|
|
50
52
|
const asyncResource = new AsyncResource('bound-anonymous-fn')
|
|
51
53
|
return asyncResource.runInAsyncScope(() => {
|
|
@@ -187,7 +189,8 @@ function patchCircularBuffer (proto, Session) {
|
|
|
187
189
|
if (shouldPop) {
|
|
188
190
|
const remoteState = entry.remote_state
|
|
189
191
|
const state = remoteState && remoteState.constructor
|
|
190
|
-
? entry.remote_state.constructor.composite_type
|
|
192
|
+
? entry.remote_state.constructor.composite_type
|
|
193
|
+
: undefined
|
|
191
194
|
asyncResource.runInAsyncScope(() => {
|
|
192
195
|
exports.beforeFinish(entry, state)
|
|
193
196
|
finishSendCh.publish()
|
|
@@ -7,7 +7,7 @@ const {
|
|
|
7
7
|
} = require('./helpers/instrument')
|
|
8
8
|
const shimmer = require('../../datadog-shimmer')
|
|
9
9
|
|
|
10
|
-
addHook({ name: 'tedious', versions: [
|
|
10
|
+
addHook({ name: 'tedious', versions: ['>=1.0.0'] }, tedious => {
|
|
11
11
|
const startCh = channel('apm:tedious:request:start')
|
|
12
12
|
const finishCh = channel('apm:tedious:request:finish')
|
|
13
13
|
const errorCh = channel('apm:tedious:request:error')
|
|
@@ -22,7 +22,7 @@ class ApolloGatewayFetchPlugin extends ApolloBasePlugin {
|
|
|
22
22
|
|
|
23
23
|
const serviceName = ctx?.attributes?.service
|
|
24
24
|
|
|
25
|
-
if (serviceName) { spanData.meta
|
|
25
|
+
if (serviceName) { spanData.meta.serviceName = serviceName }
|
|
26
26
|
|
|
27
27
|
const span = this.startSpan(this.getOperationName(), spanData, false)
|
|
28
28
|
|
|
@@ -14,17 +14,6 @@ class ApolloGatewayRequestPlugin extends ApolloBasePlugin {
|
|
|
14
14
|
return 'tracing:apm:apollo:gateway:request'
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
constructor (...args) {
|
|
18
|
-
super(...args)
|
|
19
|
-
this.addSub('apm:apollo:gateway:request:executor', (ctx) => {
|
|
20
|
-
if (ctx.requestContext || ctx.gateway) {
|
|
21
|
-
this.requestContext = ctx
|
|
22
|
-
} else {
|
|
23
|
-
this.requestContext = {}
|
|
24
|
-
}
|
|
25
|
-
})
|
|
26
|
-
}
|
|
27
|
-
|
|
28
17
|
bindStart (ctx) {
|
|
29
18
|
const store = storage.getStore()
|
|
30
19
|
const childOf = store ? store.span : null
|
|
@@ -37,7 +26,7 @@ class ApolloGatewayRequestPlugin extends ApolloBasePlugin {
|
|
|
37
26
|
meta: {}
|
|
38
27
|
}
|
|
39
28
|
|
|
40
|
-
const { requestContext, gateway } =
|
|
29
|
+
const { requestContext, gateway } = ctx
|
|
41
30
|
|
|
42
31
|
if (requestContext?.operationName) {
|
|
43
32
|
spanData.meta['graphql.operation.name'] = requestContext.operationName
|
|
@@ -54,7 +43,7 @@ class ApolloGatewayRequestPlugin extends ApolloBasePlugin {
|
|
|
54
43
|
const type = operationContext?.operation?.operation
|
|
55
44
|
const name = operationContext?.operation?.name && operationContext?.operation?.name?.value
|
|
56
45
|
|
|
57
|
-
spanData
|
|
46
|
+
spanData.resource = getSignature(document, name, type, this?.config?.signature)
|
|
58
47
|
spanData.meta['graphql.operation.type'] = type
|
|
59
48
|
}
|
|
60
49
|
const span = this.startSpan(this.operationName({ id: `${this.constructor.id}.${this.constructor.operation}` }),
|
|
@@ -76,10 +65,6 @@ class ApolloGatewayRequestPlugin extends ApolloBasePlugin {
|
|
|
76
65
|
ctx.currentStore.span.finish()
|
|
77
66
|
return ctx.parentStore
|
|
78
67
|
}
|
|
79
|
-
|
|
80
|
-
end () {
|
|
81
|
-
// do nothing to avoid ApolloBasePlugin's end method
|
|
82
|
-
}
|
|
83
68
|
}
|
|
84
69
|
|
|
85
70
|
function buildOperationContext (schema, operationDocument, operationName) {
|