datadog 2.20.0 → 2.26.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 (310) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +212 -1
  3. data/README.md +0 -1
  4. data/ext/LIBDATADOG_DEVELOPMENT.md +3 -0
  5. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +93 -23
  6. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
  7. data/ext/datadog_profiling_native_extension/collectors_stack.c +21 -5
  8. data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +239 -0
  9. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +1 -1
  10. data/ext/datadog_profiling_native_extension/extconf.rb +9 -4
  11. data/ext/datadog_profiling_native_extension/heap_recorder.c +1 -1
  12. data/ext/datadog_profiling_native_extension/http_transport.c +1 -0
  13. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +12 -0
  14. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +4 -0
  15. data/ext/datadog_profiling_native_extension/profiling.c +2 -0
  16. data/ext/libdatadog_api/datadog_ruby_common.h +1 -1
  17. data/ext/libdatadog_api/ddsketch.c +106 -0
  18. data/ext/libdatadog_api/feature_flags.c +554 -0
  19. data/ext/libdatadog_api/feature_flags.h +5 -0
  20. data/ext/libdatadog_api/init.c +5 -0
  21. data/ext/libdatadog_api/library_config.c +34 -25
  22. data/ext/libdatadog_api/process_discovery.c +24 -18
  23. data/ext/libdatadog_extconf_helpers.rb +1 -1
  24. data/lib/datadog/ai_guard/api_client.rb +82 -0
  25. data/lib/datadog/ai_guard/component.rb +42 -0
  26. data/lib/datadog/ai_guard/configuration/ext.rb +17 -0
  27. data/lib/datadog/ai_guard/configuration/settings.rb +98 -0
  28. data/lib/datadog/ai_guard/configuration.rb +11 -0
  29. data/lib/datadog/ai_guard/evaluation/message.rb +25 -0
  30. data/lib/datadog/ai_guard/evaluation/no_op_result.rb +34 -0
  31. data/lib/datadog/ai_guard/evaluation/request.rb +81 -0
  32. data/lib/datadog/ai_guard/evaluation/result.rb +43 -0
  33. data/lib/datadog/ai_guard/evaluation/tool_call.rb +18 -0
  34. data/lib/datadog/ai_guard/evaluation.rb +72 -0
  35. data/lib/datadog/ai_guard/ext.rb +16 -0
  36. data/lib/datadog/ai_guard.rb +153 -0
  37. data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +26 -0
  38. data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +59 -0
  39. data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -0
  40. data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
  41. data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
  42. data/lib/datadog/appsec/api_security/route_extractor.rb +26 -5
  43. data/lib/datadog/appsec/api_security/sampler.rb +7 -4
  44. data/lib/datadog/appsec/assets/blocked.html +8 -0
  45. data/lib/datadog/appsec/assets/blocked.json +1 -1
  46. data/lib/datadog/appsec/assets/blocked.text +3 -1
  47. data/lib/datadog/appsec/assets/waf_rules/README.md +30 -36
  48. data/lib/datadog/appsec/assets/waf_rules/recommended.json +359 -4
  49. data/lib/datadog/appsec/assets/waf_rules/strict.json +43 -2
  50. data/lib/datadog/appsec/assets.rb +1 -1
  51. data/lib/datadog/appsec/autoload.rb +1 -1
  52. data/lib/datadog/appsec/compressed_json.rb +1 -1
  53. data/lib/datadog/appsec/configuration/settings.rb +9 -0
  54. data/lib/datadog/appsec/context.rb +2 -1
  55. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +3 -1
  56. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +3 -2
  57. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +3 -1
  58. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +3 -1
  59. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +9 -4
  60. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +5 -1
  61. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +7 -2
  62. data/lib/datadog/appsec/contrib/rails/patcher.rb +30 -0
  63. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +3 -1
  64. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +10 -4
  65. data/lib/datadog/appsec/event.rb +12 -14
  66. data/lib/datadog/appsec/metrics/collector.rb +19 -3
  67. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +2 -1
  68. data/lib/datadog/appsec/monitor/gateway/watcher.rb +4 -4
  69. data/lib/datadog/appsec/remote.rb +34 -25
  70. data/lib/datadog/appsec/response.rb +18 -4
  71. data/lib/datadog/appsec/security_engine/engine.rb +3 -3
  72. data/lib/datadog/appsec/security_engine/result.rb +29 -9
  73. data/lib/datadog/appsec/security_engine/runner.rb +19 -9
  74. data/lib/datadog/appsec/security_event.rb +5 -7
  75. data/lib/datadog/core/configuration/agent_settings_resolver.rb +4 -4
  76. data/lib/datadog/core/configuration/components.rb +59 -11
  77. data/lib/datadog/core/configuration/config_helper.rb +100 -0
  78. data/lib/datadog/core/configuration/deprecations.rb +36 -0
  79. data/lib/datadog/core/configuration/ext.rb +0 -1
  80. data/lib/datadog/core/configuration/option.rb +38 -43
  81. data/lib/datadog/core/configuration/option_definition.rb +4 -11
  82. data/lib/datadog/core/configuration/options.rb +9 -10
  83. data/lib/datadog/core/configuration/settings.rb +38 -9
  84. data/lib/datadog/core/configuration/stable_config.rb +10 -0
  85. data/lib/datadog/core/configuration/supported_configurations.rb +373 -0
  86. data/lib/datadog/core/configuration.rb +2 -2
  87. data/lib/datadog/core/ddsketch.rb +19 -0
  88. data/lib/datadog/core/deprecations.rb +2 -2
  89. data/lib/datadog/core/environment/cgroup.rb +52 -25
  90. data/lib/datadog/core/environment/container.rb +140 -46
  91. data/lib/datadog/core/environment/ext.rb +7 -2
  92. data/lib/datadog/core/environment/git.rb +2 -2
  93. data/lib/datadog/core/environment/process.rb +87 -0
  94. data/lib/datadog/core/environment/variable_helpers.rb +3 -3
  95. data/lib/datadog/core/environment/yjit.rb +2 -1
  96. data/lib/datadog/core/error.rb +6 -6
  97. data/lib/datadog/core/feature_flags.rb +61 -0
  98. data/lib/datadog/core/metrics/client.rb +2 -2
  99. data/lib/datadog/core/pin.rb +8 -8
  100. data/lib/datadog/core/process_discovery/tracer_memfd.rb +2 -4
  101. data/lib/datadog/core/process_discovery.rb +48 -23
  102. data/lib/datadog/core/rate_limiter.rb +9 -1
  103. data/lib/datadog/core/remote/client/capabilities.rb +7 -0
  104. data/lib/datadog/core/remote/client.rb +14 -6
  105. data/lib/datadog/core/remote/component.rb +10 -10
  106. data/lib/datadog/core/remote/configuration/content.rb +15 -2
  107. data/lib/datadog/core/remote/configuration/digest.rb +14 -7
  108. data/lib/datadog/core/remote/configuration/repository.rb +1 -1
  109. data/lib/datadog/core/remote/configuration/target.rb +13 -6
  110. data/lib/datadog/core/remote/transport/config.rb +4 -25
  111. data/lib/datadog/core/remote/transport/http/config.rb +10 -50
  112. data/lib/datadog/core/remote/transport/http/negotiation.rb +14 -44
  113. data/lib/datadog/core/remote/transport/http.rb +15 -24
  114. data/lib/datadog/core/remote/transport/negotiation.rb +8 -33
  115. data/lib/datadog/core/remote/worker.rb +25 -37
  116. data/lib/datadog/core/runtime/ext.rb +0 -1
  117. data/lib/datadog/core/runtime/metrics.rb +11 -1
  118. data/lib/datadog/core/semaphore.rb +1 -4
  119. data/lib/datadog/core/tag_builder.rb +0 -4
  120. data/lib/datadog/core/tag_normalizer.rb +84 -0
  121. data/lib/datadog/core/telemetry/component.rb +69 -15
  122. data/lib/datadog/core/telemetry/emitter.rb +6 -6
  123. data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +30 -0
  124. data/lib/datadog/core/telemetry/event/app_started.rb +89 -51
  125. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +27 -4
  126. data/lib/datadog/core/telemetry/event.rb +1 -0
  127. data/lib/datadog/core/telemetry/logger.rb +2 -2
  128. data/lib/datadog/core/telemetry/logging.rb +2 -8
  129. data/lib/datadog/core/telemetry/metrics_manager.rb +9 -0
  130. data/lib/datadog/core/telemetry/request.rb +17 -3
  131. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +3 -34
  132. data/lib/datadog/core/telemetry/transport/http.rb +21 -16
  133. data/lib/datadog/core/telemetry/transport/telemetry.rb +3 -11
  134. data/lib/datadog/core/telemetry/worker.rb +88 -32
  135. data/lib/datadog/core/transport/ext.rb +2 -0
  136. data/lib/datadog/core/transport/http/api/endpoint.rb +9 -4
  137. data/lib/datadog/core/transport/http/api/instance.rb +4 -21
  138. data/lib/datadog/core/transport/http/builder.rb +9 -5
  139. data/lib/datadog/core/transport/http/client.rb +80 -0
  140. data/lib/datadog/core/transport/http.rb +22 -19
  141. data/lib/datadog/core/transport/response.rb +15 -1
  142. data/lib/datadog/core/transport/transport.rb +90 -0
  143. data/lib/datadog/core/utils/array.rb +29 -0
  144. data/lib/datadog/{appsec/api_security → core/utils}/lru_cache.rb +10 -21
  145. data/lib/datadog/core/utils/network.rb +22 -1
  146. data/lib/datadog/core/utils/only_once_successful.rb +8 -2
  147. data/lib/datadog/core/utils/safe_dup.rb +2 -2
  148. data/lib/datadog/core/utils/sequence.rb +2 -0
  149. data/lib/datadog/core/utils/time.rb +1 -1
  150. data/lib/datadog/core/utils.rb +2 -0
  151. data/lib/datadog/core/workers/async.rb +10 -1
  152. data/lib/datadog/core/workers/interval_loop.rb +44 -3
  153. data/lib/datadog/core/workers/polling.rb +2 -0
  154. data/lib/datadog/core/workers/queue.rb +100 -1
  155. data/lib/datadog/core.rb +2 -0
  156. data/lib/datadog/data_streams/configuration/settings.rb +49 -0
  157. data/lib/datadog/data_streams/configuration.rb +11 -0
  158. data/lib/datadog/data_streams/ext.rb +11 -0
  159. data/lib/datadog/data_streams/extensions.rb +16 -0
  160. data/lib/datadog/data_streams/pathway_context.rb +169 -0
  161. data/lib/datadog/data_streams/processor.rb +509 -0
  162. data/lib/datadog/data_streams/transport/http/stats.rb +52 -0
  163. data/lib/datadog/data_streams/transport/http.rb +40 -0
  164. data/lib/datadog/data_streams/transport/stats.rb +46 -0
  165. data/lib/datadog/data_streams.rb +100 -0
  166. data/lib/datadog/di/boot.rb +7 -3
  167. data/lib/datadog/di/component.rb +14 -16
  168. data/lib/datadog/di/context.rb +70 -0
  169. data/lib/datadog/di/contrib/active_record.rb +30 -5
  170. data/lib/datadog/di/el/compiler.rb +168 -0
  171. data/lib/datadog/di/el/evaluator.rb +159 -0
  172. data/lib/datadog/di/el/expression.rb +42 -0
  173. data/lib/datadog/di/el.rb +5 -0
  174. data/lib/datadog/di/error.rb +34 -0
  175. data/lib/datadog/di/instrumenter.rb +189 -55
  176. data/lib/datadog/di/logger.rb +2 -2
  177. data/lib/datadog/di/probe.rb +55 -15
  178. data/lib/datadog/di/probe_builder.rb +41 -2
  179. data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
  180. data/lib/datadog/di/probe_file_loader.rb +1 -1
  181. data/lib/datadog/di/probe_manager.rb +50 -35
  182. data/lib/datadog/di/probe_notification_builder.rb +121 -70
  183. data/lib/datadog/di/probe_notifier_worker.rb +5 -5
  184. data/lib/datadog/di/proc_responder.rb +32 -0
  185. data/lib/datadog/di/remote.rb +89 -84
  186. data/lib/datadog/di/serializer.rb +151 -7
  187. data/lib/datadog/di/transport/diagnostics.rb +8 -36
  188. data/lib/datadog/di/transport/http/diagnostics.rb +1 -33
  189. data/lib/datadog/di/transport/http/input.rb +1 -33
  190. data/lib/datadog/di/transport/http.rb +32 -17
  191. data/lib/datadog/di/transport/input.rb +67 -34
  192. data/lib/datadog/di.rb +61 -5
  193. data/lib/datadog/error_tracking/filters.rb +2 -2
  194. data/lib/datadog/kit/appsec/events/v2.rb +2 -3
  195. data/lib/datadog/open_feature/component.rb +60 -0
  196. data/lib/datadog/open_feature/configuration.rb +27 -0
  197. data/lib/datadog/open_feature/evaluation_engine.rb +70 -0
  198. data/lib/datadog/open_feature/exposures/batch_builder.rb +32 -0
  199. data/lib/datadog/open_feature/exposures/buffer.rb +43 -0
  200. data/lib/datadog/open_feature/exposures/deduplicator.rb +30 -0
  201. data/lib/datadog/open_feature/exposures/event.rb +60 -0
  202. data/lib/datadog/open_feature/exposures/reporter.rb +40 -0
  203. data/lib/datadog/open_feature/exposures/worker.rb +116 -0
  204. data/lib/datadog/open_feature/ext.rb +14 -0
  205. data/lib/datadog/open_feature/native_evaluator.rb +38 -0
  206. data/lib/datadog/open_feature/noop_evaluator.rb +26 -0
  207. data/lib/datadog/open_feature/provider.rb +141 -0
  208. data/lib/datadog/open_feature/remote.rb +67 -0
  209. data/lib/datadog/open_feature/resolution_details.rb +35 -0
  210. data/lib/datadog/open_feature/transport.rb +70 -0
  211. data/lib/datadog/open_feature.rb +19 -0
  212. data/lib/datadog/opentelemetry/api/baggage.rb +1 -1
  213. data/lib/datadog/opentelemetry/configuration/settings.rb +159 -0
  214. data/lib/datadog/opentelemetry/metrics.rb +117 -0
  215. data/lib/datadog/opentelemetry/sdk/configurator.rb +26 -2
  216. data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +35 -0
  217. data/lib/datadog/opentelemetry.rb +3 -0
  218. data/lib/datadog/profiling/collectors/code_provenance.rb +41 -7
  219. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +3 -2
  220. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
  221. data/lib/datadog/profiling/collectors/info.rb +6 -5
  222. data/lib/datadog/profiling/component.rb +12 -11
  223. data/lib/datadog/profiling/ext/dir_monkey_patches.rb +18 -0
  224. data/lib/datadog/profiling/ext.rb +2 -1
  225. data/lib/datadog/profiling/http_transport.rb +5 -2
  226. data/lib/datadog/profiling/profiler.rb +4 -0
  227. data/lib/datadog/profiling/tag_builder.rb +36 -3
  228. data/lib/datadog/profiling/tasks/exec.rb +2 -2
  229. data/lib/datadog/profiling.rb +1 -2
  230. data/lib/datadog/single_step_instrument.rb +1 -1
  231. data/lib/datadog/tracing/component.rb +6 -17
  232. data/lib/datadog/tracing/configuration/dynamic.rb +2 -2
  233. data/lib/datadog/tracing/configuration/ext.rb +9 -3
  234. data/lib/datadog/tracing/configuration/settings.rb +89 -10
  235. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
  236. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -2
  237. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +21 -7
  238. data/lib/datadog/tracing/contrib/active_job/patcher.rb +5 -1
  239. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +4 -2
  240. data/lib/datadog/tracing/contrib/component.rb +2 -2
  241. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -1
  242. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +11 -3
  243. data/lib/datadog/tracing/contrib/extensions.rb +10 -2
  244. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +11 -7
  245. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +7 -3
  246. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +7 -0
  247. data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
  248. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +84 -43
  249. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +11 -3
  250. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +11 -3
  251. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +11 -3
  252. data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +66 -0
  253. data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +66 -0
  254. data/lib/datadog/tracing/contrib/kafka/patcher.rb +14 -0
  255. data/lib/datadog/tracing/contrib/karafka/framework.rb +30 -0
  256. data/lib/datadog/tracing/contrib/karafka/monitor.rb +11 -0
  257. data/lib/datadog/tracing/contrib/karafka/patcher.rb +35 -4
  258. data/lib/datadog/tracing/contrib/rack/middlewares.rb +59 -27
  259. data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -0
  260. data/lib/datadog/tracing/contrib/rack/route_inference.rb +53 -0
  261. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +7 -1
  262. data/lib/datadog/tracing/contrib/rails/ext.rb +2 -1
  263. data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
  264. data/lib/datadog/tracing/contrib/rails/middlewares.rb +2 -2
  265. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +4 -1
  266. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +3 -1
  267. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -1
  268. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +1 -1
  269. data/lib/datadog/tracing/contrib/status_range_matcher.rb +9 -1
  270. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +3 -1
  271. data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +27 -0
  272. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +48 -0
  273. data/lib/datadog/tracing/contrib/waterdrop/ext.rb +17 -0
  274. data/lib/datadog/tracing/contrib/waterdrop/integration.rb +43 -0
  275. data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +46 -0
  276. data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +49 -0
  277. data/lib/datadog/tracing/contrib/waterdrop/producer.rb +50 -0
  278. data/lib/datadog/tracing/contrib/waterdrop.rb +41 -0
  279. data/lib/datadog/tracing/contrib.rb +1 -0
  280. data/lib/datadog/tracing/diagnostics/environment_logger.rb +1 -1
  281. data/lib/datadog/tracing/distributed/baggage.rb +3 -2
  282. data/lib/datadog/tracing/metadata/ext.rb +9 -1
  283. data/lib/datadog/tracing/remote.rb +1 -9
  284. data/lib/datadog/tracing/sampling/priority_sampler.rb +3 -1
  285. data/lib/datadog/tracing/span.rb +1 -1
  286. data/lib/datadog/tracing/span_event.rb +2 -2
  287. data/lib/datadog/tracing/span_operation.rb +20 -9
  288. data/lib/datadog/tracing/trace_operation.rb +44 -6
  289. data/lib/datadog/tracing/tracer.rb +42 -16
  290. data/lib/datadog/tracing/transport/http/client.rb +12 -26
  291. data/lib/datadog/tracing/transport/http/traces.rb +2 -50
  292. data/lib/datadog/tracing/transport/http.rb +15 -9
  293. data/lib/datadog/tracing/transport/io/client.rb +1 -1
  294. data/lib/datadog/tracing/transport/trace_formatter.rb +11 -0
  295. data/lib/datadog/tracing/transport/traces.rb +9 -71
  296. data/lib/datadog/tracing/workers/trace_writer.rb +5 -0
  297. data/lib/datadog/tracing/writer.rb +1 -0
  298. data/lib/datadog/version.rb +2 -2
  299. data/lib/datadog.rb +3 -0
  300. metadata +110 -24
  301. data/ext/libdatadog_api/macos_development.md +0 -26
  302. data/lib/datadog/core/remote/transport/http/api.rb +0 -53
  303. data/lib/datadog/core/remote/transport/http/client.rb +0 -49
  304. data/lib/datadog/core/telemetry/transport/http/api.rb +0 -43
  305. data/lib/datadog/core/telemetry/transport/http/client.rb +0 -49
  306. data/lib/datadog/core/transport/http/api/spec.rb +0 -36
  307. data/lib/datadog/di/transport/http/api.rb +0 -42
  308. data/lib/datadog/di/transport/http/client.rb +0 -47
  309. data/lib/datadog/opentelemetry/api/baggage.rbs +0 -26
  310. data/lib/datadog/tracing/transport/http/api.rb +0 -44
@@ -8,8 +8,18 @@ module Datadog
8
8
  module Event
9
9
  # Telemetry class for the 'app-started' event
10
10
  class AppStarted < Base
11
- def initialize(agent_settings:)
12
- @agent_settings = agent_settings
11
+ def initialize(components:)
12
+ # To not hold a reference to the component tree, generate
13
+ # the event payload here in the constructor.
14
+ #
15
+ # Important: do not store data that contains (or is derived from)
16
+ # the runtime_id or sequence numbers.
17
+ # This event is reused when a process forks, but in the
18
+ # child process the runtime_id would be different and sequence
19
+ # number is reset.
20
+ @configuration = configuration(components.settings, components.agent_settings)
21
+ @install_signature = install_signature(components.settings)
22
+ @products = products(components)
13
23
  end
14
24
 
15
25
  def type
@@ -18,27 +28,37 @@ module Datadog
18
28
 
19
29
  def payload
20
30
  {
21
- products: products,
22
- configuration: configuration,
23
- install_signature: install_signature,
31
+ products: @products,
32
+ configuration: @configuration,
33
+ install_signature: @install_signature,
24
34
  # DEV: Not implemented yet
25
35
  # error: error, # Start-up errors
26
36
  }
27
37
  end
28
38
 
39
+ # Whether the event is actually the app-started event.
40
+ # For the app-started event we follow up by sending
41
+ # app-dependencies-loaded, if the event is
42
+ # app-client-configuration-change we don't send
43
+ # app-dependencies-loaded.
44
+ def app_started?
45
+ true
46
+ end
47
+
29
48
  private
30
49
 
31
- def products
32
- # @type var products: Hash[Symbol, Hash[Symbol, Hash[Symbol, String | Integer] | bool | nil]]
50
+ def products(components)
51
+ # @type var products: telemetry_products
33
52
  products = {
34
53
  appsec: {
35
- enabled: Datadog::AppSec.enabled?,
54
+ # TODO take appsec status out of component tree?
55
+ enabled: components.settings.appsec.enabled,
36
56
  },
37
57
  profiler: {
38
- enabled: Datadog::Profiling.enabled?,
58
+ enabled: !!components.profiler&.enabled?,
39
59
  },
40
60
  dynamic_instrumentation: {
41
- enabled: defined?(Datadog::DI) && Datadog::DI.respond_to?(:enabled?) && Datadog::DI.enabled?,
61
+ enabled: !!components.dynamic_instrumentation,
42
62
  }
43
63
  }
44
64
 
@@ -73,12 +93,11 @@ module Datadog
73
93
 
74
94
  # standard:disable Metrics/AbcSize
75
95
  # standard:disable Metrics/MethodLength
76
- def configuration
77
- config = Datadog.configuration
96
+ def configuration(settings, agent_settings)
78
97
  seq_id = Event.configuration_sequence.next
79
98
 
80
99
  # tracing.writer_options.buffer_size and tracing.writer_options.flush_interval have the same origin.
81
- writer_option_origin = get_telemetry_origin(config, 'tracing.writer_options')
100
+ writer_option_origin = get_telemetry_origin(settings, 'tracing.writer_options')
82
101
 
83
102
  list = [
84
103
  # Only set using env var as of June 2025
@@ -100,59 +119,78 @@ module Datadog
100
119
  ),
101
120
 
102
121
  # Mix of env var, programmatic and default config, so we use unknown
103
- conf_value('DD_AGENT_TRANSPORT', agent_transport, seq_id, 'unknown'),
122
+ conf_value('DD_AGENT_TRANSPORT', agent_transport(agent_settings), seq_id, 'unknown'), # rubocop:disable CustomCops/EnvStringValidationCop
104
123
 
105
124
  # writer_options is defined as an option that has a Hash value.
106
125
  conf_value(
107
126
  'tracing.writer_options.buffer_size',
108
- to_value(config.tracing.writer_options[:buffer_size]),
127
+ to_value(settings.tracing.writer_options[:buffer_size]),
109
128
  seq_id,
110
129
  writer_option_origin
111
130
  ),
112
131
  conf_value(
113
132
  'tracing.writer_options.flush_interval',
114
- to_value(config.tracing.writer_options[:flush_interval]),
133
+ to_value(settings.tracing.writer_options[:flush_interval]),
115
134
  seq_id,
116
135
  writer_option_origin
117
136
  ),
118
137
 
119
- conf_value('DD_AGENT_HOST', config.agent.host, seq_id, get_telemetry_origin(config, 'agent.host')),
138
+ conf_value('DD_AGENT_HOST', settings.agent.host, seq_id, get_telemetry_origin(settings, 'agent.host')),
120
139
  conf_value(
121
140
  'DD_TRACE_SAMPLE_RATE',
122
- to_value(config.tracing.sampling.default_rate),
141
+ to_value(settings.tracing.sampling.default_rate),
123
142
  seq_id,
124
- get_telemetry_origin(config, 'tracing.sampling.default_rate')
143
+ get_telemetry_origin(settings, 'tracing.sampling.default_rate')
125
144
  ),
126
145
  conf_value(
127
146
  'DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED',
128
- config.tracing.contrib.global_default_service_name.enabled,
147
+ settings.tracing.contrib.global_default_service_name.enabled,
129
148
  seq_id,
130
- get_telemetry_origin(config, 'tracing.contrib.global_default_service_name.enabled')
149
+ get_telemetry_origin(settings, 'tracing.contrib.global_default_service_name.enabled')
131
150
  ),
132
151
  conf_value(
133
152
  'DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED',
134
- config.tracing.contrib.peer_service_defaults,
153
+ settings.tracing.contrib.peer_service_defaults,
135
154
  seq_id,
136
- get_telemetry_origin(config, 'tracing.contrib.peer_service_defaults')
155
+ get_telemetry_origin(settings, 'tracing.contrib.peer_service_defaults')
137
156
  ),
138
157
  conf_value(
139
158
  'DD_TRACE_DEBUG',
140
- config.diagnostics.debug,
159
+ settings.diagnostics.debug,
141
160
  seq_id,
142
- get_telemetry_origin(config, 'diagnostics.debug')
161
+ get_telemetry_origin(settings, 'diagnostics.debug')
143
162
  )
144
163
  ]
145
164
 
146
165
  peer_service_mapping_str = ''
147
- unless config.tracing.contrib.peer_service_mapping.empty?
148
- peer_service_mapping = config.tracing.contrib.peer_service_mapping
166
+ unless settings.tracing.contrib.peer_service_mapping.empty?
167
+ peer_service_mapping = settings.tracing.contrib.peer_service_mapping
149
168
  peer_service_mapping_str = peer_service_mapping.map { |key, value| "#{key}:#{value}" }.join(',')
150
169
  end
151
170
  list << conf_value(
152
171
  'DD_TRACE_PEER_SERVICE_MAPPING',
153
172
  peer_service_mapping_str,
154
173
  seq_id,
155
- get_telemetry_origin(config, 'tracing.contrib.peer_service_mapping')
174
+ get_telemetry_origin(settings, 'tracing.contrib.peer_service_mapping')
175
+ )
176
+
177
+ # OpenTelemetry configuration options (using environment variable names)
178
+ otel_exporter_headers_string = settings.opentelemetry.exporter.headers&.map { |key, value| "#{key}=#{value}" }&.join(',')
179
+ otel_exporter_metrics_headers_string = settings.opentelemetry.metrics.headers&.map { |key, value| "#{key}=#{value}" }&.join(',')
180
+ list.push(
181
+ conf_value('OTEL_EXPORTER_OTLP_ENDPOINT', settings.opentelemetry.exporter.endpoint, seq_id, get_telemetry_origin(settings, 'opentelemetry.exporter.endpoint')),
182
+ conf_value('OTEL_EXPORTER_OTLP_HEADERS', otel_exporter_headers_string, seq_id, get_telemetry_origin(settings, 'opentelemetry.exporter.headers')),
183
+ conf_value('OTEL_EXPORTER_OTLP_PROTOCOL', settings.opentelemetry.exporter.protocol, seq_id, get_telemetry_origin(settings, 'opentelemetry.exporter.protocol')),
184
+ conf_value('OTEL_EXPORTER_OTLP_TIMEOUT', settings.opentelemetry.exporter.timeout_millis, seq_id, get_telemetry_origin(settings, 'opentelemetry.exporter.timeout_millis')),
185
+ conf_value('DD_METRICS_OTEL_ENABLED', settings.opentelemetry.metrics.enabled, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.enabled')),
186
+ conf_value('OTEL_METRICS_EXPORTER', settings.opentelemetry.metrics.exporter, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.exporter')),
187
+ conf_value('OTEL_EXPORTER_OTLP_METRICS_ENDPOINT', settings.opentelemetry.metrics.endpoint, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.endpoint')),
188
+ conf_value('OTEL_EXPORTER_OTLP_METRICS_HEADERS', otel_exporter_metrics_headers_string, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.headers')),
189
+ conf_value('OTEL_EXPORTER_OTLP_METRICS_PROTOCOL', settings.opentelemetry.metrics.protocol, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.protocol')),
190
+ conf_value('OTEL_EXPORTER_OTLP_METRICS_TIMEOUT', settings.opentelemetry.metrics.timeout_millis, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.timeout_millis')),
191
+ conf_value('OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE', settings.opentelemetry.metrics.temporality_preference, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.temporality_preference')),
192
+ conf_value('OTEL_METRIC_EXPORT_INTERVAL', settings.opentelemetry.metrics.export_interval_millis, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.export_interval_millis')),
193
+ conf_value('OTEL_METRIC_EXPORT_TIMEOUT', settings.opentelemetry.metrics.export_timeout_millis, seq_id, get_telemetry_origin(settings, 'opentelemetry.metrics.export_timeout_millis')),
156
194
  )
157
195
 
158
196
  # Whitelist of configuration options to send in additional payload object
@@ -160,9 +198,9 @@ module Datadog
160
198
  split_option = option_path.split('.')
161
199
  list << conf_value(
162
200
  option_path,
163
- to_value(config.dig(*split_option)),
201
+ to_value(settings.dig(*split_option)),
164
202
  seq_id,
165
- get_telemetry_origin(config, option_path)
203
+ get_telemetry_origin(settings, option_path)
166
204
  )
167
205
  end
168
206
 
@@ -177,38 +215,38 @@ module Datadog
177
215
  list.push(
178
216
  conf_value('instrumentation_source', instrumentation_source, seq_id, 'code'),
179
217
  conf_value('DD_INJECT_FORCE', Core::Environment::VariableHelpers.env_to_bool('DD_INJECT_FORCE', false), seq_id, 'env_var'),
180
- conf_value('DD_INJECTION_ENABLED', ENV['DD_INJECTION_ENABLED'] || '', seq_id, 'env_var'),
218
+ conf_value('DD_INJECTION_ENABLED', DATADOG_ENV['DD_INJECTION_ENABLED'] || '', seq_id, 'env_var'),
181
219
  )
182
220
 
183
221
  # Add some more custom additional payload values here
184
- if config.logger.instance
222
+ if settings.logger.instance
185
223
  list << conf_value(
186
224
  'logger.instance',
187
- config.logger.instance.class.to_s,
225
+ settings.logger.instance.class.to_s,
188
226
  seq_id,
189
- get_telemetry_origin(config, 'logger.instance')
227
+ get_telemetry_origin(settings, 'logger.instance')
190
228
  )
191
229
  end
192
- if config.respond_to?('appsec')
230
+ if settings.respond_to?('appsec')
193
231
  list << conf_value(
194
232
  'appsec.enabled',
195
- config.dig('appsec', 'enabled'),
233
+ settings.dig('appsec', 'enabled'),
196
234
  seq_id,
197
- get_telemetry_origin(config, 'appsec.enabled')
235
+ get_telemetry_origin(settings, 'appsec.enabled')
198
236
  )
199
237
  list << conf_value(
200
238
  'appsec.sca_enabled',
201
- config.dig('appsec', 'sca_enabled'),
239
+ settings.dig('appsec', 'sca_enabled'),
202
240
  seq_id,
203
- get_telemetry_origin(config, 'appsec.sca_enabled')
241
+ get_telemetry_origin(settings, 'appsec.sca_enabled')
204
242
  )
205
243
  end
206
- if config.respond_to?('ci')
244
+ if settings.respond_to?('ci')
207
245
  list << conf_value(
208
246
  'ci.enabled',
209
- config.dig('ci', 'enabled'),
247
+ settings.dig('ci', 'enabled'),
210
248
  seq_id,
211
- get_telemetry_origin(config, 'ci.enabled')
249
+ get_telemetry_origin(settings, 'ci.enabled')
212
250
  )
213
251
  end
214
252
 
@@ -218,8 +256,8 @@ module Datadog
218
256
  # standard:enable Metrics/AbcSize
219
257
  # standard:enable Metrics/MethodLength
220
258
 
221
- def agent_transport
222
- adapter = @agent_settings.adapter
259
+ def agent_transport(agent_settings)
260
+ adapter = agent_settings.adapter
223
261
  if adapter == Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
224
262
  'UDS'
225
263
  else
@@ -239,6 +277,7 @@ module Datadog
239
277
  # - `default`: set when the user has not set any configuration for the key (defaults to a value)
240
278
  # - `unknown`: set for cases where it is difficult/not possible to determine the source of a config.
241
279
  def conf_value(name, value, seq_id, origin)
280
+ # @type var result: telemetry_configuration
242
281
  result = {name: name, value: value, origin: origin, seq_id: seq_id}
243
282
  if origin == 'fleet_stable_config'
244
283
  fleet_id = Core::Configuration::StableConfig.configuration.dig(:fleet, :id)
@@ -260,23 +299,22 @@ module Datadog
260
299
  end
261
300
  end
262
301
 
263
- def install_signature
264
- config = Datadog.configuration
302
+ def install_signature(settings)
265
303
  {
266
- install_id: config.dig('telemetry', 'install_id'),
267
- install_type: config.dig('telemetry', 'install_type'),
268
- install_time: config.dig('telemetry', 'install_time'),
304
+ install_id: settings.dig('telemetry', 'install_id'),
305
+ install_type: settings.dig('telemetry', 'install_type'),
306
+ install_time: settings.dig('telemetry', 'install_time'),
269
307
  }
270
308
  end
271
309
 
272
- def get_telemetry_origin(config, config_path)
310
+ def get_telemetry_origin(settings, config_path)
273
311
  split_option = config_path.split('.')
274
312
  option_name = split_option.pop
275
313
  return 'unknown' if option_name.nil?
276
314
 
277
315
  # @type var parent_setting: Core::Configuration::Options
278
316
  # @type var option: Core::Configuration::Option
279
- parent_setting = config.dig(*split_option)
317
+ parent_setting = settings.dig(*split_option)
280
318
  option = parent_setting.send(:resolve_option, option_name.to_sym)
281
319
  option.precedence_set&.origin || 'unknown'
282
320
  end
@@ -28,13 +28,36 @@ module Datadog
28
28
  # and app-closing events.
29
29
  class SynthAppClientConfigurationChange < AppStarted
30
30
  def type
31
- 'app-client-configuration-change'
31
+ if reset?
32
+ super
33
+ else
34
+ 'app-client-configuration-change'
35
+ end
32
36
  end
33
37
 
34
38
  def payload
35
- {
36
- configuration: configuration,
37
- }
39
+ if reset?
40
+ super
41
+ else
42
+ {
43
+ configuration: @configuration,
44
+ }
45
+ end
46
+ end
47
+
48
+ def app_started?
49
+ reset?
50
+ end
51
+
52
+ # Revert this event to a "regular" AppStarted event.
53
+ #
54
+ # Used in after_fork to send the AppStarted event in child processes.
55
+ def reset!
56
+ @reset = true
57
+ end
58
+
59
+ def reset?
60
+ defined?(@reset) && !!@reset
38
61
  end
39
62
  end
40
63
  end
@@ -26,6 +26,7 @@ require_relative 'event/base'
26
26
  require_relative 'event/app_client_configuration_change'
27
27
  require_relative 'event/app_closing'
28
28
  require_relative 'event/app_dependencies_loaded'
29
+ require_relative 'event/app_endpoints_loaded'
29
30
  require_relative 'event/app_heartbeat'
30
31
  require_relative 'event/app_integrations_change'
31
32
  require_relative 'event/app_started'
@@ -14,8 +14,8 @@ module Datadog
14
14
  # read: lib/datadog/core/telemetry/logging.rb
15
15
  module Logger
16
16
  class << self
17
- def report(exception, level: :error, description: nil, pii_safe: false)
18
- instance&.report(exception, level: level, description: description, pii_safe: pii_safe)
17
+ def report(exception, level: :error, description: nil)
18
+ instance&.report(exception, level: level, description: description)
19
19
  end
20
20
 
21
21
  def error(description)
@@ -45,17 +45,11 @@ module Datadog
45
45
  end
46
46
  end
47
47
 
48
- def report(exception, level: :error, description: nil, pii_safe: false)
48
+ def report(exception, level: :error, description: nil)
49
49
  # Anonymous exceptions to be logged as <Class:0x00007f8b1c0b3b40>
50
50
  message = +"#{exception.class.name || exception.class.inspect}" # standard:disable Style/RedundantInterpolation
51
51
 
52
- exception_message = pii_safe ? exception.message : nil
53
-
54
- if description || exception_message
55
- message << ':'
56
- message << " #{description}" if description
57
- message << " (#{exception.message})" if exception_message
58
- end
52
+ message << ": #{description}" if description
59
53
 
60
54
  event = Event::Log.new(
61
55
  message: message,
@@ -6,8 +6,11 @@ module Datadog
6
6
  module Core
7
7
  module Telemetry
8
8
  # MetricsManager aggregates and flushes metrics and distributions
9
+ #
10
+ # @api private
9
11
  class MetricsManager
10
12
  attr_reader :enabled
13
+ attr_reader :collections
11
14
 
12
15
  def initialize(aggregation_interval:, enabled:)
13
16
  @interval = aggregation_interval
@@ -68,6 +71,12 @@ module Datadog
68
71
  @enabled = false
69
72
  end
70
73
 
74
+ def clear
75
+ @mutex.synchronize do
76
+ @collections = {}
77
+ end
78
+ end
79
+
71
80
  private
72
81
 
73
82
  def fetch_or_create_collection(namespace)
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../environment/platform'
4
+ require_relative '../environment/process'
4
5
  require_relative '../utils/hash'
5
6
 
6
7
  module Datadog
@@ -11,9 +12,9 @@ module Datadog
11
12
  class << self
12
13
  using Core::Utils::Hash::Refinement
13
14
 
14
- def build_payload(event, seq_id, api_version: 'v2', debug: false)
15
+ def build_payload(event, seq_id, debug: false)
15
16
  hash = {
16
- api_version: api_version,
17
+ api_version: 'v2',
17
18
  application: application,
18
19
  debug: debug,
19
20
  host: host,
@@ -43,7 +44,7 @@ module Datadog
43
44
  tracer_version = "#{tracer_version}-ci-#{::Datadog::CI::VERSION::STRING}"
44
45
  end
45
46
 
46
- {
47
+ app = {
47
48
  env: config.env,
48
49
  language_name: Core::Environment::Ext::LANG,
49
50
  language_version: Core::Environment::Ext::LANG_VERSION,
@@ -53,6 +54,10 @@ module Datadog
53
54
  service_version: config.version,
54
55
  tracer_version: tracer_version
55
56
  }
57
+
58
+ tag_process_tags!(app, config)
59
+
60
+ app
56
61
  end
57
62
 
58
63
  def host
@@ -64,6 +69,15 @@ module Datadog
64
69
  kernel_version: Core::Environment::Platform.kernel_version
65
70
  }
66
71
  end
72
+
73
+ def tag_process_tags!(app, config)
74
+ return unless config.experimental_propagate_process_tags_enabled
75
+
76
+ process_tags = Core::Environment::Process.serialized
77
+ return if process_tags.empty?
78
+
79
+ app[:process_tags] = process_tags
80
+ end
67
81
  end
68
82
  end
69
83
  end
@@ -2,9 +2,8 @@
2
2
 
3
3
  require_relative '../../../transport/http/api/endpoint'
4
4
  require_relative '../../../transport/http/api/instance'
5
- require_relative '../../../transport/http/api/spec'
5
+ require_relative '../../../transport/http/client'
6
6
  require_relative '../../../transport/request'
7
- require_relative 'client'
8
7
 
9
8
  module Datadog
10
9
  module Core
@@ -12,35 +11,7 @@ module Datadog
12
11
  module Transport
13
12
  module HTTP
14
13
  module Telemetry
15
- module Client
16
- def send_telemetry_payload(request)
17
- send_request(request) do |api, env| # steep:ignore
18
- api.send_telemetry(env)
19
- end
20
- end
21
- end
22
-
23
14
  module API
24
- class Instance < Core::Transport::HTTP::API::Instance
25
- def send_telemetry(env)
26
- raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new('telemetry', self) unless spec.is_a?(Telemetry::API::Spec)
27
-
28
- spec.send_telemetry(env) do |request_env|
29
- call(request_env)
30
- end
31
- end
32
- end
33
-
34
- class Spec < Core::Transport::HTTP::API::Spec
35
- attr_accessor :telemetry
36
-
37
- def send_telemetry(env, &block)
38
- raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('telemetry', self) if telemetry.nil?
39
-
40
- telemetry.call(env, &block)
41
- end
42
- end
43
-
44
15
  class Endpoint < Datadog::Core::Transport::HTTP::API::Endpoint
45
16
  HEADER_CONTENT_TYPE = 'Content-Type'
46
17
 
@@ -64,12 +35,12 @@ module Datadog
64
35
  super
65
36
  end
66
37
 
67
- def headers(request_type:, api_key:, api_version: 'v2')
38
+ def headers(request_type:, api_key:)
68
39
  {
69
40
  Core::Transport::Ext::HTTP::HEADER_DD_INTERNAL_UNTRACED_REQUEST => '1',
70
41
  # Provided by encoder
71
42
  # 'Content-Type' => 'application/json',
72
- 'DD-Telemetry-API-Version' => api_version,
43
+ 'DD-Telemetry-API-Version' => 'v2',
73
44
  'DD-Telemetry-Request-Type' => request_type,
74
45
  'DD-Client-Library-Language' => Core::Environment::Ext::LANG,
75
46
  'DD-Client-Library-Version' => Core::Environment::Identity.gem_datadog_version_semver2,
@@ -83,8 +54,6 @@ module Datadog
83
54
  end
84
55
  end
85
56
  end
86
-
87
- HTTP::Client.include(Telemetry::Client)
88
57
  end
89
58
  end
90
59
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'telemetry'
4
- require_relative 'http/api'
3
+ require_relative '../../encoding'
5
4
  require_relative '../../transport/http'
5
+ require_relative 'telemetry'
6
6
 
7
7
  module Datadog
8
8
  module Core
@@ -10,6 +10,16 @@ module Datadog
10
10
  module Transport
11
11
  # Namespace for HTTP transport components
12
12
  module HTTP
13
+ AGENT_TELEMETRY = Telemetry::API::Endpoint.new(
14
+ '/telemetry/proxy/api/v2/apmtelemetry',
15
+ Core::Encoding::JSONEncoder,
16
+ )
17
+
18
+ AGENTLESS_TELEMETRY = Telemetry::API::Endpoint.new(
19
+ '/api/v2/apmtelemetry',
20
+ Core::Encoding::JSONEncoder,
21
+ )
22
+
13
23
  module_function
14
24
 
15
25
  # Builds a new Transport::HTTP::Client with default settings
@@ -18,18 +28,14 @@ module Datadog
18
28
  agent_settings:,
19
29
  logger:,
20
30
  api_key: nil,
21
- api_version: nil,
22
31
  headers: nil
23
32
  )
24
- Core::Transport::HTTP.build(api_instance_class: Telemetry::API::Instance,
33
+ Core::Transport::HTTP.build(
25
34
  logger: logger,
26
35
  agent_settings: agent_settings,
27
- api_version: api_version,
28
- headers: headers) do |transport|
29
- apis = API.defaults
30
-
31
- transport.api API::AGENTLESS_TELEMETRY, apis[API::AGENTLESS_TELEMETRY]
32
-
36
+ headers: headers
37
+ ) do |transport|
38
+ transport.api 'agentless_telemetry', AGENTLESS_TELEMETRY
33
39
  # Call block to apply any customization, if provided
34
40
  yield(transport) if block_given?
35
41
  end.to_transport(Core::Telemetry::Transport::Telemetry::Transport).tap do |transport|
@@ -42,15 +48,14 @@ module Datadog
42
48
  def agent_telemetry(
43
49
  agent_settings:,
44
50
  logger:,
45
- api_version: nil,
46
51
  headers: nil
47
52
  )
48
- Core::Transport::HTTP.build(api_instance_class: Telemetry::API::Instance,
53
+ Core::Transport::HTTP.build(
49
54
  logger: logger,
50
- agent_settings: agent_settings, api_version: api_version, headers: headers) do |transport|
51
- apis = API.defaults
52
-
53
- transport.api API::AGENT_TELEMETRY, apis[API::AGENT_TELEMETRY]
55
+ agent_settings: agent_settings,
56
+ headers: headers
57
+ ) do |transport|
58
+ transport.api 'agent_telemetry', AGENT_TELEMETRY
54
59
 
55
60
  # Call block to apply any customization, if provided
56
61
  yield(transport) if block_given?
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../../transport/parcel'
4
- require_relative 'http/client'
4
+ require_relative '../../transport/transport'
5
5
  require_relative 'http/telemetry'
6
6
 
7
7
  module Datadog
@@ -24,23 +24,15 @@ module Datadog
24
24
  end
25
25
  end
26
26
 
27
- class Transport
28
- attr_reader :client, :apis, :default_api, :current_api_id, :logger
27
+ class Transport < Core::Transport::Transport
29
28
  attr_accessor :api_key
30
29
 
31
- def initialize(apis, default_api, logger:)
32
- @apis = apis
33
- @logger = logger
34
-
35
- @client = HTTP::Client.new(@apis[default_api], logger: logger)
36
- end
37
-
38
30
  def send_telemetry(request_type:, payload:)
39
31
  json = JSON.dump(payload)
40
32
  parcel = EncodedParcel.new(json)
41
33
  request = Request.new(request_type, parcel, api_key)
42
34
 
43
- @client.send_telemetry_payload(request)
35
+ @client.send_request(:telemetry, request)
44
36
  # Perform no error checking here
45
37
  end
46
38
  end