dd-trace 4.18.0 → 5.6.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 (209) hide show
  1. package/CONTRIBUTING.md +98 -0
  2. package/LICENSE-3rdparty.csv +4 -5
  3. package/MIGRATING.md +15 -0
  4. package/README.md +20 -140
  5. package/ci/cypress/after-run.js +1 -0
  6. package/ci/cypress/after-spec.js +1 -0
  7. package/ci/init.js +1 -4
  8. package/ext/kinds.d.ts +1 -0
  9. package/ext/kinds.js +2 -1
  10. package/ext/tags.d.ts +2 -1
  11. package/ext/tags.js +6 -1
  12. package/index.d.ts +1523 -1460
  13. package/package.json +19 -19
  14. package/packages/datadog-core/src/storage/async_resource.js +1 -1
  15. package/packages/datadog-core/src/utils/src/get.js +11 -0
  16. package/packages/datadog-core/src/utils/src/has.js +14 -0
  17. package/packages/datadog-core/src/utils/src/kebabcase.js +16 -0
  18. package/packages/datadog-core/src/utils/src/pick.js +11 -0
  19. package/packages/datadog-core/src/utils/src/set.js +16 -0
  20. package/packages/datadog-core/src/utils/src/uniq.js +5 -0
  21. package/packages/datadog-esbuild/index.js +1 -20
  22. package/packages/datadog-instrumentations/src/aerospike.js +47 -0
  23. package/packages/datadog-instrumentations/src/amqplib.js +2 -2
  24. package/packages/datadog-instrumentations/src/apollo-server-core.js +41 -0
  25. package/packages/datadog-instrumentations/src/apollo-server.js +83 -0
  26. package/packages/datadog-instrumentations/src/child_process.js +150 -0
  27. package/packages/datadog-instrumentations/src/couchbase.js +5 -4
  28. package/packages/datadog-instrumentations/src/crypto.js +2 -1
  29. package/packages/datadog-instrumentations/src/cucumber.js +163 -46
  30. package/packages/datadog-instrumentations/src/dns.js +2 -1
  31. package/packages/datadog-instrumentations/src/express.js +20 -0
  32. package/packages/datadog-instrumentations/src/graphql.js +18 -4
  33. package/packages/datadog-instrumentations/src/grpc/client.js +56 -36
  34. package/packages/datadog-instrumentations/src/grpc/server.js +3 -1
  35. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -2
  36. package/packages/datadog-instrumentations/src/helpers/hooks.js +12 -3
  37. package/packages/datadog-instrumentations/src/helpers/instrument.js +9 -4
  38. package/packages/datadog-instrumentations/src/helpers/register.js +19 -3
  39. package/packages/datadog-instrumentations/src/http/client.js +12 -2
  40. package/packages/datadog-instrumentations/src/http/server.js +7 -4
  41. package/packages/datadog-instrumentations/src/http2/client.js +3 -1
  42. package/packages/datadog-instrumentations/src/http2/server.js +3 -1
  43. package/packages/datadog-instrumentations/src/jest.js +239 -52
  44. package/packages/datadog-instrumentations/src/kafkajs.js +27 -0
  45. package/packages/datadog-instrumentations/src/mocha.js +154 -18
  46. package/packages/datadog-instrumentations/src/mongodb-core.js +34 -3
  47. package/packages/datadog-instrumentations/src/mongoose.js +23 -10
  48. package/packages/datadog-instrumentations/src/mquery.js +65 -0
  49. package/packages/datadog-instrumentations/src/net.js +10 -2
  50. package/packages/datadog-instrumentations/src/next.js +35 -9
  51. package/packages/datadog-instrumentations/src/playwright.js +110 -16
  52. package/packages/datadog-instrumentations/src/restify.js +14 -1
  53. package/packages/datadog-instrumentations/src/rhea.js +15 -9
  54. package/packages/datadog-plugin-aerospike/src/index.js +113 -0
  55. package/packages/datadog-plugin-amqplib/src/consumer.js +14 -1
  56. package/packages/datadog-plugin-amqplib/src/producer.js +13 -1
  57. package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
  58. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +163 -27
  59. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +46 -8
  60. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +129 -22
  61. package/packages/datadog-plugin-child_process/src/index.js +91 -0
  62. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +125 -0
  63. package/packages/datadog-plugin-cucumber/src/index.js +70 -13
  64. package/packages/datadog-plugin-cypress/src/after-run.js +3 -0
  65. package/packages/datadog-plugin-cypress/src/after-spec.js +3 -0
  66. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +625 -0
  67. package/packages/datadog-plugin-cypress/src/plugin.js +6 -454
  68. package/packages/datadog-plugin-cypress/src/support.js +50 -3
  69. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +2 -0
  70. package/packages/datadog-plugin-graphql/src/index.js +1 -6
  71. package/packages/datadog-plugin-graphql/src/resolve.js +28 -18
  72. package/packages/datadog-plugin-grpc/src/client.js +16 -2
  73. package/packages/datadog-plugin-grpc/src/util.js +1 -1
  74. package/packages/datadog-plugin-http/src/client.js +19 -2
  75. package/packages/datadog-plugin-jest/src/index.js +118 -12
  76. package/packages/datadog-plugin-jest/src/util.js +38 -16
  77. package/packages/datadog-plugin-kafkajs/src/consumer.js +76 -6
  78. package/packages/datadog-plugin-kafkajs/src/producer.js +64 -8
  79. package/packages/datadog-plugin-mocha/src/index.js +87 -17
  80. package/packages/datadog-plugin-next/src/index.js +40 -14
  81. package/packages/datadog-plugin-playwright/src/index.js +71 -8
  82. package/packages/datadog-plugin-rhea/src/consumer.js +16 -1
  83. package/packages/datadog-plugin-rhea/src/producer.js +10 -0
  84. package/packages/dd-trace/src/appsec/activation.js +29 -0
  85. package/packages/dd-trace/src/appsec/addresses.js +5 -1
  86. package/packages/dd-trace/src/appsec/api_security_sampler.js +61 -0
  87. package/packages/dd-trace/src/appsec/blocked_templates.js +4 -1
  88. package/packages/dd-trace/src/appsec/blocking.js +95 -43
  89. package/packages/dd-trace/src/appsec/channels.js +7 -3
  90. package/packages/dd-trace/src/appsec/graphql.js +146 -0
  91. package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +2 -0
  92. package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +1 -1
  93. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +105 -0
  94. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +22 -17
  95. package/packages/dd-trace/src/appsec/iast/analyzers/sql-injection-analyzer.js +7 -28
  96. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +10 -6
  97. package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +19 -0
  98. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +90 -0
  99. package/packages/dd-trace/src/appsec/iast/context/kafka-ctx-plugin.js +14 -0
  100. package/packages/dd-trace/src/appsec/iast/iast-log.js +1 -1
  101. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +13 -2
  102. package/packages/dd-trace/src/appsec/iast/index.js +15 -5
  103. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +1 -1
  104. package/packages/dd-trace/src/appsec/iast/path-line.js +1 -1
  105. package/packages/dd-trace/src/appsec/iast/taint-tracking/csi-methods.js +2 -0
  106. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +10 -0
  107. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +53 -0
  108. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +10 -46
  109. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +13 -9
  110. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +47 -0
  111. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +19 -6
  112. package/packages/dd-trace/src/appsec/iast/taint-tracking/source-types.js +3 -1
  113. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +41 -3
  114. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/constants.js +7 -0
  115. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +12 -19
  116. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +20 -0
  117. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/json-sensitive-analyzer.js +6 -10
  118. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +18 -25
  119. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +79 -85
  120. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/url-sensitive-analyzer.js +27 -36
  121. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +14 -11
  122. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +1 -1
  123. package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +2 -0
  124. package/packages/dd-trace/src/appsec/index.js +49 -33
  125. package/packages/dd-trace/src/appsec/recommended.json +1763 -106
  126. package/packages/dd-trace/src/appsec/remote_config/capabilities.js +7 -1
  127. package/packages/dd-trace/src/appsec/remote_config/index.js +42 -16
  128. package/packages/dd-trace/src/appsec/remote_config/manager.js +9 -8
  129. package/packages/dd-trace/src/appsec/reporter.js +51 -34
  130. package/packages/dd-trace/src/appsec/rule_manager.js +11 -8
  131. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +1 -1
  132. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +28 -13
  133. package/packages/dd-trace/src/appsec/waf/waf_manager.js +0 -1
  134. package/packages/dd-trace/src/ci-visibility/{intelligent-test-runner/get-itr-configuration.js → early-flake-detection/get-known-tests.js} +17 -22
  135. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +25 -6
  136. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +30 -1
  137. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -0
  138. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +30 -1
  139. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +95 -37
  140. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +134 -61
  141. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +37 -4
  142. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +131 -0
  143. package/packages/dd-trace/src/ci-visibility/telemetry.js +130 -0
  144. package/packages/dd-trace/src/config.js +561 -470
  145. package/packages/dd-trace/src/data_streams_context.js +1 -1
  146. package/packages/dd-trace/src/datastreams/pathway.js +58 -1
  147. package/packages/dd-trace/src/datastreams/processor.js +196 -27
  148. package/packages/dd-trace/src/datastreams/writer.js +11 -5
  149. package/packages/dd-trace/src/dogstatsd.js +3 -5
  150. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +44 -6
  151. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +14 -0
  152. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +4 -0
  153. package/packages/dd-trace/src/exporters/common/form-data.js +4 -0
  154. package/packages/dd-trace/src/exporters/common/request.js +21 -3
  155. package/packages/dd-trace/src/format.js +30 -2
  156. package/packages/dd-trace/src/id.js +12 -0
  157. package/packages/dd-trace/src/iitm.js +1 -1
  158. package/packages/dd-trace/src/log/channels.js +1 -1
  159. package/packages/dd-trace/src/noop/proxy.js +4 -0
  160. package/packages/dd-trace/src/noop/span.js +1 -0
  161. package/packages/dd-trace/src/opentelemetry/span.js +104 -4
  162. package/packages/dd-trace/src/opentelemetry/tracer.js +9 -10
  163. package/packages/dd-trace/src/opentracing/propagation/text_map.js +16 -7
  164. package/packages/dd-trace/src/opentracing/span.js +48 -4
  165. package/packages/dd-trace/src/opentracing/span_context.js +15 -6
  166. package/packages/dd-trace/src/opentracing/tracer.js +4 -3
  167. package/packages/dd-trace/src/plugin_manager.js +1 -1
  168. package/packages/dd-trace/src/plugins/ci_plugin.js +78 -19
  169. package/packages/dd-trace/src/plugins/database.js +1 -1
  170. package/packages/dd-trace/src/plugins/index.js +7 -0
  171. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  172. package/packages/dd-trace/src/plugins/util/ci.js +6 -19
  173. package/packages/dd-trace/src/plugins/util/git.js +104 -22
  174. package/packages/dd-trace/src/plugins/util/ip_extractor.js +7 -6
  175. package/packages/dd-trace/src/plugins/util/test.js +60 -10
  176. package/packages/dd-trace/src/plugins/util/url.js +26 -0
  177. package/packages/dd-trace/src/plugins/util/user-provided-git.js +4 -16
  178. package/packages/dd-trace/src/plugins/util/web.js +1 -1
  179. package/packages/dd-trace/src/priority_sampler.js +30 -38
  180. package/packages/dd-trace/src/profiler.js +5 -3
  181. package/packages/dd-trace/src/profiling/config.js +77 -24
  182. package/packages/dd-trace/src/profiling/exporters/agent.js +77 -31
  183. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  184. package/packages/dd-trace/src/profiling/profiler.js +33 -22
  185. package/packages/dd-trace/src/profiling/profilers/events.js +270 -0
  186. package/packages/dd-trace/src/profiling/profilers/shared.js +45 -0
  187. package/packages/dd-trace/src/profiling/profilers/space.js +18 -2
  188. package/packages/dd-trace/src/profiling/profilers/wall.js +146 -70
  189. package/packages/dd-trace/src/proxy.js +56 -24
  190. package/packages/dd-trace/src/ritm.js +1 -1
  191. package/packages/dd-trace/src/sampling_rule.js +130 -0
  192. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +5 -0
  193. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
  194. package/packages/dd-trace/src/span_processor.js +9 -1
  195. package/packages/dd-trace/src/span_sampler.js +6 -64
  196. package/packages/dd-trace/src/spanleak.js +98 -0
  197. package/packages/dd-trace/src/startup-log.js +7 -1
  198. package/packages/dd-trace/src/telemetry/dependencies.js +56 -10
  199. package/packages/dd-trace/src/telemetry/index.js +182 -53
  200. package/packages/dd-trace/src/telemetry/logs/index.js +2 -2
  201. package/packages/dd-trace/src/telemetry/send-data.js +65 -7
  202. package/packages/dd-trace/src/tracer.js +12 -5
  203. package/register.js +4 -0
  204. package/scripts/install_plugin_modules.js +11 -3
  205. package/scripts/st.js +105 -0
  206. package/packages/datadog-instrumentations/src/child-process.js +0 -30
  207. package/packages/dd-trace/src/plugins/util/exec.js +0 -13
  208. package/packages/diagnostics_channel/index.js +0 -3
  209. package/packages/diagnostics_channel/src/index.js +0 -121
@@ -0,0 +1,131 @@
1
+ const request = require('../../exporters/common/request')
2
+ const id = require('../../id')
3
+ const log = require('../../log')
4
+ const {
5
+ incrementCountMetric,
6
+ distributionMetric,
7
+ TELEMETRY_GIT_REQUESTS_SETTINGS,
8
+ TELEMETRY_GIT_REQUESTS_SETTINGS_MS,
9
+ TELEMETRY_GIT_REQUESTS_SETTINGS_ERRORS,
10
+ TELEMETRY_GIT_REQUESTS_SETTINGS_RESPONSE,
11
+ getErrorTypeFromStatusCode
12
+ } = require('../telemetry')
13
+
14
+ const DEFAULT_EARLY_FLAKE_DETECTION_NUM_RETRIES = 2
15
+
16
+ function getLibraryConfiguration ({
17
+ url,
18
+ isEvpProxy,
19
+ evpProxyPrefix,
20
+ env,
21
+ service,
22
+ repositoryUrl,
23
+ sha,
24
+ osVersion,
25
+ osPlatform,
26
+ osArchitecture,
27
+ runtimeName,
28
+ runtimeVersion,
29
+ branch,
30
+ testLevel = 'suite',
31
+ custom
32
+ }, done) {
33
+ const options = {
34
+ path: '/api/v2/libraries/tests/services/setting',
35
+ method: 'POST',
36
+ headers: {
37
+ 'Content-Type': 'application/json'
38
+ },
39
+ url,
40
+ timeout: 20000
41
+ }
42
+
43
+ if (isEvpProxy) {
44
+ options.path = `${evpProxyPrefix}/api/v2/libraries/tests/services/setting`
45
+ options.headers['X-Datadog-EVP-Subdomain'] = 'api'
46
+ } else {
47
+ const apiKey = process.env.DATADOG_API_KEY || process.env.DD_API_KEY
48
+ if (!apiKey) {
49
+ return done(new Error('Request to settings endpoint was not done because Datadog API key is not defined.'))
50
+ }
51
+ options.headers['dd-api-key'] = apiKey
52
+ }
53
+
54
+ const data = JSON.stringify({
55
+ data: {
56
+ id: id().toString(10),
57
+ type: 'ci_app_test_service_libraries_settings',
58
+ attributes: {
59
+ test_level: testLevel,
60
+ configurations: {
61
+ 'os.platform': osPlatform,
62
+ 'os.version': osVersion,
63
+ 'os.architecture': osArchitecture,
64
+ 'runtime.name': runtimeName,
65
+ 'runtime.version': runtimeVersion,
66
+ custom
67
+ },
68
+ service,
69
+ env,
70
+ repository_url: repositoryUrl,
71
+ sha,
72
+ branch
73
+ }
74
+ }
75
+ })
76
+
77
+ incrementCountMetric(TELEMETRY_GIT_REQUESTS_SETTINGS)
78
+
79
+ const startTime = Date.now()
80
+ request(data, options, (err, res, statusCode) => {
81
+ distributionMetric(TELEMETRY_GIT_REQUESTS_SETTINGS_MS, {}, Date.now() - startTime)
82
+ if (err) {
83
+ const errorType = getErrorTypeFromStatusCode(statusCode)
84
+ incrementCountMetric(TELEMETRY_GIT_REQUESTS_SETTINGS_ERRORS, { errorType })
85
+ done(err)
86
+ } else {
87
+ try {
88
+ const {
89
+ data: {
90
+ attributes: {
91
+ code_coverage: isCodeCoverageEnabled,
92
+ tests_skipping: isSuitesSkippingEnabled,
93
+ itr_enabled: isItrEnabled,
94
+ require_git: requireGit,
95
+ early_flake_detection: earlyFlakeDetectionConfig
96
+ }
97
+ }
98
+ } = JSON.parse(res)
99
+
100
+ const settings = {
101
+ isCodeCoverageEnabled,
102
+ isSuitesSkippingEnabled,
103
+ isItrEnabled,
104
+ requireGit,
105
+ isEarlyFlakeDetectionEnabled: earlyFlakeDetectionConfig?.enabled ?? false,
106
+ earlyFlakeDetectionNumRetries:
107
+ earlyFlakeDetectionConfig?.slow_test_retries?.['5s'] || DEFAULT_EARLY_FLAKE_DETECTION_NUM_RETRIES
108
+ }
109
+
110
+ log.debug(() => `Remote settings: ${JSON.stringify(settings)}`)
111
+
112
+ if (process.env.DD_CIVISIBILITY_DANGEROUSLY_FORCE_COVERAGE) {
113
+ settings.isCodeCoverageEnabled = true
114
+ log.debug(() => 'Dangerously set code coverage to true')
115
+ }
116
+ if (process.env.DD_CIVISIBILITY_DANGEROUSLY_FORCE_TEST_SKIPPING) {
117
+ settings.isSuitesSkippingEnabled = true
118
+ log.debug(() => 'Dangerously set test skipping to true')
119
+ }
120
+
121
+ incrementCountMetric(TELEMETRY_GIT_REQUESTS_SETTINGS_RESPONSE, settings)
122
+
123
+ done(null, settings)
124
+ } catch (err) {
125
+ done(err)
126
+ }
127
+ }
128
+ })
129
+ }
130
+
131
+ module.exports = { getLibraryConfiguration }
@@ -0,0 +1,130 @@
1
+ const telemetryMetrics = require('../telemetry/metrics')
2
+
3
+ const ciVisibilityMetrics = telemetryMetrics.manager.namespace('civisibility')
4
+
5
+ const formattedTags = {
6
+ testLevel: 'event_type',
7
+ testFramework: 'test_framework',
8
+ errorType: 'error_type',
9
+ exitCode: 'exit_code',
10
+ isCodeCoverageEnabled: 'coverage_enabled',
11
+ isSuitesSkippingEnabled: 'itrskip_enabled',
12
+ hasCodeOwners: 'has_code_owners',
13
+ isUnsupportedCIProvider: 'is_unsupported_ci'
14
+ }
15
+
16
+ // Transform tags dictionary to array of strings.
17
+ // If tag value is true, then only tag key is added to the array.
18
+ function formatMetricTags (tagsDictionary) {
19
+ return Object.keys(tagsDictionary).reduce((acc, tagKey) => {
20
+ const formattedTagKey = formattedTags[tagKey] || tagKey
21
+ if (tagsDictionary[tagKey] === true) {
22
+ acc.push(formattedTagKey)
23
+ } else if (tagsDictionary[tagKey] !== undefined && tagsDictionary[tagKey] !== null) {
24
+ acc.push(`${formattedTagKey}:${tagsDictionary[tagKey]}`)
25
+ }
26
+ return acc
27
+ }, [])
28
+ }
29
+
30
+ function incrementCountMetric (name, tags = {}, value = 1) {
31
+ ciVisibilityMetrics.count(name, formatMetricTags(tags)).inc(value)
32
+ }
33
+
34
+ function distributionMetric (name, tags, measure) {
35
+ ciVisibilityMetrics.distribution(name, formatMetricTags(tags)).track(measure)
36
+ }
37
+
38
+ // CI Visibility telemetry events
39
+ const TELEMETRY_EVENT_CREATED = 'event_created'
40
+ const TELEMETRY_EVENT_FINISHED = 'event_finished'
41
+ const TELEMETRY_CODE_COVERAGE_STARTED = 'code_coverage_started'
42
+ const TELEMETRY_CODE_COVERAGE_FINISHED = 'code_coverage_finished'
43
+ const TELEMETRY_ITR_SKIPPED = 'itr_skipped'
44
+ const TELEMETRY_ITR_UNSKIPPABLE = 'itr_unskippable'
45
+ const TELEMETRY_ITR_FORCED_TO_RUN = 'itr_forced_run'
46
+ const TELEMETRY_CODE_COVERAGE_EMPTY = 'code_coverage.is_empty'
47
+ const TELEMETRY_CODE_COVERAGE_NUM_FILES = 'code_coverage.files'
48
+ const TELEMETRY_EVENTS_ENQUEUED_FOR_SERIALIZATION = 'events_enqueued_for_serialization'
49
+ const TELEMETRY_ENDPOINT_PAYLOAD_SERIALIZATION_MS = 'endpoint_payload.events_serialization_ms'
50
+ const TELEMETRY_ENDPOINT_PAYLOAD_REQUESTS = 'endpoint_payload.requests'
51
+ const TELEMETRY_ENDPOINT_PAYLOAD_BYTES = 'endpoint_payload.bytes'
52
+ const TELEMETRY_ENDPOINT_PAYLOAD_EVENTS_COUNT = 'endpoint_payload.events_count'
53
+ const TELEMETRY_ENDPOINT_PAYLOAD_REQUESTS_MS = 'endpoint_payload.requests_ms'
54
+ const TELEMETRY_ENDPOINT_PAYLOAD_REQUESTS_ERRORS = 'endpoint_payload.requests_errors'
55
+ const TELEMETRY_ENDPOINT_PAYLOAD_DROPPED = 'endpoint_payload.dropped'
56
+ const TELEMETRY_GIT_COMMAND = 'git.command'
57
+ const TELEMETRY_GIT_COMMAND_MS = 'git.command_ms'
58
+ const TELEMETRY_GIT_COMMAND_ERRORS = 'git.command_errors'
59
+ const TELEMETRY_GIT_REQUESTS_SEARCH_COMMITS = 'git_requests.search_commits'
60
+ const TELEMETRY_GIT_REQUESTS_SEARCH_COMMITS_MS = 'git_requests.search_commits_ms'
61
+ const TELEMETRY_GIT_REQUESTS_SEARCH_COMMITS_ERRORS = 'git_requests.search_commits_errors'
62
+ const TELEMETRY_GIT_REQUESTS_OBJECT_PACKFILES = 'git_requests.objects_pack'
63
+ const TELEMETRY_GIT_REQUESTS_OBJECT_PACKFILES_MS = 'git_requests.objects_pack_ms'
64
+ const TELEMETRY_GIT_REQUESTS_OBJECT_PACKFILES_ERRORS = 'git_requests.objects_pack_errors'
65
+ const TELEMETRY_GIT_REQUESTS_OBJECT_PACKFILES_NUM = 'git_requests.objects_pack_files'
66
+ const TELEMETRY_GIT_REQUESTS_OBJECT_PACKFILES_BYTES = 'git_requests.objects_pack_bytes'
67
+ const TELEMETRY_GIT_REQUESTS_SETTINGS = 'git_requests.settings'
68
+ const TELEMETRY_GIT_REQUESTS_SETTINGS_MS = 'git_requests.settings_ms'
69
+ const TELEMETRY_GIT_REQUESTS_SETTINGS_ERRORS = 'git_requests.settings_errors'
70
+ const TELEMETRY_GIT_REQUESTS_SETTINGS_RESPONSE = 'git_requests.settings_response'
71
+ const TELEMETRY_ITR_SKIPPABLE_TESTS = 'itr_skippable_tests.request'
72
+ const TELEMETRY_ITR_SKIPPABLE_TESTS_MS = 'itr_skippable_tests.request_ms'
73
+ const TELEMETRY_ITR_SKIPPABLE_TESTS_ERRORS = 'itr_skippable_tests.request_errors'
74
+ const TELEMETRY_ITR_SKIPPABLE_TESTS_RESPONSE_SUITES = 'itr_skippable_tests.response_suites'
75
+ const TELEMETRY_ITR_SKIPPABLE_TESTS_RESPONSE_TESTS = 'itr_skippable_tests.response_tests'
76
+ const TELEMETRY_ITR_SKIPPABLE_TESTS_RESPONSE_BYTES = 'itr_skippable_tests.response_bytes'
77
+
78
+ function getErrorTypeFromStatusCode (statusCode) {
79
+ if (statusCode >= 400 && statusCode < 500) {
80
+ return 'status_code_4xx_response'
81
+ }
82
+ if (statusCode >= 500) {
83
+ return 'status_code_5xx_response'
84
+ }
85
+ return 'network'
86
+ }
87
+
88
+ module.exports = {
89
+ incrementCountMetric,
90
+ distributionMetric,
91
+ TELEMETRY_EVENT_CREATED,
92
+ TELEMETRY_EVENT_FINISHED,
93
+ TELEMETRY_CODE_COVERAGE_STARTED,
94
+ TELEMETRY_CODE_COVERAGE_FINISHED,
95
+ TELEMETRY_ITR_SKIPPED,
96
+ TELEMETRY_ITR_UNSKIPPABLE,
97
+ TELEMETRY_ITR_FORCED_TO_RUN,
98
+ TELEMETRY_CODE_COVERAGE_EMPTY,
99
+ TELEMETRY_CODE_COVERAGE_NUM_FILES,
100
+ TELEMETRY_EVENTS_ENQUEUED_FOR_SERIALIZATION,
101
+ TELEMETRY_ENDPOINT_PAYLOAD_SERIALIZATION_MS,
102
+ TELEMETRY_ENDPOINT_PAYLOAD_REQUESTS,
103
+ TELEMETRY_ENDPOINT_PAYLOAD_BYTES,
104
+ TELEMETRY_ENDPOINT_PAYLOAD_EVENTS_COUNT,
105
+ TELEMETRY_ENDPOINT_PAYLOAD_REQUESTS_MS,
106
+ TELEMETRY_ENDPOINT_PAYLOAD_REQUESTS_ERRORS,
107
+ TELEMETRY_ENDPOINT_PAYLOAD_DROPPED,
108
+ TELEMETRY_GIT_COMMAND,
109
+ TELEMETRY_GIT_COMMAND_MS,
110
+ TELEMETRY_GIT_COMMAND_ERRORS,
111
+ TELEMETRY_GIT_REQUESTS_SEARCH_COMMITS,
112
+ TELEMETRY_GIT_REQUESTS_SEARCH_COMMITS_MS,
113
+ TELEMETRY_GIT_REQUESTS_SEARCH_COMMITS_ERRORS,
114
+ TELEMETRY_GIT_REQUESTS_OBJECT_PACKFILES_NUM,
115
+ TELEMETRY_GIT_REQUESTS_OBJECT_PACKFILES_BYTES,
116
+ TELEMETRY_GIT_REQUESTS_OBJECT_PACKFILES,
117
+ TELEMETRY_GIT_REQUESTS_OBJECT_PACKFILES_MS,
118
+ TELEMETRY_GIT_REQUESTS_OBJECT_PACKFILES_ERRORS,
119
+ TELEMETRY_GIT_REQUESTS_SETTINGS,
120
+ TELEMETRY_GIT_REQUESTS_SETTINGS_MS,
121
+ TELEMETRY_GIT_REQUESTS_SETTINGS_ERRORS,
122
+ TELEMETRY_GIT_REQUESTS_SETTINGS_RESPONSE,
123
+ TELEMETRY_ITR_SKIPPABLE_TESTS,
124
+ TELEMETRY_ITR_SKIPPABLE_TESTS_MS,
125
+ TELEMETRY_ITR_SKIPPABLE_TESTS_ERRORS,
126
+ TELEMETRY_ITR_SKIPPABLE_TESTS_RESPONSE_SUITES,
127
+ TELEMETRY_ITR_SKIPPABLE_TESTS_RESPONSE_TESTS,
128
+ TELEMETRY_ITR_SKIPPABLE_TESTS_RESPONSE_BYTES,
129
+ getErrorTypeFromStatusCode
130
+ }