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.
Files changed (36) hide show
  1. package/ci/cypress/plugin.js +3 -0
  2. package/ci/cypress/support.js +1 -0
  3. package/ci/init.js +13 -0
  4. package/ci/jest/env.js +14 -0
  5. package/index.d.ts +5 -5
  6. package/package.json +6 -5
  7. package/packages/datadog-plugin-cucumber/src/index.js +6 -4
  8. package/packages/datadog-plugin-cypress/src/plugin.js +17 -5
  9. package/packages/datadog-plugin-cypress/src/support.js +21 -6
  10. package/packages/datadog-plugin-graphql/src/index.js +16 -10
  11. package/packages/datadog-plugin-grpc/src/client.js +1 -1
  12. package/packages/datadog-plugin-jest/src/jest-environment.js +9 -5
  13. package/packages/datadog-plugin-jest/src/jest-jasmine2.js +13 -4
  14. package/packages/datadog-plugin-mocha/src/index.js +12 -3
  15. package/packages/datadog-plugin-redis/src/index.js +31 -1
  16. package/packages/dd-trace/lib/version.js +1 -1
  17. package/packages/dd-trace/src/constants.js +6 -1
  18. package/packages/dd-trace/src/encode/0.4.js +84 -23
  19. package/packages/dd-trace/src/encode/chunk.js +12 -14
  20. package/packages/dd-trace/src/format.js +12 -0
  21. package/packages/dd-trace/src/id.js +22 -18
  22. package/packages/dd-trace/src/instrumenter.js +2 -2
  23. package/packages/dd-trace/src/opentracing/propagation/text_map.js +34 -0
  24. package/packages/dd-trace/src/opentracing/span_context.js +2 -1
  25. package/packages/dd-trace/src/{.DS_Store → plugins/.DS_Store} +0 -0
  26. package/packages/dd-trace/src/plugins/util/ci.js +22 -9
  27. package/packages/dd-trace/src/plugins/util/git.js +11 -25
  28. package/packages/dd-trace/src/plugins/util/redis.js +0 -2
  29. package/packages/dd-trace/src/plugins/util/test.js +22 -4
  30. package/packages/dd-trace/src/plugins/util/user-provided-git.js +72 -0
  31. package/packages/dd-trace/src/plugins/util/web.js +1 -1
  32. package/packages/dd-trace/src/priority_sampler.js +71 -19
  33. package/packages/dd-trace/src/profiling/exporters/agent.js +41 -33
  34. package/packages/dd-trace/src/profiling/profilers/cpu.js +1 -3
  35. package/packages/dd-trace/src/proxy.js +1 -1
  36. package/packages/dd-trace/src/plugins/util/ci-app-spec.json +0 -35
@@ -0,0 +1,3 @@
1
+ require('../init')
2
+
3
+ module.exports = require('../../packages/datadog-plugin-cypress/src/plugin')
@@ -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 Instrumentation {}
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.5.0",
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.0.0",
60
- "@datadog/pprof": "^0.1.3",
60
+ "@datadog/native-metrics": "^1.1.0",
61
+ "@datadog/pprof": "^0.3.0",
61
62
  "@datadog/sketches-js": "^1.0.4",
62
- "@types/node": "^10.12.18",
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.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
- const currentTest = Cypress.mocha.getRunner().suite.ctx.currentTest
11
- cy.task('dd:afterEach', {
12
- testName: currentTest.fullTitle(),
13
- testSuite: Cypress.mocha.getRootSuite().file,
14
- state: currentTest.state,
15
- error: currentTest.err
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 fieldResolver = args.fieldResolver || defaultFieldResolver
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, [args], (err, res) => {
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 === 1) {
217
- return args[0]
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: { ...commonSpanTags, [TEST_SUITE]: testSuite }
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.5.0'
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
- DATADOG_LAMBDA_EXTENSION_PATH: '/opt/extensions/datadog-agent'
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
  }