dd-trace 1.5.0 → 1.7.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/cypress/plugin.js +3 -0
- package/ci/cypress/support.js +1 -0
- package/ci/init.js +13 -0
- package/ci/jest/env.js +14 -0
- package/index.d.ts +5 -5
- package/package.json +6 -5
- package/packages/datadog-plugin-cucumber/src/index.js +6 -4
- package/packages/datadog-plugin-cypress/src/plugin.js +17 -5
- package/packages/datadog-plugin-cypress/src/support.js +21 -6
- package/packages/datadog-plugin-graphql/src/index.js +16 -10
- package/packages/datadog-plugin-grpc/src/client.js +1 -1
- package/packages/datadog-plugin-jest/src/jest-environment.js +9 -5
- package/packages/datadog-plugin-jest/src/jest-jasmine2.js +13 -4
- package/packages/datadog-plugin-mocha/src/index.js +12 -3
- package/packages/datadog-plugin-redis/src/index.js +31 -1
- package/packages/dd-trace/lib/version.js +1 -1
- package/packages/dd-trace/src/constants.js +6 -1
- package/packages/dd-trace/src/encode/0.4.js +84 -23
- package/packages/dd-trace/src/encode/chunk.js +12 -14
- package/packages/dd-trace/src/format.js +12 -0
- package/packages/dd-trace/src/id.js +22 -18
- package/packages/dd-trace/src/instrumenter.js +2 -2
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +34 -0
- package/packages/dd-trace/src/opentracing/span_context.js +2 -1
- package/packages/dd-trace/src/{.DS_Store → plugins/.DS_Store} +0 -0
- package/packages/dd-trace/src/plugins/util/ci.js +22 -9
- package/packages/dd-trace/src/plugins/util/git.js +11 -25
- package/packages/dd-trace/src/plugins/util/redis.js +0 -2
- package/packages/dd-trace/src/plugins/util/test.js +22 -4
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +72 -0
- package/packages/dd-trace/src/plugins/util/web.js +1 -1
- package/packages/dd-trace/src/priority_sampler.js +71 -19
- package/packages/dd-trace/src/profiling/exporters/agent.js +41 -33
- package/packages/dd-trace/src/profiling/profilers/cpu.js +1 -3
- package/packages/dd-trace/src/proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ci-app-spec.json +0 -35
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require('../../packages/datadog-plugin-cypress/src/support')
|
package/ci/init.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const tracer = require('../packages/dd-trace')
|
|
2
|
+
const { ORIGIN_KEY } = require('../packages/dd-trace/src/constants')
|
|
3
|
+
|
|
4
|
+
tracer.init({
|
|
5
|
+
startupLogs: false,
|
|
6
|
+
tags: {
|
|
7
|
+
[ORIGIN_KEY]: 'ciapp-test'
|
|
8
|
+
}
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
tracer.use('fs', false)
|
|
12
|
+
|
|
13
|
+
module.exports = tracer
|
package/ci/jest/env.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const tracer = require('../../packages/dd-trace')
|
|
2
|
+
const { ORIGIN_KEY } = require('../../packages/dd-trace/src/constants')
|
|
3
|
+
|
|
4
|
+
tracer.init({
|
|
5
|
+
startupLogs: false,
|
|
6
|
+
flushInterval: 400000,
|
|
7
|
+
tags: {
|
|
8
|
+
[ORIGIN_KEY]: 'ciapp-test'
|
|
9
|
+
}
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
tracer.use('fs', false)
|
|
13
|
+
|
|
14
|
+
module.exports = tracer
|
package/index.d.ts
CHANGED
|
@@ -792,7 +792,7 @@ declare namespace plugins {
|
|
|
792
792
|
* This plugin automatically instruments the
|
|
793
793
|
* [cucumber](https://www.npmjs.com/package/@cucumber/cucumber) module.
|
|
794
794
|
*/
|
|
795
|
-
interface cucumber extends
|
|
795
|
+
interface cucumber extends Integration {}
|
|
796
796
|
|
|
797
797
|
/**
|
|
798
798
|
* This plugin automatically instruments the
|
|
@@ -978,12 +978,12 @@ declare namespace plugins {
|
|
|
978
978
|
/**
|
|
979
979
|
* Configuration for HTTP clients.
|
|
980
980
|
*/
|
|
981
|
-
client?: HttpClient,
|
|
981
|
+
client?: HttpClient | boolean,
|
|
982
982
|
|
|
983
983
|
/**
|
|
984
984
|
* Configuration for HTTP servers.
|
|
985
985
|
*/
|
|
986
|
-
server?: HttpServer
|
|
986
|
+
server?: HttpServer | boolean
|
|
987
987
|
|
|
988
988
|
/**
|
|
989
989
|
* Hooks to run before spans are finished.
|
|
@@ -1012,12 +1012,12 @@ declare namespace plugins {
|
|
|
1012
1012
|
/**
|
|
1013
1013
|
* Configuration for HTTP clients.
|
|
1014
1014
|
*/
|
|
1015
|
-
client?: Http2Client,
|
|
1015
|
+
client?: Http2Client | boolean,
|
|
1016
1016
|
|
|
1017
1017
|
/**
|
|
1018
1018
|
* Configuration for HTTP servers.
|
|
1019
1019
|
*/
|
|
1020
|
-
server?: Http2Server
|
|
1020
|
+
server?: Http2Server | boolean
|
|
1021
1021
|
}
|
|
1022
1022
|
|
|
1023
1023
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dd-trace",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "Datadog APM tracing client for JavaScript",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"typings": "index.d.ts",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"bench": "node benchmark",
|
|
11
11
|
"bench:profiler": "node benchmark/profiler",
|
|
12
12
|
"bench:e2e": "SERVICES=mongo yarn services && cd benchmark/e2e && node benchmark-run.js --duration=30",
|
|
13
|
+
"bench:e2e:ci-visibility": "node benchmark/e2e-ci/benchmark-run.js",
|
|
13
14
|
"type:doc": "cd docs && yarn && yarn build",
|
|
14
15
|
"type:test": "cd docs && yarn && yarn test",
|
|
15
16
|
"lint": "node scripts/check_licenses.js && eslint . && yarn audit --groups dependencies",
|
|
@@ -56,13 +57,13 @@
|
|
|
56
57
|
"node": ">=12"
|
|
57
58
|
},
|
|
58
59
|
"dependencies": {
|
|
59
|
-
"@datadog/native-metrics": "^1.
|
|
60
|
-
"@datadog/pprof": "^0.
|
|
60
|
+
"@datadog/native-metrics": "^1.1.0",
|
|
61
|
+
"@datadog/pprof": "^0.3.0",
|
|
61
62
|
"@datadog/sketches-js": "^1.0.4",
|
|
62
|
-
"@types/node": "
|
|
63
|
+
"@types/node": ">=12",
|
|
63
64
|
"crypto-randomuuid": "^1.0.0",
|
|
64
65
|
"form-data": "^3.0.0",
|
|
65
|
-
"import-in-the-middle": "^1.1.
|
|
66
|
+
"import-in-the-middle": "^1.1.2",
|
|
66
67
|
"koalas": "^1.0.2",
|
|
67
68
|
"limiter": "^1.1.4",
|
|
68
69
|
"lodash.kebabcase": "^4.1.1",
|
|
@@ -5,6 +5,7 @@ const {
|
|
|
5
5
|
TEST_NAME,
|
|
6
6
|
TEST_SUITE,
|
|
7
7
|
TEST_STATUS,
|
|
8
|
+
TEST_FRAMEWORK_VERSION,
|
|
8
9
|
TEST_SKIP_REASON,
|
|
9
10
|
CI_APP_ORIGIN,
|
|
10
11
|
ERROR_MESSAGE,
|
|
@@ -52,6 +53,7 @@ function createWrapRun (tracer, testEnvironmentMetadata, sourceRoot, setStatus)
|
|
|
52
53
|
[TEST_NAME]: testName,
|
|
53
54
|
[TEST_SUITE]: testSuite,
|
|
54
55
|
[SAMPLING_RULE_DECISION]: 1,
|
|
56
|
+
[TEST_FRAMEWORK_VERSION]: tracer._version,
|
|
55
57
|
...testEnvironmentMetadata
|
|
56
58
|
}
|
|
57
59
|
|
|
@@ -101,8 +103,8 @@ module.exports = [
|
|
|
101
103
|
name: '@cucumber/cucumber',
|
|
102
104
|
versions: ['7.0.0 - 7.2.1'],
|
|
103
105
|
file: 'lib/runtime/pickle_runner.js',
|
|
104
|
-
patch (PickleRunner, tracer) {
|
|
105
|
-
const testEnvironmentMetadata = getTestEnvironmentMetadata('cucumber')
|
|
106
|
+
patch (PickleRunner, tracer, config) {
|
|
107
|
+
const testEnvironmentMetadata = getTestEnvironmentMetadata('cucumber', config)
|
|
106
108
|
const sourceRoot = process.cwd()
|
|
107
109
|
const pl = PickleRunner.default
|
|
108
110
|
this.wrap(
|
|
@@ -125,8 +127,8 @@ module.exports = [
|
|
|
125
127
|
name: '@cucumber/cucumber',
|
|
126
128
|
versions: ['>=7.3.0'],
|
|
127
129
|
file: 'lib/runtime/test_case_runner.js',
|
|
128
|
-
patch (TestCaseRunner, tracer) {
|
|
129
|
-
const testEnvironmentMetadata = getTestEnvironmentMetadata('cucumber')
|
|
130
|
+
patch (TestCaseRunner, tracer, config) {
|
|
131
|
+
const testEnvironmentMetadata = getTestEnvironmentMetadata('cucumber', config)
|
|
130
132
|
const sourceRoot = process.cwd()
|
|
131
133
|
const pl = TestCaseRunner.default
|
|
132
134
|
this.wrap(
|
|
@@ -3,6 +3,8 @@ const {
|
|
|
3
3
|
TEST_NAME,
|
|
4
4
|
TEST_SUITE,
|
|
5
5
|
TEST_STATUS,
|
|
6
|
+
TEST_FRAMEWORK_VERSION,
|
|
7
|
+
TEST_IS_RUM_ACTIVE,
|
|
6
8
|
getTestEnvironmentMetadata,
|
|
7
9
|
CI_APP_ORIGIN,
|
|
8
10
|
getTestParentSpan
|
|
@@ -19,7 +21,7 @@ const CYPRESS_STATUS_TO_TEST_STATUS = {
|
|
|
19
21
|
skipped: 'skip'
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
function getTestSpanMetadata (tracer, testName, testSuite) {
|
|
24
|
+
function getTestSpanMetadata (tracer, testName, testSuite, cypressConfig) {
|
|
23
25
|
const childOf = getTestParentSpan(tracer)
|
|
24
26
|
|
|
25
27
|
return {
|
|
@@ -29,7 +31,8 @@ function getTestSpanMetadata (tracer, testName, testSuite) {
|
|
|
29
31
|
[TEST_NAME]: testName,
|
|
30
32
|
[TEST_SUITE]: testSuite,
|
|
31
33
|
[SAMPLING_RULE_DECISION]: 1,
|
|
32
|
-
[SAMPLING_PRIORITY]: AUTO_KEEP
|
|
34
|
+
[SAMPLING_PRIORITY]: AUTO_KEEP,
|
|
35
|
+
[TEST_FRAMEWORK_VERSION]: cypressConfig.version
|
|
33
36
|
}
|
|
34
37
|
}
|
|
35
38
|
|
|
@@ -50,7 +53,7 @@ module.exports = (on, config) => {
|
|
|
50
53
|
childOf,
|
|
51
54
|
resource,
|
|
52
55
|
...testSpanMetadata
|
|
53
|
-
} = getTestSpanMetadata(tracer, testName, testSuite)
|
|
56
|
+
} = getTestSpanMetadata(tracer, testName, testSuite, config)
|
|
54
57
|
|
|
55
58
|
if (!activeSpan) {
|
|
56
59
|
activeSpan = tracer.startSpan('cypress.test', {
|
|
@@ -64,19 +67,28 @@ module.exports = (on, config) => {
|
|
|
64
67
|
}
|
|
65
68
|
})
|
|
66
69
|
}
|
|
67
|
-
return null
|
|
70
|
+
return activeSpan ? activeSpan._spanContext._traceId.toString(10) : null
|
|
68
71
|
},
|
|
69
72
|
'dd:afterEach': (test) => {
|
|
70
|
-
const { state, error } = test
|
|
73
|
+
const { state, error, isRUMActive } = test
|
|
71
74
|
if (activeSpan) {
|
|
72
75
|
activeSpan.setTag(TEST_STATUS, CYPRESS_STATUS_TO_TEST_STATUS[state])
|
|
73
76
|
if (error) {
|
|
74
77
|
activeSpan.setTag('error', error)
|
|
75
78
|
}
|
|
79
|
+
if (isRUMActive) {
|
|
80
|
+
activeSpan.setTag(TEST_IS_RUM_ACTIVE, true)
|
|
81
|
+
}
|
|
76
82
|
activeSpan.finish()
|
|
77
83
|
}
|
|
78
84
|
activeSpan = null
|
|
79
85
|
return null
|
|
86
|
+
},
|
|
87
|
+
'dd:addTags': (tags) => {
|
|
88
|
+
if (activeSpan) {
|
|
89
|
+
activeSpan.addTags(tags)
|
|
90
|
+
}
|
|
91
|
+
return null
|
|
80
92
|
}
|
|
81
93
|
})
|
|
82
94
|
}
|
|
@@ -3,15 +3,30 @@ beforeEach(() => {
|
|
|
3
3
|
cy.task('dd:beforeEach', {
|
|
4
4
|
testName: Cypress.mocha.getRunner().suite.ctx.currentTest.fullTitle(),
|
|
5
5
|
testSuite: Cypress.mocha.getRootSuite().file
|
|
6
|
+
}).then(traceId => {
|
|
7
|
+
Cypress.env('traceId', traceId)
|
|
6
8
|
})
|
|
7
9
|
})
|
|
8
10
|
|
|
11
|
+
after(() => {
|
|
12
|
+
cy.window().then(win => {
|
|
13
|
+
win.dispatchEvent(new Event('beforeunload'))
|
|
14
|
+
})
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
|
|
9
18
|
afterEach(() => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
19
|
+
cy.window().then(win => {
|
|
20
|
+
const currentTest = Cypress.mocha.getRunner().suite.ctx.currentTest
|
|
21
|
+
const testInfo = {
|
|
22
|
+
testName: currentTest.fullTitle(),
|
|
23
|
+
testSuite: Cypress.mocha.getRootSuite().file,
|
|
24
|
+
state: currentTest.state,
|
|
25
|
+
error: currentTest.err,
|
|
26
|
+
}
|
|
27
|
+
if (win.DD_RUM) {
|
|
28
|
+
testInfo.isRUMActive = true
|
|
29
|
+
}
|
|
30
|
+
cy.task('dd:afterEach', testInfo)
|
|
16
31
|
})
|
|
17
32
|
})
|
|
@@ -9,20 +9,17 @@ let tools
|
|
|
9
9
|
function createWrapExecute (tracer, config, defaultFieldResolver) {
|
|
10
10
|
return function wrapExecute (execute) {
|
|
11
11
|
return function executeWithTrace () {
|
|
12
|
-
const args = normalizeArgs(arguments)
|
|
12
|
+
const args = normalizeArgs(arguments, tracer, config, defaultFieldResolver)
|
|
13
13
|
const schema = args.schema
|
|
14
14
|
const document = args.document
|
|
15
15
|
const source = document && document._datadog_source
|
|
16
|
-
const
|
|
17
|
-
const contextValue = args.contextValue = args.contextValue || {}
|
|
16
|
+
const contextValue = args.contextValue
|
|
18
17
|
const operation = getOperation(document, args.operationName)
|
|
19
18
|
|
|
20
19
|
if (contextValue._datadog_graphql) {
|
|
21
20
|
return execute.apply(this, arguments)
|
|
22
21
|
}
|
|
23
22
|
|
|
24
|
-
args.fieldResolver = wrapResolve(fieldResolver, tracer, config)
|
|
25
|
-
|
|
26
23
|
if (schema) {
|
|
27
24
|
wrapFields(schema._queryType, tracer, config)
|
|
28
25
|
wrapFields(schema._mutationType, tracer, config)
|
|
@@ -32,7 +29,7 @@ function createWrapExecute (tracer, config, defaultFieldResolver) {
|
|
|
32
29
|
|
|
33
30
|
contextValue._datadog_graphql = { source, span, fields: {} }
|
|
34
31
|
|
|
35
|
-
return call(execute, span, this,
|
|
32
|
+
return call(execute, span, this, arguments, (err, res) => {
|
|
36
33
|
finishResolvers(contextValue, config)
|
|
37
34
|
|
|
38
35
|
setError(span, err || (res && res.errors && res.errors[0]))
|
|
@@ -212,10 +209,19 @@ function getField (contextValue, path) {
|
|
|
212
209
|
return contextValue._datadog_graphql.fields[path.join('.')]
|
|
213
210
|
}
|
|
214
211
|
|
|
215
|
-
function normalizeArgs (args) {
|
|
216
|
-
if (args.length
|
|
217
|
-
|
|
218
|
-
}
|
|
212
|
+
function normalizeArgs (args, tracer, config, defaultFieldResolver) {
|
|
213
|
+
if (args.length !== 1) return normalizePositional(args, tracer, config, defaultFieldResolver)
|
|
214
|
+
|
|
215
|
+
args[0].contextValue = args[0].contextValue || {}
|
|
216
|
+
args[0].fieldResolver = wrapResolve(args[0].fieldResolver || defaultFieldResolver, tracer, config)
|
|
217
|
+
|
|
218
|
+
return args[0]
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function normalizePositional (args, tracer, config, defaultFieldResolver) {
|
|
222
|
+
args[3] = args[3] || {} // contextValue
|
|
223
|
+
args[6] = wrapResolve(args[6] || defaultFieldResolver, tracer, config) // fieldResolver
|
|
224
|
+
args.length = Math.max(args.length, 7)
|
|
219
225
|
|
|
220
226
|
return {
|
|
221
227
|
schema: args[0],
|
|
@@ -48,7 +48,7 @@ function createWrapMakeClientConstructor (tracer, config) {
|
|
|
48
48
|
function wrapPackageDefinition (tracer, config, def) {
|
|
49
49
|
for (const name in def) {
|
|
50
50
|
if (def[name].format) continue
|
|
51
|
-
if (def[name].service) {
|
|
51
|
+
if (def[name].service && def[name].prototype) {
|
|
52
52
|
wrapClientConstructor(tracer, config, def[name], def[name].service)
|
|
53
53
|
} else {
|
|
54
54
|
wrapPackageDefinition(tracer, config, def[name])
|
|
@@ -5,6 +5,8 @@ const {
|
|
|
5
5
|
TEST_NAME,
|
|
6
6
|
TEST_SUITE,
|
|
7
7
|
TEST_STATUS,
|
|
8
|
+
TEST_FRAMEWORK_VERSION,
|
|
9
|
+
JEST_TEST_RUNNER,
|
|
8
10
|
ERROR_MESSAGE,
|
|
9
11
|
ERROR_TYPE,
|
|
10
12
|
TEST_PARAMETERS,
|
|
@@ -138,7 +140,9 @@ function createHandleTestEvent (tracer, testEnvironmentMetadata, instrumenter) {
|
|
|
138
140
|
const spanTags = {
|
|
139
141
|
...commonSpanTags,
|
|
140
142
|
[TEST_NAME]: testName,
|
|
141
|
-
[TEST_SUITE]: this.testSuite
|
|
143
|
+
[TEST_SUITE]: this.testSuite,
|
|
144
|
+
[TEST_FRAMEWORK_VERSION]: tracer._version,
|
|
145
|
+
[JEST_TEST_RUNNER]: 'jest-circus'
|
|
142
146
|
}
|
|
143
147
|
|
|
144
148
|
const testParametersString = getTestParametersString(nameToParams, event.test.name)
|
|
@@ -234,8 +238,8 @@ module.exports = [
|
|
|
234
238
|
{
|
|
235
239
|
name: 'jest-environment-node',
|
|
236
240
|
versions: ['>=24.8.0'],
|
|
237
|
-
patch: function (NodeEnvironment, tracer) {
|
|
238
|
-
const testEnvironmentMetadata = getTestEnvironmentMetadata('jest')
|
|
241
|
+
patch: function (NodeEnvironment, tracer, config) {
|
|
242
|
+
const testEnvironmentMetadata = getTestEnvironmentMetadata('jest', config)
|
|
239
243
|
|
|
240
244
|
this.wrap(NodeEnvironment.prototype, 'teardown', createWrapTeardown(tracer, this))
|
|
241
245
|
|
|
@@ -253,8 +257,8 @@ module.exports = [
|
|
|
253
257
|
{
|
|
254
258
|
name: 'jest-environment-jsdom',
|
|
255
259
|
versions: ['>=24.8.0'],
|
|
256
|
-
patch: function (JsdomEnvironment, tracer) {
|
|
257
|
-
const testEnvironmentMetadata = getTestEnvironmentMetadata('jest')
|
|
260
|
+
patch: function (JsdomEnvironment, tracer, config) {
|
|
261
|
+
const testEnvironmentMetadata = getTestEnvironmentMetadata('jest', config)
|
|
258
262
|
|
|
259
263
|
this.wrap(JsdomEnvironment.prototype, 'teardown', createWrapTeardown(tracer, this))
|
|
260
264
|
|
|
@@ -5,6 +5,8 @@ const {
|
|
|
5
5
|
TEST_NAME,
|
|
6
6
|
TEST_SUITE,
|
|
7
7
|
TEST_STATUS,
|
|
8
|
+
TEST_FRAMEWORK_VERSION,
|
|
9
|
+
JEST_TEST_RUNNER,
|
|
8
10
|
CI_APP_ORIGIN,
|
|
9
11
|
getTestEnvironmentMetadata,
|
|
10
12
|
finishAllTraceSpans,
|
|
@@ -29,7 +31,12 @@ function createWrapIt (tracer, globalConfig, globalInput, testEnvironmentMetadat
|
|
|
29
31
|
{
|
|
30
32
|
type: 'test',
|
|
31
33
|
childOf,
|
|
32
|
-
tags: {
|
|
34
|
+
tags: {
|
|
35
|
+
...commonSpanTags,
|
|
36
|
+
[TEST_SUITE]: testSuite,
|
|
37
|
+
[TEST_FRAMEWORK_VERSION]: tracer._version,
|
|
38
|
+
[JEST_TEST_RUNNER]: 'jest-jasmine2'
|
|
39
|
+
}
|
|
33
40
|
},
|
|
34
41
|
async (done) => {
|
|
35
42
|
const testSpan = tracer.scope().active()
|
|
@@ -124,7 +131,9 @@ function createWrapItSkip (tracer, globalConfig, globalInput, testEnvironmentMet
|
|
|
124
131
|
[RESOURCE_NAME]: resource,
|
|
125
132
|
[TEST_NAME]: testName,
|
|
126
133
|
[TEST_SUITE]: testSuite,
|
|
127
|
-
[TEST_STATUS]: 'skip'
|
|
134
|
+
[TEST_STATUS]: 'skip',
|
|
135
|
+
[TEST_FRAMEWORK_VERSION]: tracer._version,
|
|
136
|
+
[JEST_TEST_RUNNER]: 'jest-jasmine2'
|
|
128
137
|
}
|
|
129
138
|
}
|
|
130
139
|
)
|
|
@@ -160,8 +169,8 @@ module.exports = [
|
|
|
160
169
|
name: 'jest-jasmine2',
|
|
161
170
|
versions: ['>=24.8.0'],
|
|
162
171
|
file: 'build/jasmineAsyncInstall.js',
|
|
163
|
-
patch: function (jasmineAsyncInstallExport, tracer) {
|
|
164
|
-
const testEnvironmentMetadata = getTestEnvironmentMetadata('jest')
|
|
172
|
+
patch: function (jasmineAsyncInstallExport, tracer, config) {
|
|
173
|
+
const testEnvironmentMetadata = getTestEnvironmentMetadata('jest', config)
|
|
165
174
|
return this.wrapExport(
|
|
166
175
|
jasmineAsyncInstallExport.default,
|
|
167
176
|
createWrapJasmineAsyncInstall(tracer, this, testEnvironmentMetadata)(jasmineAsyncInstallExport.default)
|
|
@@ -9,6 +9,7 @@ const {
|
|
|
9
9
|
TEST_SUITE,
|
|
10
10
|
TEST_STATUS,
|
|
11
11
|
TEST_PARAMETERS,
|
|
12
|
+
TEST_FRAMEWORK_VERSION,
|
|
12
13
|
CI_APP_ORIGIN,
|
|
13
14
|
getTestEnvironmentMetadata,
|
|
14
15
|
getTestParametersString,
|
|
@@ -31,13 +32,20 @@ function getTestSpanMetadata (tracer, test, sourceRoot) {
|
|
|
31
32
|
[TEST_NAME]: fullTestName,
|
|
32
33
|
[TEST_SUITE]: testSuite,
|
|
33
34
|
[SAMPLING_RULE_DECISION]: 1,
|
|
34
|
-
[SAMPLING_PRIORITY]: AUTO_KEEP
|
|
35
|
+
[SAMPLING_PRIORITY]: AUTO_KEEP,
|
|
36
|
+
[TEST_FRAMEWORK_VERSION]: tracer._version
|
|
35
37
|
}
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
function createWrapRunTest (tracer, testEnvironmentMetadata, sourceRoot) {
|
|
39
41
|
return function wrapRunTest (runTest) {
|
|
40
42
|
return async function runTestWithTrace () {
|
|
43
|
+
// `runTest` is rerun when retries are configured through `this.retries` and the test fails.
|
|
44
|
+
// This clause prevents rewrapping `this.test.fn` when it has already been wrapped.
|
|
45
|
+
if (this.test._currentRetry !== undefined && this.test._currentRetry !== 0) {
|
|
46
|
+
return runTest.apply(this, arguments)
|
|
47
|
+
}
|
|
48
|
+
|
|
41
49
|
let specFunction = this.test.fn
|
|
42
50
|
if (specFunction.length) {
|
|
43
51
|
specFunction = promisify(specFunction)
|
|
@@ -114,6 +122,7 @@ function getAllTestsInSuite (root) {
|
|
|
114
122
|
function createWrapRunTests (tracer, testEnvironmentMetadata, sourceRoot) {
|
|
115
123
|
return function wrapRunTests (runTests) {
|
|
116
124
|
return function runTestsWithTrace () {
|
|
125
|
+
this.once('end', () => tracer._exporter._writer.flush())
|
|
117
126
|
runTests.apply(this, arguments)
|
|
118
127
|
const suite = arguments[0]
|
|
119
128
|
const tests = getAllTestsInSuite(suite)
|
|
@@ -231,8 +240,8 @@ module.exports = [
|
|
|
231
240
|
name: 'mocha',
|
|
232
241
|
versions: ['>=5.2.0'],
|
|
233
242
|
file: 'lib/runner.js',
|
|
234
|
-
patch (Runner, tracer) {
|
|
235
|
-
const testEnvironmentMetadata = getTestEnvironmentMetadata('mocha')
|
|
243
|
+
patch (Runner, tracer, config) {
|
|
244
|
+
const testEnvironmentMetadata = getTestEnvironmentMetadata('mocha', config)
|
|
236
245
|
const sourceRoot = process.cwd()
|
|
237
246
|
this.wrap(Runner.prototype, 'runTests', createWrapRunTests(tracer, testEnvironmentMetadata, sourceRoot))
|
|
238
247
|
this.wrap(Runner.prototype, 'runTest', createWrapRunTest(tracer, testEnvironmentMetadata, sourceRoot))
|
|
@@ -1,7 +1,25 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
// TODO: always use uppercase for command names
|
|
4
|
+
|
|
3
5
|
const tx = require('../../dd-trace/src/plugins/util/redis')
|
|
4
6
|
|
|
7
|
+
function createWrapAddCommand (tracer, config) {
|
|
8
|
+
return function wrapAddCommand (addCommand) {
|
|
9
|
+
return function addCommandWithTrace (command) {
|
|
10
|
+
const name = command[0]
|
|
11
|
+
const args = command.slice(1)
|
|
12
|
+
|
|
13
|
+
if (!config.filter(name)) return addCommand.apply(this, arguments)
|
|
14
|
+
|
|
15
|
+
const scope = tracer.scope()
|
|
16
|
+
const span = startSpan(tracer, config, this, name, args)
|
|
17
|
+
|
|
18
|
+
return tx.wrap(span, scope.bind(addCommand, span).apply(this, arguments))
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
5
23
|
function createWrapInternalSendCommand (tracer, config) {
|
|
6
24
|
return function wrapInternalSendCommand (internalSendCommand) {
|
|
7
25
|
return function internalSendCommandWithTrace (options) {
|
|
@@ -49,9 +67,21 @@ function startSpan (tracer, config, client, command, args) {
|
|
|
49
67
|
}
|
|
50
68
|
|
|
51
69
|
module.exports = [
|
|
70
|
+
{
|
|
71
|
+
name: '@node-redis/client',
|
|
72
|
+
versions: ['>=1'],
|
|
73
|
+
file: 'dist/lib/client/commands-queue.js',
|
|
74
|
+
patch (redis, tracer, config) {
|
|
75
|
+
config = tx.normalizeConfig(config)
|
|
76
|
+
this.wrap(redis.default.prototype, 'addCommand', createWrapAddCommand(tracer, config))
|
|
77
|
+
},
|
|
78
|
+
unpatch (redis) {
|
|
79
|
+
this.unwrap(redis.default.prototype, 'addCommand')
|
|
80
|
+
}
|
|
81
|
+
},
|
|
52
82
|
{
|
|
53
83
|
name: 'redis',
|
|
54
|
-
versions: ['>=2.6'],
|
|
84
|
+
versions: ['>=2.6 <4'],
|
|
55
85
|
patch (redis, tracer, config) {
|
|
56
86
|
config = tx.normalizeConfig(config)
|
|
57
87
|
this.wrap(redis.RedisClient.prototype, 'internal_send_command', createWrapInternalSendCommand(tracer, config))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
module.exports = '1.
|
|
1
|
+
module.exports = '1.7.0'
|
|
@@ -10,5 +10,10 @@ module.exports = {
|
|
|
10
10
|
SAMPLING_RULE_DECISION: '_dd.rule_psr',
|
|
11
11
|
SAMPLING_LIMIT_DECISION: '_dd.limit_psr',
|
|
12
12
|
SAMPLING_AGENT_DECISION: '_dd.agent_psr',
|
|
13
|
-
|
|
13
|
+
SAMPLING_MECHANISM_DEFAULT: 0,
|
|
14
|
+
SAMPLING_MECHANISM_AGENT: 1,
|
|
15
|
+
SAMPLING_MECHANISM_RULE: 3,
|
|
16
|
+
SAMPLING_MECHANISM_MANUAL: 4,
|
|
17
|
+
DATADOG_LAMBDA_EXTENSION_PATH: '/opt/extensions/datadog-agent',
|
|
18
|
+
UPSTREAM_SERVICES_KEY: '_dd.p.upstream_services'
|
|
14
19
|
}
|