dd-trace 5.55.0 → 5.57.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 (150) hide show
  1. package/LICENSE-3rdparty.csv +1 -0
  2. package/index.d.ts +44 -2
  3. package/init.js +4 -1
  4. package/package.json +24 -23
  5. package/packages/datadog-core/src/utils/src/set.js +8 -10
  6. package/packages/datadog-esbuild/index.js +22 -0
  7. package/packages/datadog-instrumentations/src/cassandra-driver.js +43 -60
  8. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +12 -12
  9. package/packages/datadog-instrumentations/src/cucumber.js +4 -6
  10. package/packages/datadog-instrumentations/src/elasticsearch.js +16 -19
  11. package/packages/datadog-instrumentations/src/fastify.js +91 -9
  12. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +20 -5
  13. package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +2 -2
  14. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
  15. package/packages/datadog-instrumentations/src/helpers/register.js +17 -5
  16. package/packages/datadog-instrumentations/src/ioredis.js +8 -13
  17. package/packages/datadog-instrumentations/src/iovalkey.js +10 -14
  18. package/packages/datadog-instrumentations/src/jest.js +423 -325
  19. package/packages/datadog-instrumentations/src/memcached.js +17 -24
  20. package/packages/datadog-instrumentations/src/mocha/main.js +7 -6
  21. package/packages/datadog-instrumentations/src/moleculer/client.js +9 -10
  22. package/packages/datadog-instrumentations/src/moleculer/server.js +12 -13
  23. package/packages/datadog-instrumentations/src/openai.js +30 -2
  24. package/packages/datadog-instrumentations/src/playwright.js +4 -1
  25. package/packages/datadog-instrumentations/src/prisma.js +116 -0
  26. package/packages/datadog-instrumentations/src/redis.js +32 -43
  27. package/packages/datadog-instrumentations/src/router.js +1 -1
  28. package/packages/datadog-instrumentations/src/sharedb.js +10 -16
  29. package/packages/datadog-instrumentations/src/vitest.js +4 -4
  30. package/packages/datadog-plugin-aws-sdk/src/base.js +6 -1
  31. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +9 -4
  32. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +3 -2
  33. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +2 -1
  34. package/packages/datadog-plugin-aws-sdk/src/util.js +2 -2
  35. package/packages/datadog-plugin-azure-functions/src/index.js +5 -4
  36. package/packages/datadog-plugin-bunyan/src/index.js +2 -2
  37. package/packages/datadog-plugin-cassandra-driver/src/index.js +6 -2
  38. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/batch-consumer.js +1 -1
  39. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/consumer.js +1 -1
  40. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
  41. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/producer.js +1 -1
  42. package/packages/datadog-plugin-cucumber/src/index.js +4 -2
  43. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +9 -5
  44. package/packages/datadog-plugin-elasticsearch/src/index.js +12 -4
  45. package/packages/datadog-plugin-http/src/client.js +1 -0
  46. package/packages/datadog-plugin-http/src/server.js +2 -1
  47. package/packages/datadog-plugin-http2/src/client.js +1 -0
  48. package/packages/datadog-plugin-http2/src/server.js +1 -0
  49. package/packages/datadog-plugin-jest/src/index.js +4 -3
  50. package/packages/datadog-plugin-memcached/src/index.js +6 -2
  51. package/packages/datadog-plugin-mocha/src/index.js +3 -2
  52. package/packages/datadog-plugin-moleculer/src/client.js +15 -9
  53. package/packages/datadog-plugin-moleculer/src/server.js +9 -5
  54. package/packages/datadog-plugin-next/src/index.js +2 -1
  55. package/packages/datadog-plugin-openai/src/tracing.js +127 -80
  56. package/packages/datadog-plugin-oracledb/src/index.js +2 -1
  57. package/packages/datadog-plugin-pino/src/index.js +2 -2
  58. package/packages/datadog-plugin-prisma/src/client.js +62 -0
  59. package/packages/datadog-plugin-prisma/src/engine.js +81 -0
  60. package/packages/datadog-plugin-prisma/src/index.js +22 -0
  61. package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +1 -1
  62. package/packages/datadog-plugin-redis/src/index.js +9 -3
  63. package/packages/datadog-plugin-router/src/index.js +1 -0
  64. package/packages/datadog-plugin-sharedb/src/index.js +13 -5
  65. package/packages/datadog-plugin-winston/src/index.js +2 -2
  66. package/packages/dd-trace/src/appsec/channels.js +26 -21
  67. package/packages/dd-trace/src/appsec/iast/analyzers/sql-injection-analyzer.js +1 -1
  68. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +13 -20
  69. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
  70. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +44 -1
  71. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +2 -1
  72. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +7 -2
  73. package/packages/dd-trace/src/appsec/iast/taint-tracking/source-types.js +0 -1
  74. package/packages/dd-trace/src/appsec/index.js +28 -2
  75. package/packages/dd-trace/src/appsec/rasp/utils.js +0 -5
  76. package/packages/dd-trace/src/appsec/reporter.js +6 -4
  77. package/packages/dd-trace/src/baggage.js +2 -2
  78. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +3 -3
  79. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
  80. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
  81. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
  82. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
  83. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -6
  84. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -3
  85. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +3 -3
  86. package/packages/dd-trace/src/config.js +334 -312
  87. package/packages/dd-trace/src/constants.js +2 -1
  88. package/packages/dd-trace/src/crashtracking/crashtracker.js +12 -14
  89. package/packages/dd-trace/src/datastreams/context.js +1 -1
  90. package/packages/dd-trace/src/datastreams/processor.js +1 -1
  91. package/packages/dd-trace/src/datastreams/writer.js +3 -3
  92. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +6 -3
  93. package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
  94. package/packages/dd-trace/src/debugger/devtools_client/index.js +2 -3
  95. package/packages/dd-trace/src/debugger/devtools_client/send.js +5 -1
  96. package/packages/dd-trace/src/debugger/devtools_client/state.js +7 -4
  97. package/packages/dd-trace/src/debugger/devtools_client/status.js +5 -1
  98. package/packages/dd-trace/src/dogstatsd.js +3 -3
  99. package/packages/dd-trace/src/exporters/agent/index.js +10 -5
  100. package/packages/dd-trace/src/exporters/agent/writer.js +4 -2
  101. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +2 -2
  102. package/packages/dd-trace/src/exporters/log/index.js +1 -1
  103. package/packages/dd-trace/src/exporters/span-stats/writer.js +2 -2
  104. package/packages/dd-trace/src/guardrails/index.js +3 -1
  105. package/packages/dd-trace/src/guardrails/telemetry.js +1 -1
  106. package/packages/dd-trace/src/llmobs/index.js +11 -5
  107. package/packages/dd-trace/src/llmobs/plugins/base.js +2 -2
  108. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +1 -1
  109. package/packages/dd-trace/src/llmobs/tagger.js +13 -13
  110. package/packages/dd-trace/src/llmobs/writers/base.js +2 -2
  111. package/packages/dd-trace/src/llmobs/writers/spans.js +2 -2
  112. package/packages/dd-trace/src/opentelemetry/tracer.js +1 -1
  113. package/packages/dd-trace/src/opentracing/propagation/text_map.js +22 -28
  114. package/packages/dd-trace/src/opentracing/span.js +1 -0
  115. package/packages/dd-trace/src/plugin_manager.js +3 -3
  116. package/packages/dd-trace/src/plugins/cache.js +2 -2
  117. package/packages/dd-trace/src/plugins/ci_plugin.js +11 -7
  118. package/packages/dd-trace/src/plugins/database.js +3 -1
  119. package/packages/dd-trace/src/plugins/index.js +1 -0
  120. package/packages/dd-trace/src/plugins/log_plugin.js +5 -1
  121. package/packages/dd-trace/src/plugins/outbound.js +8 -6
  122. package/packages/dd-trace/src/plugins/structured_log_plugin.js +9 -0
  123. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  124. package/packages/dd-trace/src/plugins/util/ci.js +83 -30
  125. package/packages/dd-trace/src/plugins/util/git.js +1 -0
  126. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +3 -2
  127. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -0
  128. package/packages/dd-trace/src/plugins/util/tags.js +4 -1
  129. package/packages/dd-trace/src/plugins/util/test.js +80 -10
  130. package/packages/dd-trace/src/plugins/util/web.js +1 -0
  131. package/packages/dd-trace/src/profiler.js +0 -2
  132. package/packages/dd-trace/src/profiling/exporter_cli.js +1 -3
  133. package/packages/dd-trace/src/profiling/profilers/events.js +10 -2
  134. package/packages/dd-trace/src/profiling/ssi-heuristics.js +18 -126
  135. package/packages/dd-trace/src/proxy.js +12 -27
  136. package/packages/dd-trace/src/runtime_metrics/index.js +1 -1
  137. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +14 -45
  138. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +2 -2
  139. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +4 -0
  140. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +2 -2
  141. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
  142. package/packages/dd-trace/src/supported-configurations.json +13 -3
  143. package/packages/dd-trace/src/telemetry/telemetry.js +11 -4
  144. package/packages/dd-trace/src/tracer.js +11 -0
  145. package/packages/dd-trace/src/tracer_metadata.js +25 -0
  146. package/packages/dd-trace/src/util.js +11 -4
  147. package/version.js +3 -1
  148. package/packages/datadog-core/src/utils/src/get.js +0 -11
  149. package/packages/datadog-core/src/utils/src/has.js +0 -14
  150. package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +0 -30
@@ -240,6 +240,7 @@ class DatadogSpan {
240
240
  }
241
241
 
242
242
  getIntegrationCounter('spans_finished', this._integrationName).inc()
243
+ this._spanContext._tags['_dd.integration'] = this._integrationName
243
244
 
244
245
  if (DD_TRACE_EXPERIMENTAL_SPAN_COUNTS && finishedRegistry) {
245
246
  runtimeMetrics.decrement('runtime.node.spans.unfinished')
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const { channel } = require('dc-polyfill')
4
- const { isFalse } = require('./util')
4
+ const { isFalse, normalizePluginEnvName } = require('./util')
5
5
  const plugins = require('./plugins')
6
6
  const log = require('./log')
7
7
  const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
@@ -33,11 +33,11 @@ function maybeEnable (Plugin) {
33
33
  if (!Plugin || typeof Plugin !== 'function') return
34
34
  if (!pluginClasses[Plugin.id]) {
35
35
  const envName = `DD_TRACE_${Plugin.id.toUpperCase()}_ENABLED`
36
- const enabled = getEnvironmentVariable(envName.replaceAll(/[^a-z0-9_]/ig, '_'))
36
+ const enabled = getEnvironmentVariable(normalizePluginEnvName(envName))
37
37
 
38
38
  // TODO: remove the need to load the plugin class in order to disable the plugin
39
39
  if (isFalse(enabled) || disabledPlugins.has(Plugin.id)) {
40
- log.debug(`Plugin "${Plugin.id}" was disabled via configuration option.`)
40
+ log.debug('Plugin "%s" was disabled via configuration option.', Plugin.id)
41
41
 
42
42
  pluginClasses[Plugin.id] = null
43
43
  } else {
@@ -5,11 +5,11 @@ const StoragePlugin = require('./storage')
5
5
  class CachePlugin extends StoragePlugin {
6
6
  static get operation () { return 'command' }
7
7
 
8
- startSpan (options) {
8
+ startSpan (options, ctx) {
9
9
  if (!options.kind) {
10
10
  options.kind = this.constructor.kind
11
11
  }
12
- return super.startSpan(this.operationName(), options)
12
+ return super.startSpan(this.operationName(), options, ctx)
13
13
  }
14
14
  }
15
15
 
@@ -75,7 +75,7 @@ module.exports = class CiPlugin extends Plugin {
75
75
  this.rootDir = process.cwd() // fallback in case :session:start events are not emitted
76
76
 
77
77
  this.addSub(`ci:${this.constructor.id}:library-configuration`, (ctx) => {
78
- const { onDone, isParallel } = ctx
78
+ const { onDone, isParallel, frameworkVersion } = ctx
79
79
  ctx.currentStore = storage('legacy').getStore()
80
80
 
81
81
  if (!this.tracer._exporter || !this.tracer._exporter.getLibraryConfiguration) {
@@ -88,7 +88,7 @@ module.exports = class CiPlugin extends Plugin {
88
88
  this.libraryConfig = libraryConfig
89
89
  }
90
90
 
91
- const libraryCapabilitiesTags = getLibraryCapabilitiesTags(this.constructor.id, isParallel)
91
+ const libraryCapabilitiesTags = getLibraryCapabilitiesTags(this.constructor.id, isParallel, frameworkVersion)
92
92
  const metadataTags = {
93
93
  test: {
94
94
  ...libraryCapabilitiesTags
@@ -150,7 +150,8 @@ module.exports = class CiPlugin extends Plugin {
150
150
  [COMPONENT]: this.constructor.id,
151
151
  ...this.testEnvironmentMetadata,
152
152
  ...testSessionSpanMetadata
153
- }
153
+ },
154
+ integrationName: this.constructor.id
154
155
  })
155
156
  // TODO: add telemetry tag when we can add `is_agentless_log_submission_enabled` for agentless log submission
156
157
  this.telemetry.ciVisEvent(TELEMETRY_EVENT_CREATED, 'session')
@@ -161,7 +162,8 @@ module.exports = class CiPlugin extends Plugin {
161
162
  [COMPONENT]: this.constructor.id,
162
163
  ...this.testEnvironmentMetadata,
163
164
  ...testModuleSpanMetadata
164
- }
165
+ },
166
+ integrationName: this.constructor.id
165
167
  })
166
168
  // only for vitest
167
169
  // These are added for the worker threads to use
@@ -194,7 +196,8 @@ module.exports = class CiPlugin extends Plugin {
194
196
  ...testSuiteMetadata,
195
197
  [TEST_STATUS]: 'skip',
196
198
  [TEST_SKIPPED_BY_ITR]: 'true'
197
- }
199
+ },
200
+ integrationName: this.constructor.id
198
201
  }).finish()
199
202
  })
200
203
  this.telemetry.count(TELEMETRY_ITR_SKIPPED, { testLevel: 'suite' }, skippedSuites.length)
@@ -396,7 +399,8 @@ module.exports = class CiPlugin extends Plugin {
396
399
  tags: {
397
400
  ...this.testEnvironmentMetadata,
398
401
  ...testTags
399
- }
402
+ },
403
+ integrationName: this.constructor.id
400
404
  })
401
405
 
402
406
  testSpan.context()._trace.origin = CI_APP_ORIGIN
@@ -453,7 +457,7 @@ module.exports = class CiPlugin extends Plugin {
453
457
 
454
458
  removeDiProbe ({ file, line }) {
455
459
  const probeId = this.fileLineToProbeId.get(`${file}:${line}`)
456
- log.warn(`Removing probe from ${file}:${line}, with id: ${probeId}`)
460
+ log.warn('Removing probe from %s:%s, with id: %s', file, line, probeId)
457
461
  this.fileLineToProbeId.delete(probeId)
458
462
  return this.di.removeProbe(probeId)
459
463
  }
@@ -89,7 +89,9 @@ class DatabasePlugin extends StoragePlugin {
89
89
  return query
90
90
  }
91
91
 
92
- return `/*${dbmTraceComment}*/ ${query}`
92
+ return this.config.appendComment
93
+ ? `${query} /*${dbmTraceComment}*/`
94
+ : `/*${dbmTraceComment}*/ ${query}`
93
95
  }
94
96
 
95
97
  maybeTruncate (query) {
@@ -20,6 +20,7 @@ module.exports = {
20
20
  get '@langchain/openai' () { return require('../../../datadog-plugin-langchain/src') },
21
21
  get '@node-redis/client' () { return require('../../../datadog-plugin-redis/src') },
22
22
  get '@opensearch-project/opensearch' () { return require('../../../datadog-plugin-opensearch/src') },
23
+ get '@prisma/client' () { return require('../../../datadog-plugin-prisma/src') },
23
24
  get '@redis/client' () { return require('../../../datadog-plugin-redis/src') },
24
25
  get '@smithy/smithy-client' () { return require('../../../datadog-plugin-aws-sdk/src') },
25
26
  get '@vitest/runner' () { return require('../../../datadog-plugin-vitest/src') },
@@ -45,10 +45,14 @@ module.exports = class LogPlugin extends Plugin {
45
45
  })
46
46
  }
47
47
 
48
+ _isEnabled (config) {
49
+ return config.enabled && (config.logInjection === true || config.ciVisAgentlessLogSubmissionEnabled)
50
+ }
51
+
48
52
  configure (config) {
49
53
  return super.configure({
50
54
  ...config,
51
- enabled: config.enabled && (config.logInjection || config.ciVisAgentlessLogSubmissionEnabled)
55
+ enabled: this._isEnabled(config)
52
56
  })
53
57
  }
54
58
  }
@@ -21,8 +21,8 @@ class OutboundPlugin extends TracingPlugin {
21
21
  constructor (...args) {
22
22
  super(...args)
23
23
 
24
- this.addTraceSub('connect', message => {
25
- this.connect(message)
24
+ this.addTraceSub('connect', ctx => {
25
+ this.connect(ctx)
26
26
  })
27
27
  }
28
28
 
@@ -105,12 +105,14 @@ class OutboundPlugin extends TracingPlugin {
105
105
  }
106
106
  }
107
107
 
108
- connect (url) {
109
- this.addHost(url.hostname, url.port)
108
+ connect (ctx) {
109
+ this.addHost(ctx)
110
110
  }
111
111
 
112
- addHost (hostname, port) {
113
- const span = this.activeSpan
112
+ addHost (ctx) {
113
+ const { hostname, port } = ctx
114
+
115
+ const span = ctx?.currentStore?.span || this.activeSpan
114
116
 
115
117
  if (!span) return
116
118
 
@@ -0,0 +1,9 @@
1
+ 'use strict'
2
+
3
+ const LogPlugin = require('./log_plugin')
4
+
5
+ module.exports = class StructuredLogPlugin extends LogPlugin {
6
+ _isEnabled (config) {
7
+ return super._isEnabled(config) || (config.enabled && config.logInjection === 'structured')
8
+ }
9
+ }
@@ -119,7 +119,7 @@ class TracingPlugin extends Plugin {
119
119
  ...meta,
120
120
  ...metrics
121
121
  },
122
- integrationName: type,
122
+ integrationName: this.component,
123
123
  links: childOf?._links
124
124
  })
125
125
 
@@ -24,10 +24,11 @@ const {
24
24
  GIT_COMMIT_COMMITTER_NAME,
25
25
  GIT_COMMIT_COMMITTER_EMAIL,
26
26
  CI_NODE_LABELS,
27
- CI_NODE_NAME
27
+ CI_NODE_NAME,
28
+ PR_NUMBER
28
29
  } = require('./tags')
29
30
  const { filterSensitiveInfoFromRepository } = require('./url')
30
- const { getEnvironmentVariable } = require('../../config-helper')
31
+ const { getEnvironmentVariable, getEnvironmentVariables } = require('../../config-helper')
31
32
 
32
33
  // Receives a string with the form 'John Doe <john.doe@gmail.com>'
33
34
  // and returns { name: 'John Doe', email: 'john.doe@gmail.com' }
@@ -92,7 +93,7 @@ function getGitHubEventPayload () {
92
93
  module.exports = {
93
94
  normalizeRef,
94
95
  getCIMetadata () {
95
- const { env } = process
96
+ const env = getEnvironmentVariables()
96
97
 
97
98
  let tags = {}
98
99
 
@@ -109,7 +110,9 @@ module.exports = {
109
110
  GIT_URL_1: JENKINS_GIT_REPOSITORY_URL_1,
110
111
  DD_CUSTOM_TRACE_ID,
111
112
  NODE_NAME,
112
- NODE_LABELS
113
+ NODE_LABELS,
114
+ CHANGE_ID,
115
+ CHANGE_TARGET
113
116
  } = env
114
117
 
115
118
  tags = {
@@ -121,7 +124,9 @@ module.exports = {
121
124
  [GIT_REPOSITORY_URL]: JENKINS_GIT_REPOSITORY_URL || JENKINS_GIT_REPOSITORY_URL_1,
122
125
  [CI_WORKSPACE_PATH]: WORKSPACE,
123
126
  [CI_ENV_VARS]: JSON.stringify({ DD_CUSTOM_TRACE_ID }),
124
- [CI_NODE_NAME]: NODE_NAME
127
+ [CI_NODE_NAME]: NODE_NAME,
128
+ [PR_NUMBER]: CHANGE_ID,
129
+ [GIT_PULL_REQUEST_BASE_BRANCH]: CHANGE_TARGET
125
130
  }
126
131
 
127
132
  if (NODE_LABELS) {
@@ -172,7 +177,7 @@ module.exports = {
172
177
  CI_RUNNER_ID,
173
178
  CI_RUNNER_TAGS,
174
179
  CI_MERGE_REQUEST_TARGET_BRANCH_NAME,
175
- CI_MERGE_REQUEST_TARGET_BRANCH_SHA
180
+ CI_MERGE_REQUEST_IID
176
181
  } = env
177
182
 
178
183
  const { name, email } = parseEmailAndName(CI_COMMIT_AUTHOR)
@@ -203,7 +208,7 @@ module.exports = {
203
208
  [CI_NODE_LABELS]: CI_RUNNER_TAGS,
204
209
  [CI_NODE_NAME]: CI_RUNNER_ID,
205
210
  [GIT_PULL_REQUEST_BASE_BRANCH]: CI_MERGE_REQUEST_TARGET_BRANCH_NAME,
206
- [GIT_PULL_REQUEST_BASE_BRANCH_SHA]: CI_MERGE_REQUEST_TARGET_BRANCH_SHA
211
+ [PR_NUMBER]: CI_MERGE_REQUEST_IID
207
212
  }
208
213
  }
209
214
 
@@ -218,7 +223,8 @@ module.exports = {
218
223
  CIRCLE_SHA1,
219
224
  CIRCLE_REPOSITORY_URL,
220
225
  CIRCLE_JOB,
221
- CIRCLE_BUILD_NUM
226
+ CIRCLE_BUILD_NUM,
227
+ CIRCLE_PR_NUMBER
222
228
  } = env
223
229
 
224
230
  const pipelineUrl = `https://app.circleci.com/pipelines/workflows/${CIRCLE_WORKFLOW_ID}`
@@ -237,8 +243,9 @@ module.exports = {
237
243
  [GIT_BRANCH]: CIRCLE_BRANCH,
238
244
  [CI_ENV_VARS]: JSON.stringify({
239
245
  CIRCLE_WORKFLOW_ID,
240
- CIRCLE_BUILD_NUM
241
- })
246
+ CIRCLE_BUILD_NUM,
247
+ }),
248
+ [PR_NUMBER]: CIRCLE_PR_NUMBER
242
249
  }
243
250
  }
244
251
 
@@ -317,7 +324,9 @@ module.exports = {
317
324
  APPVEYOR_REPO_COMMIT_AUTHOR,
318
325
  APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL,
319
326
  APPVEYOR_REPO_COMMIT_MESSAGE,
320
- APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED
327
+ APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED,
328
+ APPVEYOR_PULL_REQUEST_HEAD_COMMIT,
329
+ APPVEYOR_PULL_REQUEST_NUMBER
321
330
  } = env
322
331
 
323
332
  const pipelineUrl = `https://ci.appveyor.com/project/${APPVEYOR_REPO_NAME}/builds/${APPVEYOR_BUILD_ID}`
@@ -333,7 +342,12 @@ module.exports = {
333
342
  [GIT_COMMIT_AUTHOR_NAME]: APPVEYOR_REPO_COMMIT_AUTHOR,
334
343
  [GIT_COMMIT_AUTHOR_EMAIL]: APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL,
335
344
  [GIT_COMMIT_MESSAGE]: APPVEYOR_REPO_COMMIT_MESSAGE + '\n' + APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED,
336
- [GIT_PULL_REQUEST_BASE_BRANCH]: APPVEYOR_REPO_BRANCH
345
+ [GIT_COMMIT_HEAD_SHA]: APPVEYOR_PULL_REQUEST_HEAD_COMMIT,
346
+ [PR_NUMBER]: APPVEYOR_PULL_REQUEST_NUMBER
347
+ }
348
+
349
+ if (APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH) {
350
+ tags[GIT_PULL_REQUEST_BASE_BRANCH] = APPVEYOR_REPO_BRANCH
337
351
  }
338
352
 
339
353
  if (APPVEYOR_REPO_PROVIDER === 'github') {
@@ -367,7 +381,9 @@ module.exports = {
367
381
  BUILD_REQUESTEDFOREMAIL,
368
382
  BUILD_SOURCEVERSIONMESSAGE,
369
383
  SYSTEM_STAGEDISPLAYNAME,
370
- SYSTEM_JOBDISPLAYNAME
384
+ SYSTEM_JOBDISPLAYNAME,
385
+ SYSTEM_PULLREQUEST_PULLREQUESTNUMBER,
386
+ SYSTEM_PULLREQUEST_TARGETBRANCH
371
387
  } = env
372
388
 
373
389
  const ref = SYSTEM_PULLREQUEST_SOURCEBRANCH || BUILD_SOURCEBRANCH || BUILD_SOURCEBRANCHNAME
@@ -387,7 +403,9 @@ module.exports = {
387
403
  [GIT_COMMIT_MESSAGE]: BUILD_SOURCEVERSIONMESSAGE,
388
404
  [CI_STAGE_NAME]: SYSTEM_STAGEDISPLAYNAME,
389
405
  [CI_JOB_NAME]: SYSTEM_JOBDISPLAYNAME,
390
- [CI_ENV_VARS]: JSON.stringify({ SYSTEM_TEAMPROJECTID, BUILD_BUILDID, SYSTEM_JOBID })
406
+ [CI_ENV_VARS]: JSON.stringify({ SYSTEM_TEAMPROJECTID, BUILD_BUILDID, SYSTEM_JOBID }),
407
+ [PR_NUMBER]: SYSTEM_PULLREQUEST_PULLREQUESTNUMBER,
408
+ [GIT_PULL_REQUEST_BASE_BRANCH]: SYSTEM_PULLREQUEST_TARGETBRANCH
391
409
  }
392
410
 
393
411
  if (SYSTEM_TEAMFOUNDATIONSERVERURI && SYSTEM_TEAMPROJECTID && BUILD_BUILDID) {
@@ -415,7 +433,8 @@ module.exports = {
415
433
  BITBUCKET_TAG,
416
434
  BITBUCKET_PIPELINE_UUID,
417
435
  BITBUCKET_CLONE_DIR,
418
- BITBUCKET_PR_DESTINATION_BRANCH
436
+ BITBUCKET_PR_DESTINATION_BRANCH,
437
+ BITBUCKET_PR_ID
419
438
  } = env
420
439
 
421
440
  const url =
@@ -433,7 +452,8 @@ module.exports = {
433
452
  [GIT_REPOSITORY_URL]: BITBUCKET_GIT_SSH_ORIGIN || BITBUCKET_GIT_HTTP_ORIGIN,
434
453
  [CI_WORKSPACE_PATH]: BITBUCKET_CLONE_DIR,
435
454
  [CI_PIPELINE_ID]: BITBUCKET_PIPELINE_UUID && BITBUCKET_PIPELINE_UUID.replaceAll(/{|}/gm, ''),
436
- [GIT_PULL_REQUEST_BASE_BRANCH]: BITBUCKET_PR_DESTINATION_BRANCH
455
+ [GIT_PULL_REQUEST_BASE_BRANCH]: BITBUCKET_PR_DESTINATION_BRANCH,
456
+ [PR_NUMBER]: BITBUCKET_PR_ID
437
457
  }
438
458
  }
439
459
 
@@ -450,7 +470,8 @@ module.exports = {
450
470
  BITRISE_SOURCE_DIR,
451
471
  GIT_REPOSITORY_URL: BITRISE_GIT_REPOSITORY_URL,
452
472
  BITRISE_GIT_TAG,
453
- BITRISE_GIT_MESSAGE
473
+ BITRISE_GIT_MESSAGE,
474
+ BITRISE_PULL_REQUEST
454
475
  } = env
455
476
 
456
477
  tags = {
@@ -465,7 +486,8 @@ module.exports = {
465
486
  [GIT_TAG]: BITRISE_GIT_TAG,
466
487
  [GIT_BRANCH]: BITRISEIO_GIT_BRANCH_DEST || BITRISE_GIT_BRANCH,
467
488
  [GIT_COMMIT_MESSAGE]: BITRISE_GIT_MESSAGE,
468
- [GIT_PULL_REQUEST_BASE_BRANCH]: BITRISEIO_GIT_BRANCH_DEST
489
+ [GIT_PULL_REQUEST_BASE_BRANCH]: BITRISEIO_GIT_BRANCH_DEST,
490
+ [PR_NUMBER]: BITRISE_PULL_REQUEST
469
491
  }
470
492
  }
471
493
 
@@ -484,7 +506,9 @@ module.exports = {
484
506
  BUILDKITE_BUILD_AUTHOR,
485
507
  BUILDKITE_BUILD_AUTHOR_EMAIL,
486
508
  BUILDKITE_MESSAGE,
487
- BUILDKITE_AGENT_ID
509
+ BUILDKITE_AGENT_ID,
510
+ BUILDKITE_PULL_REQUEST,
511
+ BUILDKITE_PULL_REQUEST_BASE_BRANCH
488
512
  } = env
489
513
 
490
514
  const extraTags = Object.keys(env).filter(envVar =>
@@ -514,7 +538,12 @@ module.exports = {
514
538
  BUILDKITE_JOB_ID
515
539
  }),
516
540
  [CI_NODE_NAME]: BUILDKITE_AGENT_ID,
517
- [CI_NODE_LABELS]: JSON.stringify(extraTags)
541
+ [CI_NODE_LABELS]: JSON.stringify(extraTags),
542
+ [PR_NUMBER]: BUILDKITE_PULL_REQUEST,
543
+ }
544
+
545
+ if (BUILDKITE_PULL_REQUEST) {
546
+ tags[GIT_PULL_REQUEST_BASE_BRANCH] = BUILDKITE_PULL_REQUEST_BASE_BRANCH
518
547
  }
519
548
  }
520
549
 
@@ -530,7 +559,9 @@ module.exports = {
530
559
  TRAVIS_BUILD_NUMBER,
531
560
  TRAVIS_BUILD_WEB_URL,
532
561
  TRAVIS_BUILD_DIR,
533
- TRAVIS_COMMIT_MESSAGE
562
+ TRAVIS_COMMIT_MESSAGE,
563
+ TRAVIS_PULL_REQUEST,
564
+ TRAVIS_PULL_REQUEST_SHA
534
565
  } = env
535
566
 
536
567
  tags = {
@@ -545,7 +576,10 @@ module.exports = {
545
576
  [CI_WORKSPACE_PATH]: TRAVIS_BUILD_DIR,
546
577
  [GIT_TAG]: TRAVIS_TAG,
547
578
  [GIT_BRANCH]: TRAVIS_PULL_REQUEST_BRANCH || TRAVIS_BRANCH,
548
- [GIT_COMMIT_MESSAGE]: TRAVIS_COMMIT_MESSAGE
579
+ [GIT_COMMIT_MESSAGE]: TRAVIS_COMMIT_MESSAGE,
580
+ [GIT_COMMIT_HEAD_SHA]: TRAVIS_PULL_REQUEST_SHA,
581
+ [GIT_PULL_REQUEST_BASE_BRANCH]: TRAVIS_BRANCH,
582
+ [PR_NUMBER]: TRAVIS_PULL_REQUEST
549
583
  }
550
584
  }
551
585
 
@@ -562,7 +596,8 @@ module.exports = {
562
596
  BUDDY_PIPELINE_ID,
563
597
  BUDDY_PIPELINE_NAME,
564
598
  BUDDY_SCM_URL,
565
- BUDDY_RUN_PR_BASE_BRANCH
599
+ BUDDY_RUN_PR_BASE_BRANCH,
600
+ BUDDY_RUN_PR_NO
566
601
  } = env
567
602
  tags = {
568
603
  [CI_PROVIDER_NAME]: 'buddy',
@@ -577,19 +612,28 @@ module.exports = {
577
612
  [GIT_COMMIT_MESSAGE]: BUDDY_EXECUTION_REVISION_MESSAGE,
578
613
  [GIT_COMMIT_COMMITTER_NAME]: BUDDY_EXECUTION_REVISION_COMMITTER_NAME,
579
614
  [GIT_COMMIT_COMMITTER_EMAIL]: BUDDY_EXECUTION_REVISION_COMMITTER_EMAIL,
580
- [GIT_PULL_REQUEST_BASE_BRANCH]: BUDDY_RUN_PR_BASE_BRANCH
615
+ [GIT_PULL_REQUEST_BASE_BRANCH]: BUDDY_RUN_PR_BASE_BRANCH,
616
+ [PR_NUMBER]: BUDDY_RUN_PR_NO
581
617
  }
582
618
  }
583
619
 
584
620
  if (env.TEAMCITY_VERSION) {
585
- const { BUILD_URL, TEAMCITY_BUILDCONF_NAME, DATADOG_BUILD_ID } = env
621
+ const {
622
+ BUILD_URL,
623
+ TEAMCITY_BUILDCONF_NAME,
624
+ DATADOG_BUILD_ID,
625
+ TEAMCITY_PULLREQUEST_NUMBER,
626
+ TEAMCITY_PULLREQUEST_TARGET_BRANCH
627
+ } = env
586
628
  tags = {
587
629
  [CI_PROVIDER_NAME]: 'teamcity',
588
630
  [CI_JOB_URL]: BUILD_URL,
589
631
  [CI_JOB_NAME]: TEAMCITY_BUILDCONF_NAME,
590
632
  [CI_ENV_VARS]: JSON.stringify({
591
633
  DATADOG_BUILD_ID
592
- })
634
+ }),
635
+ [PR_NUMBER]: TEAMCITY_PULLREQUEST_NUMBER,
636
+ [GIT_PULL_REQUEST_BASE_BRANCH]: TEAMCITY_PULLREQUEST_TARGET_BRANCH
593
637
  }
594
638
  }
595
639
 
@@ -599,7 +643,9 @@ module.exports = {
599
643
  CF_PIPELINE_NAME,
600
644
  CF_BUILD_URL,
601
645
  CF_STEP_NAME,
602
- CF_BRANCH
646
+ CF_BRANCH,
647
+ CF_PULL_REQUEST_NUMBER,
648
+ CF_PULL_REQUEST_TARGET
603
649
  } = env
604
650
  tags = {
605
651
  [CI_PROVIDER_NAME]: 'codefresh',
@@ -609,7 +655,9 @@ module.exports = {
609
655
  [CI_JOB_NAME]: CF_STEP_NAME,
610
656
  [CI_ENV_VARS]: JSON.stringify({
611
657
  CF_BUILD_ID
612
- })
658
+ }),
659
+ [PR_NUMBER]: CF_PULL_REQUEST_NUMBER,
660
+ [GIT_PULL_REQUEST_BASE_BRANCH]: CF_PULL_REQUEST_TARGET
613
661
  }
614
662
 
615
663
  const isTag = CF_BRANCH && CF_BRANCH.includes('tags/')
@@ -649,7 +697,9 @@ module.exports = {
649
697
  DRONE_TAG,
650
698
  DRONE_COMMIT_AUTHOR_NAME,
651
699
  DRONE_COMMIT_AUTHOR_EMAIL,
652
- DRONE_COMMIT_MESSAGE
700
+ DRONE_COMMIT_MESSAGE,
701
+ DRONE_PULL_REQUEST,
702
+ DRONE_TARGET_BRANCH
653
703
  } = env
654
704
  tags = {
655
705
  [CI_PROVIDER_NAME]: 'drone',
@@ -664,7 +714,9 @@ module.exports = {
664
714
  [GIT_TAG]: DRONE_TAG,
665
715
  [GIT_COMMIT_AUTHOR_NAME]: DRONE_COMMIT_AUTHOR_NAME,
666
716
  [GIT_COMMIT_AUTHOR_EMAIL]: DRONE_COMMIT_AUTHOR_EMAIL,
667
- [GIT_COMMIT_MESSAGE]: DRONE_COMMIT_MESSAGE
717
+ [GIT_COMMIT_MESSAGE]: DRONE_COMMIT_MESSAGE,
718
+ [PR_NUMBER]: DRONE_PULL_REQUEST,
719
+ [GIT_PULL_REQUEST_BASE_BRANCH]: DRONE_TARGET_BRANCH
668
720
  }
669
721
  }
670
722
 
@@ -672,6 +724,7 @@ module.exports = {
672
724
  normalizeTag(tags, GIT_REPOSITORY_URL, filterSensitiveInfoFromRepository)
673
725
  normalizeTag(tags, GIT_BRANCH, normalizeRef)
674
726
  normalizeTag(tags, GIT_TAG, normalizeRef)
727
+ normalizeTag(tags, GIT_PULL_REQUEST_BASE_BRANCH, normalizeRef)
675
728
 
676
729
  return removeEmptyValues(tags)
677
730
  }
@@ -380,6 +380,7 @@ function generatePackFilesForCommits (commitsToUpload) {
380
380
  const tmpFolder = os.tmpdir()
381
381
 
382
382
  if (!isDirectory(tmpFolder)) {
383
+ // TODO: Do we need the stack trace for this error? If not, just log the string
383
384
  log.error(new Error('Provided path to generate packfiles is not a directory'))
384
385
  return []
385
386
  }
@@ -37,7 +37,7 @@ function createInferredProxySpan (headers, childOf, tracer, context) {
37
37
 
38
38
  const proxySpanInfo = supportedProxies[proxyContext.proxySystemName]
39
39
 
40
- log.debug(`Successfully extracted inferred span info ${proxyContext} for proxy: ${proxyContext.proxySystemName}`)
40
+ log.debug('Successfully extracted inferred span info %s for proxy:', proxyContext, proxyContext.proxySystemName)
41
41
 
42
42
  const span = tracer.startSpan(
43
43
  proxySpanInfo.spanName,
@@ -45,6 +45,7 @@ function createInferredProxySpan (headers, childOf, tracer, context) {
45
45
  childOf,
46
46
  type: 'web',
47
47
  startTime: proxyContext.requestTime,
48
+ integrationName: proxySpanInfo.component,
48
49
  tags: {
49
50
  service: proxyContext.domainName || tracer._config.service,
50
51
  component: proxySpanInfo.component,
@@ -79,7 +80,7 @@ function extractInferredProxyContext (headers) {
79
80
  }
80
81
 
81
82
  if (!(PROXY_HEADER_SYSTEM in headers && headers[PROXY_HEADER_SYSTEM] in supportedProxies)) {
82
- log.debug(`Received headers to create inferred proxy span but headers include an unsupported proxy type ${headers}`)
83
+ log.debug('Received headers to create inferred proxy span but headers include an unsupported proxy type', headers)
83
84
  return null
84
85
  }
85
86
 
@@ -21,6 +21,7 @@ const privateCIDRs = [
21
21
  '172.16.0.0/12',
22
22
  '192.168.0.0/16',
23
23
  '169.254.0.0/16',
24
+ '100.65.0.0/10',
24
25
  '::1/128',
25
26
  'fec0::/10',
26
27
  'fe80::/10',
@@ -28,6 +28,8 @@ const CI_NODE_LABELS = 'ci.node.labels'
28
28
 
29
29
  const CI_ENV_VARS = '_dd.ci.env_vars'
30
30
 
31
+ const PR_NUMBER = 'pr.number'
32
+
31
33
  module.exports = {
32
34
  GIT_COMMIT_SHA,
33
35
  GIT_BRANCH,
@@ -54,5 +56,6 @@ module.exports = {
54
56
  CI_STAGE_NAME,
55
57
  CI_ENV_VARS,
56
58
  CI_NODE_NAME,
57
- CI_NODE_LABELS
59
+ CI_NODE_LABELS,
60
+ PR_NUMBER
58
61
  }