dd-trace 5.97.0 → 5.98.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 (81) hide show
  1. package/index.d.ts +26 -2
  2. package/package.json +1 -1
  3. package/packages/datadog-instrumentations/src/cucumber.js +65 -3
  4. package/packages/datadog-instrumentations/src/cypress-config.js +31 -37
  5. package/packages/datadog-instrumentations/src/jest.js +104 -12
  6. package/packages/datadog-instrumentations/src/mocha/utils.js +8 -0
  7. package/packages/datadog-instrumentations/src/redis.js +12 -6
  8. package/packages/datadog-plugin-aws-sdk/src/base.js +1 -1
  9. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +1 -0
  10. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +1 -0
  11. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +1 -0
  12. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -0
  13. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -0
  14. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +1 -0
  15. package/packages/datadog-plugin-cucumber/src/index.js +6 -0
  16. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +109 -1
  17. package/packages/datadog-plugin-cypress/src/index.js +59 -2
  18. package/packages/datadog-plugin-fs/src/index.js +1 -1
  19. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +2 -1
  20. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +2 -7
  21. package/packages/datadog-plugin-http/src/client.js +1 -1
  22. package/packages/datadog-plugin-http/src/server.js +10 -2
  23. package/packages/datadog-plugin-http2/src/client.js +1 -1
  24. package/packages/datadog-plugin-http2/src/server.js +10 -2
  25. package/packages/datadog-plugin-mongodb-core/src/index.js +3 -3
  26. package/packages/datadog-plugin-mysql/src/index.js +1 -1
  27. package/packages/datadog-plugin-next/src/index.js +8 -2
  28. package/packages/datadog-plugin-pg/src/index.js +1 -1
  29. package/packages/datadog-plugin-tedious/src/index.js +1 -1
  30. package/packages/datadog-plugin-ws/src/close.js +1 -1
  31. package/packages/datadog-plugin-ws/src/receiver.js +1 -1
  32. package/packages/dd-trace/src/aiguard/sdk.js +22 -22
  33. package/packages/dd-trace/src/appsec/blocked_templates.js +4 -3
  34. package/packages/dd-trace/src/appsec/blocking.js +62 -34
  35. package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
  36. package/packages/dd-trace/src/appsec/sdk/track_event.js +5 -5
  37. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  38. package/packages/dd-trace/src/appsec/sdk/utils.js +4 -2
  39. package/packages/dd-trace/src/config/defaults.js +0 -1
  40. package/packages/dd-trace/src/config/generated-config-types.d.ts +5 -0
  41. package/packages/dd-trace/src/config/index.js +55 -28
  42. package/packages/dd-trace/src/config/supported-configurations.json +61 -4
  43. package/packages/dd-trace/src/constants.js +1 -0
  44. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +5 -2
  45. package/packages/dd-trace/src/encode/0.4.js +7 -6
  46. package/packages/dd-trace/src/encode/span-stats.js +4 -1
  47. package/packages/dd-trace/src/log/index.js +0 -10
  48. package/packages/dd-trace/src/openfeature/remote_config.js +6 -1
  49. package/packages/dd-trace/src/opentelemetry/context_manager.js +6 -4
  50. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +17 -2
  51. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +14 -2
  52. package/packages/dd-trace/src/opentelemetry/otlp/trace.proto +358 -0
  53. package/packages/dd-trace/src/opentelemetry/otlp/trace_service.proto +78 -0
  54. package/packages/dd-trace/src/opentelemetry/trace/index.js +75 -0
  55. package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +66 -0
  56. package/packages/dd-trace/src/opentelemetry/trace/otlp_transformer.js +332 -0
  57. package/packages/dd-trace/src/opentracing/tracer.js +9 -4
  58. package/packages/dd-trace/src/plugins/log_plugin.js +3 -0
  59. package/packages/dd-trace/src/plugins/plugin.js +6 -11
  60. package/packages/dd-trace/src/plugins/storage.js +2 -2
  61. package/packages/dd-trace/src/plugins/tracing.js +22 -5
  62. package/packages/dd-trace/src/plugins/util/test.js +2 -0
  63. package/packages/dd-trace/src/plugins/util/web.js +6 -88
  64. package/packages/dd-trace/src/profiling/profiler.js +34 -77
  65. package/packages/dd-trace/src/proxy.js +8 -3
  66. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +15 -11
  67. package/packages/dd-trace/src/service-naming/index.js +1 -1
  68. package/packages/dd-trace/src/service-naming/schemas/definition.js +4 -1
  69. package/packages/dd-trace/src/service-naming/schemas/util.js +15 -1
  70. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +24 -1
  71. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +60 -0
  72. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +17 -1
  73. package/packages/dd-trace/src/service-naming/schemas/v0/websocket.js +5 -0
  74. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +17 -0
  75. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +11 -1
  76. package/packages/dd-trace/src/service-naming/schemas/v1/websocket.js +6 -0
  77. package/packages/dd-trace/src/span_stats.js +5 -1
  78. package/packages/dd-trace/src/tracer.js +2 -2
  79. package/vendor/dist/@apm-js-collab/code-transformer/index.js +28 -6
  80. package/vendor/dist/protobufjs/index.js +1 -1
  81. package/packages/dd-trace/src/log/utils.js +0 -16
@@ -7,8 +7,9 @@ const log = require('../../log')
7
7
  const tags = require('../../../../../ext/tags')
8
8
  const types = require('../../../../../ext/types')
9
9
  const kinds = require('../../../../../ext/kinds')
10
- const { ERROR_MESSAGE, ERROR_TYPE, ERROR_STACK } = require('../../constants')
10
+ const { ERROR_MESSAGE } = require('../../constants')
11
11
  const TracingPlugin = require('../tracing')
12
+ const { storage } = require('../../../../datadog-core')
12
13
  const urlFilter = require('./urlfilter')
13
14
  const { createInferredProxySpan, finishInferredProxySpan } = require('./inferred_proxy')
14
15
  const { extractURL, obfuscateQs, calculateHttpEndpoint } = require('./url')
@@ -125,33 +126,13 @@ const web = {
125
126
  context.tracer = tracer
126
127
  context.span = span
127
128
  context.res = res
129
+ context.store = storage('legacy').getStore()
128
130
 
129
131
  this.setConfig(req, config)
130
132
  addRequestTags(context, this.TYPE)
131
133
 
132
134
  return span
133
135
  },
134
- wrap (req) {
135
- const context = contexts.get(req)
136
- if (!context.instrumented) {
137
- this.wrapEnd(context)
138
- context.instrumented = true
139
- }
140
- },
141
- // Start a span and activate a scope for a request.
142
- instrument (tracer, config, req, res, name, callback) {
143
- const span = this.startSpan(tracer, config, req, res, name)
144
-
145
- this.wrap(req)
146
-
147
- return callback && tracer.scope().activate(span, () => callback(span))
148
- },
149
-
150
- // Reactivate the request scope in case it was changed by a middleware.
151
- reactivate (req, fn) {
152
- return reactivate(req, fn)
153
- },
154
-
155
136
  // Add a route segment that will be used for the resource name.
156
137
  enterRoute (req, path) {
157
138
  if (typeof path === 'string') {
@@ -172,61 +153,6 @@ const web = {
172
153
  contexts.get(req).paths.pop()
173
154
  },
174
155
 
175
- // Start a new middleware span and activate a new scope with the span.
176
- wrapMiddleware (req, middleware, name, fn) {
177
- if (!this.active(req)) return fn()
178
-
179
- const context = contexts.get(req)
180
- const tracer = context.tracer
181
- const childOf = this.active(req)
182
- const config = context.config
183
- const traceCtx = context.traceCtx
184
-
185
- if (config.middleware === false) return this.bindAndWrapMiddlewareErrors(fn, req, tracer, childOf)
186
-
187
- const span = startSpanHelper(tracer, name, { childOf }, traceCtx, config)
188
-
189
- analyticsSampler.sample(span, config.measured)
190
-
191
- span.addTags({
192
- [RESOURCE_NAME]: middleware._name || middleware.name || '<anonymous>',
193
- })
194
-
195
- context.middleware.push(span)
196
-
197
- return tracer.scope().activate(span, fn)
198
- },
199
-
200
- // catch errors and apply to active span
201
- bindAndWrapMiddlewareErrors (fn, req, tracer, activeSpan) {
202
- try {
203
- return tracer.scope().bind(fn, activeSpan).apply(this, arguments)
204
- } catch (e) {
205
- web.addError(req, e) // TODO: remove when error formatting is moved to Span
206
- throw e
207
- }
208
- },
209
-
210
- // Finish the active middleware span.
211
- finish (req, error) {
212
- if (!this.active(req)) return
213
-
214
- const context = contexts.get(req)
215
- const span = context.middleware.pop()
216
-
217
- if (span) {
218
- if (error) {
219
- span.addTags({
220
- [ERROR_TYPE]: error.name,
221
- [ERROR_MESSAGE]: error.message,
222
- [ERROR_STACK]: error.stack,
223
- })
224
- }
225
-
226
- span.finish()
227
- }
228
- },
229
-
230
156
  // Register a callback to run before res.end() is called.
231
157
  beforeEnd (req, callback) {
232
158
  contexts.get(req).beforeEnd.push(callback)
@@ -278,7 +204,6 @@ const web = {
278
204
  startServerlessSpanWithInferredProxy (tracer, config, name, req, traceCtx) {
279
205
  const headers = req.headers
280
206
  const reqCtx = contexts.get(req)
281
- const { storage } = require('../../../../datadog-core')
282
207
  const store = storage('legacy').getStore()
283
208
  const pubsubSpan = store?.span?._name === 'pubsub.push.receive' ? store.span : null
284
209
 
@@ -391,7 +316,6 @@ const web = {
391
316
  }
392
317
  },
393
318
  wrapEnd (context) {
394
- const scope = context.tracer.scope()
395
319
  const req = context.req
396
320
  const res = context.res
397
321
  const end = res.end
@@ -406,7 +330,9 @@ const web = {
406
330
  return ends.get(this)
407
331
  },
408
332
  set (value) {
409
- ends.set(this, scope.bind(value, context.span))
333
+ ends.set(this, function () {
334
+ return storage('legacy').run(context.store, value, ...arguments)
335
+ })
410
336
  },
411
337
  })
412
338
  },
@@ -453,14 +379,6 @@ function splitHeader (str) {
453
379
  return typeof str === 'string' ? str.split(/\s*,\s*/) : []
454
380
  }
455
381
 
456
- function reactivate (req, fn) {
457
- const context = contexts.get(req)
458
-
459
- return context
460
- ? context.tracer.scope().activate(context.span, fn)
461
- : fn()
462
- }
463
-
464
382
  function addRequestTags (context, spanType) {
465
383
  const { req, span, inferredProxySpan, config } = context
466
384
  const url = extractURL(req)
@@ -12,12 +12,6 @@ const { isWebServerSpan, endpointNameFromTags, getStartedSpans } = require('./we
12
12
  const profileSubmittedChannel = dc.channel('datadog:profiling:profile-submitted')
13
13
  const spanFinishedChannel = dc.channel('dd-trace:span:finish')
14
14
 
15
- function logError (logger, ...args) {
16
- if (logger) {
17
- logger.error(...args)
18
- }
19
- }
20
-
21
15
  function findWebSpan (startedSpans, spanId) {
22
16
  for (let i = startedSpans.length; --i >= 0;) {
23
17
  const ispan = startedSpans[i]
@@ -71,33 +65,6 @@ class Profiler extends EventEmitter {
71
65
  return this.#config?.flushInterval
72
66
  }
73
67
 
74
- /**
75
- * @param {import('../config/config-base')} config - Tracer configuration
76
- */
77
- start (config) {
78
- // TODO: Unify with main logger and rewrite template strings to use printf formatting.
79
- const logger = {
80
- debug: log.debug.bind(log),
81
- info: log.info.bind(log),
82
- warn: log.warn.bind(log),
83
- error: log.error.bind(log),
84
- }
85
-
86
- // TODO: Rewrite this to not need to copy the config.
87
- const options = {
88
- ...config,
89
- logger,
90
- }
91
-
92
- try {
93
- return this._start(options)
94
- } catch (err) {
95
- logError(logger, 'Error starting profiler. For troubleshooting tips, see ' +
96
- '<https://dtdg.co/nodejs-profiler-troubleshooting>', err)
97
- return false
98
- }
99
- }
100
-
101
68
  get enabled () {
102
69
  return this.#enabled
103
70
  }
@@ -141,10 +108,6 @@ class Profiler extends EventEmitter {
141
108
  return fn()
142
109
  }
143
110
 
144
- #logError (err) {
145
- logError(this.#logger, err)
146
- }
147
-
148
111
  #getCompressionFn () {
149
112
  if (!this.#compressionFnInitialized) {
150
113
  this.#compressionFnInitialized = true
@@ -181,8 +144,8 @@ class Profiler extends EventEmitter {
181
144
  }
182
145
  break
183
146
  }
184
- } catch (err) {
185
- this.#logError(err)
147
+ } catch (error) {
148
+ log.error(error)
186
149
  }
187
150
  }
188
151
  return this.#compressionFn
@@ -191,41 +154,36 @@ class Profiler extends EventEmitter {
191
154
  /**
192
155
  * @param {import('../config/config-base')} options - Tracer configuration
193
156
  */
194
- _start (options) {
157
+ start (options) {
195
158
  if (this.enabled) return true
159
+ this.#enabled = true
196
160
 
197
161
  const config = this.#config = new Config(options)
198
-
199
162
  this.#logger = config.logger
200
- this.#enabled = true
201
- this._setInterval()
202
163
 
164
+ this._setInterval()
203
165
  // Log errors if the source map finder fails, but don't prevent the rest
204
166
  // of the profiler from running without source maps.
205
167
  let mapper
206
- try {
207
- const { setLogger, SourceMapper } = require('@datadog/pprof')
208
- setLogger(config.logger)
209
-
210
- if (config.sourceMap) {
211
- mapper = new SourceMapper(config.debugSourceMaps)
212
- mapper.loadDirectory(process.cwd())
213
- .then(() => {
214
- if (config.debugSourceMaps) {
215
- const count = mapper.infoMap.size
216
- this.#logger.debug(() => {
217
- return count === 0
218
- ? 'Found no source maps'
219
- : `Found source maps for following files: [${[...mapper.infoMap.keys()].join(', ')}]`
220
- })
221
- }
222
- })
223
- .catch((err) => {
224
- this.#logError(err)
225
- })
226
- }
227
- } catch (err) {
228
- this.#logError(err)
168
+ const { setLogger, SourceMapper } = require('@datadog/pprof')
169
+ setLogger(config.logger)
170
+
171
+ if (config.sourceMap) {
172
+ mapper = new SourceMapper(config.debugSourceMaps)
173
+ mapper.loadDirectory(process.cwd())
174
+ .then(() => {
175
+ if (config.debugSourceMaps) {
176
+ const count = mapper.infoMap.size
177
+ this.#logger.debug(() => {
178
+ return count === 0
179
+ ? 'Found no source maps'
180
+ : `Found source maps for following files: [${[...mapper.infoMap.keys()].join(', ')}]`
181
+ })
182
+ }
183
+ })
184
+ .catch((error) => {
185
+ log.error(error)
186
+ })
229
187
  }
230
188
 
231
189
  try {
@@ -246,12 +204,13 @@ class Profiler extends EventEmitter {
246
204
  }
247
205
 
248
206
  this._capture(this._timeoutInterval, start)
249
- return true
250
- } catch (e) {
251
- this.#logError(e)
207
+ } catch (error) {
208
+ log.error(error)
252
209
  this.#stop()
253
210
  return false
254
211
  }
212
+
213
+ return true
255
214
  }
256
215
 
257
216
  #nearOOMExport (profileType, encodedProfile, info) {
@@ -389,10 +348,10 @@ class Profiler extends EventEmitter {
389
348
  return `Collected ${profiler.type} profile: ` + profileJson
390
349
  })
391
350
  hasEncoded = true
392
- } catch (err) {
351
+ } catch (error) {
393
352
  // If encoding one of the profile types fails, we should still try to
394
353
  // encode and submit the other profile types.
395
- this.#logError(err)
354
+ log.error(error)
396
355
  }
397
356
  }))
398
357
 
@@ -401,8 +360,8 @@ class Profiler extends EventEmitter {
401
360
  profileSubmittedChannel.publish()
402
361
  this.#logger.debug('Submitted profiles')
403
362
  }
404
- } catch (err) {
405
- this.#logError(err)
363
+ } catch (error) {
364
+ log.error(error)
406
365
  this.#stop()
407
366
  }
408
367
  }
@@ -424,10 +383,8 @@ class Profiler extends EventEmitter {
424
383
  : undefined
425
384
  const exportSpec = { profiles, infos, start, end, tags, endpointCounts, customAttributes }
426
385
  const tasks = this.#config.exporters.map(exporter =>
427
- exporter.export(exportSpec).catch(err => {
428
- if (this.#logger) {
429
- this.#logger.warn(err)
430
- }
386
+ exporter.export(exportSpec).catch(error => {
387
+ log.warn(error)
431
388
  })
432
389
  )
433
390
 
@@ -255,10 +255,10 @@ class Tracer extends NoopProxy {
255
255
  // do not stop tracer initialization if the profiler fails to be imported
256
256
  try {
257
257
  return require('./profiler').start(config)
258
- } catch (e) {
258
+ } catch (error) {
259
259
  log.error(
260
260
  'Error starting profiler. For troubleshooting tips, see <https://dtdg.co/nodejs-profiler-troubleshooting>',
261
- e
261
+ error
262
262
  )
263
263
  return false
264
264
  }
@@ -279,7 +279,12 @@ class Tracer extends NoopProxy {
279
279
  const prioritySampler = config.apmTracingEnabled === false
280
280
  ? require('./standalone').configure(config)
281
281
  : undefined
282
- this._tracer = new DatadogTracer(config, prioritySampler)
282
+ let otlpExporter
283
+ if (config.otelTracesEnabled) {
284
+ const { buildResourceAttributes, createOtlpTraceExporter } = require('./opentelemetry/trace')
285
+ otlpExporter = createOtlpTraceExporter(config, buildResourceAttributes(config))
286
+ }
287
+ this._tracer = new DatadogTracer(config, prioritySampler, otlpExporter)
283
288
  this.dataStreamsCheckpointer = this._tracer.dataStreamsCheckpointer
284
289
  lazyProxy(this, 'appsec', () => require('./appsec/sdk'), this._tracer, config)
285
290
  lazyProxy(this, 'llmobs', () => require('./llmobs/sdk'), this._tracer, this._modules.llmobs, config)
@@ -55,17 +55,21 @@ module.exports = {
55
55
  startGCObserver()
56
56
  }
57
57
 
58
- // Using no-gc prevents the native gc metrics from being tracked. Not
59
- // passing any options means all metrics are tracked.
60
- // TODO: This is a workaround. We should find a better solution.
61
- const watchers = trackEventLoop ? ['loop'] : ['no-gc']
62
-
63
- try {
64
- nativeMetrics = require('@datadog/native-metrics')
65
- nativeMetrics.start(...watchers)
66
- } catch (error) {
67
- log.error('Error starting native metrics', error)
68
- nativeMetrics = null
58
+ const useNative = config.runtimeMetrics.native !== false
59
+
60
+ if (useNative) {
61
+ // Using no-gc prevents the native gc metrics from being tracked. Not
62
+ // passing any options means all metrics are tracked.
63
+ // TODO: This is a workaround. We should find a better solution.
64
+ const watchers = trackEventLoop ? ['loop'] : ['no-gc']
65
+
66
+ try {
67
+ nativeMetrics = require('@datadog/native-metrics')
68
+ nativeMetrics.start(...watchers)
69
+ } catch (error) {
70
+ log.error('Error starting native metrics', error)
71
+ nativeMetrics = null
72
+ }
69
73
  }
70
74
 
71
75
  client = new MetricsAggregationClient(new DogStatsDClient(clientConfig))
@@ -41,7 +41,7 @@ class SchemaManager {
41
41
  * @param {string} kind
42
42
  * @param {string} plugin
43
43
  * @param {object} opts
44
- * @returns {string}
44
+ * @returns {object} {name, source}
45
45
  */
46
46
  serviceName (type, kind, plugin, opts) {
47
47
  const schema = this.shouldUseConsistentServiceNaming
@@ -12,7 +12,10 @@ class SchemaDefinition {
12
12
 
13
13
  getServiceName (type, kind, plugin, opts) {
14
14
  const item = this.schema[type][kind][plugin]
15
- return item.serviceName(opts)
15
+ return {
16
+ name: item.serviceName(opts),
17
+ source: item.serviceSource?.(opts),
18
+ }
16
19
  }
17
20
  }
18
21
 
@@ -18,8 +18,22 @@ function httpPluginClientService ({ tracerService, pluginConfig, sessionDetails
18
18
  return tracerService
19
19
  }
20
20
 
21
+ function optionServiceSource ({ pluginConfig }) {
22
+ if (pluginConfig.splitByDomain) {
23
+ return 'opt.split_by_domain'
24
+ }
25
+
26
+ if (pluginConfig.service) {
27
+ return 'opt.plugin'
28
+ }
29
+ }
30
+
21
31
  function awsServiceV0 ({ tracerService, awsService }) {
22
32
  return `${tracerService}-aws-${awsService}`
23
33
  }
24
34
 
25
- module.exports = { identityService, httpPluginClientService, awsServiceV0 }
35
+ function awsServiceSource ({ awsService }) {
36
+ return awsService
37
+ }
38
+
39
+ module.exports = { identityService, httpPluginClientService, awsServiceV0, optionServiceSource, awsServiceSource }
@@ -1,66 +1,83 @@
1
1
  'use strict'
2
2
 
3
- const { identityService, awsServiceV0 } = require('../util')
3
+ const { identityService, awsServiceV0, awsServiceSource } = require('../util')
4
4
 
5
5
  function amqpServiceName ({ tracerService }) {
6
6
  return `${tracerService}-amqp`
7
7
  }
8
8
 
9
+ function integrationSource (source) {
10
+ return () => source
11
+ }
12
+
9
13
  const messaging = {
10
14
  producer: {
11
15
  amqplib: {
12
16
  opName: () => 'amqp.command',
13
17
  serviceName: amqpServiceName,
18
+ serviceSource: integrationSource('amqp'),
14
19
  },
15
20
  amqp10: {
16
21
  opName: () => 'amqp.send',
17
22
  serviceName: amqpServiceName,
23
+ serviceSource: integrationSource('amqp'),
18
24
  },
19
25
  'azure-event-hubs': {
20
26
  opName: () => 'azure.eventhubs.send',
21
27
  serviceName: ({ tracerService }) => `${tracerService}-azure-event-hubs`,
28
+ serviceSource: integrationSource('azure-event-hubs'),
22
29
  },
23
30
  'azure-service-bus': {
24
31
  opName: () => 'azure.servicebus.send',
25
32
  serviceName: ({ tracerService }) => `${tracerService}-azure-service-bus`,
33
+ serviceSource: integrationSource('azure-service-bus'),
26
34
  },
27
35
  'google-cloud-pubsub': {
28
36
  opName: () => 'pubsub.request',
29
37
  serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
38
+ serviceSource: integrationSource('google-cloud-pubsub'),
30
39
  },
31
40
  kafkajs: {
32
41
  opName: () => 'kafka.produce',
33
42
  serviceName: ({ tracerService }) => `${tracerService}-kafka`,
43
+ serviceSource: integrationSource('kafka'),
34
44
  },
35
45
  'confluentinc-kafka-javascript': {
36
46
  opName: () => 'kafka.produce',
37
47
  serviceName: ({ tracerService }) => `${tracerService}-kafka`,
48
+ serviceSource: integrationSource('kafka'),
38
49
  },
39
50
  rhea: {
40
51
  opName: () => 'amqp.send',
41
52
  serviceName: ({ tracerService }) => `${tracerService}-amqp-producer`,
53
+ serviceSource: integrationSource('amqp'),
42
54
  },
43
55
  sqs: {
44
56
  opName: () => 'aws.request',
45
57
  serviceName: awsServiceV0,
58
+ serviceSource: awsServiceSource,
46
59
  },
47
60
  sns: {
48
61
  opName: () => 'aws.request',
49
62
  serviceName: awsServiceV0,
63
+ serviceSource: awsServiceSource,
50
64
  },
51
65
  bullmq: {
52
66
  opName: () => 'bullmq.add',
53
67
  serviceName: ({ tracerService }) => `${tracerService}-bullmq`,
68
+ serviceSource: integrationSource('bullmq'),
54
69
  },
55
70
  },
56
71
  consumer: {
57
72
  amqplib: {
58
73
  opName: () => 'amqp.command',
59
74
  serviceName: amqpServiceName,
75
+ serviceSource: integrationSource('amqp'),
60
76
  },
61
77
  amqp10: {
62
78
  opName: () => 'amqp.receive',
63
79
  serviceName: amqpServiceName,
80
+ serviceSource: integrationSource('amqp'),
64
81
  },
65
82
  'google-cloud-pubsub': {
66
83
  opName: () => 'pubsub.receive',
@@ -69,10 +86,12 @@ const messaging = {
69
86
  kafkajs: {
70
87
  opName: () => 'kafka.consume',
71
88
  serviceName: ({ tracerService }) => `${tracerService}-kafka`,
89
+ serviceSource: integrationSource('kafka'),
72
90
  },
73
91
  'confluentinc-kafka-javascript': {
74
92
  opName: () => 'kafka.consume',
75
93
  serviceName: ({ tracerService }) => `${tracerService}-kafka`,
94
+ serviceSource: integrationSource('kafka'),
76
95
  },
77
96
  rhea: {
78
97
  opName: () => 'amqp.receive',
@@ -81,20 +100,24 @@ const messaging = {
81
100
  sqs: {
82
101
  opName: () => 'aws.request',
83
102
  serviceName: awsServiceV0,
103
+ serviceSource: awsServiceSource,
84
104
  },
85
105
  bullmq: {
86
106
  opName: () => 'bullmq.processJob',
87
107
  serviceName: ({ tracerService }) => `${tracerService}-bullmq`,
108
+ serviceSource: integrationSource('bullmq'),
88
109
  },
89
110
  },
90
111
  client: {
91
112
  amqplib: {
92
113
  opName: () => 'amqp.command',
93
114
  serviceName: amqpServiceName,
115
+ serviceSource: integrationSource('amqp'),
94
116
  },
95
117
  'google-cloud-pubsub': {
96
118
  opName: () => 'pubsub.request',
97
119
  serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
120
+ serviceSource: integrationSource('google-cloud-pubsub'),
98
121
  },
99
122
  },
100
123
  }