dd-trace 5.97.0 → 5.99.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 (175) hide show
  1. package/LICENSE-3rdparty.csv +0 -1
  2. package/ext/tags.js +1 -0
  3. package/index.d.ts +35 -3
  4. package/package.json +48 -46
  5. package/packages/datadog-instrumentations/src/crypto.js +45 -0
  6. package/packages/datadog-instrumentations/src/cucumber.js +65 -3
  7. package/packages/datadog-instrumentations/src/cypress-config.js +153 -53
  8. package/packages/datadog-instrumentations/src/dns.js +24 -56
  9. package/packages/datadog-instrumentations/src/graphql.js +1 -1
  10. package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +74 -0
  11. package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +4 -1
  12. package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
  13. package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +10 -3
  14. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +1 -0
  15. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/modelcontextprotocol-sdk.js +59 -0
  16. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +11 -2
  17. package/packages/datadog-instrumentations/src/jest.js +104 -12
  18. package/packages/datadog-instrumentations/src/mocha/utils.js +8 -0
  19. package/packages/datadog-instrumentations/src/modelcontextprotocol-sdk.js +7 -0
  20. package/packages/datadog-instrumentations/src/pino.js +4 -28
  21. package/packages/datadog-instrumentations/src/playwright-browser-scripts.js +27 -0
  22. package/packages/datadog-instrumentations/src/playwright.js +5 -17
  23. package/packages/datadog-instrumentations/src/redis.js +12 -6
  24. package/packages/datadog-instrumentations/src/stripe.js +38 -24
  25. package/packages/datadog-instrumentations/src/vitest.js +32 -4
  26. package/packages/datadog-instrumentations/src/zlib.js +29 -0
  27. package/packages/datadog-plugin-aws-sdk/src/base.js +2 -3
  28. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +1 -0
  29. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +1 -0
  30. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +1 -0
  31. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -0
  32. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -0
  33. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +1 -0
  34. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +8 -15
  35. package/packages/datadog-plugin-azure-service-bus/src/producer.js +4 -9
  36. package/packages/datadog-plugin-cucumber/src/index.js +8 -2
  37. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +114 -6
  38. package/packages/datadog-plugin-cypress/src/index.js +59 -2
  39. package/packages/datadog-plugin-cypress/src/source-map-utils.js +48 -1
  40. package/packages/datadog-plugin-fs/src/index.js +1 -1
  41. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +2 -1
  42. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +2 -7
  43. package/packages/datadog-plugin-http/src/client.js +1 -1
  44. package/packages/datadog-plugin-http/src/server.js +21 -13
  45. package/packages/datadog-plugin-http2/src/client.js +1 -1
  46. package/packages/datadog-plugin-http2/src/server.js +10 -2
  47. package/packages/datadog-plugin-jest/src/index.js +2 -2
  48. package/packages/datadog-plugin-mocha/src/index.js +1 -2
  49. package/packages/datadog-plugin-modelcontextprotocol-sdk/src/index.js +24 -0
  50. package/packages/datadog-plugin-modelcontextprotocol-sdk/src/tracing.js +55 -0
  51. package/packages/datadog-plugin-mongodb-core/src/index.js +4 -9
  52. package/packages/datadog-plugin-mysql/src/index.js +1 -1
  53. package/packages/datadog-plugin-next/src/index.js +8 -2
  54. package/packages/datadog-plugin-pg/src/index.js +1 -1
  55. package/packages/datadog-plugin-playwright/src/index.js +2 -3
  56. package/packages/datadog-plugin-tedious/src/index.js +1 -1
  57. package/packages/datadog-plugin-vitest/src/index.js +14 -6
  58. package/packages/datadog-plugin-ws/src/close.js +3 -1
  59. package/packages/datadog-plugin-ws/src/producer.js +2 -0
  60. package/packages/datadog-plugin-ws/src/receiver.js +2 -1
  61. package/packages/dd-trace/src/aiguard/channels.js +8 -0
  62. package/packages/dd-trace/src/aiguard/index.js +7 -3
  63. package/packages/dd-trace/src/aiguard/sdk.js +66 -22
  64. package/packages/dd-trace/src/aiguard/tags.js +1 -0
  65. package/packages/dd-trace/src/appsec/blocked_templates.js +4 -3
  66. package/packages/dd-trace/src/appsec/blocking.js +62 -34
  67. package/packages/dd-trace/src/appsec/graphql.js +6 -6
  68. package/packages/dd-trace/src/appsec/index.js +9 -11
  69. package/packages/dd-trace/src/appsec/rasp/command_injection.js +4 -5
  70. package/packages/dd-trace/src/appsec/rasp/lfi.js +8 -4
  71. package/packages/dd-trace/src/appsec/rasp/sql_injection.js +5 -10
  72. package/packages/dd-trace/src/appsec/rasp/ssrf.js +5 -6
  73. package/packages/dd-trace/src/appsec/recommended.json +2438 -13
  74. package/packages/dd-trace/src/appsec/reporter.js +6 -5
  75. package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
  76. package/packages/dd-trace/src/appsec/sdk/track_event.js +5 -5
  77. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +6 -10
  78. package/packages/dd-trace/src/appsec/sdk/utils.js +4 -2
  79. package/packages/dd-trace/src/appsec/store.js +50 -0
  80. package/packages/dd-trace/src/appsec/waf/index.js +3 -5
  81. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +2 -2
  82. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +2 -2
  83. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +2 -2
  84. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
  85. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +3 -4
  86. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -2
  87. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +4 -5
  88. package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +3 -4
  89. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +6 -6
  90. package/packages/dd-trace/src/ci-visibility/requests/upload-coverage-report.js +2 -2
  91. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +2 -2
  92. package/packages/dd-trace/src/config/config-types.d.ts +0 -4
  93. package/packages/dd-trace/src/config/defaults.js +10 -11
  94. package/packages/dd-trace/src/config/generated-config-types.d.ts +14 -8
  95. package/packages/dd-trace/src/config/index.js +49 -32
  96. package/packages/dd-trace/src/config/parsers.js +26 -9
  97. package/packages/dd-trace/src/config/supported-configurations.json +86 -33
  98. package/packages/dd-trace/src/constants.js +1 -0
  99. package/packages/dd-trace/src/debugger/config.js +2 -0
  100. package/packages/dd-trace/src/debugger/devtools_client/send.js +25 -5
  101. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +5 -2
  102. package/packages/dd-trace/src/encode/0.4.js +11 -11
  103. package/packages/dd-trace/src/encode/span-stats.js +4 -1
  104. package/packages/dd-trace/src/exporters/agent/index.js +0 -1
  105. package/packages/dd-trace/src/exporters/agent/writer.js +1 -2
  106. package/packages/dd-trace/src/exporters/agentless/writer.js +3 -3
  107. package/packages/dd-trace/src/exporters/common/util.js +2 -2
  108. package/packages/dd-trace/src/id.js +2 -0
  109. package/packages/dd-trace/src/index.js +2 -5
  110. package/packages/dd-trace/src/lambda/handler.js +1 -3
  111. package/packages/dd-trace/src/llmobs/plugins/{anthropic.js → anthropic/index.js} +5 -63
  112. package/packages/dd-trace/src/llmobs/plugins/anthropic/util.js +106 -0
  113. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +3 -2
  114. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -2
  115. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +2 -1
  116. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +0 -49
  117. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +2 -1
  118. package/packages/dd-trace/src/llmobs/plugins/langchain/messages.js +76 -0
  119. package/packages/dd-trace/src/llmobs/plugins/langgraph/index.js +1 -26
  120. package/packages/dd-trace/src/llmobs/plugins/modelcontextprotocol-sdk/index.js +68 -0
  121. package/packages/dd-trace/src/llmobs/plugins/modelcontextprotocol-sdk/utils.js +57 -0
  122. package/packages/dd-trace/src/llmobs/sdk.js +2 -2
  123. package/packages/dd-trace/src/log/index.js +0 -10
  124. package/packages/dd-trace/src/openfeature/eval-metrics-hook.js +103 -0
  125. package/packages/dd-trace/src/openfeature/flagging_provider.js +3 -0
  126. package/packages/dd-trace/src/openfeature/remote_config.js +6 -1
  127. package/packages/dd-trace/src/opentelemetry/context_manager.js +6 -4
  128. package/packages/dd-trace/src/opentelemetry/logs/index.js +1 -1
  129. package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +3 -2
  130. package/packages/dd-trace/src/opentelemetry/metrics/index.js +1 -1
  131. package/packages/dd-trace/src/opentelemetry/metrics/otlp_http_metric_exporter.js +3 -2
  132. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +19 -51
  133. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +14 -2
  134. package/packages/dd-trace/src/opentelemetry/otlp/trace.proto +358 -0
  135. package/packages/dd-trace/src/opentelemetry/otlp/trace_service.proto +78 -0
  136. package/packages/dd-trace/src/opentelemetry/trace/index.js +70 -0
  137. package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +74 -0
  138. package/packages/dd-trace/src/opentelemetry/trace/otlp_transformer.js +342 -0
  139. package/packages/dd-trace/src/opentelemetry/tracer.js +9 -11
  140. package/packages/dd-trace/src/opentracing/propagation/text_map.js +17 -10
  141. package/packages/dd-trace/src/opentracing/span.js +1 -1
  142. package/packages/dd-trace/src/opentracing/tracer.js +17 -5
  143. package/packages/dd-trace/src/plugins/index.js +1 -0
  144. package/packages/dd-trace/src/plugins/log_plugin.js +3 -0
  145. package/packages/dd-trace/src/plugins/plugin.js +6 -11
  146. package/packages/dd-trace/src/plugins/storage.js +2 -2
  147. package/packages/dd-trace/src/plugins/tracing.js +22 -5
  148. package/packages/dd-trace/src/plugins/util/test.js +128 -5
  149. package/packages/dd-trace/src/plugins/util/url.js +2 -1
  150. package/packages/dd-trace/src/plugins/util/web.js +6 -88
  151. package/packages/dd-trace/src/profiling/profiler.js +34 -77
  152. package/packages/dd-trace/src/profiling/profilers/event_plugins/crypto.js +32 -0
  153. package/packages/dd-trace/src/profiling/profilers/event_plugins/zlib.js +19 -0
  154. package/packages/dd-trace/src/profiling/profilers/events.js +35 -0
  155. package/packages/dd-trace/src/proxy.js +3 -4
  156. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +17 -13
  157. package/packages/dd-trace/src/service-naming/index.js +1 -1
  158. package/packages/dd-trace/src/service-naming/schemas/definition.js +4 -1
  159. package/packages/dd-trace/src/service-naming/schemas/util.js +15 -1
  160. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +24 -1
  161. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +60 -0
  162. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +21 -1
  163. package/packages/dd-trace/src/service-naming/schemas/v0/websocket.js +5 -0
  164. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +17 -0
  165. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +15 -1
  166. package/packages/dd-trace/src/service-naming/schemas/v1/websocket.js +6 -0
  167. package/packages/dd-trace/src/span_processor.js +1 -2
  168. package/packages/dd-trace/src/span_stats.js +5 -1
  169. package/packages/dd-trace/src/tagger.js +2 -2
  170. package/packages/dd-trace/src/telemetry/send-data.js +5 -7
  171. package/vendor/dist/@apm-js-collab/code-transformer/index.js +28 -6
  172. package/vendor/dist/protobufjs/index.js +1 -1
  173. package/packages/dd-trace/src/log/utils.js +0 -16
  174. package/vendor/dist/ignore/LICENSE +0 -21
  175. package/vendor/dist/ignore/index.js +0 -1
@@ -51,24 +51,28 @@ module.exports = {
51
51
  const trackEventLoop = config.runtimeMetrics.eventLoop !== false
52
52
  const trackGc = config.runtimeMetrics.gc !== false
53
53
 
54
+ client = new MetricsAggregationClient(new DogStatsDClient(clientConfig))
55
+
54
56
  if (trackGc) {
55
57
  startGCObserver()
56
58
  }
57
59
 
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
69
- }
60
+ const useNative = config.runtimeMetrics.native !== false
70
61
 
71
- client = new MetricsAggregationClient(new DogStatsDClient(clientConfig))
62
+ if (useNative) {
63
+ // Using no-gc prevents the native gc metrics from being tracked. Not
64
+ // passing any options means all metrics are tracked.
65
+ // TODO: This is a workaround. We should find a better solution.
66
+ const watchers = trackEventLoop ? ['loop'] : ['no-gc']
67
+
68
+ try {
69
+ nativeMetrics = require('@datadog/native-metrics')
70
+ nativeMetrics.start(...watchers)
71
+ } catch (error) {
72
+ log.error('Error starting native metrics', error)
73
+ nativeMetrics = null
74
+ }
75
+ }
72
76
 
73
77
  lastTime = performance.now()
74
78
 
@@ -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
  }
@@ -30,11 +30,26 @@ function withSuffixFunction (suffix) {
30
30
  }
31
31
  }
32
32
 
33
+ function optionServiceSource ({ pluginConfig, integration, connectionName }) {
34
+ if (pluginConfig.splitByInstance && connectionName) {
35
+ return 'opt.split_by_instance'
36
+ }
37
+
38
+ if (pluginConfig.service) {
39
+ return 'opt.plugin'
40
+ }
41
+
42
+ return integration
43
+ }
44
+
33
45
  const redisConfig = {
34
46
  opName: () => 'redis.command',
35
47
  serviceName: ({ tracerService, pluginConfig, system, connectionName }) => {
36
48
  return getRedisService(pluginConfig, connectionName) || fromSystem(tracerService, system)
37
49
  },
50
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
51
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'redis' })
52
+ },
38
53
  }
39
54
 
40
55
  const valkeyConfig = {
@@ -42,6 +57,9 @@ const valkeyConfig = {
42
57
  serviceName: ({ tracerService, pluginConfig, system, connectionName }) => {
43
58
  return getRedisService(pluginConfig, connectionName) || fromSystem(tracerService, system)
44
59
  },
60
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
61
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'valkey' })
62
+ },
45
63
  }
46
64
 
47
65
  const storage = {
@@ -50,67 +68,109 @@ const storage = {
50
68
  opName: () => 'aerospike.command',
51
69
  serviceName: ({ tracerService, pluginConfig }) =>
52
70
  pluginConfig.service || `${tracerService}-aerospike`,
71
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
72
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'aerospike' })
73
+ },
53
74
  },
54
75
  'cassandra-driver': {
55
76
  opName: () => 'cassandra.query',
56
77
  serviceName: ({ tracerService, pluginConfig, system }) =>
57
78
  pluginConfig.service || fromSystem(tracerService, system),
79
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
80
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'cassandra-driver' })
81
+ },
58
82
  },
59
83
  couchbase: {
60
84
  opName: ({ operation }) => `couchbase.${operation}`,
61
85
  serviceName: ({ tracerService, pluginConfig }) => pluginConfig.service || `${tracerService}-couchbase`,
86
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
87
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'couchbase' })
88
+ },
62
89
  },
63
90
  elasticsearch: {
64
91
  opName: () => 'elasticsearch.query',
65
92
  serviceName: ({ tracerService, pluginConfig }) =>
66
93
  pluginConfig.service || `${tracerService}-elasticsearch`,
94
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
95
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'elasticsearch' })
96
+ },
67
97
  },
68
98
  ioredis: redisConfig,
69
99
  iovalkey: valkeyConfig,
70
100
  mariadb: {
71
101
  opName: () => 'mariadb.query',
72
102
  serviceName: mysqlServiceName,
103
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
104
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'mysql' })
105
+ },
73
106
  },
74
107
  memcached: {
75
108
  opName: () => 'memcached.command',
76
109
  serviceName: ({ tracerService, pluginConfig, system }) =>
77
110
  pluginConfig.service || fromSystem(tracerService, system),
111
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
112
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'memcached' })
113
+ },
78
114
  },
79
115
  'mongodb-core': {
80
116
  opName: () => 'mongodb.query',
81
117
  serviceName: ({ tracerService, pluginConfig }) =>
82
118
  pluginConfig.service || `${tracerService}-mongodb`,
119
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
120
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'mongodb' })
121
+ },
83
122
  },
84
123
  mysql: {
85
124
  opName: () => 'mysql.query',
86
125
  serviceName: mysqlServiceName,
126
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
127
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'mysql' })
128
+ },
87
129
  },
88
130
  mysql2: {
89
131
  opName: () => 'mysql.query',
90
132
  serviceName: mysqlServiceName,
133
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
134
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'mysql' })
135
+ },
91
136
  },
92
137
  opensearch: {
93
138
  opName: () => 'opensearch.query',
94
139
  serviceName: ({ tracerService, pluginConfig }) =>
95
140
  pluginConfig.service || `${tracerService}-opensearch`,
141
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
142
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'opensearch' })
143
+ },
96
144
  },
97
145
  oracledb: {
98
146
  opName: () => 'oracle.query',
99
147
  serviceName: withSuffixFunction('oracle'),
148
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
149
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'oracledb' })
150
+ },
100
151
  },
101
152
  pg: {
102
153
  opName: () => 'pg.query',
103
154
  serviceName: withSuffixFunction('postgres'),
155
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
156
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'pg' })
157
+ },
104
158
  },
105
159
  prisma: {
106
160
  opName: ({ operation }) => `prisma.${operation}`,
107
161
  serviceName: withSuffixFunction('prisma'),
162
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
163
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'prisma' })
164
+ },
108
165
  },
109
166
  redis: redisConfig,
110
167
  tedious: {
111
168
  opName: () => 'tedious.request',
112
169
  serviceName: ({ tracerService, pluginConfig, system }) =>
113
170
  pluginConfig.service || fromSystem(tracerService, system),
171
+ serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
172
+ return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'tedious' })
173
+ },
114
174
  },
115
175
  },
116
176
  }
@@ -1,6 +1,9 @@
1
1
  'use strict'
2
2
 
3
- const { identityService, httpPluginClientService, awsServiceV0 } = require('../util')
3
+ const {
4
+ identityService, httpPluginClientService, awsServiceV0,
5
+ optionServiceSource, awsServiceSource,
6
+ } = require('../util')
4
7
 
5
8
  const web = {
6
9
  client: {
@@ -15,56 +18,73 @@ const web = {
15
18
  http: {
16
19
  opName: () => 'http.request',
17
20
  serviceName: httpPluginClientService,
21
+ serviceSource: optionServiceSource,
18
22
  },
19
23
  fetch: {
20
24
  opName: () => 'http.request',
21
25
  serviceName: httpPluginClientService,
26
+ serviceSource: optionServiceSource,
22
27
  },
23
28
  http2: {
24
29
  opName: () => 'http.request',
25
30
  serviceName: httpPluginClientService,
31
+ serviceSource: optionServiceSource,
26
32
  },
27
33
  genai: {
28
34
  opName: () => 'google_genai.request',
29
35
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
36
+ serviceSource: optionServiceSource,
37
+ },
38
+ 'modelcontextprotocol-sdk': {
39
+ opName: () => 'mcp.tool.call',
40
+ serviceName: ({ pluginService, tracerService }) => pluginService || tracerService,
30
41
  },
31
42
  aws: {
32
43
  opName: () => 'aws.request',
33
44
  serviceName: awsServiceV0,
45
+ serviceSource: awsServiceSource,
34
46
  },
35
47
  lambda: {
36
48
  opName: () => 'aws.request',
37
49
  serviceName: awsServiceV0,
50
+ serviceSource: awsServiceSource,
38
51
  },
39
52
  undici: {
40
53
  opName: () => 'undici.request',
41
54
  serviceName: httpPluginClientService,
55
+ serviceSource: optionServiceSource,
42
56
  },
43
57
  },
44
58
  server: {
45
59
  'apollo.gateway.request': {
46
60
  opName: () => 'apollo.gateway.request',
47
61
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
62
+ serviceSource: optionServiceSource,
48
63
  },
49
64
  'apollo.gateway.plan': {
50
65
  opName: () => 'apollo.gateway.plan',
51
66
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
67
+ serviceSource: optionServiceSource,
52
68
  },
53
69
  'apollo.gateway.validate': {
54
70
  opName: () => 'apollo.gateway.validate',
55
71
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
72
+ serviceSource: optionServiceSource,
56
73
  },
57
74
  'apollo.gateway.execute': {
58
75
  opName: () => 'apollo.gateway.execute',
59
76
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
77
+ serviceSource: optionServiceSource,
60
78
  },
61
79
  'apollo.gateway.fetch': {
62
80
  opName: () => 'apollo.gateway.fetch',
63
81
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
82
+ serviceSource: optionServiceSource,
64
83
  },
65
84
  'apollo.gateway.postprocessing': {
66
85
  opName: () => 'apollo.gateway.postprocessing',
67
86
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
87
+ serviceSource: optionServiceSource,
68
88
  },
69
89
  grpc: {
70
90
  opName: () => 'grpc.server',
@@ -1,28 +1,33 @@
1
1
  'use strict'
2
+ const { optionServiceSource } = require('../util')
2
3
 
3
4
  const websocket = {
4
5
  request: {
5
6
  ws: {
6
7
  opName: () => 'web.request',
7
8
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
9
+ serviceSource: optionServiceSource,
8
10
  },
9
11
  },
10
12
  producer: {
11
13
  ws: {
12
14
  opName: () => 'websocket.send',
13
15
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
16
+ serviceSource: optionServiceSource,
14
17
  },
15
18
  },
16
19
  consumer: {
17
20
  ws: {
18
21
  opName: () => 'websocket.receive',
19
22
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
23
+ serviceSource: optionServiceSource,
20
24
  },
21
25
  },
22
26
  close: {
23
27
  ws: {
24
28
  opName: () => 'websocket.close',
25
29
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
30
+ serviceSource: optionServiceSource,
26
31
  },
27
32
  },
28
33
  }
@@ -1,5 +1,7 @@
1
1
  'use strict'
2
2
 
3
+ const { optionServiceSource } = require('../util')
4
+
3
5
  function configWithFallback ({ tracerService, pluginConfig }) {
4
6
  return pluginConfig.service || tracerService
5
7
  }
@@ -7,11 +9,13 @@ function configWithFallback ({ tracerService, pluginConfig }) {
7
9
  const redisNaming = {
8
10
  opName: () => 'redis.command',
9
11
  serviceName: configWithFallback,
12
+ serviceSource: optionServiceSource,
10
13
  }
11
14
 
12
15
  const mySQLNaming = {
13
16
  opName: () => 'mysql.query',
14
17
  serviceName: withFunction,
18
+ serviceSource: optionServiceSource,
15
19
  }
16
20
 
17
21
  function withFunction ({ tracerService, pluginConfig, params }) {
@@ -27,58 +31,71 @@ const storage = {
27
31
  aerospike: {
28
32
  opName: () => 'aerospike.command',
29
33
  serviceName: configWithFallback,
34
+ serviceSource: optionServiceSource,
30
35
  },
31
36
  'cassandra-driver': {
32
37
  opName: () => 'cassandra.query',
33
38
  serviceName: configWithFallback,
39
+ serviceSource: optionServiceSource,
34
40
  },
35
41
  couchbase: {
36
42
  opName: () => 'couchbase.query',
37
43
  serviceName: configWithFallback,
44
+ serviceSource: optionServiceSource,
38
45
  },
39
46
  elasticsearch: {
40
47
  opName: () => 'elasticsearch.query',
41
48
  serviceName: configWithFallback,
49
+ serviceSource: optionServiceSource,
42
50
  },
43
51
  ioredis: redisNaming,
44
52
  iovalkey: {
45
53
  opName: () => 'valkey.command',
46
54
  serviceName: configWithFallback,
55
+ serviceSource: optionServiceSource,
47
56
  },
48
57
  mariadb: {
49
58
  opName: () => 'mariadb.query',
50
59
  serviceName: withFunction,
60
+ serviceSource: optionServiceSource,
51
61
  },
52
62
  memcached: {
53
63
  opName: () => 'memcached.command',
54
64
  serviceName: configWithFallback,
65
+ serviceSource: optionServiceSource,
55
66
  },
56
67
  'mongodb-core': {
57
68
  opName: () => 'mongodb.query',
58
69
  serviceName: configWithFallback,
70
+ serviceSource: optionServiceSource,
59
71
  },
60
72
  mysql: mySQLNaming,
61
73
  mysql2: mySQLNaming,
62
74
  opensearch: {
63
75
  opName: () => 'opensearch.query',
64
76
  serviceName: configWithFallback,
77
+ serviceSource: optionServiceSource,
65
78
  },
66
79
  oracledb: {
67
80
  opName: () => 'oracle.query',
68
81
  serviceName: withFunction,
82
+ serviceSource: optionServiceSource,
69
83
  },
70
84
  pg: {
71
85
  opName: () => 'postgresql.query',
72
86
  serviceName: withFunction,
87
+ serviceSource: optionServiceSource,
73
88
  },
74
89
  prisma: {
75
90
  opName: ({ operation }) => `prisma.${operation}`,
76
91
  serviceName: configWithFallback,
92
+ serviceSource: optionServiceSource,
77
93
  },
78
94
  redis: redisNaming,
79
95
  tedious: {
80
96
  opName: () => 'mssql.query',
81
97
  serviceName: configWithFallback,
98
+ serviceSource: optionServiceSource,
82
99
  },
83
100
  },
84
101
  }
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const { identityService, httpPluginClientService } = require('../util')
3
+ const { identityService, httpPluginClientService, optionServiceSource } = require('../util')
4
4
 
5
5
  const web = {
6
6
  client: {
@@ -15,18 +15,26 @@ const web = {
15
15
  http: {
16
16
  opName: () => 'http.client.request',
17
17
  serviceName: httpPluginClientService,
18
+ serviceSource: optionServiceSource,
18
19
  },
19
20
  genai: {
20
21
  opName: () => 'google_genai.request',
21
22
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
23
+ serviceSource: optionServiceSource,
24
+ },
25
+ 'modelcontextprotocol-sdk': {
26
+ opName: () => 'mcp.tool.call',
27
+ serviceName: identityService,
22
28
  },
23
29
  fetch: {
24
30
  opName: () => 'http.client.request',
25
31
  serviceName: httpPluginClientService,
32
+ serviceSource: optionServiceSource,
26
33
  },
27
34
  http2: {
28
35
  opName: () => 'http.client.request',
29
36
  serviceName: httpPluginClientService,
37
+ serviceSource: optionServiceSource,
30
38
  },
31
39
  aws: {
32
40
  opName: ({ awsService }) => `aws.${awsService}.request`,
@@ -45,26 +53,32 @@ const web = {
45
53
  'apollo.gateway.request': {
46
54
  opName: () => 'apollo.gateway.request',
47
55
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
56
+ serviceSource: optionServiceSource,
48
57
  },
49
58
  'apollo.gateway.plan': {
50
59
  opName: () => 'apollo.gateway.plan',
51
60
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
61
+ serviceSource: optionServiceSource,
52
62
  },
53
63
  'apollo.gateway.validate': {
54
64
  opName: () => 'apollo.gateway.validate',
55
65
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
66
+ serviceSource: optionServiceSource,
56
67
  },
57
68
  'apollo.gateway.execute': {
58
69
  opName: () => 'apollo.gateway.execute',
59
70
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
71
+ serviceSource: optionServiceSource,
60
72
  },
61
73
  'apollo.gateway.fetch': {
62
74
  opName: () => 'apollo.gateway.fetch',
63
75
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
76
+ serviceSource: optionServiceSource,
64
77
  },
65
78
  'apollo.gateway.postprocessing': {
66
79
  opName: () => 'apollo.gateway.postprocessing',
67
80
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
81
+ serviceSource: optionServiceSource,
68
82
  },
69
83
  grpc: {
70
84
  opName: () => 'grpc.server.request',
@@ -1,28 +1,34 @@
1
1
  'use strict'
2
2
 
3
+ const { optionServiceSource } = require('../util')
4
+
3
5
  const websocket = {
4
6
  request: {
5
7
  ws: {
6
8
  opName: () => 'web.request',
7
9
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
10
+ serviceSource: optionServiceSource,
8
11
  },
9
12
  },
10
13
  producer: {
11
14
  ws: {
12
15
  opName: () => 'websocket.send',
13
16
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
17
+ serviceSource: optionServiceSource,
14
18
  },
15
19
  },
16
20
  consumer: {
17
21
  ws: {
18
22
  opName: () => 'websocket.receive',
19
23
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
24
+ serviceSource: optionServiceSource,
20
25
  },
21
26
  },
22
27
  close: {
23
28
  ws: {
24
29
  opName: () => 'websocket.close',
25
30
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
31
+ serviceSource: optionServiceSource,
26
32
  },
27
33
  },
28
34
  }