datadog 2.7.1 → 2.17.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 (417) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +310 -1
  3. data/ext/datadog_profiling_native_extension/clock_id.h +2 -2
  4. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +66 -56
  5. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
  6. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +1 -1
  7. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +16 -16
  8. data/ext/datadog_profiling_native_extension/collectors_stack.c +10 -10
  9. data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -2
  10. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +314 -145
  11. data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
  12. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
  13. data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
  14. data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
  15. data/ext/datadog_profiling_native_extension/extconf.rb +7 -8
  16. data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +2 -0
  17. data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +0 -8
  18. data/ext/datadog_profiling_native_extension/heap_recorder.c +61 -174
  19. data/ext/datadog_profiling_native_extension/heap_recorder.h +2 -2
  20. data/ext/datadog_profiling_native_extension/http_transport.c +64 -98
  21. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +68 -1
  22. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +10 -1
  23. data/ext/datadog_profiling_native_extension/profiling.c +19 -8
  24. data/ext/datadog_profiling_native_extension/ruby_helpers.c +8 -8
  25. data/ext/datadog_profiling_native_extension/stack_recorder.c +84 -131
  26. data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -2
  27. data/ext/datadog_profiling_native_extension/time_helpers.h +1 -1
  28. data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.c +47 -0
  29. data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +31 -0
  30. data/ext/libdatadog_api/crashtracker.c +17 -15
  31. data/ext/libdatadog_api/crashtracker.h +5 -0
  32. data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
  33. data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
  34. data/ext/libdatadog_api/init.c +15 -0
  35. data/ext/libdatadog_api/library_config.c +122 -0
  36. data/ext/libdatadog_api/library_config.h +19 -0
  37. data/ext/libdatadog_api/macos_development.md +3 -3
  38. data/ext/libdatadog_api/process_discovery.c +117 -0
  39. data/ext/libdatadog_api/process_discovery.h +5 -0
  40. data/ext/libdatadog_extconf_helpers.rb +1 -1
  41. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
  42. data/lib/datadog/appsec/actions_handler.rb +49 -0
  43. data/lib/datadog/appsec/anonymizer.rb +16 -0
  44. data/lib/datadog/appsec/api_security/lru_cache.rb +49 -0
  45. data/lib/datadog/appsec/api_security.rb +9 -0
  46. data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
  47. data/lib/datadog/appsec/assets/waf_rules/processors.json +239 -10
  48. data/lib/datadog/appsec/assets/waf_rules/recommended.json +355 -157
  49. data/lib/datadog/appsec/assets/waf_rules/scanners.json +926 -17
  50. data/lib/datadog/appsec/assets/waf_rules/strict.json +62 -32
  51. data/lib/datadog/appsec/autoload.rb +1 -1
  52. data/lib/datadog/appsec/component.rb +41 -33
  53. data/lib/datadog/appsec/compressed_json.rb +40 -0
  54. data/lib/datadog/appsec/configuration/settings.rb +152 -25
  55. data/lib/datadog/appsec/context.rb +74 -0
  56. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +92 -0
  57. data/lib/datadog/appsec/contrib/active_record/integration.rb +41 -0
  58. data/lib/datadog/appsec/contrib/active_record/patcher.rb +101 -0
  59. data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
  60. data/lib/datadog/appsec/contrib/devise/configuration.rb +52 -0
  61. data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
  62. data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
  63. data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
  64. data/lib/datadog/appsec/contrib/devise/patcher.rb +33 -25
  65. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
  66. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
  67. data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +3 -3
  68. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
  69. data/lib/datadog/appsec/contrib/excon/integration.rb +41 -0
  70. data/lib/datadog/appsec/contrib/excon/patcher.rb +28 -0
  71. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +42 -0
  72. data/lib/datadog/appsec/contrib/faraday/connection_patch.rb +22 -0
  73. data/lib/datadog/appsec/contrib/faraday/integration.rb +42 -0
  74. data/lib/datadog/appsec/contrib/faraday/patcher.rb +53 -0
  75. data/lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb +22 -0
  76. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +41 -0
  77. data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +1 -7
  78. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +17 -30
  79. data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
  80. data/lib/datadog/appsec/contrib/graphql/patcher.rb +0 -3
  81. data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
  82. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +3 -3
  83. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +78 -98
  84. data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
  85. data/lib/datadog/appsec/contrib/rack/patcher.rb +0 -3
  86. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +10 -11
  87. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -68
  88. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +16 -33
  89. data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
  90. data/lib/datadog/appsec/contrib/rails/patcher.rb +25 -38
  91. data/lib/datadog/appsec/contrib/rest_client/integration.rb +45 -0
  92. data/lib/datadog/appsec/contrib/rest_client/patcher.rb +28 -0
  93. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +38 -0
  94. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +31 -68
  95. data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
  96. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +5 -31
  97. data/lib/datadog/appsec/event.rb +96 -135
  98. data/lib/datadog/appsec/ext.rb +12 -3
  99. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -2
  100. data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
  101. data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
  102. data/lib/datadog/appsec/metrics/collector.rb +38 -0
  103. data/lib/datadog/appsec/metrics/exporter.rb +35 -0
  104. data/lib/datadog/appsec/metrics/telemetry.rb +23 -0
  105. data/lib/datadog/appsec/metrics.rb +13 -0
  106. data/lib/datadog/appsec/monitor/gateway/watcher.rb +52 -32
  107. data/lib/datadog/appsec/processor/rule_loader.rb +26 -31
  108. data/lib/datadog/appsec/processor/rule_merger.rb +7 -6
  109. data/lib/datadog/appsec/processor.rb +5 -4
  110. data/lib/datadog/appsec/remote.rb +26 -12
  111. data/lib/datadog/appsec/response.rb +19 -85
  112. data/lib/datadog/appsec/security_engine/result.rb +67 -0
  113. data/lib/datadog/appsec/security_engine/runner.rb +88 -0
  114. data/lib/datadog/appsec/security_engine.rb +9 -0
  115. data/lib/datadog/appsec/security_event.rb +39 -0
  116. data/lib/datadog/appsec/utils.rb +0 -2
  117. data/lib/datadog/appsec.rb +23 -10
  118. data/lib/datadog/auto_instrument.rb +3 -0
  119. data/lib/datadog/core/buffer/random.rb +18 -2
  120. data/lib/datadog/core/configuration/agent_settings_resolver.rb +42 -14
  121. data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
  122. data/lib/datadog/core/configuration/components.rb +76 -32
  123. data/lib/datadog/core/configuration/components_state.rb +23 -0
  124. data/lib/datadog/core/configuration/ext.rb +5 -1
  125. data/lib/datadog/core/configuration/option.rb +79 -43
  126. data/lib/datadog/core/configuration/option_definition.rb +6 -4
  127. data/lib/datadog/core/configuration/options.rb +3 -3
  128. data/lib/datadog/core/configuration/settings.rb +100 -41
  129. data/lib/datadog/core/configuration/stable_config.rb +23 -0
  130. data/lib/datadog/core/configuration.rb +43 -11
  131. data/lib/datadog/{tracing → core}/contrib/rails/utils.rb +1 -3
  132. data/lib/datadog/core/crashtracking/component.rb +4 -13
  133. data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
  134. data/lib/datadog/core/encoding.rb +17 -1
  135. data/lib/datadog/core/environment/agent_info.rb +78 -0
  136. data/lib/datadog/core/environment/cgroup.rb +10 -12
  137. data/lib/datadog/core/environment/container.rb +38 -40
  138. data/lib/datadog/core/environment/ext.rb +6 -6
  139. data/lib/datadog/core/environment/git.rb +1 -0
  140. data/lib/datadog/core/environment/identity.rb +3 -3
  141. data/lib/datadog/core/environment/platform.rb +3 -3
  142. data/lib/datadog/core/environment/variable_helpers.rb +1 -1
  143. data/lib/datadog/core/error.rb +11 -9
  144. data/lib/datadog/core/logger.rb +2 -2
  145. data/lib/datadog/core/metrics/client.rb +27 -27
  146. data/lib/datadog/core/metrics/logging.rb +5 -5
  147. data/lib/datadog/core/process_discovery.rb +32 -0
  148. data/lib/datadog/core/rate_limiter.rb +4 -2
  149. data/lib/datadog/core/remote/client/capabilities.rb +6 -0
  150. data/lib/datadog/core/remote/client.rb +107 -92
  151. data/lib/datadog/core/remote/component.rb +18 -19
  152. data/lib/datadog/core/remote/configuration/digest.rb +7 -7
  153. data/lib/datadog/core/remote/configuration/path.rb +1 -1
  154. data/lib/datadog/core/remote/configuration/repository.rb +2 -1
  155. data/lib/datadog/core/remote/negotiation.rb +9 -9
  156. data/lib/datadog/core/remote/transport/config.rb +4 -3
  157. data/lib/datadog/core/remote/transport/http/api.rb +13 -18
  158. data/lib/datadog/core/remote/transport/http/client.rb +5 -4
  159. data/lib/datadog/core/remote/transport/http/config.rb +27 -55
  160. data/lib/datadog/core/remote/transport/http/negotiation.rb +8 -51
  161. data/lib/datadog/core/remote/transport/http.rb +25 -94
  162. data/lib/datadog/core/remote/transport/negotiation.rb +17 -4
  163. data/lib/datadog/core/remote/worker.rb +10 -7
  164. data/lib/datadog/core/runtime/metrics.rb +12 -5
  165. data/lib/datadog/core/telemetry/component.rb +84 -49
  166. data/lib/datadog/core/telemetry/emitter.rb +23 -11
  167. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +65 -0
  168. data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
  169. data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
  170. data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
  171. data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
  172. data/lib/datadog/core/telemetry/event/app_started.rb +179 -0
  173. data/lib/datadog/core/telemetry/event/base.rb +40 -0
  174. data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
  175. data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
  176. data/lib/datadog/core/telemetry/event/log.rb +76 -0
  177. data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
  178. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
  179. data/lib/datadog/core/telemetry/event.rb +17 -383
  180. data/lib/datadog/core/telemetry/ext.rb +1 -0
  181. data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
  182. data/lib/datadog/core/telemetry/logger.rb +1 -1
  183. data/lib/datadog/core/telemetry/logging.rb +2 -2
  184. data/lib/datadog/core/telemetry/metric.rb +28 -6
  185. data/lib/datadog/core/telemetry/request.rb +4 -4
  186. data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
  187. data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
  188. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
  189. data/lib/datadog/core/telemetry/transport/http.rb +63 -0
  190. data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
  191. data/lib/datadog/core/telemetry/worker.rb +128 -25
  192. data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
  193. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
  194. data/lib/datadog/{tracing → core}/transport/http/api/instance.rb +18 -1
  195. data/lib/datadog/core/transport/http/api/spec.rb +36 -0
  196. data/lib/datadog/{tracing → core}/transport/http/builder.rb +53 -31
  197. data/lib/datadog/core/transport/http.rb +75 -0
  198. data/lib/datadog/core/transport/response.rb +4 -0
  199. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
  200. data/lib/datadog/core/utils/duration.rb +32 -32
  201. data/lib/datadog/core/utils/forking.rb +2 -2
  202. data/lib/datadog/core/utils/network.rb +6 -6
  203. data/lib/datadog/core/utils/only_once_successful.rb +16 -5
  204. data/lib/datadog/core/utils/time.rb +20 -0
  205. data/lib/datadog/core/utils/truncation.rb +21 -0
  206. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
  207. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
  208. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
  209. data/lib/datadog/core/worker.rb +1 -1
  210. data/lib/datadog/core/workers/async.rb +29 -12
  211. data/lib/datadog/core/workers/interval_loop.rb +12 -1
  212. data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
  213. data/lib/datadog/core.rb +8 -0
  214. data/lib/datadog/di/base.rb +115 -0
  215. data/lib/datadog/di/boot.rb +34 -0
  216. data/lib/datadog/di/code_tracker.rb +26 -15
  217. data/lib/datadog/di/component.rb +23 -14
  218. data/lib/datadog/di/configuration/settings.rb +25 -1
  219. data/lib/datadog/di/contrib/active_record.rb +1 -0
  220. data/lib/datadog/di/contrib/railtie.rb +15 -0
  221. data/lib/datadog/di/contrib.rb +28 -0
  222. data/lib/datadog/di/error.rb +5 -0
  223. data/lib/datadog/di/instrumenter.rb +111 -20
  224. data/lib/datadog/di/logger.rb +30 -0
  225. data/lib/datadog/di/preload.rb +18 -0
  226. data/lib/datadog/di/probe.rb +14 -7
  227. data/lib/datadog/di/probe_builder.rb +1 -0
  228. data/lib/datadog/di/probe_manager.rb +11 -5
  229. data/lib/datadog/di/probe_notification_builder.rb +34 -8
  230. data/lib/datadog/di/probe_notifier_worker.rb +52 -26
  231. data/lib/datadog/di/redactor.rb +0 -1
  232. data/lib/datadog/di/remote.rb +147 -0
  233. data/lib/datadog/di/serializer.rb +14 -7
  234. data/lib/datadog/di/transport/diagnostics.rb +62 -0
  235. data/lib/datadog/di/transport/http/api.rb +42 -0
  236. data/lib/datadog/di/transport/http/client.rb +47 -0
  237. data/lib/datadog/di/transport/http/diagnostics.rb +65 -0
  238. data/lib/datadog/di/transport/http/input.rb +67 -0
  239. data/lib/datadog/di/transport/http.rb +57 -0
  240. data/lib/datadog/di/transport/input.rb +62 -0
  241. data/lib/datadog/di/utils.rb +103 -0
  242. data/lib/datadog/di.rb +14 -76
  243. data/lib/datadog/error_tracking/collector.rb +87 -0
  244. data/lib/datadog/error_tracking/component.rb +167 -0
  245. data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
  246. data/lib/datadog/error_tracking/configuration.rb +11 -0
  247. data/lib/datadog/error_tracking/ext.rb +18 -0
  248. data/lib/datadog/error_tracking/extensions.rb +16 -0
  249. data/lib/datadog/error_tracking/filters.rb +77 -0
  250. data/lib/datadog/error_tracking.rb +18 -0
  251. data/lib/datadog/kit/appsec/events.rb +15 -3
  252. data/lib/datadog/kit/identity.rb +9 -5
  253. data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
  254. data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
  255. data/lib/datadog/opentelemetry/api/context.rb +16 -2
  256. data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
  257. data/lib/datadog/opentelemetry.rb +2 -1
  258. data/lib/datadog/profiling/collectors/code_provenance.rb +1 -1
  259. data/lib/datadog/profiling/collectors/info.rb +3 -0
  260. data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
  261. data/lib/datadog/profiling/component.rb +60 -76
  262. data/lib/datadog/profiling/encoded_profile.rb +11 -0
  263. data/lib/datadog/profiling/exporter.rb +3 -4
  264. data/lib/datadog/profiling/ext.rb +0 -2
  265. data/lib/datadog/profiling/flush.rb +5 -8
  266. data/lib/datadog/profiling/http_transport.rb +6 -85
  267. data/lib/datadog/profiling/load_native_extension.rb +1 -33
  268. data/lib/datadog/profiling/scheduler.rb +8 -1
  269. data/lib/datadog/profiling/stack_recorder.rb +4 -4
  270. data/lib/datadog/profiling/tag_builder.rb +1 -5
  271. data/lib/datadog/profiling.rb +6 -2
  272. data/lib/datadog/tracing/analytics.rb +1 -1
  273. data/lib/datadog/tracing/component.rb +16 -12
  274. data/lib/datadog/tracing/configuration/ext.rb +8 -1
  275. data/lib/datadog/tracing/configuration/settings.rb +22 -10
  276. data/lib/datadog/tracing/context_provider.rb +1 -1
  277. data/lib/datadog/tracing/contrib/action_cable/integration.rb +5 -2
  278. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +6 -2
  279. data/lib/datadog/tracing/contrib/action_pack/integration.rb +5 -2
  280. data/lib/datadog/tracing/contrib/action_view/integration.rb +5 -2
  281. data/lib/datadog/tracing/contrib/active_job/integration.rb +5 -2
  282. data/lib/datadog/tracing/contrib/active_record/integration.rb +7 -3
  283. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +7 -2
  284. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +36 -1
  285. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
  286. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +14 -4
  287. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -0
  288. data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -2
  289. data/lib/datadog/tracing/contrib/auto_instrument.rb +2 -2
  290. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
  291. data/lib/datadog/tracing/contrib/aws/integration.rb +3 -0
  292. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
  293. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -0
  294. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
  295. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +4 -0
  296. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +6 -1
  297. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
  298. data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
  299. data/lib/datadog/tracing/contrib/ext.rb +1 -0
  300. data/lib/datadog/tracing/contrib/extensions.rb +29 -3
  301. data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
  302. data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +21 -0
  303. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -0
  304. data/lib/datadog/tracing/contrib/graphql/ext.rb +5 -0
  305. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +102 -11
  306. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
  307. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
  308. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
  309. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
  310. data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
  311. data/lib/datadog/tracing/contrib/http/integration.rb +3 -0
  312. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
  313. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
  314. data/lib/datadog/tracing/contrib/httprb/integration.rb +3 -0
  315. data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -0
  316. data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
  317. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
  318. data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
  319. data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
  320. data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
  321. data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
  322. data/lib/datadog/tracing/contrib/karafka.rb +37 -0
  323. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
  324. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
  325. data/lib/datadog/tracing/contrib/mongodb/integration.rb +3 -0
  326. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
  327. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
  328. data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
  329. data/lib/datadog/tracing/contrib/opensearch/integration.rb +3 -0
  330. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
  331. data/lib/datadog/tracing/contrib/patcher.rb +5 -2
  332. data/lib/datadog/tracing/contrib/presto/integration.rb +3 -0
  333. data/lib/datadog/tracing/contrib/rack/header_collection.rb +11 -1
  334. data/lib/datadog/tracing/contrib/rack/integration.rb +2 -2
  335. data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -1
  336. data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
  337. data/lib/datadog/tracing/contrib/rails/framework.rb +2 -2
  338. data/lib/datadog/tracing/contrib/rails/patcher.rb +1 -1
  339. data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -0
  340. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
  341. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
  342. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
  343. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +1 -1
  344. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +6 -1
  345. data/lib/datadog/tracing/contrib/support.rb +28 -0
  346. data/lib/datadog/tracing/contrib.rb +1 -0
  347. data/lib/datadog/tracing/correlation.rb +9 -2
  348. data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
  349. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  350. data/lib/datadog/tracing/distributed/baggage.rb +131 -0
  351. data/lib/datadog/tracing/distributed/datadog.rb +4 -2
  352. data/lib/datadog/tracing/distributed/propagation.rb +25 -4
  353. data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
  354. data/lib/datadog/tracing/metadata/errors.rb +4 -4
  355. data/lib/datadog/tracing/metadata/ext.rb +5 -0
  356. data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
  357. data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
  358. data/lib/datadog/tracing/metadata.rb +2 -0
  359. data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
  360. data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
  361. data/lib/datadog/tracing/span.rb +22 -5
  362. data/lib/datadog/tracing/span_event.rb +124 -4
  363. data/lib/datadog/tracing/span_operation.rb +52 -16
  364. data/lib/datadog/tracing/sync_writer.rb +9 -5
  365. data/lib/datadog/tracing/trace_digest.rb +9 -2
  366. data/lib/datadog/tracing/trace_operation.rb +44 -24
  367. data/lib/datadog/tracing/trace_segment.rb +6 -4
  368. data/lib/datadog/tracing/tracer.rb +60 -12
  369. data/lib/datadog/tracing/transport/http/api.rb +5 -4
  370. data/lib/datadog/tracing/transport/http/client.rb +5 -4
  371. data/lib/datadog/tracing/transport/http/traces.rb +13 -44
  372. data/lib/datadog/tracing/transport/http.rb +13 -70
  373. data/lib/datadog/tracing/transport/serializable_trace.rb +31 -7
  374. data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
  375. data/lib/datadog/tracing/transport/traces.rb +47 -13
  376. data/lib/datadog/tracing/utils.rb +1 -1
  377. data/lib/datadog/tracing/workers/trace_writer.rb +8 -5
  378. data/lib/datadog/tracing/workers.rb +5 -4
  379. data/lib/datadog/tracing/writer.rb +10 -6
  380. data/lib/datadog/tracing.rb +16 -3
  381. data/lib/datadog/version.rb +2 -2
  382. data/lib/datadog.rb +2 -0
  383. metadata +143 -50
  384. data/ext/datadog_profiling_loader/datadog_profiling_loader.c +0 -142
  385. data/ext/datadog_profiling_loader/extconf.rb +0 -60
  386. data/lib/datadog/appsec/contrib/devise/event.rb +0 -57
  387. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -77
  388. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -54
  389. data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
  390. data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
  391. data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +0 -46
  392. data/lib/datadog/appsec/contrib/patcher.rb +0 -12
  393. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +0 -69
  394. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +0 -47
  395. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +0 -53
  396. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +0 -53
  397. data/lib/datadog/appsec/contrib/sinatra/ext.rb +0 -14
  398. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +0 -48
  399. data/lib/datadog/appsec/monitor/reactive/set_user.rb +0 -45
  400. data/lib/datadog/appsec/processor/actions.rb +0 -49
  401. data/lib/datadog/appsec/processor/context.rb +0 -107
  402. data/lib/datadog/appsec/reactive/address_hash.rb +0 -22
  403. data/lib/datadog/appsec/reactive/engine.rb +0 -47
  404. data/lib/datadog/appsec/reactive/operation.rb +0 -68
  405. data/lib/datadog/appsec/reactive/subscriber.rb +0 -19
  406. data/lib/datadog/appsec/scope.rb +0 -58
  407. data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
  408. data/lib/datadog/core/crashtracking/agent_base_url.rb +0 -21
  409. data/lib/datadog/core/remote/transport/http/api/instance.rb +0 -39
  410. data/lib/datadog/core/remote/transport/http/api/spec.rb +0 -21
  411. data/lib/datadog/core/remote/transport/http/builder.rb +0 -219
  412. data/lib/datadog/core/telemetry/http/env.rb +0 -20
  413. data/lib/datadog/core/telemetry/http/ext.rb +0 -28
  414. data/lib/datadog/core/telemetry/http/response.rb +0 -70
  415. data/lib/datadog/core/telemetry/http/transport.rb +0 -90
  416. data/lib/datadog/di/transport.rb +0 -81
  417. data/lib/datadog/tracing/transport/http/api/spec.rb +0 -19
@@ -5,25 +5,10 @@ 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
 
11
- # TODO: Decouple standard transport/http/api/instance
12
- #
13
- # Separate classes are needed because transport/http/trace includes
14
- # Trace::API::Instance which closes over and uses a single spec, which is
15
- # negotiated as either /v3 or /v4 for the whole API at the spec level, but we
16
- # need an independent toplevel path at the endpoint level.
17
- #
18
- # Separate classes are needed because of `include Trace::API::Instance`.
19
- #
20
- # Below should be:
21
- # require_relative '../../../core/transport/http/api/instance'
22
- require_relative 'api/instance'
23
- # Below should be:
24
- # require_relative '../../../core/transport/http/api/spec'
25
- require_relative 'api/spec'
26
-
27
12
  module Datadog
28
13
  module Core
29
14
  module Remote
@@ -36,9 +21,11 @@ module Datadog
36
21
  include Datadog::Core::Transport::HTTP::Response
37
22
  include Core::Remote::Transport::Config::Response
38
23
 
39
- 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
40
25
  super(http_response)
41
26
 
27
+ raise AgentErrorResponse.new(http_response.code, http_response.payload) if http_response.code != 200
28
+
42
29
  begin
43
30
  payload = JSON.parse(http_response.payload, symbolize_names: true)
44
31
  rescue JSON::ParserError => e
@@ -146,8 +133,21 @@ module Datadog
146
133
  end
147
134
  end
148
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
+
149
149
  # When an expected value type is incorrect
150
- class TypeError < StandardError
150
+ class TypeError < ConfigError
151
151
  def initialize(type, value)
152
152
  message = "not a #{type}: #{value.inspect}"
153
153
 
@@ -156,7 +156,7 @@ module Datadog
156
156
  end
157
157
 
158
158
  # When value decoding fails
159
- class DecodeError < StandardError
159
+ class DecodeError < ConfigError
160
160
  def initialize(key, value)
161
161
  message = "could not decode key #{key.inspect}: #{value.inspect}"
162
162
 
@@ -165,7 +165,7 @@ module Datadog
165
165
  end
166
166
 
167
167
  # When value parsing fails
168
- class ParseError < StandardError
168
+ class ParseError < ConfigError
169
169
  def initialize(key, value)
170
170
  message = "could not parse key #{key.inspect}: #{value.inspect}"
171
171
 
@@ -193,51 +193,25 @@ module Datadog
193
193
  end
194
194
 
195
195
  def send_config(env, &block)
196
- raise NoConfigEndpointDefinedError, self if config.nil?
196
+ raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('config', self) if config.nil?
197
197
 
198
198
  config.call(env, &block)
199
199
  end
200
-
201
- # Raised when traces sent but no traces endpoint is defined
202
- class NoConfigEndpointDefinedError < StandardError
203
- attr_reader :spec
204
-
205
- def initialize(spec)
206
- super()
207
-
208
- @spec = spec
209
- end
210
-
211
- def message
212
- 'No config endpoint is defined for API specification!'
213
- end
214
- end
215
200
  end
216
201
 
217
202
  # Extensions for HTTP API Instance
218
203
  module Instance
219
204
  def send_config(env)
220
- 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
221
210
 
222
211
  spec.send_config(env) do |request_env|
223
212
  call(request_env)
224
213
  end
225
214
  end
226
-
227
- # Raised when traces sent to API that does not support traces
228
- class ConfigNotSupportedError < StandardError
229
- attr_reader :spec
230
-
231
- def initialize(spec)
232
- super()
233
-
234
- @spec = spec
235
- end
236
-
237
- def message
238
- 'Config not supported for this API!'
239
- end
240
- end
241
215
  end
242
216
 
243
217
  # Endpoint for remote configuration
@@ -257,7 +231,7 @@ module Datadog
257
231
  env.body = env.request.parcel.data
258
232
 
259
233
  # Query for response
260
- http_response = super(env, &block)
234
+ http_response = super
261
235
 
262
236
  response_options = {}
263
237
 
@@ -270,8 +244,6 @@ module Datadog
270
244
  # Add remote configuration behavior to transport components
271
245
  ###### overrides send_payload! which calls send_<endpoint>! kills any other possible endpoint!
272
246
  HTTP::Client.include(Config::Client)
273
- HTTP::API::Spec.include(Config::API::Spec)
274
- HTTP::API::Instance.include(Config::API::Instance)
275
247
  end
276
248
  end
277
249
  end
@@ -7,22 +7,6 @@ require_relative 'client'
7
7
  require_relative '../../../transport/http/response'
8
8
  require_relative '../../../transport/http/api/endpoint'
9
9
 
10
- # TODO: Decouple standard transport/http/api/instance
11
- #
12
- # Separate classes are needed because transport/http/trace includes
13
- # Trace::API::Instance which closes over and uses a single spec, which is
14
- # negotiated as either /v3 or /v4 for the whole API at the spec level, but we
15
- # need an independent toplevel path at the endpoint level.
16
- #
17
- # Separate classes are needed because of `include Trace::API::Instance`.
18
- #
19
- # Below should be:
20
- # require_relative '../../../../datadog/core/transport/http/api/instance'
21
- require_relative 'api/instance'
22
- # Below should be:
23
- # require_relative '../../../../datadog/core/transport/http/api/spec'
24
- require_relative 'api/spec'
25
-
26
10
  module Datadog
27
11
  module Core
28
12
  module Remote
@@ -43,6 +27,7 @@ module Datadog
43
27
  @version = options[:version]
44
28
  @endpoints = options[:endpoints]
45
29
  @config = options[:config]
30
+ @span_events = options[:span_events]
46
31
  end
47
32
  end
48
33
 
@@ -65,51 +50,25 @@ module Datadog
65
50
  end
66
51
 
67
52
  def send_info(env, &block)
68
- raise NoNegotiationEndpointDefinedError, self if info.nil?
53
+ raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('info', self) if info.nil?
69
54
 
70
55
  info.call(env, &block)
71
56
  end
72
-
73
- # Raised when traces sent but no traces endpoint is defined
74
- class NoNegotiationEndpointDefinedError < StandardError
75
- attr_reader :spec
76
-
77
- def initialize(spec)
78
- super()
79
-
80
- @spec = spec
81
- end
82
-
83
- def message
84
- 'No info endpoint is defined for API specification!'
85
- end
86
- end
87
57
  end
88
58
 
89
59
  # Extensions for HTTP API Instance
90
60
  module Instance
91
61
  def send_info(env)
92
- 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
93
67
 
94
68
  spec.send_info(env) do |request_env|
95
69
  call(request_env)
96
70
  end
97
71
  end
98
-
99
- # Raised when traces sent to API that does not support traces
100
- class NegotiationNotSupportedError < StandardError
101
- attr_reader :spec
102
-
103
- def initialize(spec)
104
- super()
105
-
106
- @spec = spec
107
- end
108
-
109
- def message
110
- 'Info not supported for this API!'
111
- end
112
- end
113
72
  end
114
73
 
115
74
  # Endpoint for negotiation
@@ -120,7 +79,7 @@ module Datadog
120
79
 
121
80
  def call(env, &block)
122
81
  # Query for response
123
- http_response = super(env, &block)
82
+ http_response = super
124
83
 
125
84
  # Process the response
126
85
  body = JSON.parse(http_response.payload, symbolize_names: true) if http_response.ok?
@@ -136,8 +95,6 @@ module Datadog
136
95
 
137
96
  # Add negotiation behavior to transport components
138
97
  HTTP::Client.include(Negotiation::Client)
139
- HTTP::API::Spec.include(Negotiation::API::Spec)
140
- HTTP::API::Instance.include(Negotiation::API::Instance)
141
98
  end
142
99
  end
143
100
  end
@@ -1,13 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'uri'
4
-
5
3
  require_relative '../../environment/container'
6
4
  require_relative '../../environment/ext'
7
5
  require_relative '../../transport/ext'
8
- require_relative '../../transport/http/adapters/net'
9
- require_relative '../../transport/http/adapters/unix_socket'
10
- require_relative '../../transport/http/adapters/test'
6
+ require_relative '../../transport/http'
11
7
 
12
8
  # TODO: Improve negotiation to allow per endpoint selection
13
9
  #
@@ -19,14 +15,6 @@ require_relative '../../transport/http/adapters/test'
19
15
  # require_relative '../../transport/http/api'
20
16
  require_relative 'http/api'
21
17
 
22
- # TODO: Decouple transport/http/builder
23
- #
24
- # See http/builder
25
- #
26
- # Below should be:
27
- # require_relative '../../transport/http/builder'
28
- require_relative 'http/builder'
29
-
30
18
  # TODO: Decouple transport/http
31
19
  #
32
20
  # Because a new transport is required for every (API, Client, Transport)
@@ -39,112 +27,55 @@ module Datadog
39
27
  module Transport
40
28
  # Namespace for HTTP transport components
41
29
  module HTTP
42
- # NOTE: Due to... legacy reasons... This class likes having a default `AgentSettings` instance to fall back to.
43
- # Because we generate this instance with an empty instance of `Settings`, the resulting `AgentSettings` below
44
- # represents only settings specified via environment variables + the usual defaults.
45
- #
46
- # DO NOT USE THIS IN NEW CODE, as it ignores any settings specified by users via `Datadog.configure`.
47
- DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS = Datadog::Core::Configuration::AgentSettingsResolver.call(
48
- Datadog::Core::Configuration::Settings.new,
49
- logger: nil,
50
- )
51
-
52
30
  module_function
53
31
 
54
- # Builds a new Transport::HTTP::Client
55
- def new(klass, &block)
56
- Builder.new(&block).to_transport(klass)
57
- end
58
-
59
32
  # Builds a new Transport::HTTP::Client with default settings
60
33
  # Pass a block to override any settings.
61
34
  def root(
62
- agent_settings: DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS,
63
- **options
35
+ agent_settings:,
36
+ logger: Datadog.logger,
37
+ api_version: nil,
38
+ headers: nil
64
39
  )
65
- new(Core::Remote::Transport::Negotiation::Transport) do |transport|
66
- transport.adapter(agent_settings)
67
- transport.headers(default_headers)
68
-
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|
69
47
  apis = API.defaults
70
48
 
71
49
  transport.api API::ROOT, apis[API::ROOT]
72
50
 
73
- # Apply any settings given by options
74
- unless options.empty?
75
- transport.default_api = options[:api_version] if options.key?(:api_version)
76
- transport.headers options[:headers] if options.key?(:headers)
77
- end
78
-
79
51
  # Call block to apply any customization, if provided
80
52
  yield(transport) if block_given?
81
- end
53
+ end.to_transport(Core::Remote::Transport::Negotiation::Transport)
82
54
  end
83
55
 
84
56
  # Builds a new Transport::HTTP::Client with default settings
85
57
  # Pass a block to override any settings.
86
58
  def v7(
87
- agent_settings: DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS,
88
- **options
59
+ agent_settings:,
60
+ logger: Datadog.logger,
61
+ api_version: nil,
62
+ headers: nil
89
63
  )
90
- new(Core::Remote::Transport::Config::Transport) do |transport|
91
- transport.adapter(agent_settings)
92
- transport.headers default_headers
93
-
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|
94
71
  apis = API.defaults
95
72
 
96
73
  transport.api API::V7, apis[API::V7]
97
74
 
98
- # Apply any settings given by options
99
- unless options.empty?
100
- transport.default_api = options[:api_version] if options.key?(:api_version)
101
- transport.headers options[:headers] if options.key?(:headers)
102
- end
103
-
104
75
  # Call block to apply any customization, if provided
105
76
  yield(transport) if block_given?
106
- end
107
- end
108
-
109
- def default_headers
110
- {
111
- Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
112
- Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
113
- Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION =>
114
- Datadog::Core::Environment::Ext::LANG_VERSION,
115
- Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
116
- Datadog::Core::Environment::Ext::LANG_INTERPRETER,
117
- Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
118
- Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION
119
- }.tap do |headers|
120
- # Add container ID, if present.
121
- container_id = Datadog::Core::Environment::Container.container_id
122
- headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
123
- # Sending this header to the agent will disable metrics computation (and billing) on the agent side
124
- # by pretending it has already been done on the library side.
125
- if Datadog.configuration.appsec.standalone.enabled
126
- headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_STATS] = 'yes'
127
- end
128
- end
129
- end
130
-
131
- def default_adapter
132
- Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
77
+ end.to_transport(Core::Remote::Transport::Config::Transport)
133
78
  end
134
-
135
- # Add adapters to registry
136
- Builder::REGISTRY.set(
137
- Datadog::Core::Transport::HTTP::Adapters::Net,
138
- Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
139
- )
140
- Builder::REGISTRY.set(
141
- Datadog::Core::Transport::HTTP::Adapters::Test,
142
- Datadog::Core::Transport::Ext::Test::ADAPTER
143
- )
144
- Builder::REGISTRY.set(
145
- Datadog::Core::Transport::HTTP::Adapters::UnixSocket,
146
- Datadog::Core::Configuration::Ext::Agent::UnixSocket::ADAPTER
147
- )
148
79
  end
149
80
  end
150
81
  end
@@ -32,17 +32,30 @@ module Datadog
32
32
 
33
33
  # Negotiation response
34
34
  module Response
35
- attr_reader :version, :endpoints, :config
35
+ # @!attribute [r] version
36
+ # The version of the agent.
37
+ # @return [String]
38
+ # @!attribute [r] endpoints
39
+ # The HTTP endpoints the agent supports.
40
+ # @return [Array<String>]
41
+ # @!attribute [r] config
42
+ # The agent configuration. These are configured by the user when starting the agent, as well as any defaults.
43
+ # @return [Hash]
44
+ # @!attribute [r] span_events
45
+ # Whether the agent supports the top-level span events field in flushed spans.
46
+ # @return [Boolean,nil]
47
+ attr_reader :version, :endpoints, :config, :span_events
36
48
  end
37
49
 
38
50
  # Negotiation transport
39
51
  class Transport
40
- attr_reader :client, :apis, :default_api, :current_api_id
52
+ attr_reader :client, :apis, :default_api, :current_api_id, :logger
41
53
 
42
- def initialize(apis, default_api)
54
+ def initialize(apis, default_api, logger: Datadog.logger)
43
55
  @apis = apis
56
+ @logger = logger
44
57
 
45
- @client = HTTP::Client.new(current_api)
58
+ @client = HTTP::Client.new(current_api, logger: logger)
46
59
  end
47
60
 
48
61
  def send_info
@@ -5,7 +5,7 @@ module Datadog
5
5
  module Remote
6
6
  # Worker executes a block every interval on a separate Thread
7
7
  class Worker
8
- def initialize(interval:, &block)
8
+ def initialize(interval:, logger:, &block)
9
9
  @mutex = Mutex.new
10
10
  @thr = nil
11
11
 
@@ -14,18 +14,21 @@ module Datadog
14
14
  @stopped = false
15
15
 
16
16
  @interval = interval
17
+ @logger = logger
17
18
  raise ArgumentError, 'can not initialize a worker without a block' unless block
18
19
 
19
20
  @block = block
20
21
  end
21
22
 
23
+ attr_reader :logger
24
+
22
25
  def start
23
- Datadog.logger.debug { 'remote worker starting' }
26
+ logger.debug { 'remote worker starting' }
24
27
 
25
28
  acquire_lock
26
29
 
27
30
  if @stopped
28
- Datadog.logger.debug('remote worker: refusing to restart after previous stop')
31
+ logger.debug('remote worker: refusing to restart after previous stop')
29
32
  return
30
33
  end
31
34
 
@@ -41,13 +44,13 @@ module Datadog
41
44
  @started = true
42
45
  @starting = false
43
46
 
44
- Datadog.logger.debug { 'remote worker started' }
47
+ logger.debug { 'remote worker started' }
45
48
  ensure
46
49
  release_lock
47
50
  end
48
51
 
49
52
  def stop
50
- Datadog.logger.debug { 'remote worker stopping' }
53
+ logger.debug { 'remote worker stopping' }
51
54
 
52
55
  acquire_lock
53
56
 
@@ -62,7 +65,7 @@ module Datadog
62
65
  @thr = nil
63
66
  @stopped = true
64
67
 
65
- Datadog.logger.debug { 'remote worker stopped' }
68
+ logger.debug { 'remote worker stopped' }
66
69
  ensure
67
70
  release_lock
68
71
  end
@@ -92,7 +95,7 @@ module Datadog
92
95
  end
93
96
 
94
97
  def call
95
- Datadog.logger.debug { 'remote worker perform' }
98
+ logger.debug { 'remote worker perform' }
96
99
 
97
100
  @block.call
98
101
  end
@@ -14,13 +14,16 @@ module Datadog
14
14
  module Runtime
15
15
  # For generating runtime metrics
16
16
  class Metrics < Core::Metrics::Client
17
- def initialize(**options)
17
+ def initialize(telemetry:, **options)
18
18
  super
19
19
 
20
20
  # Initialize service list
21
21
  @services = Set.new(options.fetch(:services, []))
22
22
  @service_tags = nil
23
23
  compile_service_tags!
24
+
25
+ # Initialize the collection of runtime-id
26
+ @runtime_id_enabled = options.fetch(:experimental_runtime_id_enabled, false)
24
27
  end
25
28
 
26
29
  # Associate service with runtime metrics
@@ -93,7 +96,7 @@ module Datadog
93
96
 
94
97
  def try_flush
95
98
  yield
96
- rescue StandardError => e
99
+ rescue => e
97
100
  Datadog.logger.warn("Error while sending runtime metric. Cause: #{e.class.name} #{e.message}")
98
101
  end
99
102
 
@@ -105,6 +108,9 @@ module Datadog
105
108
 
106
109
  # Add services dynamically because they might change during runtime.
107
110
  options[:tags].concat(service_tags) unless service_tags.nil?
111
+
112
+ # Add runtime-id dynamically because it might change during runtime.
113
+ options[:tags].concat(["runtime-id:#{Core::Environment::Identity.id}"]) if @runtime_id_enabled
108
114
  end
109
115
  end
110
116
 
@@ -112,7 +118,8 @@ module Datadog
112
118
 
113
119
  attr_reader \
114
120
  :service_tags,
115
- :services
121
+ :services,
122
+ :runtime_id_enabled
116
123
 
117
124
  def compile_service_tags!
118
125
  @service_tags = services.to_a.collect do |service|
@@ -140,7 +147,7 @@ module Datadog
140
147
  gauge(metric_name, metric_value) if metric_value
141
148
  end
142
149
 
143
- # rubocop:disable Metrics/MethodLength
150
+ # standard:disable Metrics/MethodLength
144
151
  def flush_yjit_stats
145
152
  # Only on Ruby >= 3.2
146
153
  try_flush do
@@ -188,7 +195,7 @@ module Datadog
188
195
  end
189
196
  end
190
197
  end
191
- # rubocop:enable Metrics/MethodLength
198
+ # standard:enable Metrics/MethodLength
192
199
  end
193
200
  end
194
201
  end