dd-trace 3.28.0 → 3.29.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 (46) hide show
  1. package/README.md +2 -2
  2. package/package.json +3 -3
  3. package/packages/datadog-core/src/storage/async_resource.js +4 -0
  4. package/packages/datadog-instrumentations/src/couchbase.js +4 -4
  5. package/packages/datadog-instrumentations/src/jest.js +6 -4
  6. package/packages/datadog-plugin-graphql/src/execute.js +6 -4
  7. package/packages/datadog-plugin-jest/src/index.js +8 -3
  8. package/packages/datadog-plugin-openai/src/index.js +39 -16
  9. package/packages/datadog-plugin-openai/src/services.js +13 -9
  10. package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +3 -1
  11. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +45 -0
  12. package/packages/dd-trace/src/appsec/iast/analyzers/index.js +3 -3
  13. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +66 -0
  14. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +25 -8
  15. package/packages/dd-trace/src/appsec/iast/analyzers/xcontenttype-header-missing-analyzer.js +19 -0
  16. package/packages/dd-trace/src/appsec/iast/index.js +5 -2
  17. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +4 -2
  18. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +17 -1
  19. package/packages/dd-trace/src/appsec/iast/taint-tracking/source-types.js +1 -0
  20. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +5 -1
  21. package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +3 -1
  22. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +1 -1
  23. package/packages/dd-trace/src/config.js +26 -10
  24. package/packages/dd-trace/src/external-logger/src/index.js +9 -1
  25. package/packages/dd-trace/src/external-logger/test/index.spec.js +1 -1
  26. package/packages/dd-trace/src/format.js +1 -1
  27. package/packages/dd-trace/src/lambda/handler.js +8 -1
  28. package/packages/dd-trace/src/opentelemetry/span.js +3 -1
  29. package/packages/dd-trace/src/opentracing/span_context.js +2 -1
  30. package/packages/dd-trace/src/plugins/util/ci.js +2 -1
  31. package/packages/dd-trace/src/plugins/util/web.js +1 -0
  32. package/packages/dd-trace/src/profiling/config.js +8 -5
  33. package/packages/dd-trace/src/profiling/exporters/agent.js +4 -1
  34. package/packages/dd-trace/src/profiling/profiler.js +1 -1
  35. package/packages/dd-trace/src/profiling/profilers/wall.js +144 -4
  36. package/packages/dd-trace/src/service-naming/index.js +2 -2
  37. package/packages/dd-trace/src/service-naming/schemas/v0/graphql.js +12 -0
  38. package/packages/dd-trace/src/service-naming/schemas/v0/index.js +2 -1
  39. package/packages/dd-trace/src/service-naming/schemas/v1/graphql.js +12 -0
  40. package/packages/dd-trace/src/service-naming/schemas/v1/index.js +2 -1
  41. package/packages/dd-trace/src/span_processor.js +0 -4
  42. package/packages/dd-trace/src/span_sampler.js +1 -1
  43. package/packages/dd-trace/src/telemetry/dependencies.js +24 -12
  44. package/packages/dd-trace/src/telemetry/metrics.js +11 -1
  45. package/scripts/install_plugin_modules.js +1 -0
  46. package/scripts/version.js +0 -66
@@ -7,8 +7,10 @@ const { sendData } = require('./send-data')
7
7
  const dc = require('../../../diagnostics_channel')
8
8
  const { fileURLToPath } = require('url')
9
9
 
10
- const savedDependencies = new Set()
11
- const detectedDependencyNames = new Set()
10
+ const savedDependenciesToSend = new Set()
11
+ const detectedDependencyKeys = new Set()
12
+ const detectedDependencyVersions = new Set()
13
+
12
14
  const FILE_URI_START = `file://`
13
15
  const moduleLoadStartChannel = dc.channel('dd-trace:moduleLoadStart')
14
16
 
@@ -18,14 +20,14 @@ function waitAndSend (config, application, host) {
18
20
  if (!immediate) {
19
21
  immediate = setImmediate(() => {
20
22
  immediate = null
21
- if (savedDependencies.size > 0) {
22
- const dependencies = Array.from(savedDependencies.values()).splice(0, 1000).map(pair => {
23
- savedDependencies.delete(pair)
23
+ if (savedDependenciesToSend.size > 0) {
24
+ const dependencies = Array.from(savedDependenciesToSend.values()).splice(0, 1000).map(pair => {
25
+ savedDependenciesToSend.delete(pair)
24
26
  const [name, version] = pair.split(' ')
25
27
  return { name, version }
26
28
  })
27
29
  sendData(config, application, host, 'app-dependencies-loaded', { dependencies })
28
- if (savedDependencies.size > 0) {
30
+ if (savedDependenciesToSend.size > 0) {
29
31
  waitAndSend(config, application, host)
30
32
  }
31
33
  }
@@ -46,15 +48,24 @@ function onModuleLoad (data) {
46
48
  }
47
49
  const parseResult = filename && parse(filename)
48
50
  const request = data.request || (parseResult && parseResult.name)
49
- if (filename && request && isDependency(filename, request) && !detectedDependencyNames.has(request)) {
50
- detectedDependencyNames.add(request)
51
+ const dependencyKey = parseResult && parseResult.basedir ? parseResult.basedir : request
52
+
53
+ if (filename && request && isDependency(filename, request) && !detectedDependencyKeys.has(dependencyKey)) {
54
+ detectedDependencyKeys.add(dependencyKey)
55
+
51
56
  if (parseResult) {
52
57
  const { name, basedir } = parseResult
53
58
  if (basedir) {
54
59
  try {
55
60
  const { version } = requirePackageJson(basedir, module)
56
- savedDependencies.add(`${name} ${version}`)
57
- waitAndSend(config, application, host)
61
+ const dependencyAndVersion = `${name} ${version}`
62
+
63
+ if (!detectedDependencyVersions.has(dependencyAndVersion)) {
64
+ savedDependenciesToSend.add(dependencyAndVersion)
65
+ detectedDependencyVersions.add(dependencyAndVersion)
66
+
67
+ waitAndSend(config, application, host)
68
+ }
58
69
  } catch (e) {
59
70
  // can not read the package.json, do nothing
60
71
  }
@@ -88,8 +99,9 @@ function stop () {
88
99
  config = null
89
100
  application = null
90
101
  host = null
91
- detectedDependencyNames.clear()
92
- savedDependencies.clear()
102
+ detectedDependencyKeys.clear()
103
+ savedDependenciesToSend.clear()
104
+ detectedDependencyVersions.clear()
93
105
  if (moduleLoadStartChannel.hasSubscribers) {
94
106
  moduleLoadStartChannel.unsubscribe(onModuleLoad)
95
107
  }
@@ -25,6 +25,10 @@ function mapToJsonArray (map) {
25
25
  return Array.from(map.values()).map(v => v.toJSON())
26
26
  }
27
27
 
28
+ function hasPoints (metric) {
29
+ return metric.points.length > 0
30
+ }
31
+
28
32
  class Metric {
29
33
  constructor (namespace, metric, common, tags) {
30
34
  this.namespace = namespace.toString()
@@ -172,10 +176,16 @@ class MetricsCollection extends Map {
172
176
 
173
177
  toJSON () {
174
178
  if (!this.size) return
179
+
180
+ const series = mapToJsonArray(this)
181
+ .filter(hasPoints)
182
+
183
+ if (!series.length) return
184
+
175
185
  const { namespace } = this
176
186
  return {
177
187
  namespace,
178
- series: mapToJsonArray(this)
188
+ series
179
189
  }
180
190
  }
181
191
  }
@@ -12,6 +12,7 @@ const externals = require('../packages/dd-trace/test/plugins/externals')
12
12
 
13
13
  const requirePackageJsonPath = require.resolve('../packages/dd-trace/src/require-package-json')
14
14
 
15
+ // Can remove couchbase after removing support for couchbase <= 3.2.0
15
16
  const excludeList = os.arch() === 'arm64' ? ['couchbase', 'grpc', 'oracledb'] : []
16
17
  const workspaces = new Set()
17
18
  const versionLists = {}
@@ -1,66 +0,0 @@
1
- 'use strict'
2
-
3
- const path = require('path')
4
- const fs = require('fs')
5
- const semver = require('semver')
6
- const exec = require('./helpers/exec')
7
- const title = require('./helpers/title')
8
-
9
- const pkg = require('../package.json')
10
- const increment = getIncrement()
11
- const version = semver.inc(pkg.version, increment, 'pre')
12
-
13
- title(`Bumping version to v${version}.`)
14
-
15
- const currentBranch = exec.pipe(`git branch --show-current`)
16
-
17
- if (currentBranch === 'master') {
18
- const major = semver.major(pkg.version)
19
- const nextMajor = semver.major(pkg.version) + 1
20
-
21
- exec(`git checkout -b v${major}.x`)
22
- exec(`git push -u origin HEAD`)
23
-
24
- bump(`${nextMajor}.0.0-pre`)
25
-
26
- exec(`git checkout v${major}.x`)
27
- }
28
-
29
- bump(version)
30
-
31
- exec(`git checkout ${currentBranch}`)
32
-
33
- function bump (newVersion) {
34
- pkg.version = newVersion
35
-
36
- exec(`git checkout -b v${newVersion}-bump`)
37
- write('package.json', JSON.stringify(pkg, null, 2) + '\n')
38
- write('packages/dd-trace/lib/version.js', `module.exports = '${newVersion}'\n`)
39
- add('package.json')
40
- add('packages/dd-trace/lib/version.js')
41
- exec(`git commit -m "v${newVersion}"`)
42
- exec(`git push -u origin HEAD`)
43
- }
44
-
45
- function getIncrement () {
46
- const increments = ['major', 'premajor', 'minor', 'preminor', 'patch', 'prepatch', 'prerelease']
47
- const index = increments.indexOf(process.argv[2])
48
-
49
- if (index === -1) {
50
- throw new Error(`increment must be one of ${increments.join(', ')}`)
51
- }
52
-
53
- return increments[index]
54
- }
55
-
56
- function filename (relativePath) {
57
- return path.normalize(path.join(__dirname, '..', relativePath))
58
- }
59
-
60
- function write (file, data) {
61
- fs.writeFileSync(filename(file), data)
62
- }
63
-
64
- function add (file) {
65
- exec(`git add ${filename(file)}`)
66
- }