datadog 2.12.0 → 2.22.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 (570) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +348 -1
  3. data/README.md +0 -1
  4. data/ext/LIBDATADOG_DEVELOPMENT.md +60 -0
  5. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +63 -56
  6. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
  7. data/ext/datadog_profiling_native_extension/collectors_stack.c +263 -76
  8. data/ext/datadog_profiling_native_extension/collectors_stack.h +20 -3
  9. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +78 -26
  10. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
  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 +10 -0
  16. data/ext/datadog_profiling_native_extension/heap_recorder.c +247 -364
  17. data/ext/datadog_profiling_native_extension/heap_recorder.h +4 -6
  18. data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
  19. data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +22 -0
  20. data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -5
  21. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +41 -21
  22. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +6 -4
  23. data/ext/datadog_profiling_native_extension/profiling.c +2 -0
  24. data/ext/datadog_profiling_native_extension/ruby_helpers.c +1 -13
  25. data/ext/datadog_profiling_native_extension/ruby_helpers.h +3 -11
  26. data/ext/datadog_profiling_native_extension/stack_recorder.c +173 -76
  27. data/ext/libdatadog_api/crashtracker.c +11 -12
  28. data/ext/libdatadog_api/crashtracker.h +5 -0
  29. data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
  30. data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
  31. data/ext/libdatadog_api/ddsketch.c +106 -0
  32. data/ext/libdatadog_api/extconf.rb +5 -3
  33. data/ext/libdatadog_api/init.c +18 -0
  34. data/ext/libdatadog_api/library_config.c +172 -0
  35. data/ext/libdatadog_api/library_config.h +25 -0
  36. data/ext/libdatadog_api/process_discovery.c +118 -0
  37. data/ext/libdatadog_api/process_discovery.h +5 -0
  38. data/ext/libdatadog_extconf_helpers.rb +15 -5
  39. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
  40. data/lib/datadog/appsec/actions_handler.rb +24 -2
  41. data/lib/datadog/appsec/anonymizer.rb +16 -0
  42. data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +26 -0
  43. data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +59 -0
  44. data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -0
  45. data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
  46. data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
  47. data/lib/datadog/appsec/api_security/lru_cache.rb +56 -0
  48. data/lib/datadog/appsec/api_security/route_extractor.rb +75 -0
  49. data/lib/datadog/appsec/api_security/sampler.rb +59 -0
  50. data/lib/datadog/appsec/api_security.rb +23 -0
  51. data/lib/datadog/appsec/assets/waf_rules/README.md +44 -5
  52. data/lib/datadog/appsec/assets/waf_rules/recommended.json +601 -74
  53. data/lib/datadog/appsec/assets/waf_rules/strict.json +48 -75
  54. data/lib/datadog/appsec/autoload.rb +2 -2
  55. data/lib/datadog/appsec/component.rb +46 -71
  56. data/lib/datadog/appsec/compressed_json.rb +40 -0
  57. data/lib/datadog/appsec/configuration/settings.rb +162 -30
  58. data/lib/datadog/appsec/context.rb +30 -7
  59. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +35 -18
  60. data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
  61. data/lib/datadog/appsec/contrib/active_record/patcher.rb +62 -11
  62. data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
  63. data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
  64. data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
  65. data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
  66. data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
  67. data/lib/datadog/appsec/contrib/devise/patcher.rb +34 -23
  68. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +103 -0
  69. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +70 -0
  70. data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +2 -2
  71. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
  72. data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
  73. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +11 -12
  74. data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
  75. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +10 -10
  76. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +10 -9
  77. data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
  78. data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
  79. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +53 -31
  80. data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
  81. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -44
  82. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +35 -11
  83. data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
  84. data/lib/datadog/appsec/contrib/rails/patcher.rb +65 -47
  85. data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
  86. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
  87. data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
  88. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +12 -12
  89. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +45 -22
  90. data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
  91. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
  92. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
  93. data/lib/datadog/appsec/event.rb +91 -147
  94. data/lib/datadog/appsec/ext.rb +4 -2
  95. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +23 -2
  96. data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
  97. data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
  98. data/lib/datadog/appsec/metrics/collector.rb +23 -3
  99. data/lib/datadog/appsec/metrics/telemetry.rb +2 -2
  100. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +29 -0
  101. data/lib/datadog/appsec/metrics.rb +1 -0
  102. data/lib/datadog/appsec/monitor/gateway/watcher.rb +49 -14
  103. data/lib/datadog/appsec/processor/rule_loader.rb +30 -33
  104. data/lib/datadog/appsec/remote.rb +43 -59
  105. data/lib/datadog/appsec/response.rb +6 -6
  106. data/lib/datadog/appsec/security_engine/engine.rb +176 -0
  107. data/lib/datadog/appsec/security_engine/result.rb +44 -9
  108. data/lib/datadog/appsec/security_engine/runner.rb +44 -21
  109. data/lib/datadog/appsec/security_event.rb +37 -0
  110. data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
  111. data/lib/datadog/appsec/trace_keeper.rb +24 -0
  112. data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
  113. data/lib/datadog/appsec/utils.rb +0 -2
  114. data/lib/datadog/appsec.rb +5 -15
  115. data/lib/datadog/auto_instrument_base.rb +2 -1
  116. data/lib/datadog/core/buffer/random.rb +18 -2
  117. data/lib/datadog/core/configuration/agent_settings.rb +52 -0
  118. data/lib/datadog/core/configuration/agent_settings_resolver.rb +8 -50
  119. data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
  120. data/lib/datadog/core/configuration/components.rb +69 -37
  121. data/lib/datadog/core/configuration/components_state.rb +23 -0
  122. data/lib/datadog/core/configuration/config_helper.rb +100 -0
  123. data/lib/datadog/core/configuration/deprecations.rb +36 -0
  124. data/lib/datadog/core/configuration/ext.rb +4 -1
  125. data/lib/datadog/core/configuration/option.rb +117 -77
  126. data/lib/datadog/core/configuration/option_definition.rb +5 -14
  127. data/lib/datadog/core/configuration/options.rb +15 -13
  128. data/lib/datadog/core/configuration/settings.rb +117 -48
  129. data/lib/datadog/core/configuration/stable_config.rb +32 -0
  130. data/lib/datadog/core/configuration/supported_configurations.rb +337 -0
  131. data/lib/datadog/core/configuration.rb +40 -16
  132. data/lib/datadog/core/crashtracking/component.rb +3 -10
  133. data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
  134. data/lib/datadog/core/ddsketch.rb +21 -0
  135. data/lib/datadog/core/deprecations.rb +2 -2
  136. data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
  137. data/lib/datadog/core/encoding.rb +1 -1
  138. data/lib/datadog/core/environment/agent_info.rb +4 -3
  139. data/lib/datadog/core/environment/cgroup.rb +10 -12
  140. data/lib/datadog/core/environment/container.rb +38 -40
  141. data/lib/datadog/core/environment/ext.rb +6 -8
  142. data/lib/datadog/core/environment/git.rb +3 -2
  143. data/lib/datadog/core/environment/identity.rb +3 -3
  144. data/lib/datadog/core/environment/platform.rb +3 -3
  145. data/lib/datadog/core/environment/variable_helpers.rb +4 -4
  146. data/lib/datadog/core/environment/yjit.rb +2 -1
  147. data/lib/datadog/core/error.rb +11 -9
  148. data/lib/datadog/core/logger.rb +2 -2
  149. data/lib/datadog/core/metrics/client.rb +29 -29
  150. data/lib/datadog/core/metrics/logging.rb +5 -5
  151. data/lib/datadog/core/pin.rb +4 -8
  152. data/lib/datadog/core/process_discovery/tracer_memfd.rb +13 -0
  153. data/lib/datadog/core/process_discovery.rb +61 -0
  154. data/lib/datadog/core/rate_limiter.rb +4 -2
  155. data/lib/datadog/core/remote/client.rb +44 -35
  156. data/lib/datadog/core/remote/component.rb +12 -17
  157. data/lib/datadog/core/remote/configuration/digest.rb +7 -7
  158. data/lib/datadog/core/remote/configuration/path.rb +1 -1
  159. data/lib/datadog/core/remote/configuration/repository.rb +14 -1
  160. data/lib/datadog/core/remote/negotiation.rb +9 -9
  161. data/lib/datadog/core/remote/transport/config.rb +4 -3
  162. data/lib/datadog/core/remote/transport/http/client.rb +5 -4
  163. data/lib/datadog/core/remote/transport/http/config.rb +27 -37
  164. data/lib/datadog/core/remote/transport/http/negotiation.rb +7 -33
  165. data/lib/datadog/core/remote/transport/http.rb +25 -89
  166. data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
  167. data/lib/datadog/core/runtime/ext.rb +0 -1
  168. data/lib/datadog/core/runtime/metrics.rb +12 -5
  169. data/lib/datadog/core/tag_builder.rb +56 -0
  170. data/lib/datadog/core/telemetry/component.rb +92 -52
  171. data/lib/datadog/core/telemetry/emitter.rb +23 -11
  172. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +66 -0
  173. data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
  174. data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
  175. data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +30 -0
  176. data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
  177. data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
  178. data/lib/datadog/core/telemetry/event/app_started.rb +287 -0
  179. data/lib/datadog/core/telemetry/event/base.rb +40 -0
  180. data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
  181. data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
  182. data/lib/datadog/core/telemetry/event/log.rb +76 -0
  183. data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
  184. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
  185. data/lib/datadog/core/telemetry/event.rb +18 -472
  186. data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
  187. data/lib/datadog/core/telemetry/logger.rb +5 -4
  188. data/lib/datadog/core/telemetry/logging.rb +11 -5
  189. data/lib/datadog/core/telemetry/metric.rb +8 -8
  190. data/lib/datadog/core/telemetry/request.rb +4 -4
  191. data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
  192. data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
  193. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
  194. data/lib/datadog/core/telemetry/transport/http.rb +63 -0
  195. data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
  196. data/lib/datadog/core/telemetry/worker.rb +90 -24
  197. data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
  198. data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
  199. data/lib/datadog/core/transport/http/api/instance.rb +17 -0
  200. data/lib/datadog/core/transport/http/api/spec.rb +17 -0
  201. data/lib/datadog/core/transport/http/builder.rb +19 -17
  202. data/lib/datadog/core/transport/http/env.rb +8 -0
  203. data/lib/datadog/core/transport/http.rb +75 -0
  204. data/lib/datadog/core/transport/response.rb +4 -1
  205. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
  206. data/lib/datadog/core/utils/duration.rb +32 -32
  207. data/lib/datadog/core/utils/forking.rb +2 -2
  208. data/lib/datadog/core/utils/network.rb +25 -6
  209. data/lib/datadog/core/utils/only_once_successful.rb +16 -5
  210. data/lib/datadog/core/utils/time.rb +20 -0
  211. data/lib/datadog/core/utils/truncation.rb +21 -0
  212. data/lib/datadog/core/utils.rb +7 -0
  213. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
  214. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
  215. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
  216. data/lib/datadog/core/worker.rb +1 -1
  217. data/lib/datadog/core/workers/async.rb +29 -12
  218. data/lib/datadog/core/workers/interval_loop.rb +12 -1
  219. data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
  220. data/lib/datadog/core.rb +10 -0
  221. data/lib/datadog/di/boot.rb +43 -0
  222. data/lib/datadog/di/component.rb +21 -2
  223. data/lib/datadog/di/context.rb +70 -0
  224. data/lib/datadog/di/el/compiler.rb +164 -0
  225. data/lib/datadog/di/el/evaluator.rb +159 -0
  226. data/lib/datadog/di/el/expression.rb +42 -0
  227. data/lib/datadog/di/el.rb +5 -0
  228. data/lib/datadog/di/error.rb +25 -0
  229. data/lib/datadog/di/instrumenter.rb +132 -20
  230. data/lib/datadog/di/probe.rb +35 -15
  231. data/lib/datadog/di/probe_builder.rb +39 -1
  232. data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
  233. data/lib/datadog/di/probe_file_loader.rb +82 -0
  234. data/lib/datadog/di/probe_manager.rb +3 -2
  235. data/lib/datadog/di/probe_notification_builder.rb +61 -67
  236. data/lib/datadog/di/probe_notifier_worker.rb +25 -17
  237. data/lib/datadog/di/remote.rb +5 -5
  238. data/lib/datadog/di/serializer.rb +160 -8
  239. data/lib/datadog/di/transport/diagnostics.rb +4 -3
  240. data/lib/datadog/di/transport/http/api.rb +2 -12
  241. data/lib/datadog/di/transport/http/client.rb +4 -3
  242. data/lib/datadog/di/transport/http/diagnostics.rb +7 -34
  243. data/lib/datadog/di/transport/http/input.rb +18 -35
  244. data/lib/datadog/di/transport/http.rb +15 -77
  245. data/lib/datadog/di/transport/input.rb +14 -5
  246. data/lib/datadog/di/utils.rb +5 -0
  247. data/lib/datadog/di.rb +0 -34
  248. data/lib/datadog/error_tracking/collector.rb +87 -0
  249. data/lib/datadog/error_tracking/component.rb +167 -0
  250. data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
  251. data/lib/datadog/error_tracking/configuration.rb +11 -0
  252. data/lib/datadog/error_tracking/ext.rb +18 -0
  253. data/lib/datadog/error_tracking/extensions.rb +16 -0
  254. data/lib/datadog/error_tracking/filters.rb +77 -0
  255. data/lib/datadog/error_tracking.rb +18 -0
  256. data/lib/datadog/kit/appsec/events/v2.rb +196 -0
  257. data/lib/datadog/kit/appsec/events.rb +17 -4
  258. data/lib/datadog/kit/identity.rb +22 -12
  259. data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
  260. data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
  261. data/lib/datadog/opentelemetry/api/context.rb +21 -6
  262. data/lib/datadog/opentelemetry/sdk/configurator.rb +1 -1
  263. data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
  264. data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
  265. data/lib/datadog/opentelemetry/sdk/trace/span.rb +15 -11
  266. data/lib/datadog/opentelemetry/trace.rb +4 -4
  267. data/lib/datadog/opentelemetry.rb +2 -1
  268. data/lib/datadog/profiling/collectors/code_provenance.rb +18 -9
  269. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +6 -0
  270. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
  271. data/lib/datadog/profiling/collectors/info.rb +44 -0
  272. data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
  273. data/lib/datadog/profiling/component.rb +8 -9
  274. data/lib/datadog/profiling/encoded_profile.rb +11 -0
  275. data/lib/datadog/profiling/exporter.rb +12 -7
  276. data/lib/datadog/profiling/ext.rb +2 -15
  277. data/lib/datadog/profiling/flush.rb +5 -8
  278. data/lib/datadog/profiling/http_transport.rb +8 -62
  279. data/lib/datadog/profiling/profiler.rb +2 -0
  280. data/lib/datadog/profiling/scheduler.rb +10 -2
  281. data/lib/datadog/profiling/sequence_tracker.rb +44 -0
  282. data/lib/datadog/profiling/stack_recorder.rb +9 -9
  283. data/lib/datadog/profiling/tag_builder.rb +7 -41
  284. data/lib/datadog/profiling/tasks/exec.rb +2 -2
  285. data/lib/datadog/profiling/tasks/setup.rb +2 -0
  286. data/lib/datadog/profiling.rb +13 -10
  287. data/lib/datadog/single_step_instrument.rb +9 -0
  288. data/lib/datadog/tracing/analytics.rb +1 -1
  289. data/lib/datadog/tracing/buffer.rb +7 -7
  290. data/lib/datadog/tracing/component.rb +21 -29
  291. data/lib/datadog/tracing/configuration/dynamic.rb +6 -8
  292. data/lib/datadog/tracing/configuration/ext.rb +8 -4
  293. data/lib/datadog/tracing/configuration/settings.rb +50 -12
  294. data/lib/datadog/tracing/context.rb +2 -2
  295. data/lib/datadog/tracing/context_provider.rb +1 -1
  296. data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
  297. data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
  298. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
  299. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +19 -4
  300. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +19 -12
  301. data/lib/datadog/tracing/contrib/action_pack/ext.rb +2 -0
  302. data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -1
  303. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
  304. data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
  305. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
  306. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
  307. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
  308. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
  309. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
  310. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
  311. data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
  312. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
  313. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +3 -3
  314. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
  315. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
  316. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
  317. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +5 -5
  318. data/lib/datadog/tracing/contrib/active_record/integration.rb +2 -2
  319. data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
  320. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +17 -8
  321. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +33 -0
  322. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
  323. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -4
  324. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
  325. data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
  326. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
  327. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +7 -9
  328. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
  329. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +12 -2
  330. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +8 -2
  331. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
  332. data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
  333. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
  334. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
  335. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
  336. data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
  337. data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
  338. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
  339. data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
  340. data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
  341. data/lib/datadog/tracing/contrib/component.rb +2 -2
  342. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
  343. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
  344. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  345. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
  346. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
  347. data/lib/datadog/tracing/contrib/configurable.rb +6 -6
  348. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
  349. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
  350. data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
  351. data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
  352. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
  353. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
  354. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
  355. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +51 -53
  356. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
  357. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +6 -7
  358. data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
  359. data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
  360. data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
  361. data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
  362. data/lib/datadog/tracing/contrib/excon/middleware.rb +7 -5
  363. data/lib/datadog/tracing/contrib/ext.rb +4 -3
  364. data/lib/datadog/tracing/contrib/extensions.rb +9 -9
  365. data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
  366. data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
  367. data/lib/datadog/tracing/contrib/faraday/middleware.rb +9 -5
  368. data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
  369. data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
  370. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +7 -0
  371. data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
  372. data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
  373. data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
  374. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +84 -48
  375. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +15 -9
  376. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
  377. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
  378. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
  379. data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
  380. data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
  381. data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
  382. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
  383. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
  384. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
  385. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
  386. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
  387. data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
  388. data/lib/datadog/tracing/contrib/http/instrumentation.rb +11 -15
  389. data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
  390. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +9 -19
  391. data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
  392. data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
  393. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +11 -19
  394. data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
  395. data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
  396. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
  397. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
  398. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
  399. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
  400. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
  401. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
  402. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
  403. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
  404. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
  405. data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
  406. data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
  407. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
  408. data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
  409. data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
  410. data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
  411. data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
  412. data/lib/datadog/tracing/contrib/karafka.rb +37 -0
  413. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -1
  414. data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
  415. data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
  416. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +9 -1
  417. data/lib/datadog/tracing/contrib/mongodb/ext.rb +2 -1
  418. data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
  419. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
  420. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +23 -6
  421. data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
  422. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
  423. data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
  424. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
  425. data/lib/datadog/tracing/contrib/opensearch/ext.rb +12 -2
  426. data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
  427. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -66
  428. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
  429. data/lib/datadog/tracing/contrib/patcher.rb +12 -11
  430. data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
  431. data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
  432. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
  433. data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
  434. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
  435. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
  436. data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
  437. data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
  438. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
  439. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
  440. data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
  441. data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
  442. data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
  443. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
  444. data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
  445. data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
  446. data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
  447. data/lib/datadog/tracing/contrib/rack/request_queue.rb +4 -3
  448. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +7 -1
  449. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
  450. data/lib/datadog/tracing/contrib/rails/ext.rb +2 -1
  451. data/lib/datadog/tracing/contrib/rails/integration.rb +2 -2
  452. data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
  453. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
  454. data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
  455. data/lib/datadog/tracing/contrib/rails/runner.rb +62 -40
  456. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
  457. data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
  458. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
  459. data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
  460. data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
  461. data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
  462. data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
  463. data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
  464. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +4 -4
  465. data/lib/datadog/tracing/contrib/registry.rb +1 -1
  466. data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
  467. data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -1
  468. data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
  469. data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
  470. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +8 -6
  471. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
  472. data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
  473. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
  474. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
  475. data/lib/datadog/tracing/contrib/sequel/database.rb +5 -5
  476. data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
  477. data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
  478. data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
  479. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
  480. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
  481. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
  482. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
  483. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
  484. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
  485. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
  486. data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
  487. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
  488. data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
  489. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +1 -1
  490. data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
  491. data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
  492. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
  493. data/lib/datadog/tracing/contrib/support.rb +28 -0
  494. data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
  495. data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
  496. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
  497. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
  498. data/lib/datadog/tracing/contrib.rb +1 -0
  499. data/lib/datadog/tracing/correlation.rb +9 -2
  500. data/lib/datadog/tracing/diagnostics/environment_logger.rb +8 -2
  501. data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
  502. data/lib/datadog/tracing/distributed/b3_single.rb +2 -2
  503. data/lib/datadog/tracing/distributed/baggage.rb +196 -0
  504. data/lib/datadog/tracing/distributed/datadog.rb +8 -7
  505. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
  506. data/lib/datadog/tracing/distributed/helpers.rb +1 -1
  507. data/lib/datadog/tracing/distributed/none.rb +4 -2
  508. data/lib/datadog/tracing/distributed/propagation.rb +28 -4
  509. data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
  510. data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
  511. data/lib/datadog/tracing/event.rb +5 -7
  512. data/lib/datadog/tracing/flush.rb +1 -1
  513. data/lib/datadog/tracing/metadata/analytics.rb +1 -1
  514. data/lib/datadog/tracing/metadata/errors.rb +4 -4
  515. data/lib/datadog/tracing/metadata/ext.rb +13 -0
  516. data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
  517. data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
  518. data/lib/datadog/tracing/metadata/tagging.rb +4 -4
  519. data/lib/datadog/tracing/metadata.rb +2 -0
  520. data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
  521. data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
  522. data/lib/datadog/tracing/pipeline.rb +1 -1
  523. data/lib/datadog/tracing/sampling/ext.rb +0 -2
  524. data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
  525. data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
  526. data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
  527. data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
  528. data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
  529. data/lib/datadog/tracing/span.rb +11 -2
  530. data/lib/datadog/tracing/span_event.rb +11 -11
  531. data/lib/datadog/tracing/span_link.rb +12 -12
  532. data/lib/datadog/tracing/span_operation.rb +76 -26
  533. data/lib/datadog/tracing/sync_writer.rb +5 -4
  534. data/lib/datadog/tracing/trace_digest.rb +29 -24
  535. data/lib/datadog/tracing/trace_operation.rb +121 -97
  536. data/lib/datadog/tracing/trace_segment.rb +8 -6
  537. data/lib/datadog/tracing/tracer.rb +90 -43
  538. data/lib/datadog/tracing/transport/http/api.rb +2 -10
  539. data/lib/datadog/tracing/transport/http/client.rb +6 -5
  540. data/lib/datadog/tracing/transport/http/traces.rb +15 -43
  541. data/lib/datadog/tracing/transport/http.rb +13 -75
  542. data/lib/datadog/tracing/transport/io/client.rb +5 -5
  543. data/lib/datadog/tracing/transport/io/traces.rb +4 -4
  544. data/lib/datadog/tracing/transport/serializable_trace.rb +3 -1
  545. data/lib/datadog/tracing/transport/statistics.rb +1 -1
  546. data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
  547. data/lib/datadog/tracing/transport/traces.rb +31 -14
  548. data/lib/datadog/tracing/utils.rb +1 -1
  549. data/lib/datadog/tracing/workers/trace_writer.rb +16 -16
  550. data/lib/datadog/tracing/workers.rb +2 -2
  551. data/lib/datadog/tracing/writer.rb +4 -4
  552. data/lib/datadog/tracing.rb +16 -3
  553. data/lib/datadog/version.rb +1 -1
  554. data/lib/datadog.rb +8 -2
  555. metadata +115 -24
  556. data/ext/libdatadog_api/macos_development.md +0 -26
  557. data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -92
  558. data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -114
  559. data/lib/datadog/appsec/contrib/devise/event.rb +0 -54
  560. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
  561. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
  562. data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
  563. data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
  564. data/lib/datadog/appsec/processor/rule_merger.rb +0 -170
  565. data/lib/datadog/appsec/processor.rb +0 -107
  566. data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
  567. data/lib/datadog/core/telemetry/http/env.rb +0 -20
  568. data/lib/datadog/core/telemetry/http/ext.rb +0 -28
  569. data/lib/datadog/core/telemetry/http/response.rb +0 -70
  570. data/lib/datadog/core/telemetry/http/transport.rb +0 -90
@@ -25,20 +25,22 @@ module Datadog
25
25
  request_options = datadog_configuration(host)
26
26
  client_config = Datadog.configuration_for(self)
27
27
 
28
- Tracing.trace(Ext::SPAN_REQUEST, on_error: method(:annotate_span_with_error!)) do |span, trace|
28
+ Tracing.trace(Ext::SPAN_REQUEST) do |span, trace|
29
29
  begin
30
30
  span.service = service_name(host, request_options, client_config)
31
31
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
32
32
 
33
- if Datadog::AppSec::Utils::TraceOperation.appsec_standalone_reject?(trace)
34
- trace.sampling_priority = Tracing::Sampling::Ext::Priority::AUTO_REJECT
33
+ if Tracing::Distributed::PropagationPolicy.enabled?(
34
+ pin_config: client_config,
35
+ global_config: Datadog.configuration.tracing[:httprb],
36
+ trace: trace
37
+ )
38
+ Contrib::HTTP.inject(trace, req)
35
39
  end
36
40
 
37
- Contrib::HTTP.inject(trace, req) if Tracing.enabled? && !should_skip_distributed_tracing?(client_config)
38
-
39
41
  # Add additional request specific tags to the span.
40
42
  annotate_span_with_request!(span, req, request_options)
41
- rescue StandardError => e
43
+ rescue => e
42
44
  logger.error("error preparing span for http.rb request: #{e}, Source: #{e.backtrace}")
43
45
  Datadog::Core::Telemetry::Logger.report(e)
44
46
  ensure
@@ -72,7 +74,7 @@ module Datadog
72
74
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
73
75
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_REQUEST)
74
76
 
75
- if req.verb && req.verb.is_a?(String) || req.verb.is_a?(Symbol)
77
+ if req.verb&.is_a?(String) || req.verb.is_a?(Symbol)
76
78
  http_method = req.verb.to_s.upcase
77
79
  span.resource = http_method
78
80
  span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, http_method)
@@ -101,7 +103,7 @@ module Datadog
101
103
  end
102
104
 
103
105
  def annotate_span_with_response!(span, response, request_options)
104
- return unless response && response.code
106
+ return unless response&.code
105
107
 
106
108
  span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, response.code)
107
109
 
@@ -114,15 +116,11 @@ module Datadog
114
116
  span.set_tags(
115
117
  Datadog.configuration.tracing.header_tags.response_tags(response.headers)
116
118
  )
117
- rescue StandardError => e
119
+ rescue => e
118
120
  logger.error("error preparing span from http.rb response: #{e}, Source: #{e.backtrace}")
119
121
  Datadog::Core::Telemetry::Logger.report(e)
120
122
  end
121
123
 
122
- def annotate_span_with_error!(span, error)
123
- span.set_error(error)
124
- end
125
-
126
124
  def datadog_configuration(host = :default)
127
125
  Datadog.configuration.tracing[:httprb, host]
128
126
  end
@@ -135,12 +133,6 @@ module Datadog
135
133
  Datadog.logger
136
134
  end
137
135
 
138
- def should_skip_distributed_tracing?(client_config)
139
- return !client_config[:distributed_tracing] if client_config && client_config.key?(:distributed_tracing)
140
-
141
- !Datadog.configuration.tracing[:httprb][:distributed_tracing]
142
- end
143
-
144
136
  def set_analytics_sample_rate(span, request_options)
145
137
  return unless analytics_enabled?(request_options)
146
138
 
@@ -22,7 +22,7 @@ module Datadog
22
22
  end
23
23
 
24
24
  def self.version
25
- Gem.loaded_specs['http'] && Gem.loaded_specs['http'].version
25
+ Gem.loaded_specs['http']&.version
26
26
  end
27
27
 
28
28
  def self.loaded?
@@ -22,7 +22,7 @@ module Datadog
22
22
  end
23
23
 
24
24
  def span_options
25
- { service: configuration[:service_name] }
25
+ {service: configuration[:service_name]}
26
26
  end
27
27
 
28
28
  def configuration
@@ -31,7 +31,7 @@ module Datadog
31
31
  end
32
32
 
33
33
  def span_options
34
- super.merge({ tags: { Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_CONNECTION_REQUEST } })
34
+ super.merge({tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_CONNECTION_REQUEST}})
35
35
  end
36
36
  end
37
37
  end
@@ -38,7 +38,7 @@ module Datadog
38
38
  end
39
39
 
40
40
  def span_options
41
- super.merge({ tags: { Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_PROCESS_BATCH } })
41
+ super.merge({tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_PROCESS_BATCH}})
42
42
  end
43
43
  end
44
44
  end
@@ -36,7 +36,7 @@ module Datadog
36
36
  end
37
37
 
38
38
  def span_options
39
- super.merge({ tags: { Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_PROCESS_MESSAGE } })
39
+ super.merge({tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_PROCESS_MESSAGE}})
40
40
  end
41
41
  end
42
42
  end
@@ -36,7 +36,7 @@ module Datadog
36
36
  end
37
37
 
38
38
  def span_options
39
- super.merge({ tags: { Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_CONSUMER_HEARTBEAT } })
39
+ super.merge({tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_CONSUMER_HEARTBEAT}})
40
40
  end
41
41
  end
42
42
  end
@@ -26,7 +26,7 @@ module Datadog
26
26
  end
27
27
 
28
28
  def span_options
29
- super.merge({ tags: { Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_CONSUMER_JOIN_GROUP } })
29
+ super.merge({tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_CONSUMER_JOIN_GROUP}})
30
30
  end
31
31
  end
32
32
  end
@@ -26,7 +26,7 @@ module Datadog
26
26
  end
27
27
 
28
28
  def span_options
29
- super.merge({ tags: { Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_CONSUMER_LEAVE_GROUP } })
29
+ super.merge({tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_CONSUMER_LEAVE_GROUP}})
30
30
  end
31
31
  end
32
32
  end
@@ -26,7 +26,7 @@ module Datadog
26
26
  end
27
27
 
28
28
  def span_options
29
- super.merge({ tags: { Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_CONSUMER_SYNC_GROUP } })
29
+ super.merge({tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_CONSUMER_SYNC_GROUP}})
30
30
  end
31
31
  end
32
32
  end
@@ -30,7 +30,7 @@ module Datadog
30
30
  end
31
31
 
32
32
  def span_options
33
- super.merge({ tags: { Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_SEND_MESSAGES } })
33
+ super.merge({tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_SEND_MESSAGES}})
34
34
  end
35
35
  end
36
36
  end
@@ -33,7 +33,7 @@ module Datadog
33
33
  end
34
34
 
35
35
  def span_options
36
- super.merge({ tags: { Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_DELIVER_MESSAGES } })
36
+ super.merge({tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_DELIVER_MESSAGES}})
37
37
  end
38
38
  end
39
39
  end
@@ -21,7 +21,7 @@ module Datadog
21
21
  end
22
22
 
23
23
  def self.version
24
- Gem.loaded_specs['ruby-kafka'] && Gem.loaded_specs['ruby-kafka'].version
24
+ Gem.loaded_specs['ruby-kafka']&.version
25
25
  end
26
26
 
27
27
  def self.loaded?
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../configuration/settings'
4
+ require_relative '../ext'
5
+
6
+ module Datadog
7
+ module Tracing
8
+ module Contrib
9
+ module Karafka
10
+ module Configuration
11
+ # @public_api
12
+ class Settings < Contrib::Configuration::Settings
13
+ option :enabled do |o|
14
+ o.type :bool
15
+ o.env Ext::ENV_ENABLED
16
+ o.default true
17
+ end
18
+
19
+ option :service_name
20
+
21
+ option :distributed_tracing, default: false, type: :bool
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../distributed/fetcher'
4
+ require_relative '../../../distributed/propagation'
5
+ require_relative '../../../distributed/b3_multi'
6
+ require_relative '../../../distributed/b3_single'
7
+ require_relative '../../../distributed/datadog'
8
+ require_relative '../../../distributed/none'
9
+ require_relative '../../../distributed/trace_context'
10
+ require_relative '../../../configuration/ext'
11
+
12
+ module Datadog
13
+ module Tracing
14
+ module Contrib
15
+ module Karafka
16
+ module Distributed
17
+ # Extracts and injects propagation through Kafka message headers.
18
+ class Propagation < Tracing::Distributed::Propagation
19
+ def initialize(
20
+ propagation_style_inject:,
21
+ propagation_style_extract:,
22
+ propagation_extract_first:
23
+ )
24
+ super(
25
+ propagation_styles: {
26
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_B3_MULTI_HEADER =>
27
+ Tracing::Distributed::B3Multi.new(fetcher: Tracing::Distributed::Fetcher),
28
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_B3_SINGLE_HEADER =>
29
+ Tracing::Distributed::B3Single.new(fetcher: Tracing::Distributed::Fetcher),
30
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG =>
31
+ Tracing::Distributed::Datadog.new(fetcher: Tracing::Distributed::Fetcher),
32
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_TRACE_CONTEXT =>
33
+ Tracing::Distributed::TraceContext.new(fetcher: Tracing::Distributed::Fetcher),
34
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE =>
35
+ Tracing::Distributed::Baggage.new(fetcher: Tracing::Distributed::Fetcher),
36
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new
37
+ },
38
+ propagation_style_inject: propagation_style_inject,
39
+ propagation_style_extract: propagation_style_extract,
40
+ propagation_extract_first: propagation_extract_first
41
+ )
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Tracing
5
+ module Contrib
6
+ module Karafka
7
+ module Ext
8
+ ENV_ENABLED = 'DD_TRACE_KARAFKA_ENABLED'
9
+
10
+ SPAN_MESSAGE_CONSUME = 'karafka.consume'
11
+ SPAN_WORKER_PROCESS = 'worker.process'
12
+
13
+ TAG_CONSUMER = 'kafka.consumer'
14
+ TAG_TOPIC = 'kafka.topic'
15
+ TAG_PARTITION = 'kafka.partition'
16
+ TAG_OFFSET = 'kafka.offset'
17
+ TAG_OFFSET_LAG = 'kafka.offset_lag'
18
+ TAG_MESSAGE_COUNT = 'kafka.message_count'
19
+ TAG_MESSAGE_KEY = 'kafka.message_key'
20
+ TAG_SYSTEM = 'kafka'
21
+
22
+ TAG_OPERATION_PROCESS_BATCH = 'consumer.process_batch'
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../integration'
4
+ require_relative 'configuration/settings'
5
+ require_relative 'patcher'
6
+
7
+ module Datadog
8
+ module Tracing
9
+ module Contrib
10
+ module Karafka
11
+ # Description of Kafka integration
12
+ class Integration
13
+ include Contrib::Integration
14
+
15
+ # Minimum version of the Karafka library that we support
16
+ # https://karafka.io/docs/Versions-Lifecycle-and-EOL/#versioning-strategy
17
+ MINIMUM_VERSION = Gem::Version.new('2.3.0')
18
+
19
+ # @public_api Changing the integration name or integration options can cause breaking changes
20
+ register_as :karafka, auto_patch: false
21
+
22
+ def self.version
23
+ Gem.loaded_specs['karafka']&.version
24
+ end
25
+
26
+ def self.loaded?
27
+ !defined?(::Karafka).nil?
28
+ end
29
+
30
+ def self.compatible?
31
+ super && version >= MINIMUM_VERSION
32
+ end
33
+
34
+ def new_configuration
35
+ Configuration::Settings.new
36
+ end
37
+
38
+ def patcher
39
+ Patcher
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'ext'
4
+
5
+ module Datadog
6
+ module Tracing
7
+ module Contrib
8
+ module Karafka
9
+ # Custom monitor for Karafka.
10
+ # Creating a custom monitor, instead of subscribing to an event
11
+ # (e.g. `Karafka.monitor.subscribe 'worker.processed'`),
12
+ # is required because event subscriptions cannot wrap the event execution (`yield`).
13
+ module Monitor
14
+ TRACEABLE_EVENTS = %w[
15
+ worker.processed
16
+ ].freeze
17
+
18
+ def instrument(event_id, payload = {}, &block)
19
+ return super unless TRACEABLE_EVENTS.include?(event_id)
20
+
21
+ Datadog::Tracing.trace(Ext::SPAN_WORKER_PROCESS) do |span|
22
+ job = payload[:job]
23
+ job_type = fetch_job_type(job.class)
24
+ consumer = job.executor.topic.consumer
25
+
26
+ action = case job_type
27
+ when 'Periodic', 'PeriodicNonBlocking'
28
+ 'tick'
29
+ when 'Shutdown'
30
+ 'shutdown'
31
+ when 'Revoked', 'RevokedNonBlocking'
32
+ 'revoked'
33
+ when 'Idle'
34
+ 'idle'
35
+ when 'Eofed', 'EofedNonBlocking'
36
+ 'eofed'
37
+ else
38
+ 'consume'
39
+ end
40
+
41
+ span.resource = "#{consumer}##{action}"
42
+
43
+ if action == 'consume'
44
+ span.set_tag(Ext::TAG_MESSAGE_COUNT, job.messages.count)
45
+ span.set_tag(Ext::TAG_PARTITION, job.executor.partition)
46
+ span.set_tag(Ext::TAG_OFFSET, job.messages.first.metadata.offset)
47
+ span.set_tag(Ext::TAG_CONSUMER, consumer)
48
+ span.set_tag(Contrib::Ext::Messaging::TAG_DESTINATION, job.executor.topic.name)
49
+ span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_SYSTEM)
50
+ end
51
+
52
+ super
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ def fetch_job_type(job_class)
59
+ @job_types_cache ||= {}
60
+ @job_types_cache[job_class] ||= job_class.to_s.split('::').last
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../patcher'
4
+ require_relative 'ext'
5
+ require_relative 'distributed/propagation'
6
+
7
+ module Datadog
8
+ module Tracing
9
+ module Contrib
10
+ module Karafka
11
+ # Patch to add tracing to Karafka::Messages::Messages
12
+ module MessagesPatch
13
+ def configuration
14
+ Datadog.configuration.tracing[:karafka]
15
+ end
16
+
17
+ def propagation
18
+ @propagation ||= Contrib::Karafka::Distributed::Propagation.new
19
+ end
20
+
21
+ # `each` is the most popular access point to Karafka messages,
22
+ # but not the only one
23
+ # Other access patterns do not have a straightforward tracing avenue
24
+ # (e.g. `my_batch_operation messages.payloads`)
25
+ # @see https://github.com/karafka/karafka/blob/b06d1f7c17818e1605f80c2bb573454a33376b40/README.md?plain=1#L29-L35
26
+ def each(&block)
27
+ @messages_array.each do |message|
28
+ if configuration[:distributed_tracing]
29
+ headers = if message.metadata.respond_to?(:raw_headers)
30
+ message.metadata.raw_headers
31
+ else
32
+ message.metadata.headers
33
+ end
34
+ trace_digest = Karafka.extract(headers)
35
+ Datadog::Tracing.continue_trace!(trace_digest) if trace_digest
36
+ end
37
+
38
+ Tracing.trace(Ext::SPAN_MESSAGE_CONSUME) do |span|
39
+ span.set_tag(Ext::TAG_OFFSET, message.metadata.offset)
40
+ span.set_tag(Contrib::Ext::Messaging::TAG_DESTINATION, message.topic)
41
+ span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_SYSTEM)
42
+
43
+ span.resource = message.topic
44
+
45
+ yield message
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ # Patcher enables patching of 'karafka' module.
52
+ module Patcher
53
+ include Contrib::Patcher
54
+
55
+ module_function
56
+
57
+ def target_version
58
+ Integration.version
59
+ end
60
+
61
+ def patch
62
+ require_relative 'monitor'
63
+
64
+ ::Karafka::Instrumentation::Monitor.prepend(Monitor)
65
+ ::Karafka::Messages::Messages.prepend(MessagesPatch)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'component'
4
+ require_relative 'karafka/integration'
5
+ require_relative 'karafka/distributed/propagation'
6
+
7
+ module Datadog
8
+ module Tracing
9
+ module Contrib
10
+ # `Karafka` integration public API
11
+ module Karafka
12
+ def self.inject(digest, data)
13
+ raise 'Please invoke Datadog.configure at least once before calling this method' unless @propagation
14
+
15
+ @propagation.inject!(digest, data)
16
+ end
17
+
18
+ def self.extract(data)
19
+ raise 'Please invoke Datadog.configure at least once before calling this method' unless @propagation
20
+
21
+ @propagation.extract(data)
22
+ end
23
+
24
+ Contrib::Component.register('karafka') do |config|
25
+ tracing = config.tracing
26
+ tracing.propagation_style
27
+
28
+ @propagation = Karafka::Distributed::Propagation.new(
29
+ propagation_style_inject: tracing.propagation_style_inject,
30
+ propagation_style_extract: tracing.propagation_style_extract,
31
+ propagation_extract_first: tracing.propagation_extract_first
32
+ )
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -16,7 +16,7 @@ module Datadog
16
16
  return super unless Datadog.configuration.tracing.log_injection
17
17
  return super unless Datadog.configuration.tracing[:lograge].enabled
18
18
 
19
- original_custom_options = super(event)
19
+ original_custom_options = super
20
20
 
21
21
  # Retrieves trace information for current thread
22
22
  correlation = Tracing.correlation
@@ -18,7 +18,7 @@ module Datadog
18
18
  register_as :lograge
19
19
 
20
20
  def self.version
21
- Gem.loaded_specs['lograge'] && Gem.loaded_specs['lograge'].version
21
+ Gem.loaded_specs['lograge']&.version
22
22
  end
23
23
 
24
24
  def self.loaded?
@@ -20,10 +20,12 @@ module Datadog
20
20
 
21
21
  # patch applies our patch
22
22
  def patch
23
+ # First check Lograge logger directly for when keep_original_rails_log option is used
24
+ used_logger = ::Lograge.logger || ::Lograge::LogSubscribers::ActionController.logger
25
+
23
26
  # ActiveSupport::TaggedLogging is the default Rails logger since Rails 5
24
27
  if defined?(::ActiveSupport::TaggedLogging::Formatter) &&
25
- ::Lograge::LogSubscribers::ActionController
26
- .logger&.formatter.is_a?(::ActiveSupport::TaggedLogging::Formatter)
28
+ used_logger&.formatter.is_a?(::ActiveSupport::TaggedLogging::Formatter)
27
29
  Datadog.logger.warn(
28
30
  'Lograge and ActiveSupport::TaggedLogging (the default Rails log formatter) are not compatible: ' \
29
31
  'Lograge does not account for Rails log tags, creating polluted logs and breaking log formatting. ' \
@@ -11,7 +11,7 @@ module Datadog
11
11
  # Custom settings for the MongoDB integration
12
12
  # @public_api
13
13
  class Settings < Contrib::Configuration::Settings
14
- DEFAULT_QUANTIZE = { show: [:collection, :database, :operation] }.freeze
14
+ DEFAULT_QUANTIZE = {show: [:collection, :database, :operation]}.freeze
15
15
 
16
16
  option :enabled do |o|
17
17
  o.type :bool
@@ -48,6 +48,14 @@ module Datadog
48
48
  o.type :string, nilable: true
49
49
  o.env Ext::ENV_PEER_SERVICE
50
50
  end
51
+
52
+ # Serializes the command to JSON format, which is the desired format for the agent and Datadog UI.
53
+ # Setting this to false is deprecated and does not have any advantages.
54
+ option :json_command do |o|
55
+ o.type :bool
56
+ o.env Ext::ENV_JSON_COMMAND
57
+ o.default false
58
+ end
51
59
  end
52
60
  end
53
61
  end
@@ -13,6 +13,7 @@ module Datadog
13
13
  # @!visibility private
14
14
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_MONGO_ANALYTICS_ENABLED'
15
15
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_MONGO_ANALYTICS_SAMPLE_RATE'
16
+ ENV_JSON_COMMAND = 'DD_TRACE_MONGO_JSON_COMMAND'
16
17
  DEFAULT_PEER_SERVICE_NAME = 'mongodb'
17
18
  SPAN_COMMAND = 'mongo.cmd'
18
19
  SPAN_TYPE_COMMAND = 'mongodb'
@@ -24,7 +25,7 @@ module Datadog
24
25
  TAG_COMPONENT = 'mongodb'
25
26
  TAG_OPERATION_COMMAND = 'command'
26
27
  TAG_SYSTEM = 'mongodb'
27
- PEER_SERVICE_SOURCES = (Array[Ext::TAG_DB] + Contrib::Ext::DB::PEER_SERVICE_SOURCES).freeze
28
+ PEER_SERVICE_SOURCES = ([Ext::TAG_DB] + Contrib::Ext::DB::PEER_SERVICE_SOURCES).freeze
28
29
 
29
30
  # Temporary namespace to accommodate unified tags which has naming collision, before
30
31
  # making breaking changes
@@ -22,7 +22,7 @@ module Datadog
22
22
  end
23
23
 
24
24
  def self.version
25
- Gem.loaded_specs['mongo'] && Gem.loaded_specs['mongo'].version
25
+ Gem.loaded_specs['mongo']&.version
26
26
  end
27
27
 
28
28
  def self.loaded?
@@ -9,7 +9,7 @@ module Datadog
9
9
  module MongoDB
10
10
  EXCLUDE_KEYS = [:_id].freeze
11
11
  SHOW_KEYS = [].freeze
12
- DEFAULT_OPTIONS = { exclude: EXCLUDE_KEYS, show: SHOW_KEYS }.freeze
12
+ DEFAULT_OPTIONS = {exclude: EXCLUDE_KEYS, show: SHOW_KEYS}.freeze
13
13
 
14
14
  module_function
15
15