ddtrace 1.4.2 → 1.23.3

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 (895) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1177 -3
  3. data/LICENSE-3rdparty.csv +3 -1
  4. data/README.md +10 -12
  5. data/bin/ddprofrb +15 -0
  6. data/bin/ddtracerb +3 -1
  7. data/ext/{ddtrace_profiling_loader/ddtrace_profiling_loader.c → datadog_profiling_loader/datadog_profiling_loader.c} +11 -4
  8. data/ext/{ddtrace_profiling_loader → datadog_profiling_loader}/extconf.rb +24 -6
  9. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/NativeExtensionDesign.md +48 -12
  10. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id.h +1 -3
  11. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_from_pthread.c +6 -23
  12. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_noop.c +0 -1
  13. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +1161 -0
  14. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +422 -0
  15. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +101 -0
  16. data/ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.c +150 -0
  17. data/ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.h +18 -0
  18. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
  19. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
  20. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +244 -0
  21. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
  22. data/ext/datadog_profiling_native_extension/collectors_stack.c +372 -0
  23. data/ext/datadog_profiling_native_extension/collectors_stack.h +27 -0
  24. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +1402 -0
  25. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +15 -0
  26. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/extconf.rb +114 -34
  27. data/ext/datadog_profiling_native_extension/heap_recorder.c +1047 -0
  28. data/ext/datadog_profiling_native_extension/heap_recorder.h +166 -0
  29. data/ext/datadog_profiling_native_extension/helpers.h +23 -0
  30. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/http_transport.c +129 -88
  31. data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +62 -0
  32. data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +42 -0
  33. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/native_extension_helpers.rb +104 -29
  34. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.c +331 -131
  35. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.h +29 -1
  36. data/ext/datadog_profiling_native_extension/profiling.c +267 -0
  37. data/ext/datadog_profiling_native_extension/ruby_helpers.c +267 -0
  38. data/ext/datadog_profiling_native_extension/ruby_helpers.h +122 -0
  39. data/ext/datadog_profiling_native_extension/setup_signal_handler.c +115 -0
  40. data/ext/datadog_profiling_native_extension/setup_signal_handler.h +11 -0
  41. data/ext/datadog_profiling_native_extension/stack_recorder.c +1040 -0
  42. data/ext/datadog_profiling_native_extension/stack_recorder.h +27 -0
  43. data/ext/datadog_profiling_native_extension/time_helpers.c +53 -0
  44. data/ext/datadog_profiling_native_extension/time_helpers.h +26 -0
  45. data/lib/datadog/appsec/assets/blocked.html +98 -3
  46. data/lib/datadog/appsec/assets/blocked.json +1 -0
  47. data/lib/datadog/appsec/assets/blocked.text +5 -0
  48. data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
  49. data/lib/datadog/appsec/assets/waf_rules/recommended.json +2861 -796
  50. data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
  51. data/lib/datadog/appsec/assets/waf_rules/strict.json +459 -122
  52. data/lib/datadog/appsec/assets.rb +10 -4
  53. data/lib/datadog/appsec/autoload.rb +4 -11
  54. data/lib/datadog/appsec/component.rb +94 -0
  55. data/lib/datadog/appsec/configuration/settings.rb +170 -162
  56. data/lib/datadog/appsec/configuration.rb +1 -70
  57. data/lib/datadog/appsec/contrib/auto_instrument.rb +3 -5
  58. data/lib/datadog/appsec/contrib/devise/event.rb +57 -0
  59. data/lib/datadog/appsec/contrib/devise/ext.rb +13 -0
  60. data/lib/datadog/appsec/contrib/devise/integration.rb +42 -0
  61. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +76 -0
  62. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +54 -0
  63. data/lib/datadog/appsec/contrib/devise/patcher.rb +45 -0
  64. data/lib/datadog/appsec/contrib/devise/resource.rb +35 -0
  65. data/lib/datadog/appsec/contrib/devise/tracking.rb +57 -0
  66. data/lib/datadog/appsec/contrib/integration.rb +1 -1
  67. data/lib/datadog/appsec/contrib/patcher.rb +1 -1
  68. data/lib/datadog/appsec/contrib/rack/ext.rb +1 -3
  69. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +104 -0
  70. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +30 -0
  71. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +112 -121
  72. data/lib/datadog/appsec/contrib/rack/integration.rb +0 -7
  73. data/lib/datadog/appsec/contrib/rack/patcher.rb +3 -1
  74. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +33 -39
  75. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +19 -23
  76. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +25 -23
  77. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +11 -8
  78. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +153 -41
  79. data/lib/datadog/appsec/contrib/rails/ext.rb +2 -4
  80. data/lib/datadog/appsec/contrib/rails/framework.rb +2 -16
  81. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +67 -0
  82. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +40 -52
  83. data/lib/datadog/appsec/contrib/rails/integration.rb +1 -8
  84. data/lib/datadog/appsec/contrib/rails/patcher.rb +23 -20
  85. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +21 -23
  86. data/lib/datadog/appsec/contrib/rails/request.rb +4 -1
  87. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +1 -1
  88. data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -3
  89. data/lib/datadog/appsec/contrib/sinatra/framework.rb +2 -16
  90. data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +17 -0
  91. data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +23 -0
  92. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +78 -87
  93. data/lib/datadog/appsec/contrib/sinatra/integration.rb +0 -7
  94. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +33 -15
  95. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +19 -21
  96. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +1 -1
  97. data/lib/datadog/appsec/event.rb +98 -50
  98. data/lib/datadog/appsec/ext.rb +10 -0
  99. data/lib/datadog/appsec/extensions.rb +2 -105
  100. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +22 -0
  101. data/lib/datadog/appsec/instrumentation/gateway.rb +26 -6
  102. data/lib/datadog/appsec/instrumentation.rb +9 -0
  103. data/lib/datadog/appsec/monitor/gateway/watcher.rb +67 -0
  104. data/lib/datadog/appsec/monitor/reactive/set_user.rb +58 -0
  105. data/lib/datadog/appsec/monitor.rb +11 -0
  106. data/lib/datadog/appsec/processor/actions.rb +49 -0
  107. data/lib/datadog/appsec/processor/rule_loader.rb +123 -0
  108. data/lib/datadog/appsec/processor/rule_merger.rb +152 -0
  109. data/lib/datadog/appsec/processor.rb +68 -61
  110. data/lib/datadog/appsec/rate_limiter.rb +1 -3
  111. data/lib/datadog/appsec/reactive/address_hash.rb +6 -2
  112. data/lib/datadog/appsec/reactive/engine.rb +10 -7
  113. data/lib/datadog/appsec/reactive/operation.rb +19 -2
  114. data/lib/datadog/appsec/reactive/subscriber.rb +2 -1
  115. data/lib/datadog/appsec/remote.rb +129 -0
  116. data/lib/datadog/appsec/response.rb +151 -0
  117. data/lib/datadog/appsec/sample_rate.rb +21 -0
  118. data/lib/datadog/appsec/scope.rb +61 -0
  119. data/lib/datadog/appsec/utils/http/media_range.rb +199 -0
  120. data/lib/datadog/appsec/utils/http/media_type.rb +85 -0
  121. data/lib/datadog/appsec/utils/http.rb +11 -0
  122. data/lib/datadog/appsec/utils.rb +9 -0
  123. data/lib/datadog/appsec.rb +41 -4
  124. data/lib/datadog/auto_instrument.rb +3 -0
  125. data/lib/datadog/core/backport.rb +51 -0
  126. data/lib/datadog/core/buffer/cruby.rb +1 -1
  127. data/lib/datadog/core/buffer/random.rb +1 -1
  128. data/lib/datadog/core/buffer/thread_safe.rb +1 -1
  129. data/lib/datadog/core/chunker.rb +1 -1
  130. data/lib/datadog/core/configuration/agent_settings_resolver.rb +96 -56
  131. data/lib/datadog/core/configuration/base.rb +7 -16
  132. data/lib/datadog/core/configuration/components.rb +46 -300
  133. data/lib/datadog/core/configuration/ext.rb +47 -0
  134. data/lib/datadog/core/configuration/option.rb +272 -22
  135. data/lib/datadog/core/configuration/option_definition.rb +81 -31
  136. data/lib/datadog/core/configuration/options.rb +26 -16
  137. data/lib/datadog/core/configuration/settings.rb +498 -302
  138. data/lib/datadog/core/configuration.rb +16 -10
  139. data/lib/datadog/core/diagnostics/environment_logger.rb +131 -231
  140. data/lib/datadog/core/diagnostics/health.rb +4 -22
  141. data/lib/datadog/core/encoding.rb +0 -4
  142. data/lib/datadog/core/environment/cgroup.rb +0 -4
  143. data/lib/datadog/core/environment/class_count.rb +7 -7
  144. data/lib/datadog/core/environment/container.rb +0 -4
  145. data/lib/datadog/core/environment/execution.rb +103 -0
  146. data/lib/datadog/core/environment/ext.rb +12 -12
  147. data/lib/datadog/core/environment/gc.rb +1 -1
  148. data/lib/datadog/core/environment/git.rb +25 -0
  149. data/lib/datadog/core/environment/identity.rb +27 -1
  150. data/lib/datadog/core/environment/platform.rb +7 -3
  151. data/lib/datadog/core/environment/socket.rb +1 -1
  152. data/lib/datadog/core/environment/thread_count.rb +1 -1
  153. data/lib/datadog/core/environment/variable_helpers.rb +29 -44
  154. data/lib/datadog/core/environment/vm_cache.rb +18 -1
  155. data/lib/datadog/core/environment/yjit.rb +58 -0
  156. data/lib/datadog/core/error.rb +1 -2
  157. data/lib/datadog/core/extensions.rb +1 -1
  158. data/lib/datadog/core/git/ext.rb +5 -24
  159. data/lib/datadog/core/header_collection.rb +43 -0
  160. data/lib/datadog/core/logger.rb +0 -2
  161. data/lib/datadog/core/logging/ext.rb +3 -1
  162. data/lib/datadog/core/metrics/client.rb +3 -4
  163. data/lib/datadog/core/metrics/ext.rb +6 -8
  164. data/lib/datadog/core/metrics/helpers.rb +1 -1
  165. data/lib/datadog/core/metrics/logging.rb +0 -2
  166. data/lib/datadog/core/metrics/metric.rb +1 -1
  167. data/lib/datadog/core/metrics/options.rb +0 -2
  168. data/lib/datadog/core/pin.rb +0 -2
  169. data/lib/datadog/core/remote/client/capabilities.rb +62 -0
  170. data/lib/datadog/core/remote/client.rb +232 -0
  171. data/lib/datadog/core/remote/component.rb +162 -0
  172. data/lib/datadog/core/remote/configuration/content.rb +111 -0
  173. data/lib/datadog/core/remote/configuration/digest.rb +62 -0
  174. data/lib/datadog/core/remote/configuration/path.rb +90 -0
  175. data/lib/datadog/core/remote/configuration/repository.rb +294 -0
  176. data/lib/datadog/core/remote/configuration/target.rb +74 -0
  177. data/lib/datadog/core/remote/configuration.rb +18 -0
  178. data/lib/datadog/core/remote/dispatcher.rb +59 -0
  179. data/lib/datadog/core/remote/ext.rb +13 -0
  180. data/lib/datadog/core/remote/negotiation.rb +70 -0
  181. data/lib/datadog/core/remote/tie/tracing.rb +39 -0
  182. data/lib/datadog/core/remote/tie.rb +27 -0
  183. data/lib/datadog/core/remote/transport/config.rb +60 -0
  184. data/lib/datadog/core/remote/transport/http/api/instance.rb +39 -0
  185. data/lib/datadog/core/remote/transport/http/api/spec.rb +21 -0
  186. data/lib/datadog/core/remote/transport/http/api.rb +58 -0
  187. data/lib/datadog/core/remote/transport/http/builder.rb +219 -0
  188. data/lib/datadog/core/remote/transport/http/client.rb +48 -0
  189. data/lib/datadog/core/remote/transport/http/config.rb +280 -0
  190. data/lib/datadog/core/remote/transport/http/negotiation.rb +146 -0
  191. data/lib/datadog/core/remote/transport/http.rb +179 -0
  192. data/lib/datadog/core/remote/transport/negotiation.rb +62 -0
  193. data/lib/datadog/core/remote/worker.rb +102 -0
  194. data/lib/datadog/core/remote.rb +24 -0
  195. data/lib/datadog/core/runtime/ext.rb +21 -11
  196. data/lib/datadog/core/runtime/metrics.rb +64 -7
  197. data/lib/datadog/core/telemetry/component.rb +66 -0
  198. data/lib/datadog/core/telemetry/emitter.rb +9 -13
  199. data/lib/datadog/core/telemetry/event.rb +250 -47
  200. data/lib/datadog/core/telemetry/ext.rb +7 -2
  201. data/lib/datadog/core/telemetry/http/adapters/net.rb +1 -3
  202. data/lib/datadog/core/telemetry/http/env.rb +1 -1
  203. data/lib/datadog/core/telemetry/http/ext.rb +13 -8
  204. data/lib/datadog/core/telemetry/http/response.rb +4 -4
  205. data/lib/datadog/core/telemetry/http/transport.rb +12 -4
  206. data/lib/datadog/core/telemetry/request.rb +59 -0
  207. data/lib/datadog/core/telemetry/worker.rb +158 -0
  208. data/lib/datadog/core/transport/ext.rb +49 -0
  209. data/lib/datadog/core/transport/http/adapters/net.rb +168 -0
  210. data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
  211. data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
  212. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
  213. data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
  214. data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
  215. data/lib/datadog/core/transport/http/api/map.rb +18 -0
  216. data/lib/datadog/core/transport/http/env.rb +62 -0
  217. data/lib/datadog/core/transport/http/response.rb +60 -0
  218. data/lib/datadog/core/transport/parcel.rb +22 -0
  219. data/lib/datadog/core/transport/request.rb +17 -0
  220. data/lib/datadog/core/transport/response.rb +64 -0
  221. data/lib/datadog/core/utils/compression.rb +6 -2
  222. data/lib/datadog/core/utils/duration.rb +52 -0
  223. data/lib/datadog/core/utils/forking.rb +0 -2
  224. data/lib/datadog/core/utils/hash.rb +79 -0
  225. data/lib/datadog/core/utils/network.rb +140 -0
  226. data/lib/datadog/core/utils/only_once.rb +0 -2
  227. data/lib/datadog/core/utils/only_once_successful.rb +76 -0
  228. data/lib/datadog/core/utils/safe_dup.rb +35 -12
  229. data/lib/datadog/core/utils/sequence.rb +1 -1
  230. data/lib/datadog/core/utils/time.rb +1 -3
  231. data/lib/datadog/core/utils/url.rb +25 -0
  232. data/lib/datadog/core/utils.rb +1 -24
  233. data/lib/datadog/core/vendor/ipaddr.rb +78 -0
  234. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +0 -2
  235. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +0 -2
  236. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +0 -2
  237. data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +0 -2
  238. data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +0 -2
  239. data/lib/datadog/core/vendor/multipart-post/multipart.rb +0 -2
  240. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +0 -2
  241. data/lib/datadog/core/worker.rb +1 -1
  242. data/lib/datadog/core/workers/async.rb +7 -6
  243. data/lib/datadog/core/workers/interval_loop.rb +6 -2
  244. data/lib/datadog/core/workers/polling.rb +2 -4
  245. data/lib/datadog/core/workers/queue.rb +1 -1
  246. data/lib/datadog/core/workers/runtime_metrics.rb +1 -1
  247. data/lib/datadog/core.rb +20 -55
  248. data/lib/datadog/kit/appsec/events.rb +169 -0
  249. data/lib/datadog/kit/enable_core_dumps.rb +8 -9
  250. data/lib/datadog/kit/identity.rb +90 -49
  251. data/lib/datadog/kit.rb +1 -1
  252. data/lib/datadog/opentelemetry/api/context.rb +193 -0
  253. data/lib/datadog/opentelemetry/api/trace/span.rb +14 -0
  254. data/lib/datadog/opentelemetry/sdk/configurator.rb +37 -0
  255. data/lib/datadog/opentelemetry/sdk/id_generator.rb +26 -0
  256. data/lib/datadog/opentelemetry/sdk/propagator.rb +92 -0
  257. data/lib/datadog/opentelemetry/sdk/span_processor.rb +134 -0
  258. data/lib/datadog/opentelemetry/sdk/trace/span.rb +167 -0
  259. data/lib/datadog/opentelemetry/trace.rb +58 -0
  260. data/lib/datadog/opentelemetry.rb +51 -0
  261. data/lib/datadog/opentracer/binary_propagator.rb +1 -1
  262. data/lib/datadog/opentracer/carrier.rb +1 -1
  263. data/lib/datadog/opentracer/distributed_headers.rb +7 -11
  264. data/lib/datadog/opentracer/global_tracer.rb +1 -1
  265. data/lib/datadog/opentracer/propagator.rb +1 -1
  266. data/lib/datadog/opentracer/rack_propagator.rb +0 -5
  267. data/lib/datadog/opentracer/scope.rb +1 -1
  268. data/lib/datadog/opentracer/scope_manager.rb +1 -1
  269. data/lib/datadog/opentracer/span.rb +0 -2
  270. data/lib/datadog/opentracer/span_context.rb +1 -1
  271. data/lib/datadog/opentracer/span_context_factory.rb +1 -1
  272. data/lib/datadog/opentracer/text_map_propagator.rb +6 -9
  273. data/lib/datadog/opentracer/thread_local_scope.rb +1 -1
  274. data/lib/datadog/opentracer/thread_local_scope_manager.rb +0 -2
  275. data/lib/datadog/opentracer/tracer.rb +0 -2
  276. data/lib/datadog/opentracer.rb +10 -1
  277. data/lib/datadog/profiling/collectors/code_provenance.rb +10 -6
  278. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +82 -19
  279. data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
  280. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +68 -0
  281. data/lib/datadog/profiling/collectors/info.rb +101 -0
  282. data/lib/datadog/profiling/collectors/stack.rb +1 -1
  283. data/lib/datadog/profiling/collectors/thread_context.rb +61 -0
  284. data/lib/datadog/profiling/component.rb +426 -0
  285. data/lib/datadog/profiling/exporter.rb +32 -10
  286. data/lib/datadog/profiling/ext/forking.rb +0 -2
  287. data/lib/datadog/profiling/ext.rb +22 -32
  288. data/lib/datadog/profiling/flush.rb +11 -6
  289. data/lib/datadog/profiling/http_transport.rb +23 -8
  290. data/lib/datadog/profiling/load_native_extension.rb +25 -8
  291. data/lib/datadog/profiling/native_extension.rb +2 -23
  292. data/lib/datadog/profiling/preload.rb +1 -1
  293. data/lib/datadog/profiling/profiler.rb +42 -14
  294. data/lib/datadog/profiling/scheduler.rb +27 -25
  295. data/lib/datadog/profiling/stack_recorder.rb +36 -8
  296. data/lib/datadog/profiling/tag_builder.rb +6 -1
  297. data/lib/datadog/profiling/tasks/exec.rb +3 -5
  298. data/lib/datadog/profiling/tasks/help.rb +3 -5
  299. data/lib/datadog/profiling/tasks/setup.rb +0 -35
  300. data/lib/datadog/profiling.rb +65 -75
  301. data/lib/datadog/tracing/analytics.rb +1 -1
  302. data/lib/datadog/tracing/buffer.rb +0 -5
  303. data/lib/datadog/tracing/client_ip.rb +61 -0
  304. data/lib/datadog/tracing/component.rb +235 -0
  305. data/lib/datadog/tracing/configuration/agent_settings_resolver.rb +13 -0
  306. data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
  307. data/lib/datadog/tracing/configuration/dynamic.rb +64 -0
  308. data/lib/datadog/tracing/configuration/ext.rb +72 -15
  309. data/lib/datadog/tracing/configuration/http.rb +74 -0
  310. data/lib/datadog/tracing/configuration/settings.rb +502 -0
  311. data/lib/datadog/tracing/context.rb +1 -1
  312. data/lib/datadog/tracing/context_provider.rb +0 -2
  313. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +11 -7
  314. data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
  315. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +0 -2
  316. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +0 -2
  317. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +0 -2
  318. data/lib/datadog/tracing/contrib/action_cable/events.rb +1 -1
  319. data/lib/datadog/tracing/contrib/action_cable/ext.rb +20 -19
  320. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +0 -2
  321. data/lib/datadog/tracing/contrib/action_cable/integration.rb +0 -2
  322. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +1 -1
  323. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +11 -7
  324. data/lib/datadog/tracing/contrib/action_mailer/event.rb +1 -1
  325. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +1 -3
  326. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +0 -2
  327. data/lib/datadog/tracing/contrib/action_mailer/events.rb +1 -1
  328. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +20 -19
  329. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +0 -2
  330. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +1 -1
  331. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +2 -26
  332. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +1 -1
  333. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +23 -9
  334. data/lib/datadog/tracing/contrib/action_pack/ext.rb +10 -9
  335. data/lib/datadog/tracing/contrib/action_pack/integration.rb +0 -2
  336. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +1 -1
  337. data/lib/datadog/tracing/contrib/action_pack/utils.rb +0 -2
  338. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +10 -8
  339. data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
  340. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +0 -2
  341. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +0 -2
  342. data/lib/datadog/tracing/contrib/action_view/events.rb +1 -1
  343. data/lib/datadog/tracing/contrib/action_view/ext.rb +12 -11
  344. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +0 -2
  345. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +0 -2
  346. data/lib/datadog/tracing/contrib/action_view/integration.rb +0 -2
  347. data/lib/datadog/tracing/contrib/action_view/patcher.rb +0 -2
  348. data/lib/datadog/tracing/contrib/action_view/utils.rb +0 -2
  349. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +15 -8
  350. data/lib/datadog/tracing/contrib/active_job/event.rb +1 -1
  351. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +0 -2
  352. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +0 -2
  353. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +0 -2
  354. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +0 -2
  355. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +0 -2
  356. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +0 -2
  357. data/lib/datadog/tracing/contrib/active_job/events.rb +1 -1
  358. data/lib/datadog/tracing/contrib/active_job/ext.rb +25 -24
  359. data/lib/datadog/tracing/contrib/active_job/integration.rb +0 -2
  360. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +2 -2
  361. data/lib/datadog/tracing/contrib/active_job/patcher.rb +2 -2
  362. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +11 -7
  363. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +1 -1
  364. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +0 -2
  365. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +0 -2
  366. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +1 -1
  367. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +12 -11
  368. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +0 -2
  369. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +1 -1
  370. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +0 -2
  371. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +29 -17
  372. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +17 -9
  373. data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
  374. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +0 -2
  375. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +3 -6
  376. data/lib/datadog/tracing/contrib/active_record/events.rb +1 -1
  377. data/lib/datadog/tracing/contrib/active_record/ext.rb +17 -16
  378. data/lib/datadog/tracing/contrib/active_record/integration.rb +0 -2
  379. data/lib/datadog/tracing/contrib/active_record/patcher.rb +1 -1
  380. data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -3
  381. data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +0 -2
  382. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +107 -201
  383. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -1
  384. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -1
  385. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +19 -8
  386. data/lib/datadog/tracing/contrib/active_support/ext.rb +18 -17
  387. data/lib/datadog/tracing/contrib/active_support/integration.rb +0 -2
  388. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
  389. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -1
  390. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +0 -2
  391. data/lib/datadog/tracing/contrib/active_support/patcher.rb +1 -1
  392. data/lib/datadog/tracing/contrib/analytics.rb +1 -2
  393. data/lib/datadog/tracing/contrib/auto_instrument.rb +1 -1
  394. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +25 -8
  395. data/lib/datadog/tracing/contrib/aws/ext.rb +37 -14
  396. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +28 -3
  397. data/lib/datadog/tracing/contrib/aws/integration.rb +0 -2
  398. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +4 -2
  399. data/lib/datadog/tracing/contrib/aws/patcher.rb +1 -1
  400. data/lib/datadog/tracing/contrib/aws/service/base.rb +16 -0
  401. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +22 -0
  402. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +22 -0
  403. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +32 -0
  404. data/lib/datadog/tracing/contrib/aws/service/s3.rb +22 -0
  405. data/lib/datadog/tracing/contrib/aws/service/sns.rb +30 -0
  406. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +27 -0
  407. data/lib/datadog/tracing/contrib/aws/service/states.rb +40 -0
  408. data/lib/datadog/tracing/contrib/aws/services.rb +17 -3
  409. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
  410. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +4 -3
  411. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +15 -15
  412. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +3 -3
  413. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +4 -11
  414. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +2 -3
  415. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +20 -4
  416. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
  417. data/lib/datadog/tracing/contrib/configurable.rb +2 -2
  418. data/lib/datadog/tracing/contrib/configuration/resolver.rb +1 -1
  419. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
  420. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -5
  421. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +30 -8
  422. data/lib/datadog/tracing/contrib/dalli/ext.rb +26 -10
  423. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +23 -7
  424. data/lib/datadog/tracing/contrib/dalli/integration.rb +0 -2
  425. data/lib/datadog/tracing/contrib/dalli/patcher.rb +1 -1
  426. data/lib/datadog/tracing/contrib/dalli/quantize.rb +0 -2
  427. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +15 -8
  428. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +16 -15
  429. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +0 -2
  430. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +1 -1
  431. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +9 -1
  432. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +3 -1
  433. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +25 -8
  434. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +21 -13
  435. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +0 -2
  436. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +105 -95
  437. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +0 -4
  438. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +28 -10
  439. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +52 -7
  440. data/lib/datadog/tracing/contrib/ethon/ext.rb +19 -11
  441. data/lib/datadog/tracing/contrib/ethon/integration.rb +0 -2
  442. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +10 -3
  443. data/lib/datadog/tracing/contrib/ethon/patcher.rb +1 -2
  444. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +30 -11
  445. data/lib/datadog/tracing/contrib/excon/ext.rb +16 -8
  446. data/lib/datadog/tracing/contrib/excon/integration.rb +0 -2
  447. data/lib/datadog/tracing/contrib/excon/middleware.rb +27 -4
  448. data/lib/datadog/tracing/contrib/excon/patcher.rb +1 -1
  449. data/lib/datadog/tracing/contrib/ext.rb +55 -0
  450. data/lib/datadog/tracing/contrib/extensions.rb +38 -4
  451. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +37 -11
  452. data/lib/datadog/tracing/contrib/faraday/connection.rb +1 -1
  453. data/lib/datadog/tracing/contrib/faraday/ext.rb +16 -8
  454. data/lib/datadog/tracing/contrib/faraday/integration.rb +0 -2
  455. data/lib/datadog/tracing/contrib/faraday/middleware.rb +25 -7
  456. data/lib/datadog/tracing/contrib/faraday/patcher.rb +0 -2
  457. data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +1 -1
  458. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +10 -7
  459. data/lib/datadog/tracing/contrib/grape/endpoint.rb +0 -4
  460. data/lib/datadog/tracing/contrib/grape/ext.rb +16 -15
  461. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +0 -2
  462. data/lib/datadog/tracing/contrib/grape/integration.rb +0 -2
  463. data/lib/datadog/tracing/contrib/grape/patcher.rb +1 -1
  464. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -8
  465. data/lib/datadog/tracing/contrib/graphql/ext.rb +7 -6
  466. data/lib/datadog/tracing/contrib/graphql/integration.rb +0 -2
  467. data/lib/datadog/tracing/contrib/graphql/patcher.rb +0 -2
  468. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +51 -10
  469. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +45 -19
  470. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +43 -26
  471. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +0 -6
  472. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +26 -0
  473. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +42 -0
  474. data/lib/datadog/tracing/contrib/grpc/ext.rb +16 -11
  475. data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
  476. data/lib/datadog/tracing/contrib/grpc/integration.rb +8 -3
  477. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +1 -1
  478. data/lib/datadog/tracing/contrib/grpc/patcher.rb +1 -4
  479. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +47 -0
  480. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +23 -0
  481. data/lib/datadog/tracing/contrib/hanami/ext.rb +24 -0
  482. data/lib/datadog/tracing/contrib/hanami/integration.rb +42 -0
  483. data/lib/datadog/tracing/contrib/hanami/patcher.rb +33 -0
  484. data/lib/datadog/tracing/contrib/hanami/plugin.rb +23 -0
  485. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +41 -0
  486. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +44 -0
  487. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +6 -9
  488. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +48 -10
  489. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +38 -0
  490. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +37 -0
  491. data/lib/datadog/tracing/contrib/http/ext.rb +16 -8
  492. data/lib/datadog/tracing/contrib/http/instrumentation.rb +32 -12
  493. data/lib/datadog/tracing/contrib/http/integration.rb +1 -1
  494. data/lib/datadog/tracing/contrib/http/patcher.rb +1 -1
  495. data/lib/datadog/tracing/contrib/http_annotation_helper.rb +1 -1
  496. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +48 -10
  497. data/lib/datadog/tracing/contrib/httpclient/ext.rb +17 -8
  498. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +27 -8
  499. data/lib/datadog/tracing/contrib/httpclient/integration.rb +0 -2
  500. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +0 -2
  501. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +48 -10
  502. data/lib/datadog/tracing/contrib/httprb/ext.rb +16 -8
  503. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +27 -9
  504. data/lib/datadog/tracing/contrib/httprb/integration.rb +0 -2
  505. data/lib/datadog/tracing/contrib/httprb/patcher.rb +0 -2
  506. data/lib/datadog/tracing/contrib/integration.rb +1 -1
  507. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +11 -7
  508. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +2 -1
  509. data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +1 -1
  510. data/lib/datadog/tracing/contrib/kafka/event.rb +2 -1
  511. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +0 -2
  512. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +0 -2
  513. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +0 -2
  514. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +0 -2
  515. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +0 -2
  516. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +0 -2
  517. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +0 -2
  518. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -2
  519. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -2
  520. data/lib/datadog/tracing/contrib/kafka/events.rb +1 -1
  521. data/lib/datadog/tracing/contrib/kafka/ext.rb +42 -39
  522. data/lib/datadog/tracing/contrib/kafka/integration.rb +0 -2
  523. data/lib/datadog/tracing/contrib/kafka/patcher.rb +1 -1
  524. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +4 -3
  525. data/lib/datadog/tracing/contrib/lograge/ext.rb +2 -2
  526. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +3 -18
  527. data/lib/datadog/tracing/contrib/lograge/integration.rb +0 -2
  528. data/lib/datadog/tracing/contrib/lograge/patcher.rb +1 -1
  529. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +25 -8
  530. data/lib/datadog/tracing/contrib/mongodb/ext.rb +25 -14
  531. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +1 -1
  532. data/lib/datadog/tracing/contrib/mongodb/integration.rb +0 -2
  533. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +0 -2
  534. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +1 -1
  535. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +22 -4
  536. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +36 -8
  537. data/lib/datadog/tracing/contrib/mysql2/ext.rb +15 -9
  538. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +38 -4
  539. data/lib/datadog/tracing/contrib/mysql2/integration.rb +0 -2
  540. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +1 -1
  541. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +53 -0
  542. data/lib/datadog/tracing/contrib/opensearch/ext.rb +38 -0
  543. data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
  544. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +135 -0
  545. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
  546. data/lib/datadog/tracing/contrib/patchable.rb +1 -1
  547. data/lib/datadog/tracing/contrib/patcher.rb +3 -5
  548. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +37 -8
  549. data/lib/datadog/tracing/contrib/pg/ext.rb +22 -18
  550. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +122 -39
  551. data/lib/datadog/tracing/contrib/pg/integration.rb +0 -2
  552. data/lib/datadog/tracing/contrib/pg/patcher.rb +1 -1
  553. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +24 -8
  554. data/lib/datadog/tracing/contrib/presto/ext.rb +25 -19
  555. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +17 -5
  556. data/lib/datadog/tracing/contrib/presto/integration.rb +0 -2
  557. data/lib/datadog/tracing/contrib/presto/patcher.rb +0 -2
  558. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +41 -0
  559. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +33 -0
  560. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +28 -0
  561. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +53 -0
  562. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +14 -9
  563. data/lib/datadog/tracing/contrib/qless/ext.rb +14 -13
  564. data/lib/datadog/tracing/contrib/qless/integration.rb +0 -2
  565. data/lib/datadog/tracing/contrib/qless/patcher.rb +1 -2
  566. data/lib/datadog/tracing/contrib/qless/qless_job.rb +3 -2
  567. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +1 -1
  568. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +22 -14
  569. data/lib/datadog/tracing/contrib/que/ext.rb +1 -2
  570. data/lib/datadog/tracing/contrib/que/integration.rb +0 -2
  571. data/lib/datadog/tracing/contrib/que/patcher.rb +0 -2
  572. data/lib/datadog/tracing/contrib/que/tracer.rb +4 -2
  573. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +19 -8
  574. data/lib/datadog/tracing/contrib/racecar/event.rb +7 -4
  575. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +4 -3
  576. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +0 -2
  577. data/lib/datadog/tracing/contrib/racecar/events/message.rb +4 -3
  578. data/lib/datadog/tracing/contrib/racecar/events.rb +1 -1
  579. data/lib/datadog/tracing/contrib/racecar/ext.rb +20 -18
  580. data/lib/datadog/tracing/contrib/racecar/integration.rb +0 -2
  581. data/lib/datadog/tracing/contrib/racecar/patcher.rb +1 -1
  582. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +17 -14
  583. data/lib/datadog/tracing/contrib/rack/ext.rb +18 -12
  584. data/lib/datadog/tracing/contrib/rack/header_collection.rb +38 -0
  585. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
  586. data/lib/datadog/tracing/contrib/rack/integration.rb +0 -2
  587. data/lib/datadog/tracing/contrib/rack/middlewares.rb +138 -82
  588. data/lib/datadog/tracing/contrib/rack/patcher.rb +0 -2
  589. data/lib/datadog/tracing/contrib/rack/request_queue.rb +0 -2
  590. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +0 -4
  591. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +29 -19
  592. data/lib/datadog/tracing/contrib/rails/ext.rb +7 -6
  593. data/lib/datadog/tracing/contrib/rails/framework.rb +1 -1
  594. data/lib/datadog/tracing/contrib/rails/integration.rb +0 -2
  595. data/lib/datadog/tracing/contrib/rails/log_injection.rb +7 -12
  596. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
  597. data/lib/datadog/tracing/contrib/rails/patcher.rb +10 -43
  598. data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -5
  599. data/lib/datadog/tracing/contrib/rails/utils.rb +2 -2
  600. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +15 -11
  601. data/lib/datadog/tracing/contrib/rake/ext.rb +14 -13
  602. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +0 -2
  603. data/lib/datadog/tracing/contrib/rake/integration.rb +0 -2
  604. data/lib/datadog/tracing/contrib/rake/patcher.rb +1 -1
  605. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +0 -2
  606. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +27 -10
  607. data/lib/datadog/tracing/contrib/redis/ext.rb +22 -13
  608. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +13 -39
  609. data/lib/datadog/tracing/contrib/redis/integration.rb +34 -3
  610. data/lib/datadog/tracing/contrib/redis/patcher.rb +66 -11
  611. data/lib/datadog/tracing/contrib/redis/quantize.rb +11 -10
  612. data/lib/datadog/tracing/contrib/redis/tags.rb +24 -9
  613. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +83 -0
  614. data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +0 -2
  615. data/lib/datadog/tracing/contrib/registerable.rb +1 -1
  616. data/lib/datadog/tracing/contrib/registry.rb +1 -1
  617. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +15 -8
  618. data/lib/datadog/tracing/contrib/resque/ext.rb +9 -8
  619. data/lib/datadog/tracing/contrib/resque/integration.rb +0 -2
  620. data/lib/datadog/tracing/contrib/resque/patcher.rb +1 -1
  621. data/lib/datadog/tracing/contrib/resque/resque_job.rb +5 -1
  622. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +28 -10
  623. data/lib/datadog/tracing/contrib/rest_client/ext.rb +15 -8
  624. data/lib/datadog/tracing/contrib/rest_client/integration.rb +0 -2
  625. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +1 -2
  626. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +28 -3
  627. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +38 -0
  628. data/lib/datadog/tracing/contrib/roda/ext.rb +19 -0
  629. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +76 -0
  630. data/lib/datadog/tracing/contrib/roda/integration.rb +45 -0
  631. data/lib/datadog/{ci/contrib/cucumber → tracing/contrib/roda}/patcher.rb +10 -7
  632. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +4 -3
  633. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +2 -2
  634. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +6 -21
  635. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +0 -2
  636. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +1 -1
  637. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +11 -7
  638. data/lib/datadog/tracing/contrib/sequel/database.rb +4 -3
  639. data/lib/datadog/tracing/contrib/sequel/dataset.rb +5 -2
  640. data/lib/datadog/tracing/contrib/sequel/ext.rb +10 -9
  641. data/lib/datadog/tracing/contrib/sequel/integration.rb +0 -2
  642. data/lib/datadog/tracing/contrib/sequel/patcher.rb +1 -1
  643. data/lib/datadog/tracing/contrib/sequel/utils.rb +7 -6
  644. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +16 -9
  645. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +14 -12
  646. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +0 -2
  647. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
  648. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +5 -1
  649. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +18 -4
  650. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +20 -11
  651. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +38 -0
  652. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +32 -31
  653. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +8 -2
  654. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +15 -3
  655. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +14 -5
  656. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +3 -1
  657. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +3 -1
  658. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +5 -1
  659. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +34 -0
  660. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +24 -3
  661. data/lib/datadog/tracing/contrib/sidekiq/{tracing.rb → utils.rb} +2 -2
  662. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +12 -11
  663. data/lib/datadog/tracing/contrib/sinatra/env.rb +11 -41
  664. data/lib/datadog/tracing/contrib/sinatra/ext.rb +24 -19
  665. data/lib/datadog/tracing/contrib/sinatra/framework.rb +0 -2
  666. data/lib/datadog/tracing/contrib/sinatra/integration.rb +0 -2
  667. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +2 -3
  668. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +8 -82
  669. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +14 -20
  670. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +15 -10
  671. data/lib/datadog/tracing/contrib/sneakers/ext.rb +3 -2
  672. data/lib/datadog/tracing/contrib/sneakers/integration.rb +0 -2
  673. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +0 -2
  674. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +5 -2
  675. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +92 -0
  676. data/lib/datadog/tracing/contrib/status_code_matcher.rb +0 -3
  677. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +37 -0
  678. data/lib/datadog/tracing/contrib/stripe/ext.rb +27 -0
  679. data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
  680. data/lib/datadog/tracing/contrib/stripe/patcher.rb +28 -0
  681. data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
  682. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +11 -7
  683. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +1 -1
  684. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +15 -14
  685. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +0 -2
  686. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +0 -2
  687. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +1 -2
  688. data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +58 -0
  689. data/lib/datadog/tracing/contrib/trilogy/ext.rb +27 -0
  690. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +94 -0
  691. data/lib/datadog/tracing/contrib/trilogy/integration.rb +43 -0
  692. data/lib/datadog/tracing/contrib/trilogy/patcher.rb +31 -0
  693. data/lib/datadog/tracing/contrib/utils/database.rb +4 -4
  694. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +0 -2
  695. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +92 -14
  696. data/lib/datadog/tracing/contrib.rb +6 -1
  697. data/lib/datadog/tracing/correlation.rb +42 -14
  698. data/lib/datadog/tracing/diagnostics/environment_logger.rb +165 -0
  699. data/lib/datadog/{core → tracing}/diagnostics/ext.rb +21 -26
  700. data/lib/datadog/tracing/diagnostics/health.rb +40 -0
  701. data/lib/datadog/tracing/distributed/b3_multi.rb +72 -0
  702. data/lib/datadog/tracing/distributed/b3_single.rb +68 -0
  703. data/lib/datadog/tracing/distributed/datadog.rb +199 -0
  704. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +84 -0
  705. data/lib/datadog/tracing/distributed/fetcher.rb +21 -0
  706. data/lib/datadog/tracing/distributed/headers/ext.rb +19 -16
  707. data/lib/datadog/tracing/distributed/helpers.rb +26 -39
  708. data/lib/datadog/tracing/distributed/none.rb +18 -0
  709. data/lib/datadog/tracing/distributed/propagation.rb +127 -0
  710. data/lib/datadog/tracing/distributed/trace_context.rb +415 -0
  711. data/lib/datadog/tracing/event.rb +0 -4
  712. data/lib/datadog/tracing/flush.rb +58 -36
  713. data/lib/datadog/tracing/metadata/analytics.rb +1 -1
  714. data/lib/datadog/tracing/metadata/errors.rb +1 -1
  715. data/lib/datadog/tracing/metadata/ext.rb +29 -14
  716. data/lib/datadog/tracing/metadata/tagging.rb +17 -4
  717. data/lib/datadog/tracing/metadata.rb +1 -1
  718. data/lib/datadog/tracing/pipeline/span_filter.rb +1 -1
  719. data/lib/datadog/tracing/pipeline/span_processor.rb +1 -1
  720. data/lib/datadog/tracing/pipeline.rb +0 -4
  721. data/lib/datadog/tracing/propagation/http.rb +4 -99
  722. data/lib/datadog/tracing/remote.rb +78 -0
  723. data/lib/datadog/tracing/runtime/metrics.rb +1 -3
  724. data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
  725. data/lib/datadog/tracing/sampling/ext.rb +30 -1
  726. data/lib/datadog/tracing/sampling/matcher.rb +24 -4
  727. data/lib/datadog/tracing/sampling/priority_sampler.rb +58 -5
  728. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +8 -11
  729. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +29 -8
  730. data/lib/datadog/tracing/sampling/rate_limiter.rb +3 -2
  731. data/lib/datadog/tracing/sampling/rate_sampler.rb +23 -10
  732. data/lib/datadog/tracing/sampling/rule.rb +7 -6
  733. data/lib/datadog/tracing/sampling/rule_sampler.rb +35 -7
  734. data/lib/datadog/tracing/sampling/sampler.rb +0 -2
  735. data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
  736. data/lib/datadog/tracing/sampling/span/matcher.rb +9 -0
  737. data/lib/datadog/tracing/sampling/span/rule.rb +82 -0
  738. data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
  739. data/lib/datadog/tracing/sampling/span/sampler.rb +77 -0
  740. data/lib/datadog/tracing/span.rb +3 -21
  741. data/lib/datadog/tracing/span_operation.rb +8 -24
  742. data/lib/datadog/tracing/sync_writer.rb +4 -6
  743. data/lib/datadog/tracing/trace_digest.rb +120 -3
  744. data/lib/datadog/tracing/trace_operation.rb +62 -15
  745. data/lib/datadog/tracing/trace_segment.rb +20 -7
  746. data/lib/datadog/tracing/tracer.rb +46 -10
  747. data/lib/datadog/tracing/transport/http/api/instance.rb +37 -0
  748. data/lib/datadog/tracing/transport/http/api/spec.rb +19 -0
  749. data/lib/datadog/tracing/transport/http/api.rb +43 -0
  750. data/lib/datadog/tracing/transport/http/builder.rb +162 -0
  751. data/lib/datadog/tracing/transport/http/client.rb +57 -0
  752. data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
  753. data/lib/datadog/tracing/transport/http/traces.rb +152 -0
  754. data/lib/datadog/tracing/transport/http.rb +125 -0
  755. data/lib/datadog/tracing/transport/io/client.rb +89 -0
  756. data/lib/datadog/tracing/transport/io/response.rb +27 -0
  757. data/lib/datadog/tracing/transport/io/traces.rb +101 -0
  758. data/lib/datadog/tracing/transport/io.rb +30 -0
  759. data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
  760. data/lib/datadog/tracing/transport/statistics.rb +77 -0
  761. data/lib/datadog/tracing/transport/trace_formatter.rb +240 -0
  762. data/lib/datadog/tracing/transport/traces.rb +224 -0
  763. data/lib/datadog/tracing/utils.rb +83 -0
  764. data/lib/datadog/tracing/workers/trace_writer.rb +6 -7
  765. data/lib/datadog/tracing/workers.rb +4 -6
  766. data/lib/datadog/tracing/writer.rb +12 -6
  767. data/lib/datadog/tracing.rb +9 -3
  768. data/lib/ddtrace/auto_instrument.rb +1 -1
  769. data/lib/ddtrace/auto_instrument_base.rb +1 -1
  770. data/lib/ddtrace/profiling/preload.rb +0 -2
  771. data/lib/ddtrace/transport/ext.rb +21 -15
  772. data/lib/ddtrace/version.rb +14 -15
  773. data/lib/ddtrace.rb +3 -5
  774. metadata +278 -148
  775. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +0 -390
  776. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +0 -6
  777. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +0 -391
  778. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +0 -282
  779. data/ext/ddtrace_profiling_native_extension/collectors_stack.h +0 -9
  780. data/ext/ddtrace_profiling_native_extension/helpers.h +0 -12
  781. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +0 -14
  782. data/ext/ddtrace_profiling_native_extension/profiling.c +0 -36
  783. data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +0 -25
  784. data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +0 -65
  785. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +0 -422
  786. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +0 -38
  787. data/lib/datadog/appsec/assets/waf_rules/risky.json +0 -1499
  788. data/lib/datadog/appsec/contrib/configuration/settings.rb +0 -20
  789. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +0 -22
  790. data/lib/datadog/appsec/contrib/rack/request.rb +0 -58
  791. data/lib/datadog/appsec/contrib/rack/response.rb +0 -24
  792. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +0 -22
  793. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +0 -22
  794. data/lib/datadog/ci/configuration/components.rb +0 -32
  795. data/lib/datadog/ci/configuration/settings.rb +0 -53
  796. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +0 -33
  797. data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -22
  798. data/lib/datadog/ci/contrib/cucumber/formatter.rb +0 -94
  799. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +0 -28
  800. data/lib/datadog/ci/contrib/cucumber/integration.rb +0 -49
  801. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +0 -33
  802. data/lib/datadog/ci/contrib/rspec/example.rb +0 -70
  803. data/lib/datadog/ci/contrib/rspec/ext.rb +0 -21
  804. data/lib/datadog/ci/contrib/rspec/integration.rb +0 -50
  805. data/lib/datadog/ci/contrib/rspec/patcher.rb +0 -27
  806. data/lib/datadog/ci/ext/app_types.rb +0 -11
  807. data/lib/datadog/ci/ext/environment.rb +0 -505
  808. data/lib/datadog/ci/ext/settings.rb +0 -12
  809. data/lib/datadog/ci/ext/test.rb +0 -37
  810. data/lib/datadog/ci/extensions.rb +0 -19
  811. data/lib/datadog/ci/flush.rb +0 -38
  812. data/lib/datadog/ci/test.rb +0 -83
  813. data/lib/datadog/ci.rb +0 -20
  814. data/lib/datadog/core/configuration/dependency_resolver.rb +0 -28
  815. data/lib/datadog/core/configuration/option_definition_set.rb +0 -22
  816. data/lib/datadog/core/configuration/option_set.rb +0 -10
  817. data/lib/datadog/core/telemetry/client.rb +0 -79
  818. data/lib/datadog/core/telemetry/collector.rb +0 -234
  819. data/lib/datadog/core/telemetry/heartbeat.rb +0 -37
  820. data/lib/datadog/core/telemetry/v1/app_event.rb +0 -52
  821. data/lib/datadog/core/telemetry/v1/application.rb +0 -86
  822. data/lib/datadog/core/telemetry/v1/configuration.rb +0 -25
  823. data/lib/datadog/core/telemetry/v1/dependency.rb +0 -36
  824. data/lib/datadog/core/telemetry/v1/host.rb +0 -51
  825. data/lib/datadog/core/telemetry/v1/integration.rb +0 -58
  826. data/lib/datadog/core/telemetry/v1/product.rb +0 -28
  827. data/lib/datadog/core/telemetry/v1/telemetry_request.rb +0 -100
  828. data/lib/datadog/core/utils/object_set.rb +0 -43
  829. data/lib/datadog/core/utils/string_table.rb +0 -49
  830. data/lib/datadog/profiling/backtrace_location.rb +0 -34
  831. data/lib/datadog/profiling/buffer.rb +0 -43
  832. data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +0 -27
  833. data/lib/datadog/profiling/collectors/old_stack.rb +0 -298
  834. data/lib/datadog/profiling/encoding/profile.rb +0 -43
  835. data/lib/datadog/profiling/event.rb +0 -15
  836. data/lib/datadog/profiling/events/stack.rb +0 -82
  837. data/lib/datadog/profiling/old_ext.rb +0 -42
  838. data/lib/datadog/profiling/old_recorder.rb +0 -101
  839. data/lib/datadog/profiling/pprof/builder.rb +0 -127
  840. data/lib/datadog/profiling/pprof/converter.rb +0 -104
  841. data/lib/datadog/profiling/pprof/message_set.rb +0 -16
  842. data/lib/datadog/profiling/pprof/payload.rb +0 -20
  843. data/lib/datadog/profiling/pprof/pprof.proto +0 -212
  844. data/lib/datadog/profiling/pprof/pprof_pb.rb +0 -83
  845. data/lib/datadog/profiling/pprof/stack_sample.rb +0 -141
  846. data/lib/datadog/profiling/pprof/string_table.rb +0 -12
  847. data/lib/datadog/profiling/pprof/template.rb +0 -120
  848. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +0 -45
  849. data/lib/datadog/profiling/trace_identifiers/helper.rb +0 -47
  850. data/lib/datadog/profiling/transport/http/api/endpoint.rb +0 -85
  851. data/lib/datadog/profiling/transport/http/api/instance.rb +0 -38
  852. data/lib/datadog/profiling/transport/http/api/spec.rb +0 -42
  853. data/lib/datadog/profiling/transport/http/api.rb +0 -45
  854. data/lib/datadog/profiling/transport/http/builder.rb +0 -30
  855. data/lib/datadog/profiling/transport/http/client.rb +0 -37
  856. data/lib/datadog/profiling/transport/http/response.rb +0 -21
  857. data/lib/datadog/profiling/transport/http.rb +0 -118
  858. data/lib/datadog/tracing/contrib/sinatra/headers.rb +0 -35
  859. data/lib/datadog/tracing/distributed/headers/b3.rb +0 -55
  860. data/lib/datadog/tracing/distributed/headers/b3_single.rb +0 -67
  861. data/lib/datadog/tracing/distributed/headers/datadog.rb +0 -52
  862. data/lib/datadog/tracing/distributed/headers/parser.rb +0 -37
  863. data/lib/datadog/tracing/distributed/metadata/b3.rb +0 -55
  864. data/lib/datadog/tracing/distributed/metadata/b3_single.rb +0 -66
  865. data/lib/datadog/tracing/distributed/metadata/datadog.rb +0 -73
  866. data/lib/datadog/tracing/distributed/metadata/parser.rb +0 -34
  867. data/lib/datadog/tracing/propagation/grpc.rb +0 -98
  868. data/lib/ddtrace/transport/http/adapters/net.rb +0 -158
  869. data/lib/ddtrace/transport/http/adapters/registry.rb +0 -27
  870. data/lib/ddtrace/transport/http/adapters/test.rb +0 -87
  871. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +0 -79
  872. data/lib/ddtrace/transport/http/api/endpoint.rb +0 -29
  873. data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -24
  874. data/lib/ddtrace/transport/http/api/instance.rb +0 -35
  875. data/lib/ddtrace/transport/http/api/map.rb +0 -16
  876. data/lib/ddtrace/transport/http/api/spec.rb +0 -17
  877. data/lib/ddtrace/transport/http/api.rb +0 -41
  878. data/lib/ddtrace/transport/http/builder.rb +0 -178
  879. data/lib/ddtrace/transport/http/client.rb +0 -54
  880. data/lib/ddtrace/transport/http/env.rb +0 -58
  881. data/lib/ddtrace/transport/http/response.rb +0 -58
  882. data/lib/ddtrace/transport/http/statistics.rb +0 -45
  883. data/lib/ddtrace/transport/http/traces.rb +0 -146
  884. data/lib/ddtrace/transport/http.rb +0 -121
  885. data/lib/ddtrace/transport/io/client.rb +0 -87
  886. data/lib/ddtrace/transport/io/response.rb +0 -25
  887. data/lib/ddtrace/transport/io/traces.rb +0 -101
  888. data/lib/ddtrace/transport/io.rb +0 -28
  889. data/lib/ddtrace/transport/parcel.rb +0 -22
  890. data/lib/ddtrace/transport/request.rb +0 -15
  891. data/lib/ddtrace/transport/response.rb +0 -62
  892. data/lib/ddtrace/transport/serializable_trace.rb +0 -118
  893. data/lib/ddtrace/transport/statistics.rb +0 -75
  894. data/lib/ddtrace/transport/trace_formatter.rb +0 -187
  895. data/lib/ddtrace/transport/traces.rb +0 -216
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
4
+ require 'time'
5
+
6
+ module Datadog
7
+ module Profiling
8
+ module Collectors
9
+ # Collects information of relevance for profiler. This will get sent alongside
10
+ # the profile and show up in the UI or potentially influence processing in some way.
11
+ #
12
+ # Information is currently collected and frozen at construction time. A full collector
13
+ # could be seen as overkill for this case but it allows us to centralize information
14
+ # gathering and easily support more flexible/dynamic info collection in the future.
15
+ class Info
16
+ def initialize(settings)
17
+ @profiler_info = nil
18
+ @info = {
19
+ platform: collect_platform_info,
20
+ runtime: collect_runtime_info,
21
+ application: collect_application_info(settings),
22
+ profiler: collect_profiler_info(settings),
23
+ }.freeze
24
+ end
25
+
26
+ attr_reader :info
27
+
28
+ private
29
+
30
+ # Instead of trying to figure out real process start time by checking
31
+ # /proc or some other complex/non-portable way, approximate start time
32
+ # by time of requirement of this file.
33
+ START_TIME = Time.now.utc.freeze
34
+
35
+ def collect_platform_info
36
+ @platform_info ||= {
37
+ container_id: Datadog::Core::Environment::Container.container_id,
38
+ hostname: Datadog::Core::Environment::Platform.hostname,
39
+ kernel_name: Datadog::Core::Environment::Platform.kernel_name,
40
+ kernel_release: Datadog::Core::Environment::Platform.kernel_release,
41
+ kernel_version: Datadog::Core::Environment::Platform.kernel_version
42
+ }.freeze
43
+ end
44
+
45
+ def collect_runtime_info
46
+ @runtime_info ||= {
47
+ engine: Datadog::Core::Environment::Identity.lang_engine,
48
+ version: Datadog::Core::Environment::Identity.lang_version,
49
+ platform: Datadog::Core::Environment::Identity.lang_platform,
50
+ }.freeze
51
+ end
52
+
53
+ def collect_application_info(settings)
54
+ @application_info ||= {
55
+ start_time: START_TIME.iso8601,
56
+ env: settings.env,
57
+ service: settings.service,
58
+ version: settings.version,
59
+ }.freeze
60
+ end
61
+
62
+ def collect_profiler_info(settings)
63
+ unless @profiler_info
64
+ lib_datadog_gem = ::Gem.loaded_specs['libdatadog']
65
+ @profiler_info = {
66
+ version: Datadog::Core::Environment::Identity.tracer_version,
67
+ libdatadog: "#{lib_datadog_gem.version}-#{lib_datadog_gem.platform}",
68
+ settings: collect_settings_recursively(settings.profiling),
69
+ }.freeze
70
+ end
71
+ @profiler_info
72
+ end
73
+
74
+ # The settings/option model isn't directly serializable because
75
+ # of subsettings and options that link to full blown custom object
76
+ # instances without proper serialization.
77
+ # This method navigates a settings object recursively, converting
78
+ # it into more basic types that are trivially convertible to JSON.
79
+ def collect_settings_recursively(v)
80
+ v = v.options_hash if v.respond_to?(:options_hash)
81
+
82
+ if v.nil? || v.is_a?(Symbol) || v.is_a?(Numeric) || v.is_a?(String) || v.equal?(true) || v.equal?(false)
83
+ Core::Utils::SafeDup.frozen_or_dup(v)
84
+ elsif v.is_a?(Hash)
85
+ collected_hash = v.each_with_object({}) do |(key, value), hash|
86
+ collected_value = collect_settings_recursively(value)
87
+ hash[key] = collected_value
88
+ end
89
+ collected_hash.freeze
90
+ elsif v.is_a?(Enumerable)
91
+ collected_list = v
92
+ .map { |value| collect_settings_recursively(value) }
93
+ collected_list.freeze
94
+ else
95
+ v.inspect
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -1,4 +1,4 @@
1
- # typed: false
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Datadog
4
4
  module Profiling
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Profiling
5
+ module Collectors
6
+ # Used to trigger sampling of threads, based on external "events", such as:
7
+ # * periodic timer for cpu-time and wall-time
8
+ # * VM garbage collection events
9
+ # * VM object allocation events
10
+ # Triggering of this component (e.g. watching for the above "events") is implemented by
11
+ # Collectors::CpuAndWallTimeWorker.
12
+ # The stack collection itself is handled using the Datadog::Profiling::Collectors::Stack.
13
+ # Almost all of this class is implemented as native code.
14
+ #
15
+ # Methods prefixed with _native_ are implemented in `collectors_thread_context.c`
16
+ class ThreadContext
17
+ def initialize(
18
+ recorder:,
19
+ max_frames:,
20
+ tracer:,
21
+ endpoint_collection_enabled:,
22
+ timeline_enabled:,
23
+ allocation_type_enabled: true
24
+ )
25
+ tracer_context_key = safely_extract_context_key_from(tracer)
26
+ self.class._native_initialize(
27
+ self,
28
+ recorder,
29
+ max_frames,
30
+ tracer_context_key,
31
+ endpoint_collection_enabled,
32
+ timeline_enabled,
33
+ allocation_type_enabled,
34
+ )
35
+ end
36
+
37
+ def inspect
38
+ # Compose Ruby's default inspect with our custom inspect for the native parts
39
+ result = super()
40
+ result[-1] = "#{self.class._native_inspect(self)}>"
41
+ result
42
+ end
43
+
44
+ def reset_after_fork
45
+ self.class._native_reset_after_fork(self)
46
+ end
47
+
48
+ private
49
+
50
+ def safely_extract_context_key_from(tracer)
51
+ provider = tracer && tracer.respond_to?(:provider) && tracer.provider
52
+
53
+ return unless provider
54
+
55
+ context = provider.instance_variable_get(:@context)
56
+ context && context.instance_variable_get(:@key)
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,426 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Profiling
5
+ # Responsible for wiring up the Profiler for execution
6
+ module Component
7
+ # Passing in a `nil` tracer is supported and will disable the following profiling features:
8
+ # * Code Hotspots panel in the trace viewer, as well as scoping a profile down to a span
9
+ # * Endpoint aggregation in the profiler UX, including normalization (resource per endpoint call)
10
+ def self.build_profiler_component(settings:, agent_settings:, optional_tracer:) # rubocop:disable Metrics/MethodLength
11
+ return [nil, { profiling_enabled: false }] unless settings.profiling.enabled
12
+
13
+ # Workaround for weird dependency direction: the Core::Configuration::Components class currently has a
14
+ # dependency on individual products, in this case the Profiler.
15
+ # (Note "currently": in the future we want to change this so core classes don't depend on specific products)
16
+ #
17
+ # If the current file included a `require 'datadog/profiler'` at its beginning, we would generate circular
18
+ # requires when used from profiling:
19
+ #
20
+ # datadog/profiling
21
+ # └─requires─> datadog/core
22
+ # └─requires─> datadog/core/configuration/components
23
+ # └─requires─> datadog/profiling # Loop!
24
+ #
25
+ # ...thus in #1998 we removed such a require.
26
+ #
27
+ # On the other hand, if datadog/core is loaded by a different product and no general `require 'ddtrace'` is
28
+ # done, then profiling may not be loaded, and thus to avoid this issue we do a require here (which is a
29
+ # no-op if profiling is already loaded).
30
+ require_relative '../profiling'
31
+
32
+ return [nil, { profiling_enabled: false }] unless Profiling.supported?
33
+
34
+ # Activate forking extensions
35
+ Profiling::Tasks::Setup.new.run
36
+
37
+ # NOTE: Please update the Initialization section of ProfilingDevelopment.md with any changes to this method
38
+
39
+ no_signals_workaround_enabled = no_signals_workaround_enabled?(settings)
40
+ timeline_enabled = settings.profiling.advanced.timeline_enabled
41
+ allocation_profiling_enabled = enable_allocation_profiling?(settings)
42
+ heap_sample_every = get_heap_sample_every(settings)
43
+ heap_profiling_enabled = enable_heap_profiling?(settings, allocation_profiling_enabled, heap_sample_every)
44
+ heap_size_profiling_enabled = enable_heap_size_profiling?(settings, heap_profiling_enabled)
45
+
46
+ overhead_target_percentage = valid_overhead_target(settings.profiling.advanced.overhead_target_percentage)
47
+ upload_period_seconds = [60, settings.profiling.advanced.upload_period_seconds].max
48
+
49
+ recorder = Datadog::Profiling::StackRecorder.new(
50
+ cpu_time_enabled: RUBY_PLATFORM.include?('linux'), # Only supported on Linux currently
51
+ alloc_samples_enabled: allocation_profiling_enabled,
52
+ heap_samples_enabled: heap_profiling_enabled,
53
+ heap_size_enabled: heap_size_profiling_enabled,
54
+ heap_sample_every: heap_sample_every,
55
+ timeline_enabled: timeline_enabled,
56
+ )
57
+ thread_context_collector = build_thread_context_collector(settings, recorder, optional_tracer, timeline_enabled)
58
+ worker = Datadog::Profiling::Collectors::CpuAndWallTimeWorker.new(
59
+ gc_profiling_enabled: enable_gc_profiling?(settings),
60
+ no_signals_workaround_enabled: no_signals_workaround_enabled,
61
+ thread_context_collector: thread_context_collector,
62
+ dynamic_sampling_rate_overhead_target_percentage: overhead_target_percentage,
63
+ allocation_profiling_enabled: allocation_profiling_enabled,
64
+ )
65
+
66
+ internal_metadata = {
67
+ no_signals_workaround_enabled: no_signals_workaround_enabled,
68
+ timeline_enabled: timeline_enabled,
69
+ heap_sample_every: heap_sample_every,
70
+ }.freeze
71
+
72
+ exporter = build_profiler_exporter(settings, recorder, worker, internal_metadata: internal_metadata)
73
+ transport = build_profiler_transport(settings, agent_settings)
74
+ scheduler = Profiling::Scheduler.new(exporter: exporter, transport: transport, interval: upload_period_seconds)
75
+
76
+ [Profiling::Profiler.new(worker: worker, scheduler: scheduler), { profiling_enabled: true }]
77
+ end
78
+
79
+ private_class_method def self.build_thread_context_collector(settings, recorder, optional_tracer, timeline_enabled)
80
+ Datadog::Profiling::Collectors::ThreadContext.new(
81
+ recorder: recorder,
82
+ max_frames: settings.profiling.advanced.max_frames,
83
+ tracer: optional_tracer,
84
+ endpoint_collection_enabled: settings.profiling.advanced.endpoint.collection.enabled,
85
+ timeline_enabled: timeline_enabled,
86
+ )
87
+ end
88
+
89
+ private_class_method def self.build_profiler_exporter(settings, recorder, worker, internal_metadata:)
90
+ info_collector = Profiling::Collectors::Info.new(settings)
91
+ code_provenance_collector =
92
+ (Profiling::Collectors::CodeProvenance.new if settings.profiling.advanced.code_provenance_enabled)
93
+
94
+ Profiling::Exporter.new(
95
+ pprof_recorder: recorder,
96
+ worker: worker,
97
+ info_collector: info_collector,
98
+ code_provenance_collector: code_provenance_collector,
99
+ internal_metadata: internal_metadata,
100
+ )
101
+ end
102
+
103
+ private_class_method def self.build_profiler_transport(settings, agent_settings)
104
+ settings.profiling.exporter.transport ||
105
+ Profiling::HttpTransport.new(
106
+ agent_settings: agent_settings,
107
+ site: settings.site,
108
+ api_key: settings.api_key,
109
+ upload_timeout_seconds: settings.profiling.upload.timeout_seconds,
110
+ )
111
+ end
112
+
113
+ private_class_method def self.enable_gc_profiling?(settings)
114
+ return false unless settings.profiling.advanced.gc_enabled
115
+
116
+ # SEVERE - Only with Ractors
117
+ # On Ruby versions 3.0 (all), 3.1.0 to 3.1.3, and 3.2.0 to 3.2.2 gc profiling can trigger a VM bug
118
+ # that causes a segmentation fault during garbage collection of Ractors
119
+ # (https://bugs.ruby-lang.org/issues/18464). We don't allow enabling gc profiling on such Rubies.
120
+ # This bug is fixed on Ruby versions 3.1.4, 3.2.3 and 3.3.0.
121
+ if RUBY_VERSION.start_with?('3.0.') ||
122
+ (RUBY_VERSION.start_with?('3.1.') && RUBY_VERSION < '3.1.4') ||
123
+ (RUBY_VERSION.start_with?('3.2.') && RUBY_VERSION < '3.2.3')
124
+ Datadog.logger.warn(
125
+ "Current Ruby version (#{RUBY_VERSION}) has a VM bug where enabling GC profiling would cause "\
126
+ 'crashes (https://bugs.ruby-lang.org/issues/18464). GC profiling has been disabled.'
127
+ )
128
+ return false
129
+ elsif RUBY_VERSION.start_with?('3.')
130
+ Datadog.logger.debug(
131
+ 'In all known versions of Ruby 3.x, using Ractors may result in GC profiling unexpectedly ' \
132
+ 'stopping (https://bugs.ruby-lang.org/issues/19112). Note that this stop has no impact in your ' \
133
+ 'application stability or performance. This does not happen if Ractors are not used.'
134
+ )
135
+ end
136
+
137
+ true
138
+ end
139
+
140
+ private_class_method def self.get_heap_sample_every(settings)
141
+ heap_sample_rate = settings.profiling.advanced.experimental_heap_sample_rate
142
+
143
+ raise ArgumentError, "Heap sample rate must be a positive integer. Was #{heap_sample_rate}" if heap_sample_rate <= 0
144
+
145
+ heap_sample_rate
146
+ end
147
+
148
+ private_class_method def self.enable_allocation_profiling?(settings)
149
+ return false unless settings.profiling.allocation_enabled
150
+
151
+ # Allocation sampling is safe and supported on Ruby 2.x, but has a few caveats on Ruby 3.x.
152
+
153
+ # SEVERE - All configurations
154
+ # Ruby 3.2.0 to 3.2.2 have a bug in the newobj tracepoint (https://bugs.ruby-lang.org/issues/19482,
155
+ # https://github.com/ruby/ruby/pull/7464) that makes this crash in any configuration. This bug is
156
+ # fixed on Ruby versions 3.2.3 and 3.3.0.
157
+ if RUBY_VERSION.start_with?('3.2.') && RUBY_VERSION < '3.2.3'
158
+ Datadog.logger.warn(
159
+ 'Allocation profiling is not supported in Ruby versions 3.2.0, 3.2.1 and 3.2.2 and will be forcibly '\
160
+ 'disabled. This is due to a VM bug that can lead to crashes (https://bugs.ruby-lang.org/issues/19482). '\
161
+ 'Other Ruby versions do not suffer from this issue.'
162
+ )
163
+ return false
164
+ end
165
+
166
+ # SEVERE - Only with Ractors
167
+ # On Ruby versions 3.0 (all), 3.1.0 to 3.1.3, and 3.2.0 to 3.2.2 allocation profiling can trigger a VM bug
168
+ # that causes a segmentation fault during garbage collection of Ractors
169
+ # (https://bugs.ruby-lang.org/issues/18464). We don't recommend using this feature on such Rubies.
170
+ # This bug is fixed on Ruby versions 3.1.4, 3.2.3 and 3.3.0.
171
+ if RUBY_VERSION.start_with?('3.0.') ||
172
+ (RUBY_VERSION.start_with?('3.1.') && RUBY_VERSION < '3.1.4') ||
173
+ (RUBY_VERSION.start_with?('3.2.') && RUBY_VERSION < '3.2.3')
174
+ Datadog.logger.warn(
175
+ "Current Ruby version (#{RUBY_VERSION}) has a VM bug where enabling allocation profiling while using "\
176
+ 'Ractors may cause unexpected issues, including crashes (https://bugs.ruby-lang.org/issues/18464). '\
177
+ 'This does not happen if Ractors are not used.'
178
+ )
179
+ # ANNOYANCE - Only with Ractors
180
+ # On all known versions of Ruby 3.x, due to https://bugs.ruby-lang.org/issues/19112, when a ractor gets
181
+ # garbage collected, Ruby will disable all active tracepoints, which this feature internally relies on.
182
+ elsif RUBY_VERSION.start_with?('3.')
183
+ Datadog.logger.warn(
184
+ 'In all known versions of Ruby 3.x, using Ractors may result in allocation profiling unexpectedly ' \
185
+ 'stopping (https://bugs.ruby-lang.org/issues/19112). Note that this stop has no impact in your ' \
186
+ 'application stability or performance. This does not happen if Ractors are not used.'
187
+ )
188
+ end
189
+
190
+ Datadog.logger.debug('Enabled allocation profiling')
191
+
192
+ true
193
+ end
194
+
195
+ private_class_method def self.enable_heap_profiling?(settings, allocation_profiling_enabled, heap_sample_rate)
196
+ heap_profiling_enabled = settings.profiling.advanced.experimental_heap_enabled
197
+
198
+ return false unless heap_profiling_enabled
199
+
200
+ if RUBY_VERSION.start_with?('2.') && RUBY_VERSION < '2.7'
201
+ Datadog.logger.warn(
202
+ 'Heap profiling currently relies on features introduced in Ruby 2.7 and will be forcibly disabled. '\
203
+ 'Please upgrade to Ruby >= 2.7 in order to use this feature.'
204
+ )
205
+ return false
206
+ end
207
+
208
+ if RUBY_VERSION < '3.1'
209
+ Datadog.logger.debug(
210
+ "Current Ruby version (#{RUBY_VERSION}) supports forced object recycling which has a bug that the " \
211
+ 'heap profiler is forced to work around to remain accurate. This workaround requires force-setting '\
212
+ "the SEEN_OBJ_ID flag on objects that should have it but don't. Full details can be found in " \
213
+ 'https://github.com/DataDog/dd-trace-rb/pull/3360. This workaround should be safe but can be ' \
214
+ 'bypassed by disabling the heap profiler or upgrading to Ruby >= 3.1 where forced object recycling ' \
215
+ 'was completely removed (https://bugs.ruby-lang.org/issues/18290).'
216
+ )
217
+ end
218
+
219
+ unless allocation_profiling_enabled
220
+ raise ArgumentError,
221
+ 'Heap profiling requires allocation profiling to be enabled'
222
+ end
223
+
224
+ Datadog.logger.warn(
225
+ "Enabled experimental heap profiling: heap_sample_rate=#{heap_sample_rate}. This is experimental, not " \
226
+ 'recommended, and will increase overhead!'
227
+ )
228
+
229
+ true
230
+ end
231
+
232
+ private_class_method def self.enable_heap_size_profiling?(settings, heap_profiling_enabled)
233
+ heap_size_profiling_enabled = settings.profiling.advanced.experimental_heap_size_enabled
234
+
235
+ return false unless heap_profiling_enabled && heap_size_profiling_enabled
236
+
237
+ Datadog.logger.warn(
238
+ 'Enabled experimental heap size profiling. This is experimental, not recommended, and will increase overhead!'
239
+ )
240
+
241
+ true
242
+ end
243
+
244
+ private_class_method def self.no_signals_workaround_enabled?(settings) # rubocop:disable Metrics/MethodLength
245
+ setting_value = settings.profiling.advanced.no_signals_workaround_enabled
246
+ legacy_ruby_that_should_use_workaround = RUBY_VERSION.start_with?('2.3.', '2.4.', '2.5.')
247
+
248
+ unless [true, false, :auto].include?(setting_value)
249
+ Datadog.logger.error(
250
+ "Ignoring invalid value for profiling no_signals_workaround_enabled setting: #{setting_value.inspect}. " \
251
+ 'Valid options are `true`, `false` or (default) `:auto`.'
252
+ )
253
+
254
+ setting_value = :auto
255
+ end
256
+
257
+ if setting_value == false
258
+ if legacy_ruby_that_should_use_workaround
259
+ Datadog.logger.warn(
260
+ 'The profiling "no signals" workaround has been disabled via configuration on a legacy Ruby version ' \
261
+ '(< 2.6). This is not recommended ' \
262
+ 'in production environments, as due to limitations in Ruby APIs, we suspect it may lead to crashes ' \
263
+ 'in very rare situations. Please report any issues you run into to Datadog support or ' \
264
+ 'via <https://github.com/datadog/dd-trace-rb/issues/new>!'
265
+ )
266
+ else
267
+ Datadog.logger.warn('Profiling "no signals" workaround disabled via configuration')
268
+ end
269
+
270
+ return false
271
+ end
272
+
273
+ if setting_value == true
274
+ Datadog.logger.warn(
275
+ 'Profiling "no signals" workaround enabled via configuration. Profiling data will have lower quality.'
276
+ )
277
+
278
+ return true
279
+ end
280
+
281
+ # Setting is in auto mode. Let's probe to see if we should enable it:
282
+
283
+ # We don't warn users in this situation because "upgrade your Ruby" is not a great warning
284
+ return true if legacy_ruby_that_should_use_workaround
285
+
286
+ if Gem.loaded_specs['mysql2'] && incompatible_libmysqlclient_version?(settings)
287
+ Datadog.logger.warn(
288
+ 'Enabling the profiling "no signals" workaround because an incompatible version of the mysql2 gem is ' \
289
+ 'installed. Profiling data will have lower quality. ' \
290
+ 'To fix this, upgrade the libmysqlclient in your OS image to version 8.0.0 or above.'
291
+ )
292
+ return true
293
+ end
294
+
295
+ if Gem.loaded_specs['rugged']
296
+ Datadog.logger.warn(
297
+ 'Enabling the profiling "no signals" workaround because the rugged gem is installed. ' \
298
+ 'This is needed because some operations on this gem are currently incompatible with the normal working mode ' \
299
+ 'of the profiler, as detailed in <https://github.com/datadog/dd-trace-rb/issues/2721>. ' \
300
+ 'Profiling data will have lower quality.'
301
+ )
302
+ return true
303
+ end
304
+
305
+ if (defined?(::PhusionPassenger) || Gem.loaded_specs['passenger']) && incompatible_passenger_version?
306
+ Datadog.logger.warn(
307
+ 'Enabling the profiling "no signals" workaround because an incompatible version of the passenger gem is ' \
308
+ 'installed. Profiling data will have lower quality.' \
309
+ 'To fix this, upgrade the passenger gem to version 6.0.19 or above.'
310
+ )
311
+ return true
312
+ end
313
+
314
+ false
315
+ end
316
+
317
+ # Versions of libmysqlclient prior to 8.0.0 are known to have buggy handling of system call interruptions.
318
+ # The profiler can sometimes cause system call interruptions, and so this combination can cause queries to fail.
319
+ #
320
+ # See https://bugs.mysql.com/bug.php?id=83109 and
321
+ # https://docs.datadoghq.com/profiler/profiler_troubleshooting/ruby/#unexpected-run-time-failures-and-errors-from-ruby-gems-that-use-native-extensions-in-dd-trace-rb-1110
322
+ # for details.
323
+ #
324
+ # The `mysql2` gem's `info` method can be used to determine which `libmysqlclient` version is in use, and thus to
325
+ # detect if it's safe for the profiler to use signals or if we need to employ a fallback.
326
+ private_class_method def self.incompatible_libmysqlclient_version?(settings)
327
+ return true if settings.profiling.advanced.skip_mysql2_check
328
+
329
+ Datadog.logger.debug(
330
+ 'Requiring `mysql2` to check if the `libmysqlclient` version it uses is compatible with profiling'
331
+ )
332
+
333
+ begin
334
+ require 'mysql2'
335
+
336
+ # The mysql2-aurora gem likes to monkey patch itself in replacement of Mysql2::Client, and uses
337
+ # `method_missing` to delegate to the original BUT unfortunately does not implement `respond_to_missing?` and
338
+ # thus our `respond_to?(:info)` below was failing.
339
+ #
340
+ # But on the bright side, the gem does stash a reference to the original Mysql2::Client class in a constant,
341
+ # so if that constant exists, we use that for our probing.
342
+ mysql2_client_class =
343
+ if defined?(Mysql2::Aurora::ORIGINAL_CLIENT_CLASS)
344
+ Mysql2::Aurora::ORIGINAL_CLIENT_CLASS
345
+ elsif defined?(Mysql2::Client)
346
+ Mysql2::Client
347
+ end
348
+
349
+ return true unless mysql2_client_class && mysql2_client_class.respond_to?(:info)
350
+
351
+ info = mysql2_client_class.info
352
+ libmysqlclient_version = Gem::Version.new(info[:version])
353
+
354
+ compatible =
355
+ libmysqlclient_version >= Gem::Version.new('8.0.0') ||
356
+ looks_like_mariadb?(info, libmysqlclient_version)
357
+
358
+ Datadog.logger.debug(
359
+ "The `mysql2` gem is using #{compatible ? 'a compatible' : 'an incompatible'} version of " \
360
+ "the `libmysqlclient` library (#{libmysqlclient_version})"
361
+ )
362
+
363
+ !compatible
364
+ rescue StandardError, LoadError => e
365
+ Datadog.logger.warn(
366
+ 'Failed to probe `mysql2` gem information. ' \
367
+ "Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
368
+ )
369
+
370
+ true
371
+ end
372
+ end
373
+
374
+ # See https://github.com/datadog/dd-trace-rb/issues/2976 for details.
375
+ private_class_method def self.incompatible_passenger_version?
376
+ if Gem.loaded_specs['passenger']
377
+ Gem.loaded_specs['passenger'].version < Gem::Version.new('6.0.19')
378
+ else
379
+ true
380
+ end
381
+ end
382
+
383
+ private_class_method def self.valid_overhead_target(overhead_target_percentage)
384
+ if overhead_target_percentage > 0 && overhead_target_percentage <= 20
385
+ overhead_target_percentage
386
+ else
387
+ Datadog.logger.error(
388
+ 'Ignoring invalid value for profiling overhead_target_percentage setting: ' \
389
+ "#{overhead_target_percentage.inspect}. Falling back to default value."
390
+ )
391
+
392
+ 2.0
393
+ end
394
+ end
395
+
396
+ # To add just a bit more complexity to our detection code, in https://github.com/DataDog/dd-trace-rb/issues/3334
397
+ # a user reported that our code was incorrectly flagging the mariadb variant of libmysqlclient as being
398
+ # incompatible. In fact we have no reports of the mariadb variant needing the "no signals" workaround,
399
+ # so we flag it as compatible when it's in use.
400
+ #
401
+ # A problem is that there doesn't seem to be an obvious way to query the mysql2 gem on which kind of
402
+ # libmysqlclient it's using, so we detect it by looking at the version.
403
+ #
404
+ # The info method for mysql2 with mariadb looks something like this:
405
+ # `{:id=>30308, :version=>"3.3.8", :header_version=>"11.2.2"}`
406
+ #
407
+ # * The version seems to come from https://github.com/mariadb-corporation/mariadb-connector-c and the latest
408
+ # one is 3.x.
409
+ # * The header_version is what people usually see as the "mariadb version"
410
+ #
411
+ # As a comparison, for libmysql the info looks like:
412
+ # * `{:id=>80035, :version=>"8.0.35", :header_version=>"8.0.35"}`
413
+ #
414
+ # Thus our detection is version 4 or older, because libmysqlclient 4 is almost 20 years old so it's most probably
415
+ # not that one + header_version being 10 or newer, since according to https://endoflife.date/mariadb that's a
416
+ # sane range for modern mariadb releases.
417
+ private_class_method def self.looks_like_mariadb?(info, libmysqlclient_version)
418
+ header_version = Gem::Version.new(info[:header_version]) if info[:header_version]
419
+
420
+ !!(header_version &&
421
+ libmysqlclient_version < Gem::Version.new('5.0.0') &&
422
+ header_version >= Gem::Version.new('10.0.0'))
423
+ end
424
+ end
425
+ end
426
+ end
@@ -1,7 +1,4 @@
1
- # typed: true
2
-
3
1
  require_relative 'ext'
4
- require_relative '../core/utils/compression'
5
2
  require_relative 'tag_builder'
6
3
 
7
4
  module Datadog
@@ -25,29 +22,41 @@ module Datadog
25
22
  :minimum_duration_seconds,
26
23
  :time_provider,
27
24
  :last_flush_finish_at,
28
- :created_at
25
+ :created_at,
26
+ :internal_metadata,
27
+ :info_json
29
28
 
30
29
  public
31
30
 
32
31
  def initialize(
33
32
  pprof_recorder:,
33
+ worker:,
34
+ info_collector:,
34
35
  code_provenance_collector:,
36
+ internal_metadata:,
35
37
  minimum_duration_seconds: PROFILE_DURATION_THRESHOLD_SECONDS,
36
38
  time_provider: Time
37
39
  )
38
40
  @pprof_recorder = pprof_recorder
41
+ @worker = worker
39
42
  @code_provenance_collector = code_provenance_collector
40
43
  @minimum_duration_seconds = minimum_duration_seconds
41
44
  @time_provider = time_provider
42
45
  @last_flush_finish_at = nil
43
46
  @created_at = time_provider.now.utc
47
+ @internal_metadata = internal_metadata
48
+ # NOTE: At the time of this comment collected info does not change over time so we'll hardcode
49
+ # it on startup to prevent serializing the same info on every flush.
50
+ @info_json = JSON.fast_generate(info_collector.info).freeze
44
51
  end
45
52
 
46
53
  def flush
47
- start, finish, uncompressed_pprof = pprof_recorder.serialize
48
- @last_flush_finish_at = finish
54
+ worker_stats = @worker.stats_and_reset_not_thread_safe
55
+ serialization_result = pprof_recorder.serialize
56
+ return if serialization_result.nil?
49
57
 
50
- return if uncompressed_pprof.nil? # We don't want to report empty profiles
58
+ start, finish, compressed_pprof, profile_stats = serialization_result
59
+ @last_flush_finish_at = finish
51
60
 
52
61
  if duration_below_threshold?(start, finish)
53
62
  Datadog.logger.debug('Skipped exporting profiling events as profile duration is below minimum')
@@ -60,11 +69,19 @@ module Datadog
60
69
  start: start,
61
70
  finish: finish,
62
71
  pprof_file_name: Datadog::Profiling::Ext::Transport::HTTP::PPROF_DEFAULT_FILENAME,
63
- pprof_data: Datadog::Core::Utils::Compression.gzip(uncompressed_pprof),
72
+ pprof_data: compressed_pprof.to_s,
64
73
  code_provenance_file_name: Datadog::Profiling::Ext::Transport::HTTP::CODE_PROVENANCE_FILENAME,
65
- code_provenance_data:
66
- (Datadog::Core::Utils::Compression.gzip(uncompressed_code_provenance) if uncompressed_code_provenance),
74
+ code_provenance_data: uncompressed_code_provenance,
67
75
  tags_as_array: Datadog::Profiling::TagBuilder.call(settings: Datadog.configuration).to_a,
76
+ internal_metadata: internal_metadata.merge(
77
+ {
78
+ worker_stats: worker_stats,
79
+ profile_stats: profile_stats,
80
+ recorder_stats: pprof_recorder.stats,
81
+ gc: GC.stat,
82
+ }
83
+ ),
84
+ info_json: info_json,
68
85
  )
69
86
  end
70
87
 
@@ -72,6 +89,11 @@ module Datadog
72
89
  !duration_below_threshold?(last_flush_finish_at || created_at, time_provider.now.utc)
73
90
  end
74
91
 
92
+ def reset_after_fork
93
+ @last_flush_finish_at = time_provider.now.utc
94
+ nil
95
+ end
96
+
75
97
  private
76
98
 
77
99
  def duration_below_threshold?(start, finish)