dd-trace 5.38.0 → 5.39.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 (73) hide show
  1. package/LICENSE-3rdparty.csv +1 -0
  2. package/package.json +3 -1
  3. package/packages/datadog-instrumentations/src/apollo-server-core.js +1 -1
  4. package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
  5. package/packages/datadog-instrumentations/src/express-session.js +41 -0
  6. package/packages/datadog-instrumentations/src/fetch.js +27 -6
  7. package/packages/datadog-instrumentations/src/helpers/fetch.js +6 -1
  8. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
  9. package/packages/datadog-instrumentations/src/jest.js +9 -6
  10. package/packages/datadog-instrumentations/src/mocha/main.js +1 -1
  11. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  12. package/packages/datadog-instrumentations/src/vitest.js +2 -2
  13. package/packages/datadog-plugin-amqplib/src/consumer.js +1 -1
  14. package/packages/datadog-plugin-amqplib/src/producer.js +1 -2
  15. package/packages/datadog-plugin-avsc/src/schema_iterator.js +1 -1
  16. package/packages/datadog-plugin-aws-sdk/src/base.js +5 -1
  17. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +9 -8
  18. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +1 -4
  19. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -2
  20. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +1 -2
  21. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +1 -1
  22. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +1 -2
  23. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +1 -1
  24. package/packages/datadog-plugin-kafkajs/src/consumer.js +5 -2
  25. package/packages/datadog-plugin-kafkajs/src/producer.js +4 -3
  26. package/packages/datadog-plugin-mongodb-core/src/index.js +10 -13
  27. package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +1 -1
  28. package/packages/datadog-plugin-rhea/src/consumer.js +1 -1
  29. package/packages/datadog-plugin-rhea/src/producer.js +1 -2
  30. package/packages/datadog-shimmer/src/shimmer.js +95 -95
  31. package/packages/dd-trace/src/appsec/addresses.js +1 -0
  32. package/packages/dd-trace/src/appsec/channels.js +1 -0
  33. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +1 -1
  34. package/packages/dd-trace/src/appsec/iast/iast-context.js +2 -2
  35. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +1 -2
  36. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +1 -1
  37. package/packages/dd-trace/src/appsec/index.js +23 -1
  38. package/packages/dd-trace/src/appsec/rule_manager.js +1 -1
  39. package/packages/dd-trace/src/appsec/sdk/set_user.js +9 -5
  40. package/packages/dd-trace/src/config.js +8 -8
  41. package/packages/dd-trace/src/{data_streams.js → datastreams/checkpointer.js} +1 -1
  42. package/packages/dd-trace/src/{data_streams_context.js → datastreams/context.js} +2 -2
  43. package/packages/dd-trace/src/datastreams/index.js +104 -0
  44. package/packages/dd-trace/src/datastreams/manager.js +27 -0
  45. package/packages/dd-trace/src/datastreams/processor.js +1 -44
  46. package/packages/dd-trace/src/datastreams/size.js +53 -0
  47. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +2 -2
  48. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -1
  49. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +22 -15
  50. package/packages/dd-trace/src/dogstatsd.js +7 -0
  51. package/packages/dd-trace/src/flare/index.js +3 -0
  52. package/packages/dd-trace/src/opentelemetry/tracer.js +45 -1
  53. package/packages/dd-trace/src/opentracing/propagation/text_map.js +11 -47
  54. package/packages/dd-trace/src/opentracing/propagation/text_map_dsm.js +1 -1
  55. package/packages/dd-trace/src/opentracing/span.js +12 -2
  56. package/packages/dd-trace/src/payload-tagging/config/aws.json +8 -0
  57. package/packages/dd-trace/src/plugin_manager.js +4 -3
  58. package/packages/dd-trace/src/profiling/profiler.js +1 -1
  59. package/packages/dd-trace/src/profiling/profilers/wall.js +15 -4
  60. package/packages/dd-trace/src/proxy.js +2 -11
  61. package/packages/dd-trace/src/{appsec/remote_config → remote_config}/capabilities.js +1 -0
  62. package/packages/dd-trace/src/{appsec/remote_config → remote_config}/index.js +7 -5
  63. package/packages/dd-trace/src/{appsec/remote_config → remote_config}/manager.js +5 -5
  64. package/packages/dd-trace/src/runtime_metrics/index.js +34 -0
  65. package/packages/dd-trace/src/{runtime_metrics.js → runtime_metrics/runtime_metrics.js} +4 -4
  66. package/packages/dd-trace/src/serverless.js +10 -1
  67. package/packages/dd-trace/src/service-naming/index.js +12 -4
  68. package/packages/dd-trace/src/telemetry/index.js +16 -387
  69. package/packages/dd-trace/src/telemetry/telemetry.js +394 -0
  70. package/packages/dd-trace/src/tracer.js +4 -13
  71. package/packages/dd-trace/src/service-naming/schemas/index.js +0 -6
  72. /package/packages/dd-trace/src/{appsec/remote_config → remote_config}/apply_states.js +0 -0
  73. /package/packages/dd-trace/src/{appsec/remote_config → remote_config}/scheduler.js +0 -0
@@ -54,6 +54,7 @@ dev,eslint-plugin-import,MIT,Copyright 2015 Ben Mosher
54
54
  dev,eslint-plugin-mocha,MIT,Copyright 2014 Mathias Schreck
55
55
  dev,eslint-plugin-n,MIT,Copyright 2015 Toru Nagashima
56
56
  dev,eslint-plugin-promise,ISC,jden and other contributors
57
+ dev,eslint-plugin-unicorn,MIT,Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
57
58
  dev,express,MIT,Copyright 2009-2014 TJ Holowaychuk 2013-2014 Roman Shtylman 2014-2015 Douglas Christopher Wilson
58
59
  dev,get-port,MIT,Copyright Sindre Sorhus
59
60
  dev,glob,ISC,Copyright Isaac Z. Schlueter and Contributors
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dd-trace",
3
- "version": "5.38.0",
3
+ "version": "5.39.0",
4
4
  "description": "Datadog APM tracing client for JavaScript",
5
5
  "main": "index.js",
6
6
  "typings": "index.d.ts",
@@ -14,6 +14,7 @@
14
14
  "type:test": "cd docs && yarn && yarn test",
15
15
  "lint": "node scripts/check_licenses.js && eslint . --max-warnings 0 && yarn audit",
16
16
  "lint:fix": "node scripts/check_licenses.js && eslint . --max-warnings 0 --fix && yarn audit",
17
+ "lint:inspect": "npx @eslint/config-inspector@latest",
17
18
  "release:proposal": "node scripts/release/proposal",
18
19
  "services": "node ./scripts/install_plugin_modules && node packages/dd-trace/test/setup/services",
19
20
  "test": "SERVICES=* yarn services && mocha --expose-gc 'packages/dd-trace/test/setup/node.js' 'packages/*/test/**/*.spec.js'",
@@ -138,6 +139,7 @@
138
139
  "eslint-plugin-mocha": "^10.5.0",
139
140
  "eslint-plugin-n": "^17.15.1",
140
141
  "eslint-plugin-promise": "^7.2.1",
142
+ "eslint-plugin-unicorn": "^57.0.0",
141
143
  "express": "^4.21.2",
142
144
  "get-port": "^3.2.0",
143
145
  "glob": "^7.1.6",
@@ -10,7 +10,7 @@ addHook({ name: 'apollo-server-core', file: 'dist/runHttpQuery.js', versions: ['
10
10
  const HttpQueryError = runHttpQueryModule.HttpQueryError
11
11
 
12
12
  shimmer.wrap(runHttpQueryModule, 'runHttpQuery', function wrapRunHttpQuery (originalRunHttpQuery) {
13
- return async function runHttpQuery () {
13
+ return function runHttpQuery () {
14
14
  if (!requestChannel.start.hasSubscribers) {
15
15
  return originalRunHttpQuery.apply(this, arguments)
16
16
  }
@@ -12,7 +12,7 @@ const requestChannel = dc.tracingChannel('datadog:apollo:request')
12
12
  let HeaderMap
13
13
 
14
14
  function wrapExecuteHTTPGraphQLRequest (originalExecuteHTTPGraphQLRequest) {
15
- return async function executeHTTPGraphQLRequest () {
15
+ return function executeHTTPGraphQLRequest () {
16
16
  if (!HeaderMap || !requestChannel.start.hasSubscribers) {
17
17
  return originalExecuteHTTPGraphQLRequest.apply(this, arguments)
18
18
  }
@@ -0,0 +1,41 @@
1
+ 'use strict'
2
+
3
+ const shimmer = require('../../datadog-shimmer')
4
+ const { channel, addHook } = require('./helpers/instrument')
5
+
6
+ const sessionMiddlewareFinishCh = channel('datadog:express-session:middleware:finish')
7
+
8
+ function wrapSessionMiddleware (sessionMiddleware) {
9
+ return function wrappedSessionMiddleware (req, res, next) {
10
+ shimmer.wrap(arguments, 2, function wrapNext (next) {
11
+ return function wrappedNext () {
12
+ if (sessionMiddlewareFinishCh.hasSubscribers) {
13
+ const abortController = new AbortController()
14
+
15
+ sessionMiddlewareFinishCh.publish({ req, res, sessionId: req.sessionID, abortController })
16
+
17
+ if (abortController.signal.aborted) return
18
+ }
19
+
20
+ return next.apply(this, arguments)
21
+ }
22
+ })
23
+
24
+ return sessionMiddleware.apply(this, arguments)
25
+ }
26
+ }
27
+
28
+ function wrapSession (session) {
29
+ return function wrappedSession () {
30
+ const sessionMiddleware = session.apply(this, arguments)
31
+
32
+ return shimmer.wrapFunction(sessionMiddleware, wrapSessionMiddleware)
33
+ }
34
+ }
35
+
36
+ addHook({
37
+ name: 'express-session',
38
+ versions: ['>=1.5.0']
39
+ }, session => {
40
+ return shimmer.wrapFunction(session, wrapSession)
41
+ })
@@ -1,12 +1,33 @@
1
1
  'use strict'
2
2
 
3
- const shimmer = require('../../datadog-shimmer')
4
- const { tracingChannel } = require('dc-polyfill')
5
- const { createWrapFetch } = require('./helpers/fetch')
3
+ const { isInServerlessEnvironment } = require('../../dd-trace/src/serverless')
6
4
 
7
5
  if (globalThis.fetch) {
8
- const ch = tracingChannel('apm:fetch:request')
9
- const wrapFetch = createWrapFetch(globalThis.Request, ch)
6
+ const globalFetch = globalThis.fetch
10
7
 
11
- globalThis.fetch = shimmer.wrapFunction(fetch, fetch => wrapFetch(fetch))
8
+ let fetch = (input, init) => {
9
+ wrapRealFetch()
10
+
11
+ return fetch(input, init)
12
+ }
13
+
14
+ function wrapRealFetch () {
15
+ const { channel, tracingChannel } = require('dc-polyfill')
16
+ const { createWrapFetch } = require('./helpers/fetch')
17
+
18
+ const ch = tracingChannel('apm:fetch:request')
19
+ const wrapFetch = createWrapFetch(globalThis.Request, ch, () => {
20
+ channel('dd-trace:instrumentation:load').publish({ name: 'fetch' })
21
+ })
22
+
23
+ fetch = wrapFetch(globalFetch)
24
+ }
25
+
26
+ if (!isInServerlessEnvironment()) {
27
+ wrapRealFetch()
28
+ }
29
+
30
+ globalThis.fetch = function value (input, init) {
31
+ return fetch(input, init)
32
+ }
12
33
  }
@@ -1,10 +1,15 @@
1
1
  'use strict'
2
2
 
3
- exports.createWrapFetch = function createWrapFetch (Request, ch) {
3
+ exports.createWrapFetch = function createWrapFetch (Request, ch, onLoad) {
4
4
  return function wrapFetch (fetch) {
5
5
  if (typeof fetch !== 'function') return fetch
6
6
 
7
7
  return function (input, init) {
8
+ if (onLoad) {
9
+ onLoad()
10
+ onLoad = undefined
11
+ }
12
+
8
13
  if (!ch.start.hasSubscribers) return fetch.apply(this, arguments)
9
14
 
10
15
  if (input instanceof Request) {
@@ -47,6 +47,7 @@ module.exports = {
47
47
  elasticsearch: () => require('../elasticsearch'),
48
48
  express: () => require('../express'),
49
49
  'express-mongo-sanitize': () => require('../express-mongo-sanitize'),
50
+ 'express-session': () => require('../express-session'),
50
51
  fastify: () => require('../fastify'),
51
52
  'find-my-way': () => require('../find-my-way'),
52
53
  fs: () => require('../fs'),
@@ -170,7 +170,7 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
170
170
  try {
171
171
  const hasQuarantinedTests = !!quarantinedTests.jest
172
172
  this.quarantinedTestsForThisSuite = hasQuarantinedTests
173
- ? this.getQuarantinedTestsForSuite(quarantinedTests.jest.suites[this.testSuite].tests)
173
+ ? this.getQuarantinedTestsForSuite(quarantinedTests.jest.suites?.[this.testSuite]?.tests)
174
174
  : this.getQuarantinedTestsForSuite(this.testEnvironmentOptions._ddQuarantinedTests)
175
175
  } catch (e) {
176
176
  log.error('Error parsing quarantined tests', e)
@@ -209,11 +209,14 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
209
209
  return knownTestsForSuite
210
210
  }
211
211
 
212
- getQuarantinedTestsForSuite (quaratinedTests) {
212
+ getQuarantinedTestsForSuite (quarantined) {
213
213
  if (this.quarantinedTestsForThisSuite) {
214
214
  return this.quarantinedTestsForThisSuite
215
215
  }
216
- let quarantinedTestsForSuite = quaratinedTests
216
+ if (!quarantined) {
217
+ return []
218
+ }
219
+ let quarantinedTestsForSuite = quarantined
217
220
  // If jest is using workers, quarantined tests are serialized to json.
218
221
  // If jest runs in band, they are not.
219
222
  if (typeof quarantinedTestsForSuite === 'string') {
@@ -439,7 +442,7 @@ addHook({
439
442
  }, getTestEnvironment)
440
443
 
441
444
  function getWrappedScheduleTests (scheduleTests, frameworkVersion) {
442
- return async function (tests) {
445
+ return function (tests) {
443
446
  if (!isSuitesSkippingEnabled || hasFilteredSkippableSuites) {
444
447
  return scheduleTests.apply(this, arguments)
445
448
  }
@@ -741,7 +744,7 @@ function coverageReporterWrapper (coverageReporter) {
741
744
  * This calculation adds no value, so we'll skip it, as long as the user has not manually opted in to code coverage,
742
745
  * in which case we'll leave it.
743
746
  */
744
- shimmer.wrap(CoverageReporter.prototype, '_addUntestedFiles', addUntestedFiles => async function () {
747
+ shimmer.wrap(CoverageReporter.prototype, '_addUntestedFiles', addUntestedFiles => function () {
745
748
  // If the user has added coverage manually, they're willing to pay the price of this execution, so
746
749
  // we will not skip it.
747
750
  if (isSuitesSkippingEnabled && !isUserCodeCoverageEnabled) {
@@ -898,7 +901,7 @@ addHook({
898
901
  }, transformPackage => {
899
902
  const originalCreateScriptTransformer = transformPackage.createScriptTransformer
900
903
 
901
- transformPackage.createScriptTransformer = async function (config) {
904
+ transformPackage.createScriptTransformer = function (config) {
902
905
  const { testEnvironmentOptions, ...restOfConfig } = config
903
906
  const {
904
907
  _ddTestModuleId,
@@ -349,7 +349,7 @@ addHook({
349
349
  versions: ['>=5.2.0'],
350
350
  file: 'lib/cli/run-helpers.js'
351
351
  }, (run) => {
352
- shimmer.wrap(run, 'runMocha', runMocha => async function () {
352
+ shimmer.wrap(run, 'runMocha', runMocha => function () {
353
353
  if (!testStartCh.hasSubscribers) {
354
354
  return runMocha.apply(this, arguments)
355
355
  }
@@ -7,7 +7,7 @@ addHook({
7
7
  name: 'nyc',
8
8
  versions: ['>=17']
9
9
  }, (nycPackage) => {
10
- shimmer.wrap(nycPackage.prototype, 'wrap', wrap => async function () {
10
+ shimmer.wrap(nycPackage.prototype, 'wrap', wrap => function () {
11
11
  // Only relevant if the config `all` is set to true
12
12
  try {
13
13
  if (JSON.parse(process.env.NYC_CONFIG).all) {
@@ -329,7 +329,7 @@ addHook({
329
329
  const { VitestTestRunner } = vitestPackage
330
330
 
331
331
  // `onBeforeRunTask` is run before any repetition or attempt is run
332
- shimmer.wrap(VitestTestRunner.prototype, 'onBeforeRunTask', onBeforeRunTask => async function (task) {
332
+ shimmer.wrap(VitestTestRunner.prototype, 'onBeforeRunTask', onBeforeRunTask => function (task) {
333
333
  const testName = getTestName(task)
334
334
 
335
335
  const {
@@ -361,7 +361,7 @@ addHook({
361
361
  })
362
362
 
363
363
  // `onAfterRunTask` is run after all repetitions or attempts are run
364
- shimmer.wrap(VitestTestRunner.prototype, 'onAfterRunTask', onAfterRunTask => async function (task) {
364
+ shimmer.wrap(VitestTestRunner.prototype, 'onAfterRunTask', onAfterRunTask => function (task) {
365
365
  const { isEarlyFlakeDetectionEnabled, isQuarantinedTestsEnabled } = getProvidedContext()
366
366
 
367
367
  if (isEarlyFlakeDetectionEnabled && taskToStatuses.has(task)) {
@@ -2,7 +2,7 @@
2
2
 
3
3
  const { TEXT_MAP } = require('../../../ext/formats')
4
4
  const ConsumerPlugin = require('../../dd-trace/src/plugins/consumer')
5
- const { getAmqpMessageSize } = require('../../dd-trace/src/datastreams/processor')
5
+ const { getAmqpMessageSize } = require('../../dd-trace/src/datastreams')
6
6
  const { getResourceName } = require('./util')
7
7
 
8
8
  class AmqplibConsumerPlugin extends ConsumerPlugin {
@@ -3,8 +3,7 @@
3
3
  const { TEXT_MAP } = require('../../../ext/formats')
4
4
  const { CLIENT_PORT_KEY } = require('../../dd-trace/src/constants')
5
5
  const ProducerPlugin = require('../../dd-trace/src/plugins/producer')
6
- const { DsmPathwayCodec } = require('../../dd-trace/src/datastreams/pathway')
7
- const { getAmqpMessageSize } = require('../../dd-trace/src/datastreams/processor')
6
+ const { DsmPathwayCodec, getAmqpMessageSize } = require('../../dd-trace/src/datastreams')
8
7
  const { getResourceName } = require('./util')
9
8
 
10
9
  class AmqplibProducerPlugin extends ProducerPlugin {
@@ -10,7 +10,7 @@ const {
10
10
  const log = require('../../dd-trace/src/log')
11
11
  const {
12
12
  SchemaBuilder
13
- } = require('../../dd-trace/src/datastreams/schemas/schema_builder')
13
+ } = require('../../dd-trace/src/datastreams')
14
14
 
15
15
  class SchemaExtractor {
16
16
  constructor (schema) {
@@ -93,7 +93,11 @@ class BaseAwsSdkPlugin extends ClientPlugin {
93
93
  this.responseExtractDSMContext(operation, params, response.data ?? response, span)
94
94
  }
95
95
  this.addResponseTags(span, response)
96
- this.addSpanPointers(span, response)
96
+
97
+ if (this._tracerConfig?.trace?.aws?.addSpanPointers) {
98
+ this.addSpanPointers(span, response)
99
+ }
100
+
97
101
  this.finish(span, response, response.error)
98
102
  })
99
103
  }
@@ -8,6 +8,7 @@ const { extractPrimaryKeys, generatePointerHash } = require('../util')
8
8
  class DynamoDb extends BaseAwsSdkPlugin {
9
9
  static get id () { return 'dynamodb' }
10
10
  static get peerServicePrecursors () { return ['tablename'] }
11
+ static get isPayloadReporter () { return true }
11
12
 
12
13
  generateTags (params, operation, response) {
13
14
  const tags = {}
@@ -113,7 +114,7 @@ class DynamoDb extends BaseAwsSdkPlugin {
113
114
  }
114
115
 
115
116
  /**
116
- * Parses primary key config from the `DD_AWS_SDK_DYNAMODB_TABLE_PRIMARY_KEYS` env var.
117
+ * Parses primary key config from the `DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS` env var.
117
118
  * Only runs when needed, and warns when missing or invalid config.
118
119
  * @returns {Object|undefined} Parsed config from env var or undefined if empty/missing/invalid config.
119
120
  */
@@ -123,9 +124,9 @@ class DynamoDb extends BaseAwsSdkPlugin {
123
124
  return this.dynamoPrimaryKeyConfig
124
125
  }
125
126
 
126
- const configStr = this._tracerConfig?.aws?.dynamoDb?.tablePrimaryKeys
127
+ const configStr = this._tracerConfig?.trace?.dynamoDb?.tablePrimaryKeys
127
128
  if (!configStr) {
128
- log.warn('Missing DD_AWS_SDK_DYNAMODB_TABLE_PRIMARY_KEYS env variable. ' +
129
+ log.warn('Missing DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS env variable. ' +
129
130
  'Please add your table\'s primary keys under this env variable.')
130
131
  return
131
132
  }
@@ -138,14 +139,14 @@ class DynamoDb extends BaseAwsSdkPlugin {
138
139
  config[tableName] = new Set(primaryKeys)
139
140
  } else {
140
141
  log.warn(`Invalid primary key configuration for table: ${tableName}.` +
141
- 'Please fix the DD_AWS_SDK_DYNAMODB_TABLE_PRIMARY_KEYS env var.')
142
+ 'Please fix the DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS env var.')
142
143
  }
143
144
  }
144
145
 
145
146
  this.dynamoPrimaryKeyConfig = config
146
147
  return config
147
148
  } catch (err) {
148
- log.warn('Failed to parse DD_AWS_SDK_DYNAMODB_TABLE_PRIMARY_KEYS:', err.message)
149
+ log.warn('Failed to parse DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS:', err.message)
149
150
  }
150
151
  }
151
152
 
@@ -154,7 +155,7 @@ class DynamoDb extends BaseAwsSdkPlugin {
154
155
  * @param {string} tableName - Name of the DynamoDB table.
155
156
  * @param {Object} item - Complete PutItem item parameter to be put.
156
157
  * @param {Object.<string, Set<string>>} primaryKeyConfig - Mapping of table names to Sets of primary key names
157
- * loaded from DD_AWS_SDK_DYNAMODB_TABLE_PRIMARY_KEYS.
158
+ * loaded from DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS.
158
159
  * @returns {string|undefined} Hash combining table name and primary key/value pairs, or undefined if unable.
159
160
  */
160
161
  static calculatePutItemHash (tableName, item, primaryKeyConfig) {
@@ -163,14 +164,14 @@ class DynamoDb extends BaseAwsSdkPlugin {
163
164
  return
164
165
  }
165
166
  if (!primaryKeyConfig) {
166
- log.warn('Missing DD_AWS_SDK_DYNAMODB_TABLE_PRIMARY_KEYS env variable')
167
+ log.warn('Missing DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS env variable')
167
168
  return
168
169
  }
169
170
  const primaryKeySet = primaryKeyConfig[tableName]
170
171
  if (!primaryKeySet || !(primaryKeySet instanceof Set) || primaryKeySet.size === 0 || primaryKeySet.size > 2) {
171
172
  log.warn(
172
173
  `span pointers: failed to extract PutItem span pointer: table ${tableName} ` +
173
- 'not found in primary key names or the DD_AWS_SDK_DYNAMODB_TABLE_PRIMARY_KEYS env var was invalid.' +
174
+ 'not found in primary key names or the DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS env var was invalid.' +
174
175
  'Please update the env var.'
175
176
  )
176
177
  return
@@ -1,8 +1,5 @@
1
1
  'use strict'
2
- const {
3
- getSizeOrZero
4
- } = require('../../../dd-trace/src/datastreams/processor')
5
- const { DsmPathwayCodec } = require('../../../dd-trace/src/datastreams/pathway')
2
+ const { DsmPathwayCodec, getSizeOrZero } = require('../../../dd-trace/src/datastreams')
6
3
  const log = require('../../../dd-trace/src/log')
7
4
  const BaseAwsSdkPlugin = require('../base')
8
5
  const { storage } = require('../../../datadog-core')
@@ -1,6 +1,5 @@
1
1
  'use strict'
2
- const { getHeadersSize } = require('../../../dd-trace/src/datastreams/processor')
3
- const { DsmPathwayCodec } = require('../../../dd-trace/src/datastreams/pathway')
2
+ const { DsmPathwayCodec, getHeadersSize } = require('../../../dd-trace/src/datastreams')
4
3
  const log = require('../../../dd-trace/src/log')
5
4
  const BaseAwsSdkPlugin = require('../base')
6
5
 
@@ -3,8 +3,7 @@
3
3
  const log = require('../../../dd-trace/src/log')
4
4
  const BaseAwsSdkPlugin = require('../base')
5
5
  const { storage } = require('../../../datadog-core')
6
- const { getHeadersSize } = require('../../../dd-trace/src/datastreams/processor')
7
- const { DsmPathwayCodec } = require('../../../dd-trace/src/datastreams/pathway')
6
+ const { DsmPathwayCodec, getHeadersSize } = require('../../../dd-trace/src/datastreams')
8
7
 
9
8
  class Sqs extends BaseAwsSdkPlugin {
10
9
  static get id () { return 'sqs' }
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const { getMessageSize } = require('../../dd-trace/src/datastreams/processor')
3
+ const { getMessageSize } = require('../../dd-trace/src/datastreams')
4
4
  const ConsumerPlugin = require('../../dd-trace/src/plugins/consumer')
5
5
 
6
6
  class GoogleCloudPubsubConsumerPlugin extends ConsumerPlugin {
@@ -1,8 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const ProducerPlugin = require('../../dd-trace/src/plugins/producer')
4
- const { DsmPathwayCodec } = require('../../dd-trace/src/datastreams/pathway')
5
- const { getHeadersSize } = require('../../dd-trace/src/datastreams/processor')
4
+ const { DsmPathwayCodec, getHeadersSize } = require('../../dd-trace/src/datastreams')
6
5
 
7
6
  class GoogleCloudPubsubProducerPlugin extends ProducerPlugin {
8
7
  static get id () { return 'google-cloud-pubsub' }
@@ -1,5 +1,5 @@
1
1
  const ConsumerPlugin = require('../../dd-trace/src/plugins/consumer')
2
- const { getMessageSize } = require('../../dd-trace/src/datastreams/processor')
2
+ const { getMessageSize } = require('../../dd-trace/src/datastreams')
3
3
 
4
4
  class KafkajsBatchConsumerPlugin extends ConsumerPlugin {
5
5
  static get id () { return 'kafkajs' }
@@ -1,12 +1,14 @@
1
1
  'use strict'
2
2
 
3
3
  const dc = require('dc-polyfill')
4
- const { getMessageSize } = require('../../dd-trace/src/datastreams/processor')
4
+ const { getMessageSize } = require('../../dd-trace/src/datastreams')
5
5
  const ConsumerPlugin = require('../../dd-trace/src/plugins/consumer')
6
6
 
7
7
  const afterStartCh = dc.channel('dd-trace:kafkajs:consumer:afterStart')
8
8
  const beforeFinishCh = dc.channel('dd-trace:kafkajs:consumer:beforeFinish')
9
9
 
10
+ const MESSAGING_DESTINATION_KEY = 'messaging.destination.name'
11
+
10
12
  class KafkajsConsumerPlugin extends ConsumerPlugin {
11
13
  static get id () { return 'kafkajs' }
12
14
  static get operation () { return 'consume' }
@@ -72,7 +74,8 @@ class KafkajsConsumerPlugin extends ConsumerPlugin {
72
74
  component: 'kafkajs',
73
75
  'kafka.topic': topic,
74
76
  'kafka.message.offset': message.offset,
75
- 'kafka.cluster_id': clusterId
77
+ 'kafka.cluster_id': clusterId,
78
+ [MESSAGING_DESTINATION_KEY]: topic
76
79
  },
77
80
  metrics: {
78
81
  'kafka.partition': partition
@@ -1,10 +1,10 @@
1
1
  'use strict'
2
2
 
3
3
  const ProducerPlugin = require('../../dd-trace/src/plugins/producer')
4
- const { DsmPathwayCodec } = require('../../dd-trace/src/datastreams/pathway')
5
- const { getMessageSize } = require('../../dd-trace/src/datastreams/processor')
4
+ const { DsmPathwayCodec, getMessageSize } = require('../../dd-trace/src/datastreams')
6
5
 
7
6
  const BOOTSTRAP_SERVERS_KEY = 'messaging.kafka.bootstrap.servers'
7
+ const MESSAGING_DESTINATION_KEY = 'messaging.destination.name'
8
8
 
9
9
  class KafkajsProducerPlugin extends ProducerPlugin {
10
10
  static get id () { return 'kafkajs' }
@@ -72,7 +72,8 @@ class KafkajsProducerPlugin extends ProducerPlugin {
72
72
  meta: {
73
73
  component: 'kafkajs',
74
74
  'kafka.topic': topic,
75
- 'kafka.cluster_id': clusterId
75
+ 'kafka.cluster_id': clusterId,
76
+ [MESSAGING_DESTINATION_KEY]: topic
76
77
  },
77
78
  metrics: {
78
79
  'kafka.batch_size': messages.length
@@ -25,7 +25,7 @@ class MongodbCorePlugin extends DatabasePlugin {
25
25
  'out.port': options.port
26
26
  }
27
27
  })
28
- ops = this.injectDbmCommand(span, ops, service)
28
+ ops.comment = this.injectDbmComment(span, ops.comment, service)
29
29
  }
30
30
 
31
31
  getPeerService (tags) {
@@ -37,28 +37,25 @@ class MongodbCorePlugin extends DatabasePlugin {
37
37
  return super.getPeerService(tags)
38
38
  }
39
39
 
40
- injectDbmCommand (span, command, serviceName) {
40
+ injectDbmComment (span, comment, serviceName) {
41
41
  const dbmTraceComment = this.createDbmComment(span, serviceName)
42
42
 
43
43
  if (!dbmTraceComment) {
44
- return command
44
+ return comment
45
45
  }
46
46
 
47
- // create a copy of the command to avoid mutating the original
48
- const dbmTracedCommand = { ...command }
49
-
50
- if (dbmTracedCommand.comment) {
47
+ if (comment) {
51
48
  // if the command already has a comment, append the dbm trace comment
52
- if (typeof dbmTracedCommand.comment === 'string') {
53
- dbmTracedCommand.comment += `,${dbmTraceComment}`
54
- } else if (Array.isArray(dbmTracedCommand.comment)) {
55
- dbmTracedCommand.comment.push(dbmTraceComment)
49
+ if (typeof comment === 'string') {
50
+ comment += `,${dbmTraceComment}`
51
+ } else if (Array.isArray(comment)) {
52
+ comment.push(dbmTraceComment)
56
53
  } // do nothing if the comment is not a string or an array
57
54
  } else {
58
- dbmTracedCommand.comment = dbmTraceComment
55
+ comment = dbmTraceComment
59
56
  }
60
57
 
61
- return dbmTracedCommand
58
+ return comment
62
59
  }
63
60
  }
64
61
 
@@ -10,7 +10,7 @@ const {
10
10
  const log = require('../../dd-trace/src/log')
11
11
  const {
12
12
  SchemaBuilder
13
- } = require('../../dd-trace/src/datastreams/schemas/schema_builder')
13
+ } = require('../../dd-trace/src/datastreams')
14
14
 
15
15
  class SchemaExtractor {
16
16
  constructor (schema) {
@@ -2,7 +2,7 @@
2
2
 
3
3
  const ConsumerPlugin = require('../../dd-trace/src/plugins/consumer')
4
4
  const { storage } = require('../../datadog-core')
5
- const { getAmqpMessageSize } = require('../../dd-trace/src/datastreams/processor')
5
+ const { getAmqpMessageSize } = require('../../dd-trace/src/datastreams')
6
6
 
7
7
  class RheaConsumerPlugin extends ConsumerPlugin {
8
8
  static get id () { return 'rhea' }
@@ -2,8 +2,7 @@
2
2
 
3
3
  const { CLIENT_PORT_KEY } = require('../../dd-trace/src/constants')
4
4
  const ProducerPlugin = require('../../dd-trace/src/plugins/producer')
5
- const { DsmPathwayCodec } = require('../../dd-trace/src/datastreams/pathway')
6
- const { getAmqpMessageSize } = require('../../dd-trace/src/datastreams/processor')
5
+ const { getAmqpMessageSize, DsmPathwayCodec } = require('../../dd-trace/src/datastreams')
7
6
 
8
7
  class RheaProducerPlugin extends ProducerPlugin {
9
8
  static get id () { return 'rhea' }