dd-trace 5.79.0 → 5.81.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 (242) hide show
  1. package/LICENSE-3rdparty.csv +79 -87
  2. package/ext/tags.d.ts +1 -0
  3. package/ext/tags.js +1 -0
  4. package/index.d.ts +46 -39
  5. package/initialize.mjs +10 -10
  6. package/loader-hook.mjs +10 -3
  7. package/package.json +23 -40
  8. package/packages/datadog-core/src/storage.js +4 -4
  9. package/packages/datadog-esbuild/index.js +36 -19
  10. package/packages/datadog-esbuild/src/utils.js +5 -1
  11. package/packages/datadog-instrumentations/index.js +1 -0
  12. package/packages/datadog-instrumentations/src/anthropic.js +12 -0
  13. package/packages/datadog-instrumentations/src/aws-sdk.js +13 -2
  14. package/packages/datadog-instrumentations/src/azure-service-bus.js +43 -36
  15. package/packages/datadog-instrumentations/src/cucumber.js +2 -2
  16. package/packages/datadog-instrumentations/src/find-my-way.js +6 -5
  17. package/packages/datadog-instrumentations/src/google-genai.js +120 -0
  18. package/packages/datadog-instrumentations/src/graphql.js +20 -0
  19. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -0
  20. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
  21. package/packages/datadog-instrumentations/src/helpers/instrument.js +12 -1
  22. package/packages/datadog-instrumentations/src/helpers/register.js +6 -1
  23. package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +27 -0
  24. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +152 -0
  25. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +5 -0
  26. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/langchain.js +237 -0
  27. package/packages/datadog-instrumentations/src/helpers/rewriter/loader.js +9 -0
  28. package/packages/datadog-instrumentations/src/helpers/rewriter/loader.mjs +11 -0
  29. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +139 -0
  30. package/packages/datadog-instrumentations/src/jest.js +1 -1
  31. package/packages/datadog-instrumentations/src/langchain.js +3 -109
  32. package/packages/datadog-instrumentations/src/mocha/main.js +1 -1
  33. package/packages/datadog-instrumentations/src/mysql2.js +1 -1
  34. package/packages/datadog-instrumentations/src/playwright.js +65 -16
  35. package/packages/datadog-instrumentations/src/router.js +1 -1
  36. package/packages/datadog-instrumentations/src/selenium.js +3 -1
  37. package/packages/datadog-instrumentations/src/ws.js +35 -17
  38. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +3 -2
  39. package/packages/datadog-plugin-azure-service-bus/src/producer.js +14 -5
  40. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +1 -1
  41. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +23 -2
  42. package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
  43. package/packages/datadog-plugin-cypress/src/support.js +73 -31
  44. package/packages/datadog-plugin-google-genai/src/index.js +17 -0
  45. package/packages/datadog-plugin-google-genai/src/tracing.js +41 -0
  46. package/packages/datadog-plugin-graphql/src/tools/transforms.js +5 -4
  47. package/packages/datadog-plugin-jest/src/util.js +4 -3
  48. package/packages/datadog-plugin-kafkajs/src/consumer.js +2 -1
  49. package/packages/datadog-plugin-kafkajs/src/producer.js +3 -1
  50. package/packages/datadog-plugin-langchain/src/tracing.js +7 -3
  51. package/packages/datadog-plugin-next/src/index.js +11 -3
  52. package/packages/datadog-plugin-openai/src/stream-helpers.js +1 -1
  53. package/packages/datadog-shimmer/src/shimmer.js +2 -2
  54. package/packages/dd-trace/src/aiguard/sdk.js +29 -14
  55. package/packages/dd-trace/src/appsec/api_security_sampler.js +1 -1
  56. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +1 -1
  57. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  58. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +1 -2
  59. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +1 -1
  60. package/packages/dd-trace/src/appsec/reporter.js +0 -4
  61. package/packages/dd-trace/src/baggage.js +11 -0
  62. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +4 -8
  63. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +1 -1
  64. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +4 -2
  65. package/packages/dd-trace/src/config.js +81 -7
  66. package/packages/dd-trace/src/config_defaults.js +15 -2
  67. package/packages/dd-trace/src/datastreams/encoding.js +23 -6
  68. package/packages/dd-trace/src/datastreams/pathway.js +40 -1
  69. package/packages/dd-trace/src/datastreams/processor.js +1 -1
  70. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
  71. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +15 -5
  72. package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
  73. package/packages/dd-trace/src/debugger/devtools_client/config.js +2 -0
  74. package/packages/dd-trace/src/debugger/devtools_client/index.js +30 -15
  75. package/packages/dd-trace/src/debugger/devtools_client/inspector_promises_polyfill.js +2 -0
  76. package/packages/dd-trace/src/debugger/devtools_client/json-buffer.js +24 -18
  77. package/packages/dd-trace/src/debugger/devtools_client/send.js +18 -8
  78. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +103 -15
  79. package/packages/dd-trace/src/debugger/devtools_client/snapshot/constants.js +25 -0
  80. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +56 -25
  81. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +64 -23
  82. package/packages/dd-trace/src/debugger/devtools_client/snapshot/symbols.js +3 -1
  83. package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +404 -0
  84. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +1 -1
  85. package/packages/dd-trace/src/debugger/devtools_client/state.js +7 -2
  86. package/packages/dd-trace/src/debugger/devtools_client/status.js +1 -1
  87. package/packages/dd-trace/src/debugger/index.js +1 -1
  88. package/packages/dd-trace/src/encode/0.4.js +3 -3
  89. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +2 -2
  90. package/packages/dd-trace/src/encode/span-stats.js +7 -1
  91. package/packages/dd-trace/src/exporters/agent/writer.js +6 -13
  92. package/packages/dd-trace/src/histogram.js +1 -1
  93. package/packages/dd-trace/src/id.js +60 -0
  94. package/packages/dd-trace/src/lambda/runtime/ritm.js +2 -3
  95. package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
  96. package/packages/dd-trace/src/llmobs/index.js +5 -5
  97. package/packages/dd-trace/src/llmobs/noop.js +6 -0
  98. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +1 -0
  99. package/packages/dd-trace/src/llmobs/plugins/genai/index.js +104 -0
  100. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +486 -0
  101. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +2 -2
  102. package/packages/dd-trace/src/llmobs/plugins/{openai.js → openai/index.js} +87 -39
  103. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +114 -0
  104. package/packages/dd-trace/src/llmobs/sdk.js +10 -1
  105. package/packages/dd-trace/src/llmobs/span_processor.js +11 -6
  106. package/packages/dd-trace/src/llmobs/tagger.js +35 -17
  107. package/packages/dd-trace/src/msgpack/chunk.js +2 -2
  108. package/packages/dd-trace/src/msgpack/encoder.js +2 -3
  109. package/packages/dd-trace/src/msgpack/index.js +2 -2
  110. package/packages/dd-trace/src/openfeature/flagging_provider.js +5 -3
  111. package/packages/dd-trace/src/opentelemetry/logs/index.js +3 -3
  112. package/packages/dd-trace/src/opentelemetry/logs/logger.js +14 -8
  113. package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +6 -4
  114. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +9 -17
  115. package/packages/dd-trace/src/opentelemetry/metrics/constants.js +34 -0
  116. package/packages/dd-trace/src/opentelemetry/metrics/index.js +81 -0
  117. package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +225 -0
  118. package/packages/dd-trace/src/opentelemetry/metrics/meter.js +171 -0
  119. package/packages/dd-trace/src/opentelemetry/metrics/meter_provider.js +54 -0
  120. package/packages/dd-trace/src/opentelemetry/metrics/otlp_http_metric_exporter.js +62 -0
  121. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +251 -0
  122. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +532 -0
  123. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +10 -18
  124. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +36 -22
  125. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +2 -2
  126. package/packages/dd-trace/src/opentelemetry/span.js +1 -1
  127. package/packages/dd-trace/src/opentelemetry/tracer.js +1 -1
  128. package/packages/dd-trace/src/opentelemetry/tracer_provider.js +1 -1
  129. package/packages/dd-trace/src/payload-tagging/index.js +2 -2
  130. package/packages/dd-trace/src/plugin_manager.js +4 -2
  131. package/packages/dd-trace/src/plugins/database.js +1 -0
  132. package/packages/dd-trace/src/plugins/index.js +1 -0
  133. package/packages/dd-trace/src/plugins/plugin.js +7 -9
  134. package/packages/dd-trace/src/plugins/util/test.js +3 -3
  135. package/packages/dd-trace/src/plugins/util/url.js +119 -1
  136. package/packages/dd-trace/src/plugins/util/web.js +10 -41
  137. package/packages/dd-trace/src/process-tags/index.js +81 -0
  138. package/packages/dd-trace/src/profiling/config.js +1 -1
  139. package/packages/dd-trace/src/profiling/exporter_cli.js +7 -6
  140. package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
  141. package/packages/dd-trace/src/profiling/profilers/events.js +10 -1
  142. package/packages/dd-trace/src/proxy.js +5 -0
  143. package/packages/dd-trace/src/rate_limiter.js +1 -1
  144. package/packages/dd-trace/src/remote_config/manager.js +1 -1
  145. package/packages/dd-trace/src/require-package-json.js +1 -1
  146. package/packages/dd-trace/src/ritm.js +1 -1
  147. package/packages/dd-trace/src/service-naming/index.js +31 -4
  148. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +4 -0
  149. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +4 -0
  150. package/packages/dd-trace/src/{format.js → span_format.js} +9 -4
  151. package/packages/dd-trace/src/span_processor.js +16 -11
  152. package/packages/dd-trace/src/span_stats.js +15 -4
  153. package/packages/dd-trace/src/spanleak.js +1 -1
  154. package/packages/dd-trace/src/supported-configurations.json +13 -0
  155. package/packages/dd-trace/src/telemetry/dependencies.js +1 -1
  156. package/packages/dd-trace/src/telemetry/telemetry.js +11 -2
  157. package/vendor/dist/@datadog/sketches-js/LICENSE +39 -0
  158. package/vendor/dist/@datadog/sketches-js/index.js +1 -0
  159. package/vendor/dist/@datadog/source-map/LICENSE +28 -0
  160. package/vendor/dist/@datadog/source-map/index.js +1 -0
  161. package/vendor/dist/@isaacs/ttlcache/LICENSE +55 -0
  162. package/vendor/dist/@isaacs/ttlcache/index.js +1 -0
  163. package/vendor/dist/@opentelemetry/core/LICENSE +201 -0
  164. package/vendor/dist/@opentelemetry/core/index.js +1 -0
  165. package/vendor/dist/@opentelemetry/resources/LICENSE +201 -0
  166. package/vendor/dist/@opentelemetry/resources/index.js +1 -0
  167. package/vendor/dist/astring/LICENSE +19 -0
  168. package/vendor/dist/astring/index.js +1 -0
  169. package/vendor/dist/crypto-randomuuid/index.js +1 -0
  170. package/vendor/dist/escape-string-regexp/LICENSE +9 -0
  171. package/vendor/dist/escape-string-regexp/index.js +1 -0
  172. package/vendor/dist/esquery/LICENSE +24 -0
  173. package/vendor/dist/esquery/index.js +1 -0
  174. package/vendor/dist/ignore/LICENSE +21 -0
  175. package/vendor/dist/ignore/index.js +1 -0
  176. package/vendor/dist/istanbul-lib-coverage/LICENSE +24 -0
  177. package/vendor/dist/istanbul-lib-coverage/index.js +1 -0
  178. package/vendor/dist/jest-docblock/LICENSE +21 -0
  179. package/vendor/dist/jest-docblock/index.js +1 -0
  180. package/vendor/dist/jsonpath-plus/LICENSE +22 -0
  181. package/vendor/dist/jsonpath-plus/index.js +1 -0
  182. package/vendor/dist/limiter/LICENSE +19 -0
  183. package/vendor/dist/limiter/index.js +1 -0
  184. package/vendor/dist/lodash.sortby/LICENSE +47 -0
  185. package/vendor/dist/lodash.sortby/index.js +1 -0
  186. package/vendor/dist/lru-cache/LICENSE +15 -0
  187. package/vendor/dist/lru-cache/index.js +1 -0
  188. package/vendor/dist/meriyah/LICENSE +7 -0
  189. package/vendor/dist/meriyah/index.js +1 -0
  190. package/vendor/dist/module-details-from-path/LICENSE +21 -0
  191. package/vendor/dist/module-details-from-path/index.js +1 -0
  192. package/vendor/dist/mutexify/promise/LICENSE +21 -0
  193. package/vendor/dist/mutexify/promise/index.js +1 -0
  194. package/vendor/dist/opentracing/LICENSE +201 -0
  195. package/vendor/dist/opentracing/binary_carrier.d.ts +11 -0
  196. package/vendor/dist/opentracing/constants.d.ts +61 -0
  197. package/vendor/dist/opentracing/examples/demo/demo.d.ts +2 -0
  198. package/vendor/dist/opentracing/ext/tags.d.ts +90 -0
  199. package/vendor/dist/opentracing/functions.d.ts +20 -0
  200. package/vendor/dist/opentracing/global_tracer.d.ts +14 -0
  201. package/vendor/dist/opentracing/index.d.ts +12 -0
  202. package/vendor/dist/opentracing/index.js +1 -0
  203. package/vendor/dist/opentracing/mock_tracer/index.d.ts +5 -0
  204. package/vendor/dist/opentracing/mock_tracer/mock_context.d.ts +13 -0
  205. package/vendor/dist/opentracing/mock_tracer/mock_report.d.ts +16 -0
  206. package/vendor/dist/opentracing/mock_tracer/mock_span.d.ts +50 -0
  207. package/vendor/dist/opentracing/mock_tracer/mock_tracer.d.ts +26 -0
  208. package/vendor/dist/opentracing/noop.d.ts +8 -0
  209. package/vendor/dist/opentracing/reference.d.ts +33 -0
  210. package/vendor/dist/opentracing/span.d.ts +147 -0
  211. package/vendor/dist/opentracing/span_context.d.ts +26 -0
  212. package/vendor/dist/opentracing/test/api_compatibility.d.ts +16 -0
  213. package/vendor/dist/opentracing/test/mocktracer_implemenation.d.ts +3 -0
  214. package/vendor/dist/opentracing/test/noop_implementation.d.ts +4 -0
  215. package/vendor/dist/opentracing/test/opentracing_api.d.ts +3 -0
  216. package/vendor/dist/opentracing/test/unittest.d.ts +2 -0
  217. package/vendor/dist/opentracing/tracer.d.ts +127 -0
  218. package/vendor/dist/path-to-regexp/LICENSE +21 -0
  219. package/vendor/dist/path-to-regexp/index.js +1 -0
  220. package/vendor/dist/pprof-format/LICENSE +8 -0
  221. package/vendor/dist/pprof-format/index.js +1 -0
  222. package/vendor/dist/protobufjs/LICENSE +39 -0
  223. package/vendor/dist/protobufjs/index.js +1 -0
  224. package/vendor/dist/protobufjs/minimal/LICENSE +39 -0
  225. package/vendor/dist/protobufjs/minimal/index.js +1 -0
  226. package/vendor/dist/retry/LICENSE +21 -0
  227. package/vendor/dist/retry/index.js +1 -0
  228. package/vendor/dist/rfdc/LICENSE +15 -0
  229. package/vendor/dist/rfdc/index.js +1 -0
  230. package/vendor/dist/semifies/LICENSE +201 -0
  231. package/vendor/dist/semifies/index.js +1 -0
  232. package/vendor/dist/shell-quote/LICENSE +24 -0
  233. package/vendor/dist/shell-quote/index.js +1 -0
  234. package/vendor/dist/source-map/LICENSE +28 -0
  235. package/vendor/dist/source-map/index.js +1 -0
  236. package/vendor/dist/source-map/lib/util/LICENSE +28 -0
  237. package/vendor/dist/source-map/lib/util/index.js +1 -0
  238. package/vendor/dist/source-map/mappings.wasm +0 -0
  239. package/vendor/dist/tlhunter-sorted-set/LICENSE +21 -0
  240. package/vendor/dist/tlhunter-sorted-set/index.js +1 -0
  241. package/vendor/dist/ttl-set/LICENSE +21 -0
  242. package/vendor/dist/ttl-set/index.js +1 -0
@@ -0,0 +1,251 @@
1
+ 'use strict'
2
+
3
+ const OtlpTransformerBase = require('../otlp/otlp_transformer_base')
4
+ const { getProtobufTypes } = require('../otlp/protobuf_loader')
5
+ const { METRIC_TYPES, TEMPORALITY } = require('./constants')
6
+
7
+ const { protoAggregationTemporality } = getProtobufTypes()
8
+ const AGGREGATION_TEMPORALITY_DELTA = protoAggregationTemporality.values.AGGREGATION_TEMPORALITY_DELTA
9
+ const AGGREGATION_TEMPORALITY_CUMULATIVE = protoAggregationTemporality.values.AGGREGATION_TEMPORALITY_CUMULATIVE
10
+
11
+ /**
12
+ * @typedef {import('./periodic_metric_reader').AggregatedMetric} AggregatedMetric
13
+ * @typedef {import('./periodic_metric_reader').NumberDataPoint} NumberDataPoint
14
+ * @typedef {import('./periodic_metric_reader').HistogramDataPoint} HistogramDataPoint
15
+ */
16
+
17
+ /**
18
+ * OtlpTransformer transforms metrics to OTLP format.
19
+ *
20
+ * This implementation follows the OTLP Metrics v1.7.0 Data Model specification:
21
+ * https://opentelemetry.io/docs/specs/otlp/#metrics-data-model
22
+ *
23
+ * @class OtlpTransformer
24
+ * @augments OtlpTransformerBase
25
+ */
26
+ class OtlpTransformer extends OtlpTransformerBase {
27
+ /**
28
+ * Creates a new OtlpTransformer instance.
29
+ *
30
+ * @param {import('@opentelemetry/api').Attributes} resourceAttributes - Resource attributes
31
+ * @param {string} protocol - OTLP protocol (http/protobuf or http/json)
32
+ */
33
+ constructor (resourceAttributes, protocol) {
34
+ super(resourceAttributes, protocol, 'metrics')
35
+ }
36
+
37
+ /**
38
+ * Transforms metrics to OTLP format based on the configured protocol.
39
+ * @param {Iterable<AggregatedMetric>} metrics - Iterable of metric data to transform
40
+ * @returns {Buffer} Transformed metrics in the appropriate format
41
+ */
42
+ transformMetrics (metrics) {
43
+ if (this.protocol === 'http/json') {
44
+ return this.#transformToJson(metrics)
45
+ }
46
+ return this.#transformToProtobuf(metrics)
47
+ }
48
+
49
+ /**
50
+ * Transforms metrics to protobuf format.
51
+ * @param {Iterable<AggregatedMetric>} metrics - Iterable of metrics to transform
52
+ * @returns {Buffer} Protobuf-encoded metrics
53
+ *
54
+ */
55
+ #transformToProtobuf (metrics) {
56
+ const { protoMetricsService } = getProtobufTypes()
57
+
58
+ const metricsData = {
59
+ resourceMetrics: [{
60
+ resource: this.transformResource(),
61
+ scopeMetrics: this.#transformScope(metrics),
62
+ }]
63
+ }
64
+
65
+ return this.serializeToProtobuf(protoMetricsService, metricsData)
66
+ }
67
+
68
+ /**
69
+ * Transforms metrics to JSON format.
70
+ * @param {Array} metrics - Array of metrics to transform
71
+ * @returns {Buffer} JSON-encoded metrics
72
+ *
73
+ */
74
+ #transformToJson (metrics) {
75
+ const metricsData = {
76
+ resourceMetrics: [{
77
+ resource: this.transformResource(),
78
+ scopeMetrics: this.#transformScope(metrics, true)
79
+ }]
80
+ }
81
+ return this.serializeToJson(metricsData)
82
+ }
83
+
84
+ /**
85
+ * Creates scope metrics grouped by instrumentation scope.
86
+ * @param {Iterable<AggregatedMetric>} metrics - Iterable of metrics to transform
87
+ * @param {boolean} isJson - Whether to format for JSON output
88
+ * @returns {Array<Object>} Array of scope metric objects
89
+ *
90
+ */
91
+ #transformScope (metrics, isJson = false) {
92
+ const groupedMetrics = this.groupByInstrumentationScope(metrics)
93
+ const scopeMetrics = []
94
+
95
+ for (const metricsInScope of groupedMetrics.values()) {
96
+ const firstMetric = metricsInScope[0]
97
+ const instrumentationScope = firstMetric.instrumentationScope || {}
98
+ const { name = '', version = '', schemaUrl = '', attributes = {} } = instrumentationScope
99
+
100
+ const scope = {
101
+ name,
102
+ version,
103
+ droppedAttributesCount: 0
104
+ }
105
+
106
+ if (attributes) {
107
+ const transformed = isJson ? this.attributesToJson(attributes) : this.transformAttributes(attributes)
108
+ if (transformed.length) {
109
+ scope.attributes = transformed
110
+ }
111
+ }
112
+
113
+ scopeMetrics.push({
114
+ scope,
115
+ schemaUrl,
116
+ metrics: metricsInScope.map(metric => this.#transformMetric(metric, isJson))
117
+ })
118
+ }
119
+
120
+ return scopeMetrics
121
+ }
122
+
123
+ /**
124
+ * Transforms a single metric to protobuf or JSON format.
125
+ *
126
+ * @param {AggregatedMetric} metric - The metric to transform
127
+ * @param {boolean} isJson - Whether to output JSON format (vs protobuf)
128
+ * @returns {Object} - The metric transformed to OTLP protobuf or JSON format
129
+ */
130
+ #transformMetric (metric, isJson = false) {
131
+ const result = {
132
+ name: metric.name,
133
+ description: metric.description || '',
134
+ unit: metric.unit || ''
135
+ }
136
+
137
+ const isCumulative = metric.temporality === TEMPORALITY.CUMULATIVE
138
+ let temporality
139
+ if (isJson) {
140
+ temporality = isCumulative ? 'AGGREGATION_TEMPORALITY_CUMULATIVE' : 'AGGREGATION_TEMPORALITY_DELTA'
141
+ } else {
142
+ temporality = isCumulative ? AGGREGATION_TEMPORALITY_CUMULATIVE : AGGREGATION_TEMPORALITY_DELTA
143
+ }
144
+
145
+ switch (metric.type) {
146
+ case METRIC_TYPES.HISTOGRAM:
147
+ result.histogram = {
148
+ dataPoints: Array.from(metric.dataPointMap.values(), dp => this.#transformHistogramDataPoint(dp, isJson)),
149
+ aggregationTemporality: temporality
150
+ }
151
+ break
152
+
153
+ case METRIC_TYPES.COUNTER:
154
+ case METRIC_TYPES.OBSERVABLECOUNTER:
155
+ case METRIC_TYPES.UPDOWNCOUNTER:
156
+ case METRIC_TYPES.OBSERVABLEUPDOWNCOUNTER:
157
+ result.sum = {
158
+ dataPoints: Array.from(metric.dataPointMap.values(), dp => this.#transformNumberDataPoint(dp, isJson)),
159
+ aggregationTemporality: temporality,
160
+ isMonotonic: metric.type === METRIC_TYPES.COUNTER || metric.type === METRIC_TYPES.OBSERVABLECOUNTER
161
+ }
162
+ break
163
+
164
+ case METRIC_TYPES.GAUGE:
165
+ result.gauge = {
166
+ dataPoints: Array.from(metric.dataPointMap.values(), dp => this.#transformNumberDataPoint(dp, isJson))
167
+ }
168
+ break
169
+ }
170
+
171
+ return result
172
+ }
173
+
174
+ /**
175
+ * Transforms a histogram data point.
176
+ *
177
+ * @param {HistogramDataPoint} dp - The histogram data point to transform
178
+ * @param {boolean} isJson - Whether to output JSON format (vs protobuf)
179
+ * @returns {Object} The histogram data point transformed to OTLP protobuf format
180
+ */
181
+ #transformHistogramDataPoint (dp, isJson) {
182
+ const attributes = isJson
183
+ ? this.attributesToJson(dp.attributes)
184
+ : this.transformAttributes(dp.attributes)
185
+
186
+ const dataPoint = {
187
+ attributes,
188
+ startTimeUnixNano: dp.startTimeUnixNano,
189
+ timeUnixNano: dp.timeUnixNano,
190
+ count: dp.count,
191
+ sum: dp.sum,
192
+ bucketCounts: dp.bucketCounts || [],
193
+ explicitBounds: dp.explicitBounds || [],
194
+ min: dp.min,
195
+ max: dp.max
196
+ }
197
+
198
+ if (isJson) {
199
+ dataPoint.startTimeUnixNano = String(dataPoint.startTimeUnixNano)
200
+ dataPoint.timeUnixNano = String(dataPoint.timeUnixNano)
201
+ dataPoint.count = dataPoint.count || 0
202
+ }
203
+
204
+ return dataPoint
205
+ }
206
+
207
+ /**
208
+ * Transforms a number data point to protobuf or JSON format.
209
+ *
210
+ * @param {NumberDataPoint} dataPoint - The number data point to transform
211
+ * @param {boolean} isJson - Whether to output JSON format (vs protobuf)
212
+ * @returns {Object} The number data point transformed to OTLP protobuf format
213
+ */
214
+ #transformNumberDataPoint (dataPoint, isJson) {
215
+ const attributes = isJson
216
+ ? this.attributesToJson(dataPoint.attributes)
217
+ : this.transformAttributes(dataPoint.attributes)
218
+ const timeUnixNano = isJson
219
+ ? String(dataPoint.timeUnixNano)
220
+ : dataPoint.timeUnixNano
221
+
222
+ const result = {
223
+ attributes,
224
+ timeUnixNano
225
+ }
226
+
227
+ if (dataPoint.startTimeUnixNano) {
228
+ result.startTimeUnixNano = isJson ? String(dataPoint.startTimeUnixNano) : dataPoint.startTimeUnixNano
229
+ }
230
+
231
+ this.#assignNumberValue(result, dataPoint.value)
232
+ return result
233
+ }
234
+
235
+ /**
236
+ * Assigns the appropriate value field (asInt or asDouble) based on the value type.
237
+ *
238
+ * @param {NumberDataPoint} dataPoint - The number data point to assign a value to
239
+ * @param {number} value - The value to assign
240
+ * @returns {void}
241
+ */
242
+ #assignNumberValue (dataPoint, value) {
243
+ if (Number.isInteger(value)) {
244
+ dataPoint.asInt = value
245
+ } else {
246
+ dataPoint.asDouble = value
247
+ }
248
+ }
249
+ }
250
+
251
+ module.exports = OtlpTransformer