datadog 2.12.1 → 2.19.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 (346) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +243 -2
  3. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +63 -56
  4. data/ext/datadog_profiling_native_extension/collectors_stack.c +263 -76
  5. data/ext/datadog_profiling_native_extension/collectors_stack.h +20 -3
  6. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +78 -26
  7. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
  8. data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
  9. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
  10. data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
  11. data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
  12. data/ext/datadog_profiling_native_extension/extconf.rb +10 -0
  13. data/ext/datadog_profiling_native_extension/heap_recorder.c +247 -364
  14. data/ext/datadog_profiling_native_extension/heap_recorder.h +4 -6
  15. data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
  16. data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +22 -0
  17. data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -5
  18. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +41 -21
  19. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +6 -4
  20. data/ext/datadog_profiling_native_extension/profiling.c +2 -0
  21. data/ext/datadog_profiling_native_extension/ruby_helpers.c +1 -13
  22. data/ext/datadog_profiling_native_extension/ruby_helpers.h +3 -11
  23. data/ext/datadog_profiling_native_extension/stack_recorder.c +173 -76
  24. data/ext/libdatadog_api/crashtracker.c +11 -12
  25. data/ext/libdatadog_api/crashtracker.h +5 -0
  26. data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
  27. data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
  28. data/ext/libdatadog_api/extconf.rb +2 -2
  29. data/ext/libdatadog_api/init.c +15 -0
  30. data/ext/libdatadog_api/library_config.c +164 -0
  31. data/ext/libdatadog_api/library_config.h +25 -0
  32. data/ext/libdatadog_api/macos_development.md +3 -3
  33. data/ext/libdatadog_api/process_discovery.c +112 -0
  34. data/ext/libdatadog_api/process_discovery.h +5 -0
  35. data/ext/libdatadog_extconf_helpers.rb +2 -2
  36. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
  37. data/lib/datadog/appsec/actions_handler.rb +24 -2
  38. data/lib/datadog/appsec/anonymizer.rb +16 -0
  39. data/lib/datadog/appsec/api_security/lru_cache.rb +56 -0
  40. data/lib/datadog/appsec/api_security/route_extractor.rb +71 -0
  41. data/lib/datadog/appsec/api_security/sampler.rb +59 -0
  42. data/lib/datadog/appsec/api_security.rb +23 -0
  43. data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
  44. data/lib/datadog/appsec/assets/waf_rules/recommended.json +257 -85
  45. data/lib/datadog/appsec/assets/waf_rules/strict.json +10 -78
  46. data/lib/datadog/appsec/autoload.rb +1 -1
  47. data/lib/datadog/appsec/component.rb +46 -61
  48. data/lib/datadog/appsec/compressed_json.rb +40 -0
  49. data/lib/datadog/appsec/configuration/settings.rb +153 -30
  50. data/lib/datadog/appsec/context.rb +7 -7
  51. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +10 -12
  52. data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
  53. data/lib/datadog/appsec/contrib/active_record/patcher.rb +22 -22
  54. data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
  55. data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
  56. data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
  57. data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
  58. data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
  59. data/lib/datadog/appsec/contrib/devise/patcher.rb +34 -23
  60. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
  61. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
  62. data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +2 -2
  63. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
  64. data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
  65. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +9 -10
  66. data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
  67. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +8 -9
  68. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +8 -9
  69. data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
  70. data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
  71. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +49 -32
  72. data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
  73. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +42 -30
  74. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +11 -13
  75. data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
  76. data/lib/datadog/appsec/contrib/rails/patcher.rb +21 -21
  77. data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
  78. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +10 -11
  79. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +17 -23
  80. data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
  81. data/lib/datadog/appsec/event.rb +96 -135
  82. data/lib/datadog/appsec/ext.rb +4 -2
  83. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -2
  84. data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
  85. data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
  86. data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
  87. data/lib/datadog/appsec/monitor/gateway/watcher.rb +49 -14
  88. data/lib/datadog/appsec/processor/rule_loader.rb +30 -33
  89. data/lib/datadog/appsec/remote.rb +31 -59
  90. data/lib/datadog/appsec/response.rb +6 -6
  91. data/lib/datadog/appsec/security_engine/engine.rb +194 -0
  92. data/lib/datadog/appsec/security_engine/runner.rb +13 -14
  93. data/lib/datadog/appsec/security_event.rb +39 -0
  94. data/lib/datadog/appsec/utils.rb +0 -2
  95. data/lib/datadog/appsec.rb +5 -8
  96. data/lib/datadog/core/buffer/random.rb +18 -2
  97. data/lib/datadog/core/configuration/agent_settings.rb +52 -0
  98. data/lib/datadog/core/configuration/agent_settings_resolver.rb +4 -46
  99. data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
  100. data/lib/datadog/core/configuration/components.rb +48 -31
  101. data/lib/datadog/core/configuration/components_state.rb +23 -0
  102. data/lib/datadog/core/configuration/ext.rb +4 -0
  103. data/lib/datadog/core/configuration/option.rb +81 -45
  104. data/lib/datadog/core/configuration/option_definition.rb +4 -4
  105. data/lib/datadog/core/configuration/options.rb +3 -3
  106. data/lib/datadog/core/configuration/settings.rb +109 -44
  107. data/lib/datadog/core/configuration/stable_config.rb +22 -0
  108. data/lib/datadog/core/configuration.rb +40 -16
  109. data/lib/datadog/core/crashtracking/component.rb +3 -10
  110. data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
  111. data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
  112. data/lib/datadog/core/encoding.rb +1 -1
  113. data/lib/datadog/core/environment/agent_info.rb +4 -3
  114. data/lib/datadog/core/environment/cgroup.rb +10 -12
  115. data/lib/datadog/core/environment/container.rb +38 -40
  116. data/lib/datadog/core/environment/ext.rb +6 -6
  117. data/lib/datadog/core/environment/git.rb +1 -0
  118. data/lib/datadog/core/environment/identity.rb +3 -3
  119. data/lib/datadog/core/environment/platform.rb +3 -3
  120. data/lib/datadog/core/environment/variable_helpers.rb +1 -1
  121. data/lib/datadog/core/error.rb +11 -9
  122. data/lib/datadog/core/logger.rb +2 -2
  123. data/lib/datadog/core/metrics/client.rb +20 -21
  124. data/lib/datadog/core/metrics/logging.rb +5 -5
  125. data/lib/datadog/core/process_discovery/tracer_memfd.rb +15 -0
  126. data/lib/datadog/core/process_discovery.rb +36 -0
  127. data/lib/datadog/core/rate_limiter.rb +4 -2
  128. data/lib/datadog/core/remote/client.rb +40 -32
  129. data/lib/datadog/core/remote/component.rb +6 -9
  130. data/lib/datadog/core/remote/configuration/digest.rb +7 -7
  131. data/lib/datadog/core/remote/configuration/path.rb +1 -1
  132. data/lib/datadog/core/remote/configuration/repository.rb +14 -1
  133. data/lib/datadog/core/remote/negotiation.rb +9 -9
  134. data/lib/datadog/core/remote/transport/config.rb +4 -3
  135. data/lib/datadog/core/remote/transport/http/client.rb +5 -4
  136. data/lib/datadog/core/remote/transport/http/config.rb +27 -37
  137. data/lib/datadog/core/remote/transport/http/negotiation.rb +7 -33
  138. data/lib/datadog/core/remote/transport/http.rb +22 -57
  139. data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
  140. data/lib/datadog/core/runtime/metrics.rb +12 -5
  141. data/lib/datadog/core/tag_builder.rb +56 -0
  142. data/lib/datadog/core/telemetry/component.rb +81 -52
  143. data/lib/datadog/core/telemetry/emitter.rb +23 -11
  144. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +66 -0
  145. data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
  146. data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
  147. data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
  148. data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
  149. data/lib/datadog/core/telemetry/event/app_started.rb +287 -0
  150. data/lib/datadog/core/telemetry/event/base.rb +40 -0
  151. data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
  152. data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
  153. data/lib/datadog/core/telemetry/event/log.rb +76 -0
  154. data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
  155. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
  156. data/lib/datadog/core/telemetry/event.rb +17 -472
  157. data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
  158. data/lib/datadog/core/telemetry/logger.rb +5 -4
  159. data/lib/datadog/core/telemetry/logging.rb +11 -5
  160. data/lib/datadog/core/telemetry/metric.rb +8 -8
  161. data/lib/datadog/core/telemetry/request.rb +4 -4
  162. data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
  163. data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
  164. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
  165. data/lib/datadog/core/telemetry/transport/http.rb +63 -0
  166. data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
  167. data/lib/datadog/core/telemetry/worker.rb +90 -24
  168. data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
  169. data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
  170. data/lib/datadog/core/transport/http/api/instance.rb +17 -0
  171. data/lib/datadog/core/transport/http/api/spec.rb +17 -0
  172. data/lib/datadog/core/transport/http/builder.rb +19 -17
  173. data/lib/datadog/core/transport/http/env.rb +8 -0
  174. data/lib/datadog/core/transport/http.rb +39 -2
  175. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
  176. data/lib/datadog/core/utils/duration.rb +32 -32
  177. data/lib/datadog/core/utils/forking.rb +2 -2
  178. data/lib/datadog/core/utils/network.rb +6 -6
  179. data/lib/datadog/core/utils/only_once_successful.rb +16 -5
  180. data/lib/datadog/core/utils/time.rb +20 -0
  181. data/lib/datadog/core/utils/truncation.rb +21 -0
  182. data/lib/datadog/core/utils.rb +7 -0
  183. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
  184. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
  185. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
  186. data/lib/datadog/core/worker.rb +1 -1
  187. data/lib/datadog/core/workers/async.rb +29 -12
  188. data/lib/datadog/core/workers/interval_loop.rb +12 -1
  189. data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
  190. data/lib/datadog/core.rb +8 -0
  191. data/lib/datadog/di/boot.rb +34 -0
  192. data/lib/datadog/di/component.rb +0 -2
  193. data/lib/datadog/di/instrumenter.rb +48 -5
  194. data/lib/datadog/di/probe_notification_builder.rb +38 -43
  195. data/lib/datadog/di/probe_notifier_worker.rb +25 -17
  196. data/lib/datadog/di/remote.rb +2 -0
  197. data/lib/datadog/di/serializer.rb +10 -2
  198. data/lib/datadog/di/transport/diagnostics.rb +4 -3
  199. data/lib/datadog/di/transport/http/api.rb +2 -12
  200. data/lib/datadog/di/transport/http/client.rb +4 -3
  201. data/lib/datadog/di/transport/http/diagnostics.rb +7 -34
  202. data/lib/datadog/di/transport/http/input.rb +18 -35
  203. data/lib/datadog/di/transport/http.rb +14 -62
  204. data/lib/datadog/di/transport/input.rb +14 -5
  205. data/lib/datadog/di/utils.rb +5 -0
  206. data/lib/datadog/di.rb +0 -33
  207. data/lib/datadog/error_tracking/collector.rb +87 -0
  208. data/lib/datadog/error_tracking/component.rb +167 -0
  209. data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
  210. data/lib/datadog/error_tracking/configuration.rb +11 -0
  211. data/lib/datadog/error_tracking/ext.rb +18 -0
  212. data/lib/datadog/error_tracking/extensions.rb +16 -0
  213. data/lib/datadog/error_tracking/filters.rb +77 -0
  214. data/lib/datadog/error_tracking.rb +18 -0
  215. data/lib/datadog/kit/appsec/events/v2.rb +195 -0
  216. data/lib/datadog/kit/appsec/events.rb +12 -0
  217. data/lib/datadog/kit/identity.rb +5 -1
  218. data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
  219. data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
  220. data/lib/datadog/opentelemetry/api/context.rb +16 -2
  221. data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
  222. data/lib/datadog/opentelemetry.rb +2 -1
  223. data/lib/datadog/profiling/collectors/code_provenance.rb +18 -9
  224. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +6 -0
  225. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
  226. data/lib/datadog/profiling/collectors/info.rb +44 -0
  227. data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
  228. data/lib/datadog/profiling/component.rb +8 -9
  229. data/lib/datadog/profiling/encoded_profile.rb +11 -0
  230. data/lib/datadog/profiling/exporter.rb +12 -7
  231. data/lib/datadog/profiling/ext.rb +0 -14
  232. data/lib/datadog/profiling/flush.rb +5 -8
  233. data/lib/datadog/profiling/http_transport.rb +7 -61
  234. data/lib/datadog/profiling/profiler.rb +2 -0
  235. data/lib/datadog/profiling/scheduler.rb +10 -2
  236. data/lib/datadog/profiling/sequence_tracker.rb +44 -0
  237. data/lib/datadog/profiling/stack_recorder.rb +9 -9
  238. data/lib/datadog/profiling/tag_builder.rb +7 -41
  239. data/lib/datadog/profiling/tasks/setup.rb +2 -0
  240. data/lib/datadog/profiling.rb +7 -2
  241. data/lib/datadog/single_step_instrument.rb +9 -0
  242. data/lib/datadog/tracing/analytics.rb +1 -1
  243. data/lib/datadog/tracing/component.rb +15 -12
  244. data/lib/datadog/tracing/configuration/ext.rb +7 -1
  245. data/lib/datadog/tracing/configuration/settings.rb +18 -2
  246. data/lib/datadog/tracing/context_provider.rb +1 -1
  247. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +15 -0
  248. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +19 -12
  249. data/lib/datadog/tracing/contrib/action_pack/ext.rb +2 -0
  250. data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
  251. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +11 -2
  252. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +33 -0
  253. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
  254. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -4
  255. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
  256. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
  257. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
  258. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
  259. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
  260. data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
  261. data/lib/datadog/tracing/contrib/ext.rb +1 -0
  262. data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
  263. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
  264. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
  265. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
  266. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
  267. data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
  268. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
  269. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
  270. data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
  271. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
  272. data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
  273. data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
  274. data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
  275. data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
  276. data/lib/datadog/tracing/contrib/karafka.rb +37 -0
  277. data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
  278. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
  279. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
  280. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
  281. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
  282. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
  283. data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
  284. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
  285. data/lib/datadog/tracing/contrib/patcher.rb +5 -2
  286. data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
  287. data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
  288. data/lib/datadog/tracing/contrib/rails/runner.rb +61 -40
  289. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
  290. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
  291. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
  292. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
  293. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
  294. data/lib/datadog/tracing/contrib/support.rb +28 -0
  295. data/lib/datadog/tracing/contrib.rb +1 -0
  296. data/lib/datadog/tracing/correlation.rb +9 -2
  297. data/lib/datadog/tracing/diagnostics/environment_logger.rb +3 -1
  298. data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
  299. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  300. data/lib/datadog/tracing/distributed/baggage.rb +131 -0
  301. data/lib/datadog/tracing/distributed/datadog.rb +4 -2
  302. data/lib/datadog/tracing/distributed/propagation.rb +25 -4
  303. data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
  304. data/lib/datadog/tracing/metadata/errors.rb +4 -4
  305. data/lib/datadog/tracing/metadata/ext.rb +5 -0
  306. data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
  307. data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
  308. data/lib/datadog/tracing/metadata.rb +2 -0
  309. data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
  310. data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
  311. data/lib/datadog/tracing/span.rb +10 -1
  312. data/lib/datadog/tracing/span_event.rb +2 -2
  313. data/lib/datadog/tracing/span_operation.rb +68 -16
  314. data/lib/datadog/tracing/sync_writer.rb +2 -3
  315. data/lib/datadog/tracing/trace_digest.rb +9 -2
  316. data/lib/datadog/tracing/trace_operation.rb +55 -27
  317. data/lib/datadog/tracing/trace_segment.rb +6 -4
  318. data/lib/datadog/tracing/tracer.rb +51 -7
  319. data/lib/datadog/tracing/transport/http/api.rb +2 -10
  320. data/lib/datadog/tracing/transport/http/client.rb +5 -4
  321. data/lib/datadog/tracing/transport/http/traces.rb +13 -41
  322. data/lib/datadog/tracing/transport/http.rb +11 -44
  323. data/lib/datadog/tracing/transport/serializable_trace.rb +3 -1
  324. data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
  325. data/lib/datadog/tracing/transport/traces.rb +26 -9
  326. data/lib/datadog/tracing/utils.rb +1 -1
  327. data/lib/datadog/tracing/workers/trace_writer.rb +2 -6
  328. data/lib/datadog/tracing/writer.rb +2 -6
  329. data/lib/datadog/tracing.rb +16 -3
  330. data/lib/datadog/version.rb +2 -2
  331. data/lib/datadog.rb +8 -2
  332. metadata +88 -23
  333. data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -92
  334. data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -114
  335. data/lib/datadog/appsec/contrib/devise/event.rb +0 -54
  336. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
  337. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
  338. data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
  339. data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
  340. data/lib/datadog/appsec/processor/rule_merger.rb +0 -170
  341. data/lib/datadog/appsec/processor.rb +0 -107
  342. data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
  343. data/lib/datadog/core/telemetry/http/env.rb +0 -20
  344. data/lib/datadog/core/telemetry/http/ext.rb +0 -28
  345. data/lib/datadog/core/telemetry/http/response.rb +0 -70
  346. data/lib/datadog/core/telemetry/http/transport.rb +0 -90
@@ -11,11 +11,12 @@ module Datadog
11
11
  # Client communicates with the agent and sync remote configuration
12
12
  class Client
13
13
  class TransportError < StandardError; end
14
+
14
15
  class SyncError < StandardError; end
15
16
 
16
17
  attr_reader :transport, :repository, :id, :dispatcher, :logger
17
18
 
18
- def initialize(transport, capabilities, logger:, repository: Configuration::Repository.new)
19
+ def initialize(transport, capabilities, logger: Datadog.logger, repository: Configuration::Repository.new)
19
20
  @transport = transport
20
21
  @logger = logger
21
22
 
@@ -119,7 +120,7 @@ module Datadog
119
120
  end
120
121
  end
121
122
 
122
- def payload # rubocop:disable Metrics/MethodLength
123
+ def payload # standard:disable Metrics/MethodLength
123
124
  state = repository.state
124
125
 
125
126
  client_tracer_tags = [
@@ -134,12 +135,19 @@ module Datadog
134
135
  "ruby.runtime.engine.name:#{RUBY_ENGINE}",
135
136
  "ruby.runtime.engine.version:#{ruby_engine_version}",
136
137
  "ruby.rubygems.platform.local:#{Gem::Platform.local}",
137
- "ruby.gem.libddwaf.version:#{gem_spec('libddwaf').version}",
138
- "ruby.gem.libddwaf.platform:#{gem_spec('libddwaf').platform}",
139
- "ruby.gem.libdatadog.version:#{gem_spec('libdatadog').version}",
140
- "ruby.gem.libdatadog.platform:#{gem_spec('libdatadog').platform}",
138
+ "ruby.gem.libddwaf.version:#{gem_spec("libddwaf").version}",
139
+ "ruby.gem.libddwaf.platform:#{gem_spec("libddwaf").platform}",
140
+ "ruby.gem.libdatadog.version:#{gem_spec("libdatadog").version}",
141
+ "ruby.gem.libdatadog.platform:#{gem_spec("libdatadog").platform}",
141
142
  ]
142
143
 
144
+ if (git_repository_url = Core::Environment::Git.git_repository_url)
145
+ client_tracer_tags << "git.repository_url:#{git_repository_url}"
146
+ end
147
+ if (git_commit_sha = Core::Environment::Git.git_commit_sha)
148
+ client_tracer_tags << "git.commit.sha:#{git_commit_sha}"
149
+ end
150
+
143
151
  client_tracer = {
144
152
  runtime_id: Core::Environment::Identity.id,
145
153
  language: Core::Environment::Identity.lang,
@@ -195,37 +203,37 @@ module Datadog
195
203
  return @native_platform unless @native_platform.nil?
196
204
 
197
205
  os = if RUBY_ENGINE == 'jruby'
198
- os_name = java.lang.System.get_property('os.name')
206
+ os_name = java.lang.System.get_property('os.name')
199
207
 
200
- case os_name
201
- when /linux/i then 'linux'
202
- when /mac/i then 'darwin'
203
- else os_name
204
- end
205
- else
206
- Gem::Platform.local.os
207
- end
208
+ case os_name
209
+ when /linux/i then 'linux'
210
+ when /mac/i then 'darwin'
211
+ else os_name
212
+ end
213
+ else
214
+ Gem::Platform.local.os
215
+ end
208
216
 
209
217
  version = if os != 'linux'
210
- nil
211
- elsif RUBY_PLATFORM =~ /linux-(.+)$/
212
- # Old rubygems don't handle non-gnu linux correctly
213
- Regexp.last_match(1)
214
- else
215
- 'gnu'
216
- end
218
+ nil
219
+ elsif RUBY_PLATFORM =~ /linux-(.+)$/
220
+ # Old rubygems don't handle non-gnu linux correctly
221
+ Regexp.last_match(1)
222
+ else
223
+ 'gnu'
224
+ end
217
225
 
218
226
  cpu = if RUBY_ENGINE == 'jruby'
219
- os_arch = java.lang.System.get_property('os.arch')
220
-
221
- case os_arch
222
- when 'amd64' then 'x86_64'
223
- when 'aarch64' then os == 'darwin' ? 'arm64' : 'aarch64'
224
- else os_arch
225
- end
226
- else
227
- Gem::Platform.local.cpu
228
- end
227
+ os_arch = java.lang.System.get_property('os.arch')
228
+
229
+ case os_arch
230
+ when 'amd64' then 'x86_64'
231
+ when 'aarch64' then (os == 'darwin') ? 'arm64' : 'aarch64'
232
+ else os_arch
233
+ end
234
+ else
235
+ Gem::Platform.local.cpu
236
+ end
229
237
 
230
238
  @native_platform = [cpu, os, version].compact.join('-')
231
239
  end
@@ -18,11 +18,8 @@ module Datadog
18
18
  def initialize(settings, capabilities, agent_settings, logger:)
19
19
  @logger = logger
20
20
 
21
- transport_options = {}
22
- transport_options[:agent_settings] = agent_settings if agent_settings
23
-
24
- negotiation = Negotiation.new(settings, agent_settings)
25
- transport_v7 = Datadog::Core::Remote::Transport::HTTP.v7(**transport_options) # steep:ignore
21
+ negotiation = Negotiation.new(settings, agent_settings, logger: logger)
22
+ transport_v7 = Datadog::Core::Remote::Transport::HTTP.v7(agent_settings: agent_settings, logger: logger)
26
23
 
27
24
  @barrier = Barrier.new(settings.remote.boot_timeout_seconds)
28
25
 
@@ -45,16 +42,16 @@ module Datadog
45
42
  logger.error do
46
43
  "remote worker client sync error: #{e.message} location: #{Array(e.backtrace).first}. skipping sync"
47
44
  end
48
- rescue StandardError => e
45
+ rescue => e
49
46
  # In case of unexpected errors, reset the negotiation object
50
47
  # given external conditions have changed and the negotiation
51
48
  # negotiation object stores error logging state that should be reset.
52
- negotiation = Negotiation.new(settings, agent_settings)
49
+ negotiation = Negotiation.new(settings, agent_settings, logger: logger)
53
50
 
54
51
  # Transient errors due to network or agent. Logged the error but not via telemetry
55
52
  logger.error do
56
- "remote worker error: #{e.class.name} #{e.message} location: #{Array(e.backtrace).first}. "\
57
- 'reseting client state'
53
+ "remote worker error: #{e.class.name} #{e.message} location: #{Array(e.backtrace).first}. " \
54
+ 'resetting client state'
58
55
  end
59
56
 
60
57
  # client state is unknown, state might be corrupted
@@ -29,13 +29,13 @@ module Datadog
29
29
  class << self
30
30
  def hexdigest(type, data)
31
31
  d = case type
32
- when :sha256
33
- ::Digest::SHA256.new
34
- when :sha512
35
- ::Digest::SHA512.new
36
- else
37
- raise InvalidHashTypeError, type
38
- end
32
+ when :sha256
33
+ ::Digest::SHA256.new
34
+ when :sha512
35
+ ::Digest::SHA512.new
36
+ else
37
+ raise InvalidHashTypeError, type
38
+ end
39
39
 
40
40
  while (buf = data.read(DIGEST_CHUNK))
41
41
  d.update(buf)
@@ -30,7 +30,7 @@ module Datadog
30
30
 
31
31
  raise ParseError, "could not parse: #{path.inspect}" if m.nil?
32
32
 
33
- org_id = m['org_id'] ? m['org_id'].to_i : nil
33
+ org_id = m['org_id']&.to_i
34
34
 
35
35
  source = m['source']
36
36
  raise ParseError, 'missing source value' unless source
@@ -237,6 +237,10 @@ module Datadog
237
237
  @path = path
238
238
  @previous = previous
239
239
  end
240
+
241
+ def type
242
+ :delete
243
+ end
240
244
  end
241
245
 
242
246
  # Insert change
@@ -247,6 +251,10 @@ module Datadog
247
251
  @path = path
248
252
  @content = content
249
253
  end
254
+
255
+ def type
256
+ :insert
257
+ end
250
258
  end
251
259
 
252
260
  # Update change
@@ -258,6 +266,10 @@ module Datadog
258
266
  @content = content
259
267
  @previous = previous
260
268
  end
269
+
270
+ def type
271
+ :update
272
+ end
261
273
  end
262
274
  end
263
275
 
@@ -272,7 +284,8 @@ module Datadog
272
284
 
273
285
  return deleted(path, previous) if previous && content.nil?
274
286
  return inserted(path, content) if content && previous.nil?
275
- return updated(path, content, previous) if content && previous
287
+
288
+ updated(path, content, previous) if content && previous
276
289
  end
277
290
 
278
291
  def deleted(path, previous)
@@ -7,11 +7,11 @@ module Datadog
7
7
  module Remote
8
8
  # Endpoint negotiation
9
9
  class Negotiation
10
- def initialize(_settings, agent_settings, suppress_logging: {})
11
- transport_options = {}
12
- transport_options[:agent_settings] = agent_settings if agent_settings
10
+ attr_reader :logger
13
11
 
14
- @transport_root = Datadog::Core::Remote::Transport::HTTP.root(**transport_options) # steep:ignore
12
+ def initialize(_settings, agent_settings, logger: Datadog.logger, suppress_logging: {})
13
+ @logger = logger
14
+ @transport_root = Datadog::Core::Remote::Transport::HTTP.root(agent_settings: agent_settings, logger: logger)
15
15
  @logged = suppress_logging
16
16
  end
17
17
 
@@ -20,7 +20,7 @@ module Datadog
20
20
 
21
21
  if res.internal_error? && network_error?(res.error)
22
22
  unless @logged[:agent_unreachable]
23
- Datadog.logger.warn { "agent unreachable: cannot negotiate #{path}" }
23
+ logger.warn { "agent unreachable: cannot negotiate #{path}" }
24
24
  @logged[:agent_unreachable] = true
25
25
  end
26
26
 
@@ -29,7 +29,7 @@ module Datadog
29
29
 
30
30
  if res.not_found?
31
31
  unless @logged[:no_info_endpoint]
32
- Datadog.logger.warn { "agent reachable but has no /info endpoint: cannot negotiate #{path}" }
32
+ logger.warn { "agent reachable but has no /info endpoint: cannot negotiate #{path}" }
33
33
  @logged[:no_info_endpoint] = true
34
34
  end
35
35
 
@@ -38,7 +38,7 @@ module Datadog
38
38
 
39
39
  unless res.ok?
40
40
  unless @logged[:unexpected_response]
41
- Datadog.logger.warn { "agent reachable but unexpected response: cannot negotiate #{path}" }
41
+ logger.warn { "agent reachable but unexpected response: cannot negotiate #{path}" }
42
42
  @logged[:unexpected_response] = true
43
43
  end
44
44
 
@@ -47,14 +47,14 @@ module Datadog
47
47
 
48
48
  unless res.endpoints.include?(path)
49
49
  unless @logged[:no_config_endpoint]
50
- Datadog.logger.warn { "agent reachable but does not report #{path}" }
50
+ logger.warn { "agent reachable but does not report #{path}" }
51
51
  @logged[:no_config_endpoint] = true
52
52
  end
53
53
 
54
54
  return false
55
55
  end
56
56
 
57
- Datadog.logger.debug { "agent reachable and reports #{path}" }
57
+ logger.debug { "agent reachable and reports #{path}" }
58
58
 
59
59
  true
60
60
  end
@@ -32,12 +32,13 @@ module Datadog
32
32
 
33
33
  # Config transport
34
34
  class Transport
35
- attr_reader :client, :apis, :default_api, :current_api_id
35
+ attr_reader :client, :apis, :default_api, :current_api_id, :logger
36
36
 
37
- def initialize(apis, default_api)
37
+ def initialize(apis, default_api, logger: Datadog.logger)
38
38
  @apis = apis
39
+ @logger = logger
39
40
 
40
- @client = HTTP::Client.new(current_api)
41
+ @client = HTTP::Client.new(current_api, logger: logger)
41
42
  end
42
43
 
43
44
  ##### there is only one transport! it's negotiation!
@@ -15,10 +15,11 @@ module Datadog
15
15
  module HTTP
16
16
  # Routes, encodes, and sends tracer data to the trace agent via HTTP.
17
17
  class Client
18
- attr_reader :api
18
+ attr_reader :api, :logger
19
19
 
20
- def initialize(api)
20
+ def initialize(api, logger: Datadog.logger)
21
21
  @api = api
22
+ @logger = logger
22
23
  end
23
24
 
24
25
  def send_request(request, &block)
@@ -27,12 +28,12 @@ module Datadog
27
28
 
28
29
  # Get responses from API
29
30
  yield(api, env)
30
- rescue StandardError => e
31
+ rescue => e
31
32
  message =
32
33
  "Internal error during #{self.class.name} request. Cause: #{e.class.name} #{e.message} " \
33
34
  "Location: #{Array(e.backtrace).first}"
34
35
 
35
- Datadog.logger.debug(message)
36
+ logger.debug(message)
36
37
 
37
38
  Datadog::Core::Transport::InternalErrorResponse.new(e)
38
39
  end
@@ -5,6 +5,7 @@ require 'json'
5
5
  require_relative '../config'
6
6
  require_relative 'client'
7
7
  require_relative '../../../utils/base64'
8
+ require_relative '../../../utils/truncation'
8
9
  require_relative '../../../transport/http/response'
9
10
  require_relative '../../../transport/http/api/endpoint'
10
11
 
@@ -20,9 +21,11 @@ module Datadog
20
21
  include Datadog::Core::Transport::HTTP::Response
21
22
  include Core::Remote::Transport::Config::Response
22
23
 
23
- def initialize(http_response, options = {}) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
24
+ def initialize(http_response, options = {}) # standard:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
24
25
  super(http_response)
25
26
 
27
+ raise AgentErrorResponse.new(http_response.code, http_response.payload) if http_response.code != 200
28
+
26
29
  begin
27
30
  payload = JSON.parse(http_response.payload, symbolize_names: true)
28
31
  rescue JSON::ParserError => e
@@ -130,8 +133,21 @@ module Datadog
130
133
  end
131
134
  end
132
135
 
136
+ # Base class for Remote Configuration Config errors
137
+ class ConfigError < StandardError
138
+ end
139
+
140
+ # When the agent returned an error response to our request
141
+ class AgentErrorResponse < ConfigError
142
+ def initialize(code, body)
143
+ truncated_body = Core::Utils::Truncation.truncate_in_middle(body, 700, 300)
144
+ message = "Agent returned an error response: #{code}: #{truncated_body}"
145
+ super(message)
146
+ end
147
+ end
148
+
133
149
  # When an expected value type is incorrect
134
- class TypeError < StandardError
150
+ class TypeError < ConfigError
135
151
  def initialize(type, value)
136
152
  message = "not a #{type}: #{value.inspect}"
137
153
 
@@ -140,7 +156,7 @@ module Datadog
140
156
  end
141
157
 
142
158
  # When value decoding fails
143
- class DecodeError < StandardError
159
+ class DecodeError < ConfigError
144
160
  def initialize(key, value)
145
161
  message = "could not decode key #{key.inspect}: #{value.inspect}"
146
162
 
@@ -149,7 +165,7 @@ module Datadog
149
165
  end
150
166
 
151
167
  # When value parsing fails
152
- class ParseError < StandardError
168
+ class ParseError < ConfigError
153
169
  def initialize(key, value)
154
170
  message = "could not parse key #{key.inspect}: #{value.inspect}"
155
171
 
@@ -177,51 +193,25 @@ module Datadog
177
193
  end
178
194
 
179
195
  def send_config(env, &block)
180
- raise NoConfigEndpointDefinedError, self if config.nil?
196
+ raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('config', self) if config.nil?
181
197
 
182
198
  config.call(env, &block)
183
199
  end
184
-
185
- # Raised when traces sent but no traces endpoint is defined
186
- class NoConfigEndpointDefinedError < StandardError
187
- attr_reader :spec
188
-
189
- def initialize(spec)
190
- super()
191
-
192
- @spec = spec
193
- end
194
-
195
- def message
196
- 'No config endpoint is defined for API specification!'
197
- end
198
- end
199
200
  end
200
201
 
201
202
  # Extensions for HTTP API Instance
202
203
  module Instance
203
204
  def send_config(env)
204
- raise ConfigNotSupportedError, spec unless spec.is_a?(Config::API::Spec)
205
+ unless spec.is_a?(Config::API::Spec)
206
+ raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new(
207
+ 'config', self
208
+ )
209
+ end
205
210
 
206
211
  spec.send_config(env) do |request_env|
207
212
  call(request_env)
208
213
  end
209
214
  end
210
-
211
- # Raised when traces sent to API that does not support traces
212
- class ConfigNotSupportedError < StandardError
213
- attr_reader :spec
214
-
215
- def initialize(spec)
216
- super()
217
-
218
- @spec = spec
219
- end
220
-
221
- def message
222
- 'Config not supported for this API!'
223
- end
224
- end
225
215
  end
226
216
 
227
217
  # Endpoint for remote configuration
@@ -241,7 +231,7 @@ module Datadog
241
231
  env.body = env.request.parcel.data
242
232
 
243
233
  # Query for response
244
- http_response = super(env, &block)
234
+ http_response = super
245
235
 
246
236
  response_options = {}
247
237
 
@@ -50,51 +50,25 @@ module Datadog
50
50
  end
51
51
 
52
52
  def send_info(env, &block)
53
- raise NoNegotiationEndpointDefinedError, self if info.nil?
53
+ raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('info', self) if info.nil?
54
54
 
55
55
  info.call(env, &block)
56
56
  end
57
-
58
- # Raised when traces sent but no traces endpoint is defined
59
- class NoNegotiationEndpointDefinedError < StandardError
60
- attr_reader :spec
61
-
62
- def initialize(spec)
63
- super()
64
-
65
- @spec = spec
66
- end
67
-
68
- def message
69
- 'No info endpoint is defined for API specification!'
70
- end
71
- end
72
57
  end
73
58
 
74
59
  # Extensions for HTTP API Instance
75
60
  module Instance
76
61
  def send_info(env)
77
- raise NegotiationNotSupportedError, spec unless spec.is_a?(Negotiation::API::Spec)
62
+ unless spec.is_a?(Negotiation::API::Spec)
63
+ raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new(
64
+ 'info', self
65
+ )
66
+ end
78
67
 
79
68
  spec.send_info(env) do |request_env|
80
69
  call(request_env)
81
70
  end
82
71
  end
83
-
84
- # Raised when traces sent to API that does not support traces
85
- class NegotiationNotSupportedError < StandardError
86
- attr_reader :spec
87
-
88
- def initialize(spec)
89
- super()
90
-
91
- @spec = spec
92
- end
93
-
94
- def message
95
- 'Info not supported for this API!'
96
- end
97
- end
98
72
  end
99
73
 
100
74
  # Endpoint for negotiation
@@ -105,7 +79,7 @@ module Datadog
105
79
 
106
80
  def call(env, &block)
107
81
  # Query for response
108
- http_response = super(env, &block)
82
+ http_response = super
109
83
 
110
84
  # Process the response
111
85
  body = JSON.parse(http_response.payload, symbolize_names: true) if http_response.ok?
@@ -29,87 +29,52 @@ module Datadog
29
29
  module HTTP
30
30
  module_function
31
31
 
32
- # Builds a new Transport::HTTP::Client
33
- def new(klass, &block)
34
- Core::Transport::HTTP.build(
35
- api_instance_class: API::Instance, &block
36
- ).to_transport(klass)
37
- end
38
-
39
32
  # Builds a new Transport::HTTP::Client with default settings
40
33
  # Pass a block to override any settings.
41
34
  def root(
42
35
  agent_settings:,
43
- **options
36
+ logger: Datadog.logger,
37
+ api_version: nil,
38
+ headers: nil
44
39
  )
45
- new(Core::Remote::Transport::Negotiation::Transport) do |transport|
46
- transport.adapter(agent_settings)
47
- transport.headers(default_headers)
48
-
40
+ Core::Transport::HTTP.build(
41
+ api_instance_class: API::Instance,
42
+ agent_settings: agent_settings,
43
+ logger: logger,
44
+ api_version: api_version,
45
+ headers: headers
46
+ ) do |transport|
49
47
  apis = API.defaults
50
48
 
51
49
  transport.api API::ROOT, apis[API::ROOT]
52
50
 
53
- # Apply any settings given by options
54
- unless options.empty?
55
- transport.default_api = options[:api_version] if options.key?(:api_version)
56
- transport.headers options[:headers] if options.key?(:headers)
57
- end
58
-
59
51
  # Call block to apply any customization, if provided
60
52
  yield(transport) if block_given?
61
- end
53
+ end.to_transport(Core::Remote::Transport::Negotiation::Transport)
62
54
  end
63
55
 
64
56
  # Builds a new Transport::HTTP::Client with default settings
65
57
  # Pass a block to override any settings.
66
58
  def v7(
67
59
  agent_settings:,
68
- **options
60
+ logger: Datadog.logger,
61
+ api_version: nil,
62
+ headers: nil
69
63
  )
70
- new(Core::Remote::Transport::Config::Transport) do |transport|
71
- transport.adapter(agent_settings)
72
- transport.headers default_headers
73
-
64
+ Core::Transport::HTTP.build(
65
+ api_instance_class: API::Instance,
66
+ agent_settings: agent_settings,
67
+ logger: logger,
68
+ api_version: api_version,
69
+ headers: headers
70
+ ) do |transport|
74
71
  apis = API.defaults
75
72
 
76
73
  transport.api API::V7, apis[API::V7]
77
74
 
78
- # Apply any settings given by options
79
- unless options.empty?
80
- transport.default_api = options[:api_version] if options.key?(:api_version)
81
- transport.headers options[:headers] if options.key?(:headers)
82
- end
83
-
84
75
  # Call block to apply any customization, if provided
85
76
  yield(transport) if block_given?
86
- end
87
- end
88
-
89
- def default_headers
90
- {
91
- Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
92
- Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
93
- Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION =>
94
- Datadog::Core::Environment::Ext::LANG_VERSION,
95
- Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
96
- Datadog::Core::Environment::Ext::LANG_INTERPRETER,
97
- Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
98
- Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION
99
- }.tap do |headers|
100
- # Add container ID, if present.
101
- container_id = Datadog::Core::Environment::Container.container_id
102
- headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
103
- # Sending this header to the agent will disable metrics computation (and billing) on the agent side
104
- # by pretending it has already been done on the library side.
105
- if Datadog.configuration.appsec.standalone.enabled
106
- headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_STATS] = 'yes'
107
- end
108
- end
109
- end
110
-
111
- def default_adapter
112
- Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
77
+ end.to_transport(Core::Remote::Transport::Config::Transport)
113
78
  end
114
79
  end
115
80
  end
@@ -49,12 +49,13 @@ module Datadog
49
49
 
50
50
  # Negotiation transport
51
51
  class Transport
52
- attr_reader :client, :apis, :default_api, :current_api_id
52
+ attr_reader :client, :apis, :default_api, :current_api_id, :logger
53
53
 
54
- def initialize(apis, default_api)
54
+ def initialize(apis, default_api, logger: Datadog.logger)
55
55
  @apis = apis
56
+ @logger = logger
56
57
 
57
- @client = HTTP::Client.new(current_api)
58
+ @client = HTTP::Client.new(current_api, logger: logger)
58
59
  end
59
60
 
60
61
  def send_info