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
@@ -1,4 +1,4 @@
1
- # typed: true
1
+ # frozen_string_literal: true
2
2
 
3
3
  require_relative 'ext'
4
4
  require_relative 'all_sampler'
@@ -21,17 +21,26 @@ module Datadog
21
21
 
22
22
  def initialize(opts = {})
23
23
  @pre_sampler = opts[:base_sampler] || AllSampler.new
24
- @priority_sampler = opts[:post_sampler] || RateByServiceSampler.new
24
+ @priority_sampler = opts[:post_sampler] || RateByServiceSampler.new(decision: Sampling::Ext::Decision::AGENT_RATE)
25
25
  end
26
26
 
27
27
  def sample?(trace)
28
28
  @pre_sampler.sample?(trace)
29
29
  end
30
30
 
31
+ # DEV-2.0:We should get rid of this complicated interaction between @pre_sampler and @priority_sampler.
32
+ # DEV-2.0:If the user wants to configure a custom sampler, we should only allow them to provide a complete
33
+ # DEV-2.0:sampling suite, not having this convoluted support for mixing arbitrary provided samplers in
34
+ # DEV-2.0:the PrioritySampler. Ideally, the PrioritySampler is only used by Datadog.
35
+ # DEV-2.0:There are too many edge cases and combinations to work around currently in this class.
31
36
  def sample!(trace)
37
+ # The priority that was set before the sampler ran.
38
+ # This comes from distributed tracing priority propagation.
39
+ distributed_sampling_priority = priority_assigned?(trace)
40
+
32
41
  # If pre-sampling is configured, do it first. (By default, this will sample at 100%.)
33
42
  # NOTE: Pre-sampling at rates < 100% may result in partial traces; not recommended.
34
- trace.sampled = pre_sample?(trace) ? @pre_sampler.sample!(trace) : true
43
+ trace.sampled = pre_sample?(trace) ? preserving_priority_sampling(trace) { @pre_sampler.sample!(trace) } : true
35
44
 
36
45
  if trace.sampled?
37
46
  # If priority sampling has already been applied upstream, use that value.
@@ -53,11 +62,38 @@ module Datadog
53
62
  end
54
63
 
55
64
  trace.sampled?
65
+ ensure
66
+ if trace.sampling_priority && trace.sampling_priority > 0
67
+ # Don't modify decision if priority was set upstream.
68
+ if !distributed_sampling_priority && !trace.has_tag?(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
69
+ # If no sampling priority being assigned at this point, a custom
70
+ # sampler implementation is configured: this means the user has
71
+ # full control over the sampling decision.
72
+ trace.set_tag(
73
+ Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER,
74
+ Sampling::Ext::Decision::MANUAL
75
+ )
76
+ end
77
+ else
78
+ # The sampler decided to not keep this span, removing sampling decision.
79
+ trace.clear_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
80
+ end
56
81
  end
57
82
 
58
83
  # (see Datadog::Tracing::Sampling::RateByServiceSampler#update)
59
- def update(rate_by_service)
60
- @priority_sampler.update(rate_by_service)
84
+ def update(rate_by_service, decision: nil)
85
+ @priority_sampler.update(rate_by_service, decision: decision)
86
+ end
87
+
88
+ # Check if the Priority Sampling decision is to keep or drop the trace.
89
+ # Other factors can influence the sampling decision; this method is only
90
+ # responsible for interpreting the Sampling Priority decision.
91
+ #
92
+ # @param priority_sampling [Integer] priority sampling number
93
+ # @return [Boolean] true if trace is "kept" by priority sampling
94
+ # @return [Boolean] false if trace is "dropped" by priority sampling
95
+ def self.sampled?(priority_sampling)
96
+ priority_sampling >= Ext::Priority::AUTO_KEEP
61
97
  end
62
98
 
63
99
  private
@@ -83,6 +119,23 @@ module Datadog
83
119
  end
84
120
  end
85
121
 
122
+ # Ensures the trace's priority sampling decision is not changed by the @pre_sampler.
123
+ # The @pre_sampler should only change `trace.sampled`.
124
+ def preserving_priority_sampling(trace)
125
+ sampling_priority = trace.sampling_priority
126
+ sampling_decision = trace.get_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
127
+
128
+ yield.tap do
129
+ trace.sampling_priority = sampling_priority
130
+
131
+ if sampling_decision
132
+ trace.set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, sampling_decision)
133
+ else
134
+ trace.clear_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
135
+ end
136
+ end
137
+ end
138
+
86
139
  # Ensures the trace is always propagated to the writer and that
87
140
  # the sample rate metric represents the true client-side sampling.
88
141
  def preserving_sampling(trace)
@@ -1,5 +1,3 @@
1
- # typed: true
2
-
3
1
  require_relative 'sampler'
4
2
  require_relative 'rate_sampler'
5
3
 
@@ -12,7 +10,7 @@ module Datadog
12
10
  attr_reader \
13
11
  :default_key
14
12
 
15
- def initialize(default_key, default_rate = 1.0, &block)
13
+ def initialize(default_key, default_rate = 1.0, decision: nil, &block)
16
14
  super()
17
15
 
18
16
  raise ArgumentError, 'No resolver given!' unless block
@@ -22,7 +20,7 @@ module Datadog
22
20
  @mutex = Mutex.new
23
21
  @samplers = {}
24
22
 
25
- set_rate(default_key, default_rate)
23
+ set_rate(default_key, default_rate, decision)
26
24
  end
27
25
 
28
26
  def resolve(trace)
@@ -57,15 +55,15 @@ module Datadog
57
55
  end
58
56
  end
59
57
 
60
- def update(key, rate)
58
+ def update(key, rate, decision: nil)
61
59
  @mutex.synchronize do
62
- set_rate(key, rate)
60
+ set_rate(key, rate, decision)
63
61
  end
64
62
  end
65
63
 
66
- def update_all(rate_by_key)
64
+ def update_all(rate_by_key, decision: nil)
67
65
  @mutex.synchronize do
68
- rate_by_key.each { |key, rate| set_rate(key, rate) }
66
+ rate_by_key.each { |key, rate| set_rate(key, rate, decision) }
69
67
  end
70
68
  end
71
69
 
@@ -87,9 +85,8 @@ module Datadog
87
85
 
88
86
  private
89
87
 
90
- def set_rate(key, rate)
91
- @samplers[key] ||= RateSampler.new(rate)
92
- @samplers[key].sample_rate = rate
88
+ def set_rate(key, rate, decision)
89
+ @samplers[key] = RateSampler.new(rate, decision: decision)
93
90
  end
94
91
  end
95
92
  end
@@ -1,6 +1,3 @@
1
- # typed: true
2
-
3
- require_relative '../../core'
4
1
  require_relative 'rate_by_key_sampler'
5
2
 
6
3
  module Datadog
@@ -11,17 +8,23 @@ module Datadog
11
8
  class RateByServiceSampler < RateByKeySampler
12
9
  DEFAULT_KEY = 'service:,env:'.freeze
13
10
 
14
- def initialize(default_rate = 1.0, options = {})
15
- super(DEFAULT_KEY, default_rate, &method(:key_for))
16
- @env = options[:env]
11
+ def initialize(default_rate = 1.0, env: nil, decision: Datadog::Tracing::Sampling::Ext::Decision::DEFAULT)
12
+ super(
13
+ DEFAULT_KEY,
14
+ default_rate,
15
+ decision: decision,
16
+ &method(:key_for)
17
+ )
18
+
19
+ @env = env
17
20
  end
18
21
 
19
- def update(rate_by_service)
22
+ def update(rate_by_service, decision: nil)
20
23
  # Remove any old services
21
24
  delete_if { |key, _| key != DEFAULT_KEY && !rate_by_service.key?(key) }
22
25
 
23
26
  # Update each service rate
24
- update_all(rate_by_service)
27
+ update_all(rate_by_service, decision: decision)
25
28
 
26
29
  # Emit metric for service cache size
27
30
  Datadog.health_metrics.sampling_service_cache_length(length)
@@ -29,6 +32,24 @@ module Datadog
29
32
 
30
33
  private
31
34
 
35
+ # DEV: Creating a string on every trace to perform a single Hash lookup is expensive.
36
+ #
37
+ # Using 2 nested hashes: 1 for env and 1 for service is the fastest option.
38
+ # This approach requires large API changes to `RateByKeySampler`.
39
+ #
40
+ # Reducing the interpolated string size, by using a 1 character separator,
41
+ # is also measurably faster than the current method. This approach does not
42
+ # require changes to `RateByKeySampler`.
43
+ #
44
+ # Keep in mind that these changes also require changes to `#update`.
45
+ #
46
+ # Comparison:
47
+ # 2 nested hashes: `service_hash.fetch(service, {}).fetch(env, default_rate)`
48
+ # 7730045 i/s
49
+ # 1 char separator: `hash.fetch("#{service}\0#{env}", default_rate)`
50
+ # 4302801 i/s - 1.80x slower
51
+ # current: `hash.fetch("service:#{service},env:#{env}", default_rate)`
52
+ # 2720459 i/s - 2.84x slower
32
53
  def key_for(trace)
33
54
  # Resolve env dynamically, if Proc is given.
34
55
  env = @env.is_a?(Proc) ? @env.call : @env
@@ -1,5 +1,3 @@
1
- # typed: true
2
-
3
1
  require_relative '../../core/utils/time'
4
2
 
5
3
  module Datadog
@@ -39,6 +37,9 @@ module Datadog
39
37
  def initialize(rate, max_tokens = rate)
40
38
  super()
41
39
 
40
+ raise ArgumentError, "rate must be a number: #{rate}" unless rate.is_a?(Numeric)
41
+ raise ArgumentError, "max_tokens must be a number: #{max_tokens}" unless max_tokens.is_a?(Numeric)
42
+
42
43
  @rate = rate
43
44
  @max_tokens = max_tokens
44
45
 
@@ -1,9 +1,5 @@
1
- # typed: true
2
-
3
- require_relative '../../core'
4
-
5
1
  require_relative 'sampler'
6
- require_relative '../span'
2
+ require_relative '../utils'
7
3
 
8
4
  module Datadog
9
5
  module Tracing
@@ -20,7 +16,17 @@ module Datadog
20
16
  # * +sample_rate+: the sample rate as a {Float} between 0.0 and 1.0. 0.0
21
17
  # means that no trace will be sampled; 1.0 means that all traces will be
22
18
  # sampled.
23
- def initialize(sample_rate = 1.0)
19
+ #
20
+ # DEV-2.0: Allow for `sample_rate` zero (drop all) to be allowed. This eases
21
+ # DEV-2.0: usage for all internal users of the {RateSampler} class: both
22
+ # DEV-2.0: RuleSampler and Single Span Sampling leverage the RateSampler, but want
23
+ # DEV-2.0: `sample_rate` zero to mean "drop all". They work around this by hard-
24
+ # DEV-2.0: setting the `sample_rate` to zero like so:
25
+ # DEV-2.0: ```
26
+ # DEV-2.0: sampler = RateSampler.new
27
+ # DEV-2.0: sampler.sample_rate = sample_rate
28
+ # DEV-2.0: ```
29
+ def initialize(sample_rate = 1.0, decision: nil)
24
30
  super()
25
31
 
26
32
  unless sample_rate > 0.0 && sample_rate <= 1.0
@@ -29,6 +35,8 @@ module Datadog
29
35
  end
30
36
 
31
37
  self.sample_rate = sample_rate
38
+
39
+ @decision = decision
32
40
  end
33
41
 
34
42
  def sample_rate(*_)
@@ -37,17 +45,22 @@ module Datadog
37
45
 
38
46
  def sample_rate=(sample_rate)
39
47
  @sample_rate = sample_rate
40
- @sampling_id_threshold = sample_rate * Tracing::Span::EXTERNAL_MAX_ID
48
+ @sampling_id_threshold = sample_rate * Tracing::Utils::EXTERNAL_MAX_ID
41
49
  end
42
50
 
43
51
  def sample?(trace)
44
- ((trace.id * KNUTH_FACTOR) % Tracing::Span::EXTERNAL_MAX_ID) <= @sampling_id_threshold
52
+ ((trace.id * KNUTH_FACTOR) % Tracing::Utils::EXTERNAL_MAX_ID) <= @sampling_id_threshold
45
53
  end
46
54
 
47
55
  def sample!(trace)
48
56
  sampled = trace.sampled = sample?(trace)
49
- trace.sample_rate = @sample_rate if sampled
50
- sampled
57
+
58
+ return false unless sampled
59
+
60
+ trace.sample_rate = @sample_rate
61
+ trace.set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, @decision) if @decision
62
+
63
+ true
51
64
  end
52
65
  end
53
66
  end
@@ -1,7 +1,3 @@
1
- # typed: true
2
-
3
- require_relative '../../core'
4
-
5
1
  require_relative 'matcher'
6
2
  require_relative 'rate_sampler'
7
3
 
@@ -55,8 +51,13 @@ module Datadog
55
51
  # @param name [String,Regexp,Proc] Matcher for case equality (===) with the trace name, defaults to always match
56
52
  # @param service [String,Regexp,Proc] Matcher for case equality (===) with the service name,
57
53
  # defaults to always match
54
+ # @param resource [String,Regexp,Proc] Matcher for case equality (===) with the resource name,
55
+ # defaults to always match
58
56
  # @param sample_rate [Float] Sampling rate between +[0,1]+
59
- def initialize(name: SimpleMatcher::MATCH_ALL, service: SimpleMatcher::MATCH_ALL, sample_rate: 1.0)
57
+ def initialize(
58
+ name: SimpleMatcher::MATCH_ALL, service: SimpleMatcher::MATCH_ALL,
59
+ resource: SimpleMatcher::MATCH_ALL, tags: {}, sample_rate: 1.0
60
+ )
60
61
  # We want to allow 0.0 to drop all traces, but {Datadog::Tracing::Sampling::RateSampler}
61
62
  # considers 0.0 an invalid rate and falls back to 100% sampling.
62
63
  #
@@ -68,7 +69,7 @@ module Datadog
68
69
  sampler = RateSampler.new
69
70
  sampler.sample_rate = sample_rate
70
71
 
71
- super(SimpleMatcher.new(name: name, service: service), sampler)
72
+ super(SimpleMatcher.new(name: name, service: service, resource: resource, tags: tags), sampler)
72
73
  end
73
74
  end
74
75
  end
@@ -1,7 +1,3 @@
1
- # typed: true
2
-
3
- require_relative '../../core'
4
-
5
1
  require_relative 'ext'
6
2
  require_relative 'rate_limiter'
7
3
  require_relative 'rule'
@@ -48,10 +44,41 @@ module Datadog
48
44
  nil
49
45
  else
50
46
  # TODO: Simplify .tags access, as `Tracer#tags` can't be arbitrarily changed anymore
51
- RateByServiceSampler.new(1.0, env: -> { Tracing.send(:tracer).tags[:env] })
47
+ RateByServiceSampler.new(1.0, env: -> { Tracing.send(:tracer).tags['env'] })
52
48
  end
53
49
  end
54
50
 
51
+ def self.parse(rules, rate_limit, default_sample_rate)
52
+ parsed_rules = JSON.parse(rules).map do |rule|
53
+ sample_rate = rule['sample_rate']
54
+
55
+ begin
56
+ sample_rate = Float(sample_rate)
57
+ rescue
58
+ raise "Rule '#{rule.inspect}' does not contain a float property `sample_rate`"
59
+ end
60
+
61
+ kwargs = {
62
+ name: rule['name'],
63
+ service: rule['service'],
64
+ resource: rule['resource'],
65
+ tags: rule['tags'],
66
+ sample_rate: sample_rate,
67
+ }
68
+
69
+ Core::BackportFrom24.hash_compact!(kwargs)
70
+
71
+ SimpleRule.new(**kwargs)
72
+ end
73
+
74
+ new(parsed_rules, rate_limit: rate_limit, default_sample_rate: default_sample_rate)
75
+ rescue => e
76
+ Datadog.logger.error do
77
+ "Could not parse trace sampling rules '#{rules}': #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
78
+ end
79
+ nil
80
+ end
81
+
55
82
  # /RuleSampler's components (it's rate limiter, for example) are
56
83
  # not be guaranteed to be size-effect free.
57
84
  # It is not possible to guarantee that a call to {#sample?} will
@@ -76,10 +103,10 @@ module Datadog
76
103
  end
77
104
 
78
105
  # @!visibility private
79
- def update(*args)
106
+ def update(*args, **kwargs)
80
107
  return false unless @default_sampler.respond_to?(:update)
81
108
 
82
- @default_sampler.update(*args)
109
+ @default_sampler.update(*args, **kwargs)
83
110
  end
84
111
 
85
112
  private
@@ -100,6 +127,7 @@ module Datadog
100
127
  rate_limiter.allow?(1).tap do |allowed|
101
128
  set_priority(trace, allowed)
102
129
  set_limiter_metrics(trace, rate_limiter.effective_rate)
130
+ trace.set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, Ext::Decision::TRACE_SAMPLING_RULE)
103
131
  end
104
132
  rescue StandardError => e
105
133
  Datadog.logger.error(
@@ -1,5 +1,3 @@
1
- # typed: true
2
-
3
1
  module Datadog
4
2
  module Tracing
5
3
  module Sampling
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Tracing
5
+ module Sampling
6
+ module Span
7
+ # Single Span Sampling constants.
8
+ module Ext
9
+ # Accept all spans (100% retention).
10
+ DEFAULT_SAMPLE_RATE = 1.0
11
+ # Unlimited.
12
+ # @see Datadog::Tracing::Sampling::TokenBucket
13
+ DEFAULT_MAX_PER_SECOND = -1
14
+
15
+ # Sampling decision method used to come to the sampling decision for this span
16
+ TAG_MECHANISM = '_dd.span_sampling.mechanism'
17
+ # Sampling rate applied to this span, if a rule applies
18
+ TAG_RULE_RATE = '_dd.span_sampling.rule_rate'
19
+ # Rate limit configured for this span, if a rule applies
20
+ TAG_MAX_PER_SECOND = '_dd.span_sampling.max_per_second'
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -6,6 +6,8 @@ module Datadog
6
6
  module Span
7
7
  # Checks if a span conforms to a matching criteria.
8
8
  class Matcher
9
+ attr_reader :name, :service
10
+
9
11
  # Pattern that matches any string
10
12
  MATCH_ALL_PATTERN = '*'
11
13
 
@@ -54,6 +56,13 @@ module Datadog
54
56
  end
55
57
  end
56
58
 
59
+ def ==(other)
60
+ return super unless other.is_a?(Matcher)
61
+
62
+ name == other.name &&
63
+ service == other.service
64
+ end
65
+
57
66
  private
58
67
 
59
68
  # @param pattern [String]
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'ext'
4
+
5
+ module Datadog
6
+ module Tracing
7
+ module Sampling
8
+ module Span
9
+ # Span sampling rule that applies a sampling rate if the span
10
+ # matches the provided {Matcher}.
11
+ # Additionally, a rate limiter is also applied.
12
+ #
13
+ # If a span does not conform to the matcher, no changes are made.
14
+ class Rule
15
+ attr_reader :matcher, :sample_rate, :rate_limit
16
+
17
+ # Creates a new span sampling rule.
18
+ #
19
+ # @param [Sampling::Span::Matcher] matcher whether this rule applies to a specific span
20
+ # @param [Float] sample_rate span sampling ratio, between 0.0 (0%) and 1.0 (100%).
21
+ # @param [Numeric] rate_limit maximum number of spans sampled per second. Negative numbers mean unlimited spans.
22
+ def initialize(
23
+ matcher,
24
+ sample_rate: Span::Ext::DEFAULT_SAMPLE_RATE,
25
+ rate_limit: Span::Ext::DEFAULT_MAX_PER_SECOND
26
+ )
27
+
28
+ @matcher = matcher
29
+ @sample_rate = sample_rate
30
+ @rate_limit = rate_limit
31
+
32
+ @sampler = Sampling::RateSampler.new
33
+ # Set the sample_rate outside of the initializer to allow for
34
+ # zero to be a "drop all".
35
+ # The RateSampler initializer enforces non-zero, falling back to 100% sampling
36
+ # if zero is provided.
37
+ @sampler.sample_rate = sample_rate
38
+ @rate_limiter = Sampling::TokenBucket.new(rate_limit)
39
+ end
40
+
41
+ # This method should only be invoked for spans that are part
42
+ # of a trace that has been dropped by trace-level sampling.
43
+ # Invoking it for other spans will cause incorrect sampling
44
+ # metrics to be reported by the Datadog App.
45
+ #
46
+ # Returns `true` if the provided span is sampled.
47
+ # If the span is dropped due to sampling rate or rate limiting,
48
+ # it returns `false`.
49
+ #
50
+ # Returns `nil` if the span did not meet the matching criteria by the
51
+ # provided matcher.
52
+ #
53
+ # This method modifies the `span` if it matches the provided matcher.
54
+ #
55
+ # @param [Datadog::Tracing::SpanOperation] span_op span to be sampled
56
+ # @return [:kept,:rejected] should this span be sampled?
57
+ # @return [:not_matched] span did not satisfy the matcher, no changes are made to the span
58
+ def sample!(span_op)
59
+ return :not_matched unless @matcher.match?(span_op)
60
+
61
+ if @sampler.sample?(span_op) && @rate_limiter.allow?(1)
62
+ span_op.set_metric(Span::Ext::TAG_MECHANISM, Sampling::Ext::Mechanism::SPAN_SAMPLING_RATE)
63
+ span_op.set_metric(Span::Ext::TAG_RULE_RATE, @sample_rate)
64
+ span_op.set_metric(Span::Ext::TAG_MAX_PER_SECOND, @rate_limit)
65
+ :kept
66
+ else
67
+ :rejected
68
+ end
69
+ end
70
+
71
+ def ==(other)
72
+ return super unless other.is_a?(Rule)
73
+
74
+ matcher == other.matcher &&
75
+ sample_rate == other.sample_rate &&
76
+ rate_limit == other.rate_limit
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ require_relative 'ext'
6
+ require_relative 'matcher'
7
+ require_relative 'rule'
8
+
9
+ module Datadog
10
+ module Tracing
11
+ module Sampling
12
+ module Span
13
+ # Converts user configuration into {Datadog::Tracing::Sampling::Span::Rule} objects,
14
+ # handling any parsing errors.
15
+ module RuleParser
16
+ class << self
17
+ # Parses the provided JSON string containing the Single Span
18
+ # Sampling configuration list.
19
+ # In case of parsing errors, `nil` is returned.
20
+ #
21
+ # @param rules [String] the JSON configuration rules to be parsed
22
+ # @return [Array<Datadog::Tracing::Sampling::Span::Rule>] a list of parsed rules
23
+ # @return [nil] if parsing failed
24
+ def parse_json(rules)
25
+ return nil unless rules
26
+
27
+ begin
28
+ list = JSON.parse(rules)
29
+ rescue => e
30
+ Datadog.logger.warn(
31
+ "Error parsing Span Sampling Rules `#{rules.inspect}`: "\
32
+ "#{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
33
+ )
34
+ return nil
35
+ end
36
+
37
+ parse_list(list)
38
+ end
39
+
40
+ # Parses a list of Hashes containing the parsed JSON information
41
+ # for Single Span Sampling configuration.
42
+ # In case of parsing errors, `nil` is returned.
43
+ #
44
+ # @param rules [Array<String] the JSON configuration rules to be parsed
45
+ # @return [Array<Datadog::Tracing::Sampling::Span::Rule>] a list of parsed rules
46
+ # @return [nil] if parsing failed
47
+ def parse_list(rules)
48
+ unless rules.is_a?(Array)
49
+ Datadog.logger.warn("Span Sampling Rules are not an array: #{rules.inspect}")
50
+ return nil
51
+ end
52
+
53
+ parsed = rules.map do |hash|
54
+ unless hash.is_a?(Hash)
55
+ Datadog.logger.warn("Span Sampling Rule is not a key-value object: #{hash.inspect}")
56
+ return nil
57
+ end
58
+
59
+ begin
60
+ parse_rule(hash)
61
+ rescue => e
62
+ Datadog.logger.warn(
63
+ "Cannot parse Span Sampling Rule #{hash.inspect}: " \
64
+ "#{e.class.name} #{e} at #{Array(e.backtrace).first}"
65
+ )
66
+ return nil
67
+ end
68
+ end
69
+
70
+ parsed.compact!
71
+ parsed
72
+ end
73
+
74
+ private
75
+
76
+ def parse_rule(hash)
77
+ matcher_options = {}
78
+ if (name_pattern = hash['name'])
79
+ matcher_options[:name_pattern] = name_pattern
80
+ end
81
+
82
+ if (service_pattern = hash['service'])
83
+ matcher_options[:service_pattern] = service_pattern
84
+ end
85
+
86
+ matcher = Matcher.new(**matcher_options)
87
+
88
+ rule_options = {}
89
+ if (sample_rate = hash['sample_rate'])
90
+ rule_options[:sample_rate] = sample_rate
91
+ end
92
+
93
+ if (max_per_second = hash['max_per_second'])
94
+ rule_options[:rate_limit] = max_per_second
95
+ end
96
+
97
+ Rule.new(matcher, **rule_options)
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end