ddtrace 0.49.0 → 1.12.1

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 (1785) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1213 -12
  3. data/LICENSE-3rdparty.csv +7 -1
  4. data/README.md +16 -9
  5. data/bin/ddtracerb +5 -5
  6. data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +134 -0
  7. data/ext/ddtrace_profiling_loader/extconf.rb +72 -0
  8. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +158 -0
  9. data/ext/ddtrace_profiling_native_extension/clock_id.h +25 -0
  10. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +75 -0
  11. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +23 -0
  12. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +931 -0
  13. data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.c +142 -0
  14. data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.h +14 -0
  15. data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +241 -0
  16. data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
  17. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +379 -0
  18. data/ext/ddtrace_profiling_native_extension/collectors_stack.h +20 -0
  19. data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +1001 -0
  20. data/ext/ddtrace_profiling_native_extension/collectors_thread_context.h +14 -0
  21. data/ext/ddtrace_profiling_native_extension/extconf.rb +253 -0
  22. data/ext/ddtrace_profiling_native_extension/helpers.h +17 -0
  23. data/ext/ddtrace_profiling_native_extension/http_transport.c +347 -0
  24. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +25 -0
  25. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +319 -0
  26. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +769 -0
  27. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +45 -0
  28. data/ext/ddtrace_profiling_native_extension/profiling.c +251 -0
  29. data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +110 -0
  30. data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +89 -0
  31. data/ext/ddtrace_profiling_native_extension/setup_signal_handler.c +115 -0
  32. data/ext/ddtrace_profiling_native_extension/setup_signal_handler.h +11 -0
  33. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +591 -0
  34. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +14 -0
  35. data/ext/ddtrace_profiling_native_extension/time_helpers.c +17 -0
  36. data/ext/ddtrace_profiling_native_extension/time_helpers.h +10 -0
  37. data/lib/datadog/appsec/assets/blocked.html +99 -0
  38. data/lib/datadog/appsec/assets/blocked.json +1 -0
  39. data/lib/datadog/appsec/assets/blocked.text +5 -0
  40. data/lib/datadog/appsec/assets/waf_rules/README.md +7 -0
  41. data/lib/datadog/appsec/assets/waf_rules/recommended.json +7080 -0
  42. data/lib/datadog/appsec/assets/waf_rules/strict.json +1545 -0
  43. data/lib/datadog/appsec/assets.rb +36 -0
  44. data/lib/datadog/appsec/autoload.rb +11 -0
  45. data/lib/datadog/appsec/component.rb +75 -0
  46. data/lib/datadog/appsec/configuration/settings.rb +224 -0
  47. data/lib/datadog/appsec/configuration.rb +90 -0
  48. data/lib/datadog/appsec/contrib/auto_instrument.rb +27 -0
  49. data/lib/datadog/appsec/contrib/integration.rb +37 -0
  50. data/lib/datadog/appsec/contrib/patcher.rb +12 -0
  51. data/lib/datadog/appsec/contrib/rack/ext.rb +12 -0
  52. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +100 -0
  53. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +30 -0
  54. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +158 -0
  55. data/lib/datadog/appsec/contrib/rack/integration.rb +42 -0
  56. data/lib/datadog/appsec/contrib/rack/patcher.rb +34 -0
  57. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +86 -0
  58. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +63 -0
  59. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +69 -0
  60. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +43 -0
  61. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +174 -0
  62. data/lib/datadog/appsec/contrib/rails/ext.rb +12 -0
  63. data/lib/datadog/appsec/contrib/rails/framework.rb +18 -0
  64. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +67 -0
  65. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +68 -0
  66. data/lib/datadog/appsec/contrib/rails/integration.rb +41 -0
  67. data/lib/datadog/appsec/contrib/rails/patcher.rb +159 -0
  68. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +69 -0
  69. data/lib/datadog/appsec/contrib/rails/request.rb +36 -0
  70. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +20 -0
  71. data/lib/datadog/appsec/contrib/sinatra/ext.rb +13 -0
  72. data/lib/datadog/appsec/contrib/sinatra/framework.rb +22 -0
  73. data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +17 -0
  74. data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +23 -0
  75. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +113 -0
  76. data/lib/datadog/appsec/contrib/sinatra/integration.rb +41 -0
  77. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +160 -0
  78. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +64 -0
  79. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +20 -0
  80. data/lib/datadog/appsec/event.rb +113 -0
  81. data/lib/datadog/appsec/ext.rb +10 -0
  82. data/lib/datadog/appsec/extensions.rb +144 -0
  83. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +22 -0
  84. data/lib/datadog/appsec/instrumentation/gateway.rb +64 -0
  85. data/lib/datadog/appsec/instrumentation.rb +9 -0
  86. data/lib/datadog/appsec/monitor/gateway/watcher.rb +67 -0
  87. data/lib/datadog/appsec/monitor/reactive/set_user.rb +61 -0
  88. data/lib/datadog/appsec/monitor.rb +11 -0
  89. data/lib/datadog/appsec/processor/rule_loader.rb +63 -0
  90. data/lib/datadog/appsec/processor/rule_merger.rb +132 -0
  91. data/lib/datadog/appsec/processor.rb +143 -0
  92. data/lib/datadog/appsec/rate_limiter.rb +58 -0
  93. data/lib/datadog/appsec/reactive/address_hash.rb +22 -0
  94. data/lib/datadog/appsec/reactive/engine.rb +47 -0
  95. data/lib/datadog/appsec/reactive/operation.rb +68 -0
  96. data/lib/datadog/appsec/reactive/subscriber.rb +19 -0
  97. data/lib/datadog/appsec/remote.rb +123 -0
  98. data/lib/datadog/appsec/response.rb +73 -0
  99. data/lib/datadog/appsec/scope.rb +61 -0
  100. data/lib/datadog/appsec/utils/http/media_range.rb +199 -0
  101. data/lib/datadog/appsec/utils/http/media_type.rb +85 -0
  102. data/lib/datadog/appsec/utils/http.rb +11 -0
  103. data/lib/datadog/appsec/utils.rb +9 -0
  104. data/lib/datadog/appsec.rb +61 -0
  105. data/lib/datadog/ci/configuration/components.rb +32 -0
  106. data/lib/datadog/ci/configuration/settings.rb +53 -0
  107. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +33 -0
  108. data/lib/datadog/ci/contrib/cucumber/ext.rb +20 -0
  109. data/lib/datadog/ci/contrib/cucumber/formatter.rb +94 -0
  110. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +28 -0
  111. data/lib/datadog/ci/contrib/cucumber/integration.rb +47 -0
  112. data/lib/datadog/ci/contrib/cucumber/patcher.rb +27 -0
  113. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +33 -0
  114. data/lib/datadog/ci/contrib/rspec/example.rb +68 -0
  115. data/lib/datadog/ci/contrib/rspec/ext.rb +19 -0
  116. data/lib/datadog/ci/contrib/rspec/integration.rb +48 -0
  117. data/lib/datadog/ci/contrib/rspec/patcher.rb +27 -0
  118. data/lib/datadog/ci/ext/app_types.rb +9 -0
  119. data/lib/datadog/ci/ext/environment.rb +575 -0
  120. data/lib/datadog/ci/ext/settings.rb +10 -0
  121. data/lib/datadog/ci/ext/test.rb +35 -0
  122. data/lib/datadog/ci/extensions.rb +19 -0
  123. data/lib/datadog/ci/flush.rb +38 -0
  124. data/lib/datadog/ci/test.rb +81 -0
  125. data/lib/datadog/ci.rb +20 -0
  126. data/lib/datadog/core/buffer/cruby.rb +55 -0
  127. data/lib/datadog/core/buffer/random.rb +134 -0
  128. data/lib/datadog/core/buffer/thread_safe.rb +58 -0
  129. data/lib/datadog/core/chunker.rb +35 -0
  130. data/lib/datadog/core/configuration/agent_settings_resolver.rb +396 -0
  131. data/lib/datadog/core/configuration/base.rb +99 -0
  132. data/lib/datadog/core/configuration/components.rb +161 -0
  133. data/lib/datadog/core/configuration/dependency_resolver.rb +28 -0
  134. data/lib/datadog/core/configuration/ext.rb +24 -0
  135. data/lib/datadog/core/configuration/option.rb +69 -0
  136. data/lib/datadog/core/configuration/option_definition.rb +135 -0
  137. data/lib/datadog/core/configuration/option_definition_set.rb +22 -0
  138. data/lib/datadog/core/configuration/option_set.rb +10 -0
  139. data/lib/datadog/core/configuration/options.rb +116 -0
  140. data/lib/datadog/core/configuration/settings.rb +569 -0
  141. data/lib/datadog/core/configuration.rb +289 -0
  142. data/lib/datadog/core/diagnostics/environment_logger.rb +286 -0
  143. data/lib/datadog/core/diagnostics/health.rb +19 -0
  144. data/lib/datadog/core/encoding.rb +72 -0
  145. data/lib/datadog/core/environment/cgroup.rb +51 -0
  146. data/lib/datadog/core/environment/class_count.rb +21 -0
  147. data/lib/datadog/core/environment/container.rb +89 -0
  148. data/lib/datadog/core/environment/ext.rb +44 -0
  149. data/lib/datadog/core/environment/gc.rb +20 -0
  150. data/lib/datadog/core/environment/identity.rb +114 -0
  151. data/lib/datadog/core/environment/platform.rb +38 -0
  152. data/lib/datadog/core/environment/socket.rb +24 -0
  153. data/lib/datadog/core/environment/thread_count.rb +20 -0
  154. data/lib/datadog/core/environment/variable_helpers.rb +122 -0
  155. data/lib/datadog/core/environment/vm_cache.rb +64 -0
  156. data/lib/datadog/core/error.rb +99 -0
  157. data/lib/datadog/core/extensions.rb +16 -0
  158. data/lib/datadog/core/git/ext.rb +33 -0
  159. data/lib/datadog/core/header_collection.rb +43 -0
  160. data/lib/datadog/core/logger.rb +44 -0
  161. data/lib/datadog/core/logging/ext.rb +11 -0
  162. data/lib/datadog/core/metrics/client.rb +197 -0
  163. data/lib/datadog/core/metrics/ext.rb +16 -0
  164. data/lib/datadog/core/metrics/helpers.rb +25 -0
  165. data/lib/datadog/core/metrics/logging.rb +42 -0
  166. data/lib/datadog/core/metrics/metric.rb +14 -0
  167. data/lib/datadog/core/metrics/options.rb +48 -0
  168. data/lib/datadog/core/pin.rb +73 -0
  169. data/lib/datadog/core/remote/client/capabilities.rb +57 -0
  170. data/lib/datadog/core/remote/client.rb +229 -0
  171. data/lib/datadog/core/remote/component.rb +158 -0
  172. data/lib/datadog/core/remote/configuration/content.rb +84 -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 +292 -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 +12 -0
  180. data/lib/datadog/core/remote/negotiation.rb +57 -0
  181. data/lib/datadog/core/remote/worker.rb +96 -0
  182. data/lib/datadog/core/remote.rb +24 -0
  183. data/lib/datadog/core/runtime/ext.rb +28 -0
  184. data/lib/datadog/core/runtime/metrics.rb +140 -0
  185. data/lib/datadog/core/telemetry/client.rb +77 -0
  186. data/lib/datadog/core/telemetry/collector.rb +231 -0
  187. data/lib/datadog/core/telemetry/emitter.rb +46 -0
  188. data/lib/datadog/core/telemetry/event.rb +67 -0
  189. data/lib/datadog/core/telemetry/ext.rb +9 -0
  190. data/lib/datadog/core/telemetry/heartbeat.rb +37 -0
  191. data/lib/datadog/core/telemetry/http/adapters/net.rb +111 -0
  192. data/lib/datadog/core/telemetry/http/env.rb +20 -0
  193. data/lib/datadog/core/telemetry/http/ext.rb +20 -0
  194. data/lib/datadog/core/telemetry/http/response.rb +64 -0
  195. data/lib/datadog/core/telemetry/http/transport.rb +54 -0
  196. data/lib/datadog/core/telemetry/v1/app_event.rb +52 -0
  197. data/lib/datadog/core/telemetry/v1/application.rb +92 -0
  198. data/lib/datadog/core/telemetry/v1/configuration.rb +25 -0
  199. data/lib/datadog/core/telemetry/v1/dependency.rb +43 -0
  200. data/lib/datadog/core/telemetry/v1/host.rb +59 -0
  201. data/lib/datadog/core/telemetry/v1/integration.rb +64 -0
  202. data/lib/datadog/core/telemetry/v1/product.rb +36 -0
  203. data/lib/datadog/core/telemetry/v1/telemetry_request.rb +106 -0
  204. data/lib/datadog/core/transport/config.rb +58 -0
  205. data/lib/datadog/core/transport/http/api/instance.rb +37 -0
  206. data/lib/datadog/core/transport/http/api/spec.rb +19 -0
  207. data/lib/datadog/core/transport/http/api.rb +57 -0
  208. data/lib/datadog/core/transport/http/builder.rb +217 -0
  209. data/lib/datadog/core/transport/http/client.rb +45 -0
  210. data/lib/datadog/core/transport/http/config.rb +268 -0
  211. data/lib/datadog/core/transport/http/negotiation.rb +144 -0
  212. data/lib/datadog/core/transport/http.rb +169 -0
  213. data/lib/datadog/core/transport/negotiation.rb +60 -0
  214. data/lib/datadog/core/utils/compression.rb +36 -0
  215. data/lib/datadog/core/utils/forking.rb +61 -0
  216. data/lib/datadog/core/utils/hash.rb +32 -0
  217. data/lib/datadog/core/utils/network.rb +140 -0
  218. data/lib/datadog/core/utils/object_set.rb +43 -0
  219. data/lib/datadog/core/utils/only_once.rb +42 -0
  220. data/lib/datadog/core/utils/safe_dup.rb +43 -0
  221. data/lib/datadog/core/utils/sequence.rb +26 -0
  222. data/lib/datadog/core/utils/string_table.rb +47 -0
  223. data/lib/datadog/core/utils/time.rb +52 -0
  224. data/lib/datadog/core/utils.rb +92 -0
  225. data/lib/datadog/core/vendor/ipaddr.rb +78 -0
  226. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +118 -0
  227. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +59 -0
  228. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +137 -0
  229. data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +11 -0
  230. data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +10 -0
  231. data/lib/datadog/core/vendor/multipart-post/multipart.rb +14 -0
  232. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +34 -0
  233. data/lib/datadog/core/worker.rb +24 -0
  234. data/lib/datadog/core/workers/async.rb +182 -0
  235. data/lib/datadog/core/workers/interval_loop.rb +123 -0
  236. data/lib/datadog/core/workers/polling.rb +57 -0
  237. data/lib/datadog/core/workers/queue.rb +44 -0
  238. data/lib/datadog/core/workers/runtime_metrics.rb +62 -0
  239. data/lib/datadog/core.rb +45 -0
  240. data/lib/datadog/kit/appsec/events.rb +119 -0
  241. data/lib/datadog/kit/enable_core_dumps.rb +50 -0
  242. data/lib/datadog/kit/identity.rb +89 -0
  243. data/lib/datadog/kit.rb +11 -0
  244. data/lib/datadog/opentelemetry/api/context.rb +186 -0
  245. data/lib/datadog/opentelemetry/api/trace/span.rb +14 -0
  246. data/lib/datadog/opentelemetry/sdk/configurator.rb +37 -0
  247. data/lib/datadog/opentelemetry/sdk/id_generator.rb +26 -0
  248. data/lib/datadog/opentelemetry/sdk/propagator.rb +90 -0
  249. data/lib/datadog/opentelemetry/sdk/span_processor.rb +91 -0
  250. data/lib/datadog/opentelemetry.rb +47 -0
  251. data/lib/datadog/opentracer/binary_propagator.rb +26 -0
  252. data/lib/datadog/opentracer/carrier.rb +9 -0
  253. data/lib/datadog/opentracer/distributed_headers.rb +54 -0
  254. data/lib/datadog/opentracer/global_tracer.rb +17 -0
  255. data/lib/datadog/opentracer/propagator.rb +26 -0
  256. data/lib/datadog/opentracer/rack_propagator.rb +71 -0
  257. data/lib/datadog/opentracer/scope.rb +18 -0
  258. data/lib/datadog/opentracer/scope_manager.rb +9 -0
  259. data/lib/datadog/opentracer/span.rb +99 -0
  260. data/lib/datadog/opentracer/span_context.rb +19 -0
  261. data/lib/datadog/opentracer/span_context_factory.rb +27 -0
  262. data/lib/datadog/opentracer/text_map_propagator.rb +86 -0
  263. data/lib/datadog/opentracer/thread_local_scope.rb +34 -0
  264. data/lib/datadog/opentracer/thread_local_scope_manager.rb +64 -0
  265. data/lib/datadog/opentracer/tracer.rb +212 -0
  266. data/lib/datadog/opentracer.rb +24 -0
  267. data/lib/datadog/profiling/backtrace_location.rb +34 -0
  268. data/lib/datadog/profiling/buffer.rb +43 -0
  269. data/lib/datadog/profiling/collectors/code_provenance.rb +113 -0
  270. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +114 -0
  271. data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
  272. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +66 -0
  273. data/lib/datadog/profiling/collectors/old_stack.rb +301 -0
  274. data/lib/datadog/profiling/collectors/stack.rb +13 -0
  275. data/lib/datadog/profiling/collectors/thread_context.rb +46 -0
  276. data/lib/datadog/profiling/component.rb +275 -0
  277. data/lib/datadog/profiling/encoding/profile.rb +41 -0
  278. data/lib/datadog/profiling/event.rb +15 -0
  279. data/lib/datadog/profiling/events/stack.rb +82 -0
  280. data/lib/datadog/profiling/exporter.rb +83 -0
  281. data/lib/datadog/profiling/ext/forking.rb +96 -0
  282. data/lib/datadog/profiling/ext.rb +45 -0
  283. data/lib/datadog/profiling/flush.rb +38 -0
  284. data/lib/datadog/profiling/http_transport.rb +130 -0
  285. data/lib/datadog/profiling/load_native_extension.rb +20 -0
  286. data/lib/datadog/profiling/native_extension.rb +41 -0
  287. data/lib/datadog/profiling/old_recorder.rb +107 -0
  288. data/lib/datadog/profiling/pprof/builder.rb +125 -0
  289. data/lib/datadog/profiling/pprof/converter.rb +102 -0
  290. data/lib/datadog/profiling/pprof/message_set.rb +16 -0
  291. data/lib/datadog/profiling/pprof/payload.rb +20 -0
  292. data/lib/datadog/profiling/pprof/pprof_pb.rb +81 -0
  293. data/lib/datadog/profiling/pprof/stack_sample.rb +139 -0
  294. data/lib/datadog/profiling/pprof/string_table.rb +12 -0
  295. data/lib/datadog/profiling/pprof/template.rb +118 -0
  296. data/lib/datadog/profiling/preload.rb +5 -0
  297. data/lib/datadog/profiling/profiler.rb +39 -0
  298. data/lib/datadog/profiling/scheduler.rb +130 -0
  299. data/lib/datadog/profiling/stack_recorder.rb +56 -0
  300. data/lib/datadog/profiling/tag_builder.rb +53 -0
  301. data/lib/datadog/profiling/tasks/exec.rb +48 -0
  302. data/lib/datadog/profiling/tasks/help.rb +16 -0
  303. data/lib/datadog/profiling/tasks/setup.rb +58 -0
  304. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +43 -0
  305. data/lib/datadog/profiling/trace_identifiers/helper.rb +45 -0
  306. data/lib/datadog/profiling.rb +212 -0
  307. data/lib/datadog/tracing/analytics.rb +25 -0
  308. data/lib/datadog/tracing/buffer.rb +127 -0
  309. data/lib/datadog/tracing/client_ip.rb +61 -0
  310. data/lib/datadog/tracing/component.rb +176 -0
  311. data/lib/datadog/tracing/configuration/ext.rb +101 -0
  312. data/lib/datadog/tracing/configuration/settings.rb +465 -0
  313. data/lib/datadog/tracing/context.rb +68 -0
  314. data/lib/datadog/tracing/context_provider.rb +80 -0
  315. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +35 -0
  316. data/lib/datadog/tracing/contrib/action_cable/event.rb +71 -0
  317. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +56 -0
  318. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +61 -0
  319. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +57 -0
  320. data/lib/datadog/tracing/contrib/action_cable/events.rb +37 -0
  321. data/lib/datadog/tracing/contrib/action_cable/ext.rb +30 -0
  322. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +88 -0
  323. data/lib/datadog/tracing/contrib/action_cable/integration.rb +48 -0
  324. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +31 -0
  325. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +36 -0
  326. data/lib/datadog/tracing/contrib/action_mailer/event.rb +52 -0
  327. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +58 -0
  328. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +45 -0
  329. data/lib/datadog/tracing/contrib/action_mailer/events.rb +34 -0
  330. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +31 -0
  331. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +48 -0
  332. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +29 -0
  333. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +136 -0
  334. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +29 -0
  335. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +47 -0
  336. data/lib/datadog/tracing/contrib/action_pack/ext.rb +20 -0
  337. data/lib/datadog/tracing/contrib/action_pack/integration.rb +48 -0
  338. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +27 -0
  339. data/lib/datadog/tracing/contrib/action_pack/utils.rb +38 -0
  340. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +34 -0
  341. data/lib/datadog/tracing/contrib/action_view/event.rb +35 -0
  342. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +52 -0
  343. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +55 -0
  344. data/lib/datadog/tracing/contrib/action_view/events.rb +34 -0
  345. data/lib/datadog/tracing/contrib/action_view/ext.rb +22 -0
  346. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +76 -0
  347. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +89 -0
  348. data/lib/datadog/tracing/contrib/action_view/integration.rb +55 -0
  349. data/lib/datadog/tracing/contrib/action_view/patcher.rb +45 -0
  350. data/lib/datadog/tracing/contrib/action_view/utils.rb +34 -0
  351. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +37 -0
  352. data/lib/datadog/tracing/contrib/active_job/event.rb +58 -0
  353. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +48 -0
  354. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +47 -0
  355. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +47 -0
  356. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +49 -0
  357. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +47 -0
  358. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +48 -0
  359. data/lib/datadog/tracing/contrib/active_job/events.rb +42 -0
  360. data/lib/datadog/tracing/contrib/active_job/ext.rb +37 -0
  361. data/lib/datadog/tracing/contrib/active_job/integration.rb +48 -0
  362. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +24 -0
  363. data/lib/datadog/tracing/contrib/active_job/patcher.rb +36 -0
  364. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +33 -0
  365. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +68 -0
  366. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +43 -0
  367. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +45 -0
  368. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +34 -0
  369. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +22 -0
  370. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +43 -0
  371. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +32 -0
  372. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +34 -0
  373. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +136 -0
  374. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +44 -0
  375. data/lib/datadog/tracing/contrib/active_record/event.rb +30 -0
  376. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +56 -0
  377. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +79 -0
  378. data/lib/datadog/tracing/contrib/active_record/events.rb +34 -0
  379. data/lib/datadog/tracing/contrib/active_record/ext.rb +27 -0
  380. data/lib/datadog/tracing/contrib/active_record/integration.rb +54 -0
  381. data/lib/datadog/tracing/contrib/active_record/patcher.rb +27 -0
  382. data/lib/datadog/tracing/contrib/active_record/utils.rb +126 -0
  383. data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +305 -0
  384. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +282 -0
  385. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +73 -0
  386. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +47 -0
  387. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +43 -0
  388. data/lib/datadog/tracing/contrib/active_support/ext.rb +29 -0
  389. data/lib/datadog/tracing/contrib/active_support/integration.rb +49 -0
  390. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +71 -0
  391. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +71 -0
  392. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +162 -0
  393. data/lib/datadog/tracing/contrib/active_support/patcher.rb +27 -0
  394. data/lib/datadog/tracing/contrib/analytics.rb +29 -0
  395. data/lib/datadog/tracing/contrib/auto_instrument.rb +53 -0
  396. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +44 -0
  397. data/lib/datadog/tracing/contrib/aws/ext.rb +36 -0
  398. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +108 -0
  399. data/lib/datadog/tracing/contrib/aws/integration.rb +45 -0
  400. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +62 -0
  401. data/lib/datadog/tracing/contrib/aws/patcher.rb +57 -0
  402. data/lib/datadog/tracing/contrib/aws/service/base.rb +16 -0
  403. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +22 -0
  404. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +22 -0
  405. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +32 -0
  406. data/lib/datadog/tracing/contrib/aws/service/s3.rb +22 -0
  407. data/lib/datadog/tracing/contrib/aws/service/sns.rb +30 -0
  408. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +27 -0
  409. data/lib/datadog/tracing/contrib/aws/service/states.rb +40 -0
  410. data/lib/datadog/tracing/contrib/aws/services.rb +137 -0
  411. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +23 -0
  412. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +53 -0
  413. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +14 -0
  414. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +27 -0
  415. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +41 -0
  416. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +32 -0
  417. data/lib/datadog/tracing/contrib/configurable.rb +102 -0
  418. data/lib/datadog/tracing/contrib/configuration/resolver.rb +85 -0
  419. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +43 -0
  420. data/lib/datadog/tracing/contrib/configuration/settings.rb +39 -0
  421. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +43 -0
  422. data/lib/datadog/tracing/contrib/dalli/ext.rb +24 -0
  423. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +64 -0
  424. data/lib/datadog/tracing/contrib/dalli/integration.rb +50 -0
  425. data/lib/datadog/tracing/contrib/dalli/patcher.rb +28 -0
  426. data/lib/datadog/tracing/contrib/dalli/quantize.rb +24 -0
  427. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +38 -0
  428. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +26 -0
  429. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +41 -0
  430. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +37 -0
  431. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +108 -0
  432. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +34 -0
  433. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +45 -0
  434. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +27 -0
  435. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +48 -0
  436. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +155 -0
  437. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +85 -0
  438. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +47 -0
  439. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +176 -0
  440. data/lib/datadog/tracing/contrib/ethon/ext.rb +23 -0
  441. data/lib/datadog/tracing/contrib/ethon/integration.rb +46 -0
  442. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +99 -0
  443. data/lib/datadog/tracing/contrib/ethon/patcher.rb +30 -0
  444. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +47 -0
  445. data/lib/datadog/tracing/contrib/excon/ext.rb +20 -0
  446. data/lib/datadog/tracing/contrib/excon/integration.rb +46 -0
  447. data/lib/datadog/tracing/contrib/excon/middleware.rb +172 -0
  448. data/lib/datadog/tracing/contrib/excon/patcher.rb +31 -0
  449. data/lib/datadog/tracing/contrib/ext.rb +30 -0
  450. data/lib/datadog/tracing/contrib/extensions.rb +197 -0
  451. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +51 -0
  452. data/lib/datadog/tracing/contrib/faraday/connection.rb +22 -0
  453. data/lib/datadog/tracing/contrib/faraday/ext.rb +20 -0
  454. data/lib/datadog/tracing/contrib/faraday/integration.rb +46 -0
  455. data/lib/datadog/tracing/contrib/faraday/middleware.rb +94 -0
  456. data/lib/datadog/tracing/contrib/faraday/patcher.rb +54 -0
  457. data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +22 -0
  458. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +42 -0
  459. data/lib/datadog/tracing/contrib/grape/endpoint.rb +248 -0
  460. data/lib/datadog/tracing/contrib/grape/ext.rb +26 -0
  461. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +35 -0
  462. data/lib/datadog/tracing/contrib/grape/integration.rb +42 -0
  463. data/lib/datadog/tracing/contrib/grape/patcher.rb +33 -0
  464. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +36 -0
  465. data/lib/datadog/tracing/contrib/graphql/ext.rb +17 -0
  466. data/lib/datadog/tracing/contrib/graphql/integration.rb +42 -0
  467. data/lib/datadog/tracing/contrib/graphql/patcher.rb +88 -0
  468. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +48 -0
  469. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +100 -0
  470. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +88 -0
  471. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +105 -0
  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 +25 -0
  475. data/lib/datadog/tracing/contrib/grpc/integration.rb +48 -0
  476. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +53 -0
  477. data/lib/datadog/tracing/contrib/grpc/patcher.rb +34 -0
  478. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +47 -0
  479. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +22 -0
  480. data/lib/datadog/tracing/contrib/hanami/ext.rb +22 -0
  481. data/lib/datadog/tracing/contrib/hanami/integration.rb +42 -0
  482. data/lib/datadog/tracing/contrib/hanami/patcher.rb +33 -0
  483. data/lib/datadog/tracing/contrib/hanami/plugin.rb +23 -0
  484. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +41 -0
  485. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +44 -0
  486. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +43 -0
  487. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +52 -0
  488. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +38 -0
  489. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +37 -0
  490. data/lib/datadog/tracing/contrib/http/ext.rb +21 -0
  491. data/lib/datadog/tracing/contrib/http/instrumentation.rb +138 -0
  492. data/lib/datadog/tracing/contrib/http/integration.rb +49 -0
  493. data/lib/datadog/tracing/contrib/http/patcher.rb +30 -0
  494. data/lib/datadog/tracing/contrib/http_annotation_helper.rb +17 -0
  495. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +52 -0
  496. data/lib/datadog/tracing/contrib/httpclient/ext.rb +21 -0
  497. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +118 -0
  498. data/lib/datadog/tracing/contrib/httpclient/integration.rb +46 -0
  499. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +40 -0
  500. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +52 -0
  501. data/lib/datadog/tracing/contrib/httprb/ext.rb +21 -0
  502. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +128 -0
  503. data/lib/datadog/tracing/contrib/httprb/integration.rb +46 -0
  504. data/lib/datadog/tracing/contrib/httprb/patcher.rb +40 -0
  505. data/lib/datadog/tracing/contrib/integration.rb +78 -0
  506. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +35 -0
  507. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +19 -0
  508. data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +18 -0
  509. data/lib/datadog/tracing/contrib/kafka/event.rb +53 -0
  510. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +40 -0
  511. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +47 -0
  512. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +45 -0
  513. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +45 -0
  514. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +35 -0
  515. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +35 -0
  516. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +35 -0
  517. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +39 -0
  518. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +42 -0
  519. data/lib/datadog/tracing/contrib/kafka/events.rb +48 -0
  520. data/lib/datadog/tracing/contrib/kafka/ext.rb +51 -0
  521. data/lib/datadog/tracing/contrib/kafka/integration.rb +42 -0
  522. data/lib/datadog/tracing/contrib/kafka/patcher.rb +29 -0
  523. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +23 -0
  524. data/lib/datadog/tracing/contrib/lograge/ext.rb +13 -0
  525. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +46 -0
  526. data/lib/datadog/tracing/contrib/lograge/integration.rb +48 -0
  527. data/lib/datadog/tracing/contrib/lograge/patcher.rb +29 -0
  528. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +47 -0
  529. data/lib/datadog/tracing/contrib/mongodb/ext.rb +33 -0
  530. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +47 -0
  531. data/lib/datadog/tracing/contrib/mongodb/integration.rb +46 -0
  532. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +47 -0
  533. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +34 -0
  534. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +128 -0
  535. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +55 -0
  536. data/lib/datadog/tracing/contrib/mysql2/ext.rb +22 -0
  537. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +80 -0
  538. data/lib/datadog/tracing/contrib/mysql2/integration.rb +41 -0
  539. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +31 -0
  540. data/lib/datadog/tracing/contrib/patchable.rb +109 -0
  541. data/lib/datadog/tracing/contrib/patcher.rb +83 -0
  542. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +55 -0
  543. data/lib/datadog/tracing/contrib/pg/ext.rb +31 -0
  544. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +171 -0
  545. data/lib/datadog/tracing/contrib/pg/integration.rb +41 -0
  546. data/lib/datadog/tracing/contrib/pg/patcher.rb +31 -0
  547. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +43 -0
  548. data/lib/datadog/tracing/contrib/presto/ext.rb +32 -0
  549. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +127 -0
  550. data/lib/datadog/tracing/contrib/presto/integration.rb +41 -0
  551. data/lib/datadog/tracing/contrib/presto/patcher.rb +35 -0
  552. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +41 -0
  553. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +31 -0
  554. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +28 -0
  555. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +53 -0
  556. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +40 -0
  557. data/lib/datadog/tracing/contrib/qless/ext.rb +24 -0
  558. data/lib/datadog/tracing/contrib/qless/integration.rb +41 -0
  559. data/lib/datadog/tracing/contrib/qless/patcher.rb +36 -0
  560. data/lib/datadog/tracing/contrib/qless/qless_job.rb +75 -0
  561. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +30 -0
  562. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +47 -0
  563. data/lib/datadog/tracing/contrib/que/ext.rb +32 -0
  564. data/lib/datadog/tracing/contrib/que/integration.rb +44 -0
  565. data/lib/datadog/tracing/contrib/que/patcher.rb +26 -0
  566. data/lib/datadog/tracing/contrib/que/tracer.rb +63 -0
  567. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +43 -0
  568. data/lib/datadog/tracing/contrib/racecar/event.rb +81 -0
  569. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +36 -0
  570. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +33 -0
  571. data/lib/datadog/tracing/contrib/racecar/events/message.rb +36 -0
  572. data/lib/datadog/tracing/contrib/racecar/events.rb +36 -0
  573. data/lib/datadog/tracing/contrib/racecar/ext.rb +30 -0
  574. data/lib/datadog/tracing/contrib/racecar/integration.rb +42 -0
  575. data/lib/datadog/tracing/contrib/racecar/patcher.rb +29 -0
  576. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +49 -0
  577. data/lib/datadog/tracing/contrib/rack/ext.rb +28 -0
  578. data/lib/datadog/tracing/contrib/rack/header_collection.rb +35 -0
  579. data/lib/datadog/tracing/contrib/rack/integration.rb +48 -0
  580. data/lib/datadog/tracing/contrib/rack/middlewares.rb +349 -0
  581. data/lib/datadog/tracing/contrib/rack/patcher.rb +117 -0
  582. data/lib/datadog/tracing/contrib/rack/request_queue.rb +46 -0
  583. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +10 -0
  584. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +79 -0
  585. data/lib/datadog/tracing/contrib/rails/ext.rb +17 -0
  586. data/lib/datadog/tracing/contrib/rails/framework.rb +148 -0
  587. data/lib/datadog/tracing/contrib/rails/integration.rb +47 -0
  588. data/lib/datadog/tracing/contrib/rails/log_injection.rb +30 -0
  589. data/lib/datadog/tracing/contrib/rails/middlewares.rb +46 -0
  590. data/lib/datadog/tracing/contrib/rails/patcher.rb +118 -0
  591. data/lib/datadog/tracing/contrib/rails/railtie.rb +17 -0
  592. data/lib/datadog/tracing/contrib/rails/utils.rb +28 -0
  593. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +51 -0
  594. data/lib/datadog/tracing/contrib/rake/ext.rb +24 -0
  595. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +101 -0
  596. data/lib/datadog/tracing/contrib/rake/integration.rb +41 -0
  597. data/lib/datadog/tracing/contrib/rake/patcher.rb +33 -0
  598. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +47 -0
  599. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +48 -0
  600. data/lib/datadog/tracing/contrib/redis/ext.rb +27 -0
  601. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +86 -0
  602. data/lib/datadog/tracing/contrib/redis/integration.rb +78 -0
  603. data/lib/datadog/tracing/contrib/redis/patcher.rb +77 -0
  604. data/lib/datadog/tracing/contrib/redis/quantize.rb +80 -0
  605. data/lib/datadog/tracing/contrib/redis/tags.rb +59 -0
  606. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +70 -0
  607. data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +160 -0
  608. data/lib/datadog/tracing/contrib/registerable.rb +50 -0
  609. data/lib/datadog/tracing/contrib/registry.rb +52 -0
  610. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +37 -0
  611. data/lib/datadog/tracing/contrib/resque/ext.rb +19 -0
  612. data/lib/datadog/tracing/contrib/resque/integration.rb +46 -0
  613. data/lib/datadog/tracing/contrib/resque/patcher.rb +29 -0
  614. data/lib/datadog/tracing/contrib/resque/resque_job.rb +106 -0
  615. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +47 -0
  616. data/lib/datadog/tracing/contrib/rest_client/ext.rb +20 -0
  617. data/lib/datadog/tracing/contrib/rest_client/integration.rb +41 -0
  618. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +28 -0
  619. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +109 -0
  620. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +34 -0
  621. data/lib/datadog/tracing/contrib/roda/ext.rb +18 -0
  622. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +76 -0
  623. data/lib/datadog/tracing/contrib/roda/integration.rb +45 -0
  624. data/lib/datadog/tracing/contrib/roda/patcher.rb +30 -0
  625. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +23 -0
  626. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +13 -0
  627. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +51 -0
  628. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +50 -0
  629. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +29 -0
  630. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +33 -0
  631. data/lib/datadog/tracing/contrib/sequel/database.rb +60 -0
  632. data/lib/datadog/tracing/contrib/sequel/dataset.rb +67 -0
  633. data/lib/datadog/tracing/contrib/sequel/ext.rb +20 -0
  634. data/lib/datadog/tracing/contrib/sequel/integration.rb +41 -0
  635. data/lib/datadog/tracing/contrib/sequel/patcher.rb +37 -0
  636. data/lib/datadog/tracing/contrib/sequel/utils.rb +88 -0
  637. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +38 -0
  638. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +24 -0
  639. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +42 -0
  640. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +28 -0
  641. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +65 -0
  642. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +66 -0
  643. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +45 -0
  644. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +38 -0
  645. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +42 -0
  646. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +59 -0
  647. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +90 -0
  648. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +61 -0
  649. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +36 -0
  650. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +34 -0
  651. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +57 -0
  652. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +34 -0
  653. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +118 -0
  654. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +44 -0
  655. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +41 -0
  656. data/lib/datadog/tracing/contrib/sinatra/env.rb +53 -0
  657. data/lib/datadog/tracing/contrib/sinatra/ext.rb +34 -0
  658. data/lib/datadog/tracing/contrib/sinatra/framework.rb +114 -0
  659. data/lib/datadog/tracing/contrib/sinatra/headers.rb +35 -0
  660. data/lib/datadog/tracing/contrib/sinatra/integration.rb +41 -0
  661. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +75 -0
  662. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +84 -0
  663. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +127 -0
  664. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +36 -0
  665. data/lib/datadog/tracing/contrib/sneakers/ext.rb +25 -0
  666. data/lib/datadog/tracing/contrib/sneakers/integration.rb +44 -0
  667. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +27 -0
  668. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +60 -0
  669. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +28 -0
  670. data/lib/datadog/tracing/contrib/status_code_matcher.rb +72 -0
  671. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +33 -0
  672. data/lib/datadog/tracing/contrib/stripe/ext.rb +26 -0
  673. data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
  674. data/lib/datadog/tracing/contrib/stripe/patcher.rb +28 -0
  675. data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
  676. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +35 -0
  677. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +28 -0
  678. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +25 -0
  679. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +102 -0
  680. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +41 -0
  681. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +35 -0
  682. data/lib/datadog/tracing/contrib/utils/database.rb +29 -0
  683. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +109 -0
  684. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +177 -0
  685. data/lib/datadog/tracing/contrib.rb +80 -0
  686. data/lib/datadog/tracing/correlation.rb +111 -0
  687. data/lib/datadog/tracing/diagnostics/ext.rb +34 -0
  688. data/lib/datadog/tracing/diagnostics/health.rb +40 -0
  689. data/lib/datadog/tracing/distributed/b3_multi.rb +72 -0
  690. data/lib/datadog/tracing/distributed/b3_single.rb +68 -0
  691. data/lib/datadog/tracing/distributed/datadog.rb +200 -0
  692. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +84 -0
  693. data/lib/datadog/tracing/distributed/fetcher.rb +21 -0
  694. data/lib/datadog/tracing/distributed/headers/ext.rb +34 -0
  695. data/lib/datadog/tracing/distributed/helpers.rb +65 -0
  696. data/lib/datadog/tracing/distributed/none.rb +18 -0
  697. data/lib/datadog/tracing/distributed/propagation.rb +126 -0
  698. data/lib/datadog/tracing/distributed/trace_context.rb +380 -0
  699. data/lib/datadog/tracing/event.rb +74 -0
  700. data/lib/datadog/tracing/flush.rb +96 -0
  701. data/lib/datadog/tracing/metadata/analytics.rb +26 -0
  702. data/lib/datadog/tracing/metadata/errors.rb +24 -0
  703. data/lib/datadog/tracing/metadata/ext.rb +188 -0
  704. data/lib/datadog/tracing/metadata/tagging.rb +129 -0
  705. data/lib/datadog/tracing/metadata.rb +20 -0
  706. data/lib/datadog/tracing/pipeline/span_filter.rb +46 -0
  707. data/lib/datadog/tracing/pipeline/span_processor.rb +39 -0
  708. data/lib/datadog/tracing/pipeline.rb +61 -0
  709. data/lib/datadog/tracing/propagation/http.rb +14 -0
  710. data/lib/datadog/tracing/runtime/metrics.rb +17 -0
  711. data/lib/datadog/tracing/sampling/all_sampler.rb +25 -0
  712. data/lib/datadog/tracing/sampling/ext.rb +56 -0
  713. data/lib/datadog/tracing/sampling/matcher.rb +68 -0
  714. data/lib/datadog/tracing/sampling/priority_sampler.rb +165 -0
  715. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +94 -0
  716. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +62 -0
  717. data/lib/datadog/tracing/sampling/rate_limiter.rb +186 -0
  718. data/lib/datadog/tracing/sampling/rate_sampler.rb +68 -0
  719. data/lib/datadog/tracing/sampling/rule.rb +72 -0
  720. data/lib/datadog/tracing/sampling/rule_sampler.rb +128 -0
  721. data/lib/datadog/tracing/sampling/sampler.rb +42 -0
  722. data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
  723. data/lib/datadog/tracing/sampling/span/matcher.rb +89 -0
  724. data/lib/datadog/tracing/sampling/span/rule.rb +82 -0
  725. data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
  726. data/lib/datadog/tracing/sampling/span/sampler.rb +77 -0
  727. data/lib/datadog/tracing/span.rb +214 -0
  728. data/lib/datadog/tracing/span_operation.rb +517 -0
  729. data/lib/datadog/tracing/sync_writer.rb +67 -0
  730. data/lib/datadog/tracing/trace_digest.rb +146 -0
  731. data/lib/datadog/tracing/trace_operation.rb +473 -0
  732. data/lib/datadog/tracing/trace_segment.rb +217 -0
  733. data/lib/datadog/tracing/tracer.rb +530 -0
  734. data/lib/datadog/tracing/utils.rb +83 -0
  735. data/lib/datadog/tracing/workers/trace_writer.rb +192 -0
  736. data/lib/datadog/tracing/workers.rb +121 -0
  737. data/lib/datadog/tracing/writer.rb +183 -0
  738. data/lib/datadog/tracing.rb +142 -0
  739. data/lib/ddtrace/auto_instrument.rb +15 -2
  740. data/lib/ddtrace/auto_instrument_base.rb +2 -0
  741. data/lib/ddtrace/profiling/preload.rb +2 -3
  742. data/lib/ddtrace/transport/ext.rb +39 -0
  743. data/lib/ddtrace/transport/http/adapters/net.rb +29 -6
  744. data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
  745. data/lib/ddtrace/transport/http/adapters/test.rb +5 -3
  746. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +24 -13
  747. data/lib/ddtrace/transport/http/api/endpoint.rb +2 -0
  748. data/lib/ddtrace/transport/http/api/fallbacks.rb +2 -0
  749. data/lib/ddtrace/transport/http/api/instance.rb +2 -0
  750. data/lib/ddtrace/transport/http/api/map.rb +3 -1
  751. data/lib/ddtrace/transport/http/api/spec.rb +2 -0
  752. data/lib/ddtrace/transport/http/api.rb +7 -14
  753. data/lib/ddtrace/transport/http/builder.rb +17 -10
  754. data/lib/ddtrace/transport/http/client.rb +5 -3
  755. data/lib/ddtrace/transport/http/env.rb +2 -0
  756. data/lib/ddtrace/transport/http/response.rb +37 -5
  757. data/lib/ddtrace/transport/http/statistics.rb +3 -3
  758. data/lib/ddtrace/transport/http/traces.rb +9 -7
  759. data/lib/ddtrace/transport/http.rb +40 -39
  760. data/lib/ddtrace/transport/io/client.rb +5 -3
  761. data/lib/ddtrace/transport/io/response.rb +3 -1
  762. data/lib/ddtrace/transport/io/traces.rb +7 -5
  763. data/lib/ddtrace/transport/io.rb +6 -4
  764. data/lib/ddtrace/transport/parcel.rb +3 -0
  765. data/lib/ddtrace/transport/request.rb +3 -1
  766. data/lib/ddtrace/transport/serializable_trace.rb +122 -0
  767. data/lib/ddtrace/transport/statistics.rb +7 -4
  768. data/lib/ddtrace/transport/trace_formatter.rb +198 -0
  769. data/lib/ddtrace/transport/traces.rb +22 -11
  770. data/lib/ddtrace/version.rb +20 -17
  771. data/lib/ddtrace.rb +9 -82
  772. metadata +784 -1026
  773. data/.circleci/config.yml +0 -894
  774. data/.circleci/images/primary/Dockerfile-2.0.0 +0 -83
  775. data/.circleci/images/primary/Dockerfile-2.1.10 +0 -83
  776. data/.circleci/images/primary/Dockerfile-2.2.10 +0 -83
  777. data/.circleci/images/primary/Dockerfile-2.3.8 +0 -85
  778. data/.circleci/images/primary/Dockerfile-2.4.6 +0 -83
  779. data/.circleci/images/primary/Dockerfile-2.5.6 +0 -83
  780. data/.circleci/images/primary/Dockerfile-2.6.4 +0 -83
  781. data/.circleci/images/primary/Dockerfile-2.7.0 +0 -83
  782. data/.circleci/images/primary/Dockerfile-3.0.0 +0 -73
  783. data/.circleci/images/primary/Dockerfile-jruby-9.2-latest +0 -88
  784. data/.circleci/images/primary/Dockerfile-jruby-9.2.0.0 +0 -73
  785. data/.circleci/images/primary/Dockerfile-truffleruby-21.0.0 +0 -73
  786. data/.dockerignore +0 -0
  787. data/.env +0 -26
  788. data/.github/CODEOWNERS +0 -1
  789. data/.github/workflows/add-milestone-to-pull-requests.yml +0 -42
  790. data/.github/workflows/create-next-milestone.yml +0 -20
  791. data/.gitignore +0 -62
  792. data/.gitlab-ci.yml +0 -27
  793. data/.rspec +0 -1
  794. data/.rubocop.yml +0 -359
  795. data/.rubocop_todo.yml +0 -438
  796. data/.simplecov +0 -47
  797. data/.yardopts +0 -5
  798. data/Appraisals +0 -1429
  799. data/CONTRIBUTING.md +0 -85
  800. data/Gemfile +0 -69
  801. data/Rakefile +0 -994
  802. data/benchmarks/postgres_database.yml +0 -9
  803. data/benchmarks/profiler_sample_loop.rb +0 -69
  804. data/benchmarks/sidekiq_test.rb +0 -154
  805. data/ddtrace.gemspec +0 -44
  806. data/docker-compose.yml +0 -444
  807. data/docs/DevelopmentGuide.md +0 -249
  808. data/docs/GettingStarted.md +0 -2482
  809. data/docs/ProfilingDevelopment.md +0 -88
  810. data/gemfiles/jruby_9.2.0.0_contrib.gemfile +0 -79
  811. data/gemfiles/jruby_9.2.0.0_contrib.gemfile.lock +0 -1518
  812. data/gemfiles/jruby_9.2.0.0_contrib_old.gemfile +0 -35
  813. data/gemfiles/jruby_9.2.0.0_contrib_old.gemfile.lock +0 -157
  814. data/gemfiles/jruby_9.2.0.0_core_old.gemfile +0 -34
  815. data/gemfiles/jruby_9.2.0.0_core_old.gemfile.lock +0 -153
  816. data/gemfiles/jruby_9.2.0.0_cucumber3.gemfile +0 -35
  817. data/gemfiles/jruby_9.2.0.0_cucumber3.gemfile.lock +0 -174
  818. data/gemfiles/jruby_9.2.0.0_cucumber4.gemfile +0 -35
  819. data/gemfiles/jruby_9.2.0.0_cucumber4.gemfile.lock +0 -206
  820. data/gemfiles/jruby_9.2.0.0_cucumber5.gemfile +0 -35
  821. data/gemfiles/jruby_9.2.0.0_cucumber5.gemfile.lock +0 -206
  822. data/gemfiles/jruby_9.2.0.0_rails5_mysql2.gemfile +0 -40
  823. data/gemfiles/jruby_9.2.0.0_rails5_mysql2.gemfile.lock +0 -271
  824. data/gemfiles/jruby_9.2.0.0_rails5_postgres.gemfile +0 -40
  825. data/gemfiles/jruby_9.2.0.0_rails5_postgres.gemfile.lock +0 -271
  826. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis.gemfile +0 -41
  827. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis.gemfile.lock +0 -273
  828. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis_activesupport.gemfile +0 -41
  829. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis_activesupport.gemfile.lock +0 -273
  830. data/gemfiles/jruby_9.2.0.0_rails5_postgres_sidekiq.gemfile +0 -42
  831. data/gemfiles/jruby_9.2.0.0_rails5_postgres_sidekiq.gemfile.lock +0 -279
  832. data/gemfiles/jruby_9.2.0.0_rails61_mysql2.gemfile +0 -40
  833. data/gemfiles/jruby_9.2.0.0_rails61_mysql2.gemfile.lock +0 -290
  834. data/gemfiles/jruby_9.2.0.0_rails61_postgres.gemfile +0 -40
  835. data/gemfiles/jruby_9.2.0.0_rails61_postgres.gemfile.lock +0 -290
  836. data/gemfiles/jruby_9.2.0.0_rails61_postgres_redis.gemfile +0 -41
  837. data/gemfiles/jruby_9.2.0.0_rails61_postgres_redis.gemfile.lock +0 -292
  838. data/gemfiles/jruby_9.2.0.0_rails61_postgres_sidekiq.gemfile +0 -41
  839. data/gemfiles/jruby_9.2.0.0_rails61_postgres_sidekiq.gemfile.lock +0 -297
  840. data/gemfiles/jruby_9.2.0.0_rails6_mysql2.gemfile +0 -40
  841. data/gemfiles/jruby_9.2.0.0_rails6_mysql2.gemfile.lock +0 -287
  842. data/gemfiles/jruby_9.2.0.0_rails6_postgres.gemfile +0 -40
  843. data/gemfiles/jruby_9.2.0.0_rails6_postgres.gemfile.lock +0 -287
  844. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis.gemfile +0 -41
  845. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis.gemfile.lock +0 -289
  846. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis_activesupport.gemfile +0 -41
  847. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis_activesupport.gemfile.lock +0 -289
  848. data/gemfiles/jruby_9.2.0.0_rails6_postgres_sidekiq.gemfile +0 -42
  849. data/gemfiles/jruby_9.2.0.0_rails6_postgres_sidekiq.gemfile.lock +0 -295
  850. data/gemfiles/jruby_9.2.0.0_resque2_redis3.gemfile +0 -36
  851. data/gemfiles/jruby_9.2.0.0_resque2_redis3.gemfile.lock +0 -180
  852. data/gemfiles/jruby_9.2.0.0_resque2_redis4.gemfile +0 -36
  853. data/gemfiles/jruby_9.2.0.0_resque2_redis4.gemfile.lock +0 -180
  854. data/gemfiles/jruby_9.2.11.1_contrib.gemfile +0 -79
  855. data/gemfiles/jruby_9.2.11.1_contrib.gemfile.lock +0 -1518
  856. data/gemfiles/jruby_9.2.11.1_contrib_old.gemfile +0 -35
  857. data/gemfiles/jruby_9.2.11.1_contrib_old.gemfile.lock +0 -157
  858. data/gemfiles/jruby_9.2.11.1_core_old.gemfile +0 -34
  859. data/gemfiles/jruby_9.2.11.1_core_old.gemfile.lock +0 -153
  860. data/gemfiles/jruby_9.2.11.1_cucumber3.gemfile +0 -35
  861. data/gemfiles/jruby_9.2.11.1_cucumber3.gemfile.lock +0 -174
  862. data/gemfiles/jruby_9.2.11.1_cucumber4.gemfile +0 -35
  863. data/gemfiles/jruby_9.2.11.1_cucumber4.gemfile.lock +0 -206
  864. data/gemfiles/jruby_9.2.11.1_cucumber5.gemfile +0 -35
  865. data/gemfiles/jruby_9.2.11.1_cucumber5.gemfile.lock +0 -206
  866. data/gemfiles/jruby_9.2.11.1_rails5_mysql2.gemfile +0 -40
  867. data/gemfiles/jruby_9.2.11.1_rails5_mysql2.gemfile.lock +0 -271
  868. data/gemfiles/jruby_9.2.11.1_rails5_postgres.gemfile +0 -40
  869. data/gemfiles/jruby_9.2.11.1_rails5_postgres.gemfile.lock +0 -271
  870. data/gemfiles/jruby_9.2.11.1_rails5_postgres_redis.gemfile +0 -41
  871. data/gemfiles/jruby_9.2.11.1_rails5_postgres_redis.gemfile.lock +0 -273
  872. data/gemfiles/jruby_9.2.11.1_rails5_postgres_redis_activesupport.gemfile +0 -41
  873. data/gemfiles/jruby_9.2.11.1_rails5_postgres_redis_activesupport.gemfile.lock +0 -273
  874. data/gemfiles/jruby_9.2.11.1_rails5_postgres_sidekiq.gemfile +0 -42
  875. data/gemfiles/jruby_9.2.11.1_rails5_postgres_sidekiq.gemfile.lock +0 -279
  876. data/gemfiles/jruby_9.2.11.1_rails61_mysql2.gemfile +0 -40
  877. data/gemfiles/jruby_9.2.11.1_rails61_mysql2.gemfile.lock +0 -290
  878. data/gemfiles/jruby_9.2.11.1_rails61_postgres.gemfile +0 -40
  879. data/gemfiles/jruby_9.2.11.1_rails61_postgres.gemfile.lock +0 -290
  880. data/gemfiles/jruby_9.2.11.1_rails61_postgres_redis.gemfile +0 -41
  881. data/gemfiles/jruby_9.2.11.1_rails61_postgres_redis.gemfile.lock +0 -292
  882. data/gemfiles/jruby_9.2.11.1_rails61_postgres_sidekiq.gemfile +0 -41
  883. data/gemfiles/jruby_9.2.11.1_rails61_postgres_sidekiq.gemfile.lock +0 -297
  884. data/gemfiles/jruby_9.2.11.1_rails6_mysql2.gemfile +0 -40
  885. data/gemfiles/jruby_9.2.11.1_rails6_mysql2.gemfile.lock +0 -287
  886. data/gemfiles/jruby_9.2.11.1_rails6_postgres.gemfile +0 -40
  887. data/gemfiles/jruby_9.2.11.1_rails6_postgres.gemfile.lock +0 -287
  888. data/gemfiles/jruby_9.2.11.1_rails6_postgres_redis.gemfile +0 -41
  889. data/gemfiles/jruby_9.2.11.1_rails6_postgres_redis.gemfile.lock +0 -289
  890. data/gemfiles/jruby_9.2.11.1_rails6_postgres_redis_activesupport.gemfile +0 -41
  891. data/gemfiles/jruby_9.2.11.1_rails6_postgres_redis_activesupport.gemfile.lock +0 -289
  892. data/gemfiles/jruby_9.2.11.1_rails6_postgres_sidekiq.gemfile +0 -42
  893. data/gemfiles/jruby_9.2.11.1_rails6_postgres_sidekiq.gemfile.lock +0 -295
  894. data/gemfiles/jruby_9.2.11.1_resque2_redis3.gemfile +0 -36
  895. data/gemfiles/jruby_9.2.11.1_resque2_redis3.gemfile.lock +0 -180
  896. data/gemfiles/jruby_9.2.11.1_resque2_redis4.gemfile +0 -36
  897. data/gemfiles/jruby_9.2.11.1_resque2_redis4.gemfile.lock +0 -180
  898. data/gemfiles/ruby_2.0.0_contrib_old.gemfile +0 -64
  899. data/gemfiles/ruby_2.0.0_contrib_old.gemfile.lock +0 -290
  900. data/gemfiles/ruby_2.0.0_core_old.gemfile +0 -33
  901. data/gemfiles/ruby_2.0.0_core_old.gemfile.lock +0 -118
  902. data/gemfiles/ruby_2.0.0_rails30_postgres.gemfile +0 -39
  903. data/gemfiles/ruby_2.0.0_rails30_postgres.gemfile.lock +0 -196
  904. data/gemfiles/ruby_2.0.0_rails30_postgres_sidekiq.gemfile +0 -40
  905. data/gemfiles/ruby_2.0.0_rails30_postgres_sidekiq.gemfile.lock +0 -205
  906. data/gemfiles/ruby_2.0.0_rails32_mysql2.gemfile +0 -43
  907. data/gemfiles/ruby_2.0.0_rails32_mysql2.gemfile.lock +0 -217
  908. data/gemfiles/ruby_2.0.0_rails32_postgres.gemfile +0 -39
  909. data/gemfiles/ruby_2.0.0_rails32_postgres.gemfile.lock +0 -204
  910. data/gemfiles/ruby_2.0.0_rails32_postgres_redis.gemfile +0 -41
  911. data/gemfiles/ruby_2.0.0_rails32_postgres_redis.gemfile.lock +0 -223
  912. data/gemfiles/ruby_2.0.0_rails32_postgres_sidekiq.gemfile +0 -40
  913. data/gemfiles/ruby_2.0.0_rails32_postgres_sidekiq.gemfile.lock +0 -213
  914. data/gemfiles/ruby_2.1.10_contrib_old.gemfile +0 -66
  915. data/gemfiles/ruby_2.1.10_contrib_old.gemfile.lock +0 -305
  916. data/gemfiles/ruby_2.1.10_core_old.gemfile +0 -33
  917. data/gemfiles/ruby_2.1.10_core_old.gemfile.lock +0 -118
  918. data/gemfiles/ruby_2.1.10_rails30_postgres.gemfile +0 -39
  919. data/gemfiles/ruby_2.1.10_rails30_postgres.gemfile.lock +0 -196
  920. data/gemfiles/ruby_2.1.10_rails30_postgres_sidekiq.gemfile +0 -40
  921. data/gemfiles/ruby_2.1.10_rails30_postgres_sidekiq.gemfile.lock +0 -205
  922. data/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile +0 -42
  923. data/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock +0 -215
  924. data/gemfiles/ruby_2.1.10_rails32_postgres.gemfile +0 -39
  925. data/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock +0 -204
  926. data/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile +0 -41
  927. data/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock +0 -223
  928. data/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile +0 -40
  929. data/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock +0 -213
  930. data/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile +0 -38
  931. data/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock +0 -218
  932. data/gemfiles/ruby_2.1.10_rails4_postgres.gemfile +0 -38
  933. data/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock +0 -218
  934. data/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile +0 -40
  935. data/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock +0 -237
  936. data/gemfiles/ruby_2.2.10_contrib.gemfile +0 -73
  937. data/gemfiles/ruby_2.2.10_contrib.gemfile.lock +0 -1450
  938. data/gemfiles/ruby_2.2.10_core_old.gemfile +0 -33
  939. data/gemfiles/ruby_2.2.10_core_old.gemfile.lock +0 -118
  940. data/gemfiles/ruby_2.2.10_rails30_postgres.gemfile +0 -39
  941. data/gemfiles/ruby_2.2.10_rails30_postgres.gemfile.lock +0 -196
  942. data/gemfiles/ruby_2.2.10_rails30_postgres_sidekiq.gemfile +0 -40
  943. data/gemfiles/ruby_2.2.10_rails30_postgres_sidekiq.gemfile.lock +0 -205
  944. data/gemfiles/ruby_2.2.10_rails32_mysql2.gemfile +0 -41
  945. data/gemfiles/ruby_2.2.10_rails32_mysql2.gemfile.lock +0 -212
  946. data/gemfiles/ruby_2.2.10_rails32_postgres.gemfile +0 -39
  947. data/gemfiles/ruby_2.2.10_rails32_postgres.gemfile.lock +0 -204
  948. data/gemfiles/ruby_2.2.10_rails32_postgres_redis.gemfile +0 -41
  949. data/gemfiles/ruby_2.2.10_rails32_postgres_redis.gemfile.lock +0 -223
  950. data/gemfiles/ruby_2.2.10_rails32_postgres_sidekiq.gemfile +0 -40
  951. data/gemfiles/ruby_2.2.10_rails32_postgres_sidekiq.gemfile.lock +0 -213
  952. data/gemfiles/ruby_2.2.10_rails4_mysql2.gemfile +0 -38
  953. data/gemfiles/ruby_2.2.10_rails4_mysql2.gemfile.lock +0 -218
  954. data/gemfiles/ruby_2.2.10_rails4_postgres.gemfile +0 -38
  955. data/gemfiles/ruby_2.2.10_rails4_postgres.gemfile.lock +0 -218
  956. data/gemfiles/ruby_2.2.10_rails4_postgres_redis.gemfile +0 -40
  957. data/gemfiles/ruby_2.2.10_rails4_postgres_redis.gemfile.lock +0 -237
  958. data/gemfiles/ruby_2.2.10_rails4_postgres_sidekiq.gemfile +0 -40
  959. data/gemfiles/ruby_2.2.10_rails4_postgres_sidekiq.gemfile.lock +0 -229
  960. data/gemfiles/ruby_2.2.10_rails5_mysql2.gemfile +0 -38
  961. data/gemfiles/ruby_2.2.10_rails5_mysql2.gemfile.lock +0 -234
  962. data/gemfiles/ruby_2.2.10_rails5_postgres.gemfile +0 -38
  963. data/gemfiles/ruby_2.2.10_rails5_postgres.gemfile.lock +0 -234
  964. data/gemfiles/ruby_2.2.10_rails5_postgres_redis.gemfile +0 -39
  965. data/gemfiles/ruby_2.2.10_rails5_postgres_redis.gemfile.lock +0 -236
  966. data/gemfiles/ruby_2.2.10_rails5_postgres_redis_activesupport.gemfile +0 -39
  967. data/gemfiles/ruby_2.2.10_rails5_postgres_redis_activesupport.gemfile.lock +0 -236
  968. data/gemfiles/ruby_2.2.10_rails5_postgres_sidekiq.gemfile +0 -40
  969. data/gemfiles/ruby_2.2.10_rails5_postgres_sidekiq.gemfile.lock +0 -245
  970. data/gemfiles/ruby_2.3.8_contrib.gemfile +0 -73
  971. data/gemfiles/ruby_2.3.8_contrib.gemfile.lock +0 -1459
  972. data/gemfiles/ruby_2.3.8_contrib_old.gemfile +0 -34
  973. data/gemfiles/ruby_2.3.8_contrib_old.gemfile.lock +0 -127
  974. data/gemfiles/ruby_2.3.8_core_old.gemfile +0 -33
  975. data/gemfiles/ruby_2.3.8_core_old.gemfile.lock +0 -123
  976. data/gemfiles/ruby_2.3.8_cucumber3.gemfile +0 -34
  977. data/gemfiles/ruby_2.3.8_cucumber3.gemfile.lock +0 -144
  978. data/gemfiles/ruby_2.3.8_cucumber4.gemfile +0 -34
  979. data/gemfiles/ruby_2.3.8_cucumber4.gemfile.lock +0 -174
  980. data/gemfiles/ruby_2.3.8_rails30_postgres.gemfile +0 -39
  981. data/gemfiles/ruby_2.3.8_rails30_postgres.gemfile.lock +0 -201
  982. data/gemfiles/ruby_2.3.8_rails30_postgres_sidekiq.gemfile +0 -40
  983. data/gemfiles/ruby_2.3.8_rails30_postgres_sidekiq.gemfile.lock +0 -210
  984. data/gemfiles/ruby_2.3.8_rails32_mysql2.gemfile +0 -41
  985. data/gemfiles/ruby_2.3.8_rails32_mysql2.gemfile.lock +0 -217
  986. data/gemfiles/ruby_2.3.8_rails32_postgres.gemfile +0 -39
  987. data/gemfiles/ruby_2.3.8_rails32_postgres.gemfile.lock +0 -209
  988. data/gemfiles/ruby_2.3.8_rails32_postgres_redis.gemfile +0 -41
  989. data/gemfiles/ruby_2.3.8_rails32_postgres_redis.gemfile.lock +0 -228
  990. data/gemfiles/ruby_2.3.8_rails32_postgres_sidekiq.gemfile +0 -40
  991. data/gemfiles/ruby_2.3.8_rails32_postgres_sidekiq.gemfile.lock +0 -218
  992. data/gemfiles/ruby_2.3.8_rails4_mysql2.gemfile +0 -38
  993. data/gemfiles/ruby_2.3.8_rails4_mysql2.gemfile.lock +0 -223
  994. data/gemfiles/ruby_2.3.8_rails4_postgres.gemfile +0 -38
  995. data/gemfiles/ruby_2.3.8_rails4_postgres.gemfile.lock +0 -223
  996. data/gemfiles/ruby_2.3.8_rails4_postgres_redis.gemfile +0 -40
  997. data/gemfiles/ruby_2.3.8_rails4_postgres_redis.gemfile.lock +0 -242
  998. data/gemfiles/ruby_2.3.8_rails4_postgres_sidekiq.gemfile +0 -40
  999. data/gemfiles/ruby_2.3.8_rails4_postgres_sidekiq.gemfile.lock +0 -234
  1000. data/gemfiles/ruby_2.3.8_rails5_mysql2.gemfile +0 -37
  1001. data/gemfiles/ruby_2.3.8_rails5_mysql2.gemfile.lock +0 -234
  1002. data/gemfiles/ruby_2.3.8_rails5_postgres.gemfile +0 -37
  1003. data/gemfiles/ruby_2.3.8_rails5_postgres.gemfile.lock +0 -234
  1004. data/gemfiles/ruby_2.3.8_rails5_postgres_redis.gemfile +0 -38
  1005. data/gemfiles/ruby_2.3.8_rails5_postgres_redis.gemfile.lock +0 -236
  1006. data/gemfiles/ruby_2.3.8_rails5_postgres_redis_activesupport.gemfile +0 -38
  1007. data/gemfiles/ruby_2.3.8_rails5_postgres_redis_activesupport.gemfile.lock +0 -236
  1008. data/gemfiles/ruby_2.3.8_rails5_postgres_sidekiq.gemfile +0 -39
  1009. data/gemfiles/ruby_2.3.8_rails5_postgres_sidekiq.gemfile.lock +0 -245
  1010. data/gemfiles/ruby_2.3.8_resque2_redis3.gemfile +0 -35
  1011. data/gemfiles/ruby_2.3.8_resque2_redis3.gemfile.lock +0 -150
  1012. data/gemfiles/ruby_2.3.8_resque2_redis4.gemfile +0 -35
  1013. data/gemfiles/ruby_2.3.8_resque2_redis4.gemfile.lock +0 -150
  1014. data/gemfiles/ruby_2.4.6_contrib.gemfile +0 -78
  1015. data/gemfiles/ruby_2.4.6_contrib.gemfile.lock +0 -1513
  1016. data/gemfiles/ruby_2.4.6_contrib_old.gemfile +0 -38
  1017. data/gemfiles/ruby_2.4.6_contrib_old.gemfile.lock +0 -155
  1018. data/gemfiles/ruby_2.4.6_core_old.gemfile +0 -37
  1019. data/gemfiles/ruby_2.4.6_core_old.gemfile.lock +0 -151
  1020. data/gemfiles/ruby_2.4.6_cucumber3.gemfile +0 -38
  1021. data/gemfiles/ruby_2.4.6_cucumber3.gemfile.lock +0 -172
  1022. data/gemfiles/ruby_2.4.6_cucumber4.gemfile +0 -38
  1023. data/gemfiles/ruby_2.4.6_cucumber4.gemfile.lock +0 -202
  1024. data/gemfiles/ruby_2.4.6_rails5_mysql2.gemfile +0 -41
  1025. data/gemfiles/ruby_2.4.6_rails5_mysql2.gemfile.lock +0 -262
  1026. data/gemfiles/ruby_2.4.6_rails5_postgres.gemfile +0 -41
  1027. data/gemfiles/ruby_2.4.6_rails5_postgres.gemfile.lock +0 -262
  1028. data/gemfiles/ruby_2.4.6_rails5_postgres_redis.gemfile +0 -42
  1029. data/gemfiles/ruby_2.4.6_rails5_postgres_redis.gemfile.lock +0 -264
  1030. data/gemfiles/ruby_2.4.6_rails5_postgres_redis_activesupport.gemfile +0 -42
  1031. data/gemfiles/ruby_2.4.6_rails5_postgres_redis_activesupport.gemfile.lock +0 -264
  1032. data/gemfiles/ruby_2.4.6_rails5_postgres_sidekiq.gemfile +0 -43
  1033. data/gemfiles/ruby_2.4.6_rails5_postgres_sidekiq.gemfile.lock +0 -273
  1034. data/gemfiles/ruby_2.4.6_resque2_redis3.gemfile +0 -39
  1035. data/gemfiles/ruby_2.4.6_resque2_redis3.gemfile.lock +0 -178
  1036. data/gemfiles/ruby_2.4.6_resque2_redis4.gemfile +0 -39
  1037. data/gemfiles/ruby_2.4.6_resque2_redis4.gemfile.lock +0 -178
  1038. data/gemfiles/ruby_2.5.6_contrib.gemfile +0 -83
  1039. data/gemfiles/ruby_2.5.6_contrib.gemfile.lock +0 -1526
  1040. data/gemfiles/ruby_2.5.6_contrib_old.gemfile +0 -39
  1041. data/gemfiles/ruby_2.5.6_contrib_old.gemfile.lock +0 -165
  1042. data/gemfiles/ruby_2.5.6_core_old.gemfile +0 -38
  1043. data/gemfiles/ruby_2.5.6_core_old.gemfile.lock +0 -161
  1044. data/gemfiles/ruby_2.5.6_cucumber3.gemfile +0 -39
  1045. data/gemfiles/ruby_2.5.6_cucumber3.gemfile.lock +0 -182
  1046. data/gemfiles/ruby_2.5.6_cucumber4.gemfile +0 -39
  1047. data/gemfiles/ruby_2.5.6_cucumber4.gemfile.lock +0 -214
  1048. data/gemfiles/ruby_2.5.6_cucumber5.gemfile +0 -39
  1049. data/gemfiles/ruby_2.5.6_cucumber5.gemfile.lock +0 -214
  1050. data/gemfiles/ruby_2.5.6_rails5_mysql2.gemfile +0 -44
  1051. data/gemfiles/ruby_2.5.6_rails5_mysql2.gemfile.lock +0 -276
  1052. data/gemfiles/ruby_2.5.6_rails5_postgres.gemfile +0 -44
  1053. data/gemfiles/ruby_2.5.6_rails5_postgres.gemfile.lock +0 -276
  1054. data/gemfiles/ruby_2.5.6_rails5_postgres_redis.gemfile +0 -45
  1055. data/gemfiles/ruby_2.5.6_rails5_postgres_redis.gemfile.lock +0 -278
  1056. data/gemfiles/ruby_2.5.6_rails5_postgres_redis_activesupport.gemfile +0 -45
  1057. data/gemfiles/ruby_2.5.6_rails5_postgres_redis_activesupport.gemfile.lock +0 -278
  1058. data/gemfiles/ruby_2.5.6_rails5_postgres_sidekiq.gemfile +0 -46
  1059. data/gemfiles/ruby_2.5.6_rails5_postgres_sidekiq.gemfile.lock +0 -284
  1060. data/gemfiles/ruby_2.5.6_rails61_mysql2.gemfile +0 -44
  1061. data/gemfiles/ruby_2.5.6_rails61_mysql2.gemfile.lock +0 -295
  1062. data/gemfiles/ruby_2.5.6_rails61_postgres.gemfile +0 -44
  1063. data/gemfiles/ruby_2.5.6_rails61_postgres.gemfile.lock +0 -295
  1064. data/gemfiles/ruby_2.5.6_rails61_postgres_redis.gemfile +0 -45
  1065. data/gemfiles/ruby_2.5.6_rails61_postgres_redis.gemfile.lock +0 -297
  1066. data/gemfiles/ruby_2.5.6_rails61_postgres_sidekiq.gemfile +0 -45
  1067. data/gemfiles/ruby_2.5.6_rails61_postgres_sidekiq.gemfile.lock +0 -302
  1068. data/gemfiles/ruby_2.5.6_rails6_mysql2.gemfile +0 -44
  1069. data/gemfiles/ruby_2.5.6_rails6_mysql2.gemfile.lock +0 -292
  1070. data/gemfiles/ruby_2.5.6_rails6_postgres.gemfile +0 -44
  1071. data/gemfiles/ruby_2.5.6_rails6_postgres.gemfile.lock +0 -292
  1072. data/gemfiles/ruby_2.5.6_rails6_postgres_redis.gemfile +0 -45
  1073. data/gemfiles/ruby_2.5.6_rails6_postgres_redis.gemfile.lock +0 -294
  1074. data/gemfiles/ruby_2.5.6_rails6_postgres_redis_activesupport.gemfile +0 -45
  1075. data/gemfiles/ruby_2.5.6_rails6_postgres_redis_activesupport.gemfile.lock +0 -294
  1076. data/gemfiles/ruby_2.5.6_rails6_postgres_sidekiq.gemfile +0 -46
  1077. data/gemfiles/ruby_2.5.6_rails6_postgres_sidekiq.gemfile.lock +0 -300
  1078. data/gemfiles/ruby_2.5.6_resque2_redis3.gemfile +0 -40
  1079. data/gemfiles/ruby_2.5.6_resque2_redis3.gemfile.lock +0 -188
  1080. data/gemfiles/ruby_2.5.6_resque2_redis4.gemfile +0 -40
  1081. data/gemfiles/ruby_2.5.6_resque2_redis4.gemfile.lock +0 -188
  1082. data/gemfiles/ruby_2.6.4_contrib.gemfile +0 -79
  1083. data/gemfiles/ruby_2.6.4_contrib.gemfile.lock +0 -1524
  1084. data/gemfiles/ruby_2.6.4_contrib_old.gemfile +0 -39
  1085. data/gemfiles/ruby_2.6.4_contrib_old.gemfile.lock +0 -167
  1086. data/gemfiles/ruby_2.6.4_core_old.gemfile +0 -38
  1087. data/gemfiles/ruby_2.6.4_core_old.gemfile.lock +0 -163
  1088. data/gemfiles/ruby_2.6.4_cucumber3.gemfile +0 -39
  1089. data/gemfiles/ruby_2.6.4_cucumber3.gemfile.lock +0 -184
  1090. data/gemfiles/ruby_2.6.4_cucumber4.gemfile +0 -39
  1091. data/gemfiles/ruby_2.6.4_cucumber4.gemfile.lock +0 -216
  1092. data/gemfiles/ruby_2.6.4_cucumber5.gemfile +0 -39
  1093. data/gemfiles/ruby_2.6.4_cucumber5.gemfile.lock +0 -216
  1094. data/gemfiles/ruby_2.6.4_rails5_mysql2.gemfile +0 -42
  1095. data/gemfiles/ruby_2.6.4_rails5_mysql2.gemfile.lock +0 -276
  1096. data/gemfiles/ruby_2.6.4_rails5_postgres.gemfile +0 -42
  1097. data/gemfiles/ruby_2.6.4_rails5_postgres.gemfile.lock +0 -276
  1098. data/gemfiles/ruby_2.6.4_rails5_postgres_redis.gemfile +0 -43
  1099. data/gemfiles/ruby_2.6.4_rails5_postgres_redis.gemfile.lock +0 -278
  1100. data/gemfiles/ruby_2.6.4_rails5_postgres_redis_activesupport.gemfile +0 -43
  1101. data/gemfiles/ruby_2.6.4_rails5_postgres_redis_activesupport.gemfile.lock +0 -278
  1102. data/gemfiles/ruby_2.6.4_rails5_postgres_sidekiq.gemfile +0 -44
  1103. data/gemfiles/ruby_2.6.4_rails5_postgres_sidekiq.gemfile.lock +0 -284
  1104. data/gemfiles/ruby_2.6.4_rails61_mysql2.gemfile +0 -42
  1105. data/gemfiles/ruby_2.6.4_rails61_mysql2.gemfile.lock +0 -295
  1106. data/gemfiles/ruby_2.6.4_rails61_postgres.gemfile +0 -42
  1107. data/gemfiles/ruby_2.6.4_rails61_postgres.gemfile.lock +0 -295
  1108. data/gemfiles/ruby_2.6.4_rails61_postgres_redis.gemfile +0 -43
  1109. data/gemfiles/ruby_2.6.4_rails61_postgres_redis.gemfile.lock +0 -297
  1110. data/gemfiles/ruby_2.6.4_rails61_postgres_sidekiq.gemfile +0 -43
  1111. data/gemfiles/ruby_2.6.4_rails61_postgres_sidekiq.gemfile.lock +0 -302
  1112. data/gemfiles/ruby_2.6.4_rails6_mysql2.gemfile +0 -42
  1113. data/gemfiles/ruby_2.6.4_rails6_mysql2.gemfile.lock +0 -292
  1114. data/gemfiles/ruby_2.6.4_rails6_postgres.gemfile +0 -42
  1115. data/gemfiles/ruby_2.6.4_rails6_postgres.gemfile.lock +0 -292
  1116. data/gemfiles/ruby_2.6.4_rails6_postgres_redis.gemfile +0 -43
  1117. data/gemfiles/ruby_2.6.4_rails6_postgres_redis.gemfile.lock +0 -294
  1118. data/gemfiles/ruby_2.6.4_rails6_postgres_redis_activesupport.gemfile +0 -43
  1119. data/gemfiles/ruby_2.6.4_rails6_postgres_redis_activesupport.gemfile.lock +0 -294
  1120. data/gemfiles/ruby_2.6.4_rails6_postgres_sidekiq.gemfile +0 -44
  1121. data/gemfiles/ruby_2.6.4_rails6_postgres_sidekiq.gemfile.lock +0 -300
  1122. data/gemfiles/ruby_2.6.4_resque2_redis3.gemfile +0 -40
  1123. data/gemfiles/ruby_2.6.4_resque2_redis3.gemfile.lock +0 -190
  1124. data/gemfiles/ruby_2.6.4_resque2_redis4.gemfile +0 -40
  1125. data/gemfiles/ruby_2.6.4_resque2_redis4.gemfile.lock +0 -190
  1126. data/gemfiles/ruby_2.7.0_contrib.gemfile +0 -78
  1127. data/gemfiles/ruby_2.7.0_contrib.gemfile.lock +0 -1523
  1128. data/gemfiles/ruby_2.7.0_contrib_old.gemfile +0 -39
  1129. data/gemfiles/ruby_2.7.0_contrib_old.gemfile.lock +0 -167
  1130. data/gemfiles/ruby_2.7.0_core_old.gemfile +0 -38
  1131. data/gemfiles/ruby_2.7.0_core_old.gemfile.lock +0 -163
  1132. data/gemfiles/ruby_2.7.0_cucumber3.gemfile +0 -39
  1133. data/gemfiles/ruby_2.7.0_cucumber3.gemfile.lock +0 -184
  1134. data/gemfiles/ruby_2.7.0_cucumber4.gemfile +0 -39
  1135. data/gemfiles/ruby_2.7.0_cucumber4.gemfile.lock +0 -216
  1136. data/gemfiles/ruby_2.7.0_cucumber5.gemfile +0 -39
  1137. data/gemfiles/ruby_2.7.0_cucumber5.gemfile.lock +0 -216
  1138. data/gemfiles/ruby_2.7.0_rails5_mysql2.gemfile +0 -42
  1139. data/gemfiles/ruby_2.7.0_rails5_mysql2.gemfile.lock +0 -276
  1140. data/gemfiles/ruby_2.7.0_rails5_postgres.gemfile +0 -42
  1141. data/gemfiles/ruby_2.7.0_rails5_postgres.gemfile.lock +0 -276
  1142. data/gemfiles/ruby_2.7.0_rails5_postgres_redis.gemfile +0 -44
  1143. data/gemfiles/ruby_2.7.0_rails5_postgres_redis.gemfile.lock +0 -295
  1144. data/gemfiles/ruby_2.7.0_rails5_postgres_redis_activesupport.gemfile +0 -44
  1145. data/gemfiles/ruby_2.7.0_rails5_postgres_redis_activesupport.gemfile.lock +0 -295
  1146. data/gemfiles/ruby_2.7.0_rails5_postgres_sidekiq.gemfile +0 -44
  1147. data/gemfiles/ruby_2.7.0_rails5_postgres_sidekiq.gemfile.lock +0 -284
  1148. data/gemfiles/ruby_2.7.0_rails61_mysql2.gemfile +0 -42
  1149. data/gemfiles/ruby_2.7.0_rails61_mysql2.gemfile.lock +0 -295
  1150. data/gemfiles/ruby_2.7.0_rails61_postgres.gemfile +0 -42
  1151. data/gemfiles/ruby_2.7.0_rails61_postgres.gemfile.lock +0 -295
  1152. data/gemfiles/ruby_2.7.0_rails61_postgres_redis.gemfile +0 -43
  1153. data/gemfiles/ruby_2.7.0_rails61_postgres_redis.gemfile.lock +0 -297
  1154. data/gemfiles/ruby_2.7.0_rails61_postgres_sidekiq.gemfile +0 -43
  1155. data/gemfiles/ruby_2.7.0_rails61_postgres_sidekiq.gemfile.lock +0 -302
  1156. data/gemfiles/ruby_2.7.0_rails6_mysql2.gemfile +0 -42
  1157. data/gemfiles/ruby_2.7.0_rails6_mysql2.gemfile.lock +0 -292
  1158. data/gemfiles/ruby_2.7.0_rails6_postgres.gemfile +0 -42
  1159. data/gemfiles/ruby_2.7.0_rails6_postgres.gemfile.lock +0 -292
  1160. data/gemfiles/ruby_2.7.0_rails6_postgres_redis.gemfile +0 -44
  1161. data/gemfiles/ruby_2.7.0_rails6_postgres_redis.gemfile.lock +0 -311
  1162. data/gemfiles/ruby_2.7.0_rails6_postgres_redis_activesupport.gemfile +0 -44
  1163. data/gemfiles/ruby_2.7.0_rails6_postgres_redis_activesupport.gemfile.lock +0 -311
  1164. data/gemfiles/ruby_2.7.0_rails6_postgres_sidekiq.gemfile +0 -44
  1165. data/gemfiles/ruby_2.7.0_rails6_postgres_sidekiq.gemfile.lock +0 -300
  1166. data/gemfiles/ruby_2.7.0_resque2_redis3.gemfile +0 -40
  1167. data/gemfiles/ruby_2.7.0_resque2_redis3.gemfile.lock +0 -190
  1168. data/gemfiles/ruby_2.7.0_resque2_redis4.gemfile +0 -40
  1169. data/gemfiles/ruby_2.7.0_resque2_redis4.gemfile.lock +0 -190
  1170. data/gemfiles/ruby_3.0.0_contrib.gemfile +0 -77
  1171. data/gemfiles/ruby_3.0.0_contrib.gemfile.lock +0 -1534
  1172. data/gemfiles/ruby_3.0.0_core_old.gemfile +0 -39
  1173. data/gemfiles/ruby_3.0.0_core_old.gemfile.lock +0 -165
  1174. data/gemfiles/ruby_3.0.0_cucumber3.gemfile +0 -40
  1175. data/gemfiles/ruby_3.0.0_cucumber3.gemfile.lock +0 -186
  1176. data/gemfiles/ruby_3.0.0_cucumber4.gemfile +0 -40
  1177. data/gemfiles/ruby_3.0.0_cucumber4.gemfile.lock +0 -218
  1178. data/gemfiles/ruby_3.0.0_cucumber5.gemfile +0 -40
  1179. data/gemfiles/ruby_3.0.0_cucumber5.gemfile.lock +0 -218
  1180. data/gemfiles/ruby_3.0.0_rails61_mysql2.gemfile +0 -43
  1181. data/gemfiles/ruby_3.0.0_rails61_mysql2.gemfile.lock +0 -295
  1182. data/gemfiles/ruby_3.0.0_rails61_postgres.gemfile +0 -43
  1183. data/gemfiles/ruby_3.0.0_rails61_postgres.gemfile.lock +0 -295
  1184. data/gemfiles/ruby_3.0.0_rails61_postgres_redis.gemfile +0 -44
  1185. data/gemfiles/ruby_3.0.0_rails61_postgres_redis.gemfile.lock +0 -297
  1186. data/gemfiles/ruby_3.0.0_rails61_postgres_sidekiq.gemfile +0 -44
  1187. data/gemfiles/ruby_3.0.0_rails61_postgres_sidekiq.gemfile.lock +0 -302
  1188. data/gemfiles/ruby_3.0.0_resque2_redis3.gemfile +0 -41
  1189. data/gemfiles/ruby_3.0.0_resque2_redis3.gemfile.lock +0 -192
  1190. data/gemfiles/ruby_3.0.0_resque2_redis4.gemfile +0 -41
  1191. data/gemfiles/ruby_3.0.0_resque2_redis4.gemfile.lock +0 -192
  1192. data/integration/README.md +0 -67
  1193. data/integration/apps/rack/.dockerignore +0 -1
  1194. data/integration/apps/rack/.envrc.sample +0 -1
  1195. data/integration/apps/rack/.gitignore +0 -4
  1196. data/integration/apps/rack/.rspec +0 -1
  1197. data/integration/apps/rack/Dockerfile +0 -28
  1198. data/integration/apps/rack/Dockerfile-ci +0 -11
  1199. data/integration/apps/rack/Gemfile +0 -24
  1200. data/integration/apps/rack/README.md +0 -93
  1201. data/integration/apps/rack/app/acme.rb +0 -80
  1202. data/integration/apps/rack/app/datadog.rb +0 -17
  1203. data/integration/apps/rack/bin/run +0 -22
  1204. data/integration/apps/rack/bin/setup +0 -17
  1205. data/integration/apps/rack/bin/test +0 -24
  1206. data/integration/apps/rack/config/puma.rb +0 -14
  1207. data/integration/apps/rack/config/unicorn.rb +0 -23
  1208. data/integration/apps/rack/config.ru +0 -6
  1209. data/integration/apps/rack/docker-compose.ci.yml +0 -62
  1210. data/integration/apps/rack/docker-compose.yml +0 -78
  1211. data/integration/apps/rack/script/build-images +0 -38
  1212. data/integration/apps/rack/script/ci +0 -50
  1213. data/integration/apps/rack/spec/integration/basic_spec.rb +0 -10
  1214. data/integration/apps/rack/spec/spec_helper.rb +0 -16
  1215. data/integration/apps/rack/spec/support/integration_helper.rb +0 -22
  1216. data/integration/apps/rails-five/.dockerignore +0 -1
  1217. data/integration/apps/rails-five/.env +0 -3
  1218. data/integration/apps/rails-five/.envrc.sample +0 -1
  1219. data/integration/apps/rails-five/.gitignore +0 -30
  1220. data/integration/apps/rails-five/Dockerfile +0 -25
  1221. data/integration/apps/rails-five/Dockerfile-ci +0 -11
  1222. data/integration/apps/rails-five/Gemfile +0 -104
  1223. data/integration/apps/rails-five/README.md +0 -94
  1224. data/integration/apps/rails-five/Rakefile +0 -6
  1225. data/integration/apps/rails-five/app/channels/application_cable/channel.rb +0 -4
  1226. data/integration/apps/rails-five/app/channels/application_cable/connection.rb +0 -4
  1227. data/integration/apps/rails-five/app/controllers/application_controller.rb +0 -2
  1228. data/integration/apps/rails-five/app/controllers/basic_controller.rb +0 -36
  1229. data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
  1230. data/integration/apps/rails-five/app/controllers/health_controller.rb +0 -9
  1231. data/integration/apps/rails-five/app/controllers/jobs_controller.rb +0 -12
  1232. data/integration/apps/rails-five/app/jobs/application_job.rb +0 -2
  1233. data/integration/apps/rails-five/app/jobs/test_job.rb +0 -12
  1234. data/integration/apps/rails-five/app/mailers/application_mailer.rb +0 -4
  1235. data/integration/apps/rails-five/app/models/application_record.rb +0 -3
  1236. data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
  1237. data/integration/apps/rails-five/app/models/test.rb +0 -2
  1238. data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +0 -13
  1239. data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +0 -1
  1240. data/integration/apps/rails-five/bin/bundle +0 -3
  1241. data/integration/apps/rails-five/bin/rails +0 -9
  1242. data/integration/apps/rails-five/bin/rake +0 -9
  1243. data/integration/apps/rails-five/bin/run +0 -24
  1244. data/integration/apps/rails-five/bin/setup +0 -27
  1245. data/integration/apps/rails-five/bin/spring +0 -17
  1246. data/integration/apps/rails-five/bin/test +0 -21
  1247. data/integration/apps/rails-five/bin/update +0 -28
  1248. data/integration/apps/rails-five/config/application.rb +0 -97
  1249. data/integration/apps/rails-five/config/boot.rb +0 -4
  1250. data/integration/apps/rails-five/config/cable.yml +0 -10
  1251. data/integration/apps/rails-five/config/credentials.yml.enc +0 -1
  1252. data/integration/apps/rails-five/config/database.yml +0 -28
  1253. data/integration/apps/rails-five/config/environment.rb +0 -5
  1254. data/integration/apps/rails-five/config/environments/development.rb +0 -51
  1255. data/integration/apps/rails-five/config/environments/production.rb +0 -82
  1256. data/integration/apps/rails-five/config/environments/test.rb +0 -43
  1257. data/integration/apps/rails-five/config/initializers/datadog.rb +0 -18
  1258. data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +0 -4
  1259. data/integration/apps/rails-five/config/initializers/resque.rb +0 -4
  1260. data/integration/apps/rails-five/config/initializers/rollbar.rb +0 -5
  1261. data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +0 -14
  1262. data/integration/apps/rails-five/config/locales/en.yml +0 -33
  1263. data/integration/apps/rails-five/config/puma.rb +0 -24
  1264. data/integration/apps/rails-five/config/routes.rb +0 -11
  1265. data/integration/apps/rails-five/config/spring.rb +0 -6
  1266. data/integration/apps/rails-five/config/unicorn.rb +0 -29
  1267. data/integration/apps/rails-five/config.ru +0 -5
  1268. data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +0 -11
  1269. data/integration/apps/rails-five/db/schema.rb +0 -23
  1270. data/integration/apps/rails-five/db/seeds.rb +0 -7
  1271. data/integration/apps/rails-five/docker-compose.ci.yml +0 -98
  1272. data/integration/apps/rails-five/docker-compose.yml +0 -100
  1273. data/integration/apps/rails-five/lib/tasks/.keep +0 -0
  1274. data/integration/apps/rails-five/log/.keep +0 -0
  1275. data/integration/apps/rails-five/public/robots.txt +0 -1
  1276. data/integration/apps/rails-five/script/build-images +0 -35
  1277. data/integration/apps/rails-five/script/ci +0 -50
  1278. data/integration/apps/rails-five/spec/integration/basic_spec.rb +0 -10
  1279. data/integration/apps/rails-five/spec/spec_helper.rb +0 -16
  1280. data/integration/apps/rails-five/spec/support/integration_helper.rb +0 -22
  1281. data/integration/apps/rails-five/storage/.keep +0 -0
  1282. data/integration/apps/rails-five/tmp/.keep +0 -0
  1283. data/integration/apps/rails-five/vendor/.keep +0 -0
  1284. data/integration/apps/ruby/.dockerignore +0 -1
  1285. data/integration/apps/ruby/.envrc.sample +0 -1
  1286. data/integration/apps/ruby/.gitignore +0 -2
  1287. data/integration/apps/ruby/Dockerfile +0 -25
  1288. data/integration/apps/ruby/Dockerfile-ci +0 -11
  1289. data/integration/apps/ruby/Gemfile +0 -11
  1290. data/integration/apps/ruby/README.md +0 -70
  1291. data/integration/apps/ruby/agent.yaml +0 -3
  1292. data/integration/apps/ruby/app/datadog.rb +0 -13
  1293. data/integration/apps/ruby/app/fibonacci.rb +0 -58
  1294. data/integration/apps/ruby/bin/run +0 -20
  1295. data/integration/apps/ruby/bin/setup +0 -17
  1296. data/integration/apps/ruby/bin/test +0 -21
  1297. data/integration/apps/ruby/docker-compose.ci.yml +0 -51
  1298. data/integration/apps/ruby/docker-compose.yml +0 -63
  1299. data/integration/apps/ruby/script/build-images +0 -38
  1300. data/integration/apps/ruby/script/ci +0 -50
  1301. data/integration/images/agent/Dockerfile +0 -2
  1302. data/integration/images/agent/agent.yaml +0 -3
  1303. data/integration/images/include/datadog/analyzer.rb +0 -71
  1304. data/integration/images/include/datadog/demo_env.rb +0 -101
  1305. data/integration/images/include/http-health-check +0 -33
  1306. data/integration/images/ruby/2.0/Dockerfile +0 -54
  1307. data/integration/images/ruby/2.1/Dockerfile +0 -54
  1308. data/integration/images/ruby/2.2/Dockerfile +0 -54
  1309. data/integration/images/ruby/2.3/Dockerfile +0 -70
  1310. data/integration/images/ruby/2.4/Dockerfile +0 -54
  1311. data/integration/images/ruby/2.5/Dockerfile +0 -54
  1312. data/integration/images/ruby/2.6/Dockerfile +0 -54
  1313. data/integration/images/ruby/2.7/Dockerfile +0 -54
  1314. data/integration/images/ruby/3.0/Dockerfile +0 -54
  1315. data/integration/images/wrk/Dockerfile +0 -33
  1316. data/integration/images/wrk/scripts/entrypoint.sh +0 -17
  1317. data/integration/images/wrk/scripts/scenarios/basic/default.lua +0 -1
  1318. data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +0 -1
  1319. data/integration/script/build-images +0 -43
  1320. data/lib/ddtrace/analytics.rb +0 -38
  1321. data/lib/ddtrace/buffer.rb +0 -326
  1322. data/lib/ddtrace/chunker.rb +0 -34
  1323. data/lib/ddtrace/configuration/agent_settings_resolver.rb +0 -241
  1324. data/lib/ddtrace/configuration/base.rb +0 -84
  1325. data/lib/ddtrace/configuration/components.rb +0 -226
  1326. data/lib/ddtrace/configuration/dependency_resolver.rb +0 -24
  1327. data/lib/ddtrace/configuration/option.rb +0 -64
  1328. data/lib/ddtrace/configuration/option_definition.rb +0 -121
  1329. data/lib/ddtrace/configuration/option_definition_set.rb +0 -18
  1330. data/lib/ddtrace/configuration/option_set.rb +0 -6
  1331. data/lib/ddtrace/configuration/options.rb +0 -111
  1332. data/lib/ddtrace/configuration/pin_setup.rb +0 -31
  1333. data/lib/ddtrace/configuration/settings.rb +0 -340
  1334. data/lib/ddtrace/configuration.rb +0 -198
  1335. data/lib/ddtrace/context.rb +0 -322
  1336. data/lib/ddtrace/context_flush.rb +0 -69
  1337. data/lib/ddtrace/context_provider.rb +0 -61
  1338. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +0 -30
  1339. data/lib/ddtrace/contrib/action_cable/event.rb +0 -66
  1340. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +0 -49
  1341. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +0 -55
  1342. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +0 -50
  1343. data/lib/ddtrace/contrib/action_cable/events.rb +0 -33
  1344. data/lib/ddtrace/contrib/action_cable/ext.rb +0 -26
  1345. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +0 -31
  1346. data/lib/ddtrace/contrib/action_cable/integration.rb +0 -45
  1347. data/lib/ddtrace/contrib/action_cable/patcher.rb +0 -27
  1348. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +0 -146
  1349. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +0 -25
  1350. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +0 -32
  1351. data/lib/ddtrace/contrib/action_pack/ext.rb +0 -19
  1352. data/lib/ddtrace/contrib/action_pack/integration.rb +0 -45
  1353. data/lib/ddtrace/contrib/action_pack/patcher.rb +0 -23
  1354. data/lib/ddtrace/contrib/action_pack/utils.rb +0 -36
  1355. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +0 -31
  1356. data/lib/ddtrace/contrib/action_view/event.rb +0 -35
  1357. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +0 -46
  1358. data/lib/ddtrace/contrib/action_view/events/render_template.rb +0 -49
  1359. data/lib/ddtrace/contrib/action_view/events.rb +0 -30
  1360. data/lib/ddtrace/contrib/action_view/ext.rb +0 -20
  1361. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +0 -74
  1362. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +0 -167
  1363. data/lib/ddtrace/contrib/action_view/integration.rb +0 -52
  1364. data/lib/ddtrace/contrib/action_view/patcher.rb +0 -47
  1365. data/lib/ddtrace/contrib/action_view/utils.rb +0 -32
  1366. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +0 -30
  1367. data/lib/ddtrace/contrib/active_model_serializers/event.rb +0 -68
  1368. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +0 -32
  1369. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +0 -35
  1370. data/lib/ddtrace/contrib/active_model_serializers/events.rb +0 -30
  1371. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +0 -20
  1372. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +0 -40
  1373. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +0 -29
  1374. data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +0 -30
  1375. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +0 -134
  1376. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +0 -35
  1377. data/lib/ddtrace/contrib/active_record/event.rb +0 -30
  1378. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +0 -60
  1379. data/lib/ddtrace/contrib/active_record/events/sql.rb +0 -68
  1380. data/lib/ddtrace/contrib/active_record/events.rb +0 -30
  1381. data/lib/ddtrace/contrib/active_record/ext.rb +0 -24
  1382. data/lib/ddtrace/contrib/active_record/integration.rb +0 -53
  1383. data/lib/ddtrace/contrib/active_record/patcher.rb +0 -23
  1384. data/lib/ddtrace/contrib/active_record/utils.rb +0 -123
  1385. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +0 -258
  1386. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +0 -69
  1387. data/lib/ddtrace/contrib/active_support/cache/redis.rb +0 -47
  1388. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +0 -30
  1389. data/lib/ddtrace/contrib/active_support/ext.rb +0 -27
  1390. data/lib/ddtrace/contrib/active_support/integration.rb +0 -46
  1391. data/lib/ddtrace/contrib/active_support/notifications/event.rb +0 -75
  1392. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +0 -67
  1393. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +0 -163
  1394. data/lib/ddtrace/contrib/active_support/patcher.rb +0 -23
  1395. data/lib/ddtrace/contrib/analytics.rb +0 -24
  1396. data/lib/ddtrace/contrib/auto_instrument.rb +0 -48
  1397. data/lib/ddtrace/contrib/aws/configuration/settings.rb +0 -30
  1398. data/lib/ddtrace/contrib/aws/ext.rb +0 -23
  1399. data/lib/ddtrace/contrib/aws/instrumentation.rb +0 -61
  1400. data/lib/ddtrace/contrib/aws/integration.rb +0 -42
  1401. data/lib/ddtrace/contrib/aws/parsed_context.rb +0 -56
  1402. data/lib/ddtrace/contrib/aws/patcher.rb +0 -49
  1403. data/lib/ddtrace/contrib/aws/services.rb +0 -118
  1404. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +0 -20
  1405. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +0 -41
  1406. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +0 -12
  1407. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +0 -23
  1408. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +0 -38
  1409. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +0 -28
  1410. data/lib/ddtrace/contrib/configurable.rb +0 -102
  1411. data/lib/ddtrace/contrib/configuration/resolver.rb +0 -81
  1412. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +0 -39
  1413. data/lib/ddtrace/contrib/configuration/settings.rb +0 -55
  1414. data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +0 -28
  1415. data/lib/ddtrace/contrib/cucumber/ext.rb +0 -17
  1416. data/lib/ddtrace/contrib/cucumber/formatter.rb +0 -98
  1417. data/lib/ddtrace/contrib/cucumber/instrumentation.rb +0 -24
  1418. data/lib/ddtrace/contrib/cucumber/integration.rb +0 -45
  1419. data/lib/ddtrace/contrib/cucumber/patcher.rb +0 -23
  1420. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +0 -30
  1421. data/lib/ddtrace/contrib/dalli/ext.rb +0 -20
  1422. data/lib/ddtrace/contrib/dalli/instrumentation.rb +0 -54
  1423. data/lib/ddtrace/contrib/dalli/integration.rb +0 -38
  1424. data/lib/ddtrace/contrib/dalli/patcher.rb +0 -25
  1425. data/lib/ddtrace/contrib/dalli/quantize.rb +0 -22
  1426. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +0 -32
  1427. data/lib/ddtrace/contrib/delayed_job/ext.rb +0 -23
  1428. data/lib/ddtrace/contrib/delayed_job/integration.rb +0 -38
  1429. data/lib/ddtrace/contrib/delayed_job/patcher.rb +0 -28
  1430. data/lib/ddtrace/contrib/delayed_job/plugin.rb +0 -84
  1431. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +0 -31
  1432. data/lib/ddtrace/contrib/elasticsearch/ext.rb +0 -22
  1433. data/lib/ddtrace/contrib/elasticsearch/integration.rb +0 -39
  1434. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +0 -122
  1435. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +0 -81
  1436. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +0 -32
  1437. data/lib/ddtrace/contrib/ethon/easy_patch.rb +0 -151
  1438. data/lib/ddtrace/contrib/ethon/ext.rb +0 -19
  1439. data/lib/ddtrace/contrib/ethon/integration.rb +0 -43
  1440. data/lib/ddtrace/contrib/ethon/multi_patch.rb +0 -84
  1441. data/lib/ddtrace/contrib/ethon/patcher.rb +0 -25
  1442. data/lib/ddtrace/contrib/excon/configuration/settings.rb +0 -33
  1443. data/lib/ddtrace/contrib/excon/ext.rb +0 -17
  1444. data/lib/ddtrace/contrib/excon/integration.rb +0 -43
  1445. data/lib/ddtrace/contrib/excon/middleware.rb +0 -163
  1446. data/lib/ddtrace/contrib/excon/patcher.rb +0 -27
  1447. data/lib/ddtrace/contrib/extensions.rb +0 -143
  1448. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +0 -38
  1449. data/lib/ddtrace/contrib/faraday/connection.rb +0 -18
  1450. data/lib/ddtrace/contrib/faraday/ext.rb +0 -17
  1451. data/lib/ddtrace/contrib/faraday/integration.rb +0 -43
  1452. data/lib/ddtrace/contrib/faraday/middleware.rb +0 -85
  1453. data/lib/ddtrace/contrib/faraday/patcher.rb +0 -53
  1454. data/lib/ddtrace/contrib/faraday/rack_builder.rb +0 -18
  1455. data/lib/ddtrace/contrib/grape/configuration/settings.rb +0 -38
  1456. data/lib/ddtrace/contrib/grape/endpoint.rb +0 -236
  1457. data/lib/ddtrace/contrib/grape/ext.rb +0 -23
  1458. data/lib/ddtrace/contrib/grape/instrumentation.rb +0 -33
  1459. data/lib/ddtrace/contrib/grape/integration.rb +0 -39
  1460. data/lib/ddtrace/contrib/grape/patcher.rb +0 -31
  1461. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +0 -32
  1462. data/lib/ddtrace/contrib/graphql/ext.rb +0 -16
  1463. data/lib/ddtrace/contrib/graphql/integration.rb +0 -39
  1464. data/lib/ddtrace/contrib/graphql/patcher.rb +0 -60
  1465. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +0 -30
  1466. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +0 -58
  1467. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +0 -81
  1468. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +0 -74
  1469. data/lib/ddtrace/contrib/grpc/ext.rb +0 -18
  1470. data/lib/ddtrace/contrib/grpc/integration.rb +0 -38
  1471. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +0 -49
  1472. data/lib/ddtrace/contrib/grpc/patcher.rb +0 -32
  1473. data/lib/ddtrace/contrib/http/circuit_breaker.rb +0 -37
  1474. data/lib/ddtrace/contrib/http/configuration/settings.rb +0 -32
  1475. data/lib/ddtrace/contrib/http/ext.rb +0 -17
  1476. data/lib/ddtrace/contrib/http/instrumentation.rb +0 -179
  1477. data/lib/ddtrace/contrib/http/integration.rb +0 -45
  1478. data/lib/ddtrace/contrib/http/patcher.rb +0 -26
  1479. data/lib/ddtrace/contrib/http_annotation_helper.rb +0 -10
  1480. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +0 -32
  1481. data/lib/ddtrace/contrib/httpclient/ext.rb +0 -17
  1482. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +0 -147
  1483. data/lib/ddtrace/contrib/httpclient/integration.rb +0 -43
  1484. data/lib/ddtrace/contrib/httpclient/patcher.rb +0 -38
  1485. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +0 -32
  1486. data/lib/ddtrace/contrib/httprb/ext.rb +0 -17
  1487. data/lib/ddtrace/contrib/httprb/instrumentation.rb +0 -157
  1488. data/lib/ddtrace/contrib/httprb/integration.rb +0 -43
  1489. data/lib/ddtrace/contrib/httprb/patcher.rb +0 -38
  1490. data/lib/ddtrace/contrib/integration.rb +0 -16
  1491. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +0 -30
  1492. data/lib/ddtrace/contrib/kafka/consumer_event.rb +0 -14
  1493. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +0 -14
  1494. data/lib/ddtrace/contrib/kafka/event.rb +0 -51
  1495. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +0 -34
  1496. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +0 -41
  1497. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +0 -39
  1498. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +0 -39
  1499. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +0 -29
  1500. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +0 -29
  1501. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +0 -29
  1502. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +0 -32
  1503. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +0 -35
  1504. data/lib/ddtrace/contrib/kafka/events.rb +0 -44
  1505. data/lib/ddtrace/contrib/kafka/ext.rb +0 -41
  1506. data/lib/ddtrace/contrib/kafka/integration.rb +0 -39
  1507. data/lib/ddtrace/contrib/kafka/patcher.rb +0 -26
  1508. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +0 -33
  1509. data/lib/ddtrace/contrib/mongodb/ext.rb +0 -23
  1510. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +0 -69
  1511. data/lib/ddtrace/contrib/mongodb/integration.rb +0 -38
  1512. data/lib/ddtrace/contrib/mongodb/parsers.rb +0 -68
  1513. data/lib/ddtrace/contrib/mongodb/patcher.rb +0 -31
  1514. data/lib/ddtrace/contrib/mongodb/subscribers.rb +0 -111
  1515. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +0 -30
  1516. data/lib/ddtrace/contrib/mysql2/ext.rb +0 -18
  1517. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +0 -64
  1518. data/lib/ddtrace/contrib/mysql2/integration.rb +0 -38
  1519. data/lib/ddtrace/contrib/mysql2/patcher.rb +0 -27
  1520. data/lib/ddtrace/contrib/patchable.rb +0 -70
  1521. data/lib/ddtrace/contrib/patcher.rb +0 -65
  1522. data/lib/ddtrace/contrib/presto/configuration/settings.rb +0 -30
  1523. data/lib/ddtrace/contrib/presto/ext.rb +0 -28
  1524. data/lib/ddtrace/contrib/presto/instrumentation.rb +0 -110
  1525. data/lib/ddtrace/contrib/presto/integration.rb +0 -38
  1526. data/lib/ddtrace/contrib/presto/patcher.rb +0 -33
  1527. data/lib/ddtrace/contrib/qless/configuration/settings.rb +0 -35
  1528. data/lib/ddtrace/contrib/qless/ext.rb +0 -20
  1529. data/lib/ddtrace/contrib/qless/integration.rb +0 -38
  1530. data/lib/ddtrace/contrib/qless/patcher.rb +0 -35
  1531. data/lib/ddtrace/contrib/qless/qless_job.rb +0 -73
  1532. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +0 -33
  1533. data/lib/ddtrace/contrib/que/configuration/settings.rb +0 -43
  1534. data/lib/ddtrace/contrib/que/ext.rb +0 -30
  1535. data/lib/ddtrace/contrib/que/integration.rb +0 -42
  1536. data/lib/ddtrace/contrib/que/patcher.rb +0 -24
  1537. data/lib/ddtrace/contrib/que/tracer.rb +0 -57
  1538. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +0 -30
  1539. data/lib/ddtrace/contrib/racecar/event.rb +0 -76
  1540. data/lib/ddtrace/contrib/racecar/events/batch.rb +0 -27
  1541. data/lib/ddtrace/contrib/racecar/events/consume.rb +0 -27
  1542. data/lib/ddtrace/contrib/racecar/events/message.rb +0 -27
  1543. data/lib/ddtrace/contrib/racecar/events.rb +0 -32
  1544. data/lib/ddtrace/contrib/racecar/ext.rb +0 -25
  1545. data/lib/ddtrace/contrib/racecar/integration.rb +0 -39
  1546. data/lib/ddtrace/contrib/racecar/patcher.rb +0 -26
  1547. data/lib/ddtrace/contrib/rack/configuration/settings.rb +0 -46
  1548. data/lib/ddtrace/contrib/rack/ext.rb +0 -21
  1549. data/lib/ddtrace/contrib/rack/integration.rb +0 -45
  1550. data/lib/ddtrace/contrib/rack/middlewares.rb +0 -287
  1551. data/lib/ddtrace/contrib/rack/patcher.rb +0 -105
  1552. data/lib/ddtrace/contrib/rack/request_queue.rb +0 -44
  1553. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +0 -10
  1554. data/lib/ddtrace/contrib/rails/configuration/settings.rb +0 -93
  1555. data/lib/ddtrace/contrib/rails/ext.rb +0 -17
  1556. data/lib/ddtrace/contrib/rails/framework.rb +0 -124
  1557. data/lib/ddtrace/contrib/rails/integration.rb +0 -44
  1558. data/lib/ddtrace/contrib/rails/log_injection.rb +0 -81
  1559. data/lib/ddtrace/contrib/rails/middlewares.rb +0 -43
  1560. data/lib/ddtrace/contrib/rails/patcher.rb +0 -107
  1561. data/lib/ddtrace/contrib/rails/railtie.rb +0 -17
  1562. data/lib/ddtrace/contrib/rails/utils.rb +0 -24
  1563. data/lib/ddtrace/contrib/rake/configuration/settings.rb +0 -31
  1564. data/lib/ddtrace/contrib/rake/ext.rb +0 -21
  1565. data/lib/ddtrace/contrib/rake/instrumentation.rb +0 -90
  1566. data/lib/ddtrace/contrib/rake/integration.rb +0 -38
  1567. data/lib/ddtrace/contrib/rake/patcher.rb +0 -30
  1568. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +0 -45
  1569. data/lib/ddtrace/contrib/redis/configuration/settings.rb +0 -35
  1570. data/lib/ddtrace/contrib/redis/ext.rb +0 -22
  1571. data/lib/ddtrace/contrib/redis/integration.rb +0 -42
  1572. data/lib/ddtrace/contrib/redis/patcher.rb +0 -114
  1573. data/lib/ddtrace/contrib/redis/quantize.rb +0 -75
  1574. data/lib/ddtrace/contrib/redis/tags.rb +0 -46
  1575. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +0 -158
  1576. data/lib/ddtrace/contrib/registerable.rb +0 -33
  1577. data/lib/ddtrace/contrib/registry.rb +0 -42
  1578. data/lib/ddtrace/contrib/resque/configuration/settings.rb +0 -48
  1579. data/lib/ddtrace/contrib/resque/ext.rb +0 -17
  1580. data/lib/ddtrace/contrib/resque/integration.rb +0 -47
  1581. data/lib/ddtrace/contrib/resque/patcher.rb +0 -29
  1582. data/lib/ddtrace/contrib/resque/resque_job.rb +0 -103
  1583. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +0 -31
  1584. data/lib/ddtrace/contrib/rest_client/ext.rb +0 -17
  1585. data/lib/ddtrace/contrib/rest_client/integration.rb +0 -38
  1586. data/lib/ddtrace/contrib/rest_client/patcher.rb +0 -23
  1587. data/lib/ddtrace/contrib/rest_client/request_patch.rb +0 -91
  1588. data/lib/ddtrace/contrib/rspec/configuration/settings.rb +0 -28
  1589. data/lib/ddtrace/contrib/rspec/example.rb +0 -75
  1590. data/lib/ddtrace/contrib/rspec/ext.rb +0 -16
  1591. data/lib/ddtrace/contrib/rspec/integration.rb +0 -46
  1592. data/lib/ddtrace/contrib/rspec/patcher.rb +0 -23
  1593. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +0 -28
  1594. data/lib/ddtrace/contrib/sequel/database.rb +0 -63
  1595. data/lib/ddtrace/contrib/sequel/dataset.rb +0 -63
  1596. data/lib/ddtrace/contrib/sequel/ext.rb +0 -19
  1597. data/lib/ddtrace/contrib/sequel/integration.rb +0 -38
  1598. data/lib/ddtrace/contrib/sequel/patcher.rb +0 -33
  1599. data/lib/ddtrace/contrib/sequel/utils.rb +0 -74
  1600. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +0 -31
  1601. data/lib/ddtrace/contrib/shoryuken/ext.rb +0 -21
  1602. data/lib/ddtrace/contrib/shoryuken/integration.rb +0 -39
  1603. data/lib/ddtrace/contrib/shoryuken/patcher.rb +0 -24
  1604. data/lib/ddtrace/contrib/shoryuken/tracer.rb +0 -55
  1605. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +0 -43
  1606. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +0 -37
  1607. data/lib/ddtrace/contrib/sidekiq/ext.rb +0 -27
  1608. data/lib/ddtrace/contrib/sidekiq/integration.rb +0 -38
  1609. data/lib/ddtrace/contrib/sidekiq/patcher.rb +0 -41
  1610. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +0 -65
  1611. data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -44
  1612. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +0 -39
  1613. data/lib/ddtrace/contrib/sinatra/env.rb +0 -57
  1614. data/lib/ddtrace/contrib/sinatra/ext.rb +0 -27
  1615. data/lib/ddtrace/contrib/sinatra/headers.rb +0 -29
  1616. data/lib/ddtrace/contrib/sinatra/integration.rb +0 -38
  1617. data/lib/ddtrace/contrib/sinatra/patcher.rb +0 -28
  1618. data/lib/ddtrace/contrib/sinatra/tracer.rb +0 -127
  1619. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +0 -105
  1620. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +0 -33
  1621. data/lib/ddtrace/contrib/sneakers/ext.rb +0 -22
  1622. data/lib/ddtrace/contrib/sneakers/integration.rb +0 -41
  1623. data/lib/ddtrace/contrib/sneakers/patcher.rb +0 -24
  1624. data/lib/ddtrace/contrib/sneakers/tracer.rb +0 -53
  1625. data/lib/ddtrace/contrib/status_code_matcher.rb +0 -69
  1626. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +0 -30
  1627. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +0 -26
  1628. data/lib/ddtrace/contrib/sucker_punch/ext.rb +0 -21
  1629. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +0 -88
  1630. data/lib/ddtrace/contrib/sucker_punch/integration.rb +0 -38
  1631. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +0 -42
  1632. data/lib/ddtrace/correlation.rb +0 -39
  1633. data/lib/ddtrace/diagnostics/environment_logger.rb +0 -279
  1634. data/lib/ddtrace/diagnostics/health.rb +0 -33
  1635. data/lib/ddtrace/distributed_tracing/headers/b3.rb +0 -44
  1636. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +0 -56
  1637. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +0 -42
  1638. data/lib/ddtrace/distributed_tracing/headers/headers.rb +0 -71
  1639. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +0 -43
  1640. data/lib/ddtrace/encoding.rb +0 -69
  1641. data/lib/ddtrace/environment.rb +0 -41
  1642. data/lib/ddtrace/error.rb +0 -105
  1643. data/lib/ddtrace/event.rb +0 -52
  1644. data/lib/ddtrace/ext/analytics.rb +0 -12
  1645. data/lib/ddtrace/ext/app_types.rb +0 -12
  1646. data/lib/ddtrace/ext/ci.rb +0 -297
  1647. data/lib/ddtrace/ext/correlation.rb +0 -11
  1648. data/lib/ddtrace/ext/diagnostics.rb +0 -36
  1649. data/lib/ddtrace/ext/distributed.rb +0 -39
  1650. data/lib/ddtrace/ext/environment.rb +0 -16
  1651. data/lib/ddtrace/ext/errors.rb +0 -10
  1652. data/lib/ddtrace/ext/forced_tracing.rb +0 -25
  1653. data/lib/ddtrace/ext/git.rb +0 -11
  1654. data/lib/ddtrace/ext/http.rb +0 -46
  1655. data/lib/ddtrace/ext/integration.rb +0 -8
  1656. data/lib/ddtrace/ext/manual_tracing.rb +0 -9
  1657. data/lib/ddtrace/ext/metrics.rb +0 -15
  1658. data/lib/ddtrace/ext/net.rb +0 -10
  1659. data/lib/ddtrace/ext/priority.rb +0 -16
  1660. data/lib/ddtrace/ext/profiling.rb +0 -53
  1661. data/lib/ddtrace/ext/runtime.rb +0 -30
  1662. data/lib/ddtrace/ext/sampling.rb +0 -16
  1663. data/lib/ddtrace/ext/sql.rb +0 -8
  1664. data/lib/ddtrace/ext/test.rb +0 -24
  1665. data/lib/ddtrace/ext/transport.rb +0 -20
  1666. data/lib/ddtrace/forced_tracing.rb +0 -38
  1667. data/lib/ddtrace/logger.rb +0 -40
  1668. data/lib/ddtrace/metrics.rb +0 -230
  1669. data/lib/ddtrace/opentelemetry/extensions.rb +0 -13
  1670. data/lib/ddtrace/opentelemetry/span.rb +0 -33
  1671. data/lib/ddtrace/opentracer/binary_propagator.rb +0 -24
  1672. data/lib/ddtrace/opentracer/carrier.rb +0 -6
  1673. data/lib/ddtrace/opentracer/distributed_headers.rb +0 -55
  1674. data/lib/ddtrace/opentracer/global_tracer.rb +0 -15
  1675. data/lib/ddtrace/opentracer/propagator.rb +0 -22
  1676. data/lib/ddtrace/opentracer/rack_propagator.rb +0 -60
  1677. data/lib/ddtrace/opentracer/scope.rb +0 -15
  1678. data/lib/ddtrace/opentracer/scope_manager.rb +0 -6
  1679. data/lib/ddtrace/opentracer/span.rb +0 -94
  1680. data/lib/ddtrace/opentracer/span_context.rb +0 -14
  1681. data/lib/ddtrace/opentracer/span_context_factory.rb +0 -23
  1682. data/lib/ddtrace/opentracer/text_map_propagator.rb +0 -75
  1683. data/lib/ddtrace/opentracer/thread_local_scope.rb +0 -31
  1684. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +0 -40
  1685. data/lib/ddtrace/opentracer/tracer.rb +0 -208
  1686. data/lib/ddtrace/opentracer.rb +0 -40
  1687. data/lib/ddtrace/patcher.rb +0 -68
  1688. data/lib/ddtrace/pin.rb +0 -85
  1689. data/lib/ddtrace/pipeline/span_filter.rb +0 -38
  1690. data/lib/ddtrace/pipeline/span_processor.rb +0 -20
  1691. data/lib/ddtrace/pipeline.rb +0 -46
  1692. data/lib/ddtrace/profiling/backtrace_location.rb +0 -32
  1693. data/lib/ddtrace/profiling/buffer.rb +0 -41
  1694. data/lib/ddtrace/profiling/collectors/stack.rb +0 -259
  1695. data/lib/ddtrace/profiling/encoding/profile.rb +0 -31
  1696. data/lib/ddtrace/profiling/event.rb +0 -13
  1697. data/lib/ddtrace/profiling/events/stack.rb +0 -102
  1698. data/lib/ddtrace/profiling/exporter.rb +0 -23
  1699. data/lib/ddtrace/profiling/ext/cpu.rb +0 -52
  1700. data/lib/ddtrace/profiling/ext/cthread.rb +0 -157
  1701. data/lib/ddtrace/profiling/ext/forking.rb +0 -97
  1702. data/lib/ddtrace/profiling/flush.rb +0 -41
  1703. data/lib/ddtrace/profiling/pprof/builder.rb +0 -121
  1704. data/lib/ddtrace/profiling/pprof/converter.rb +0 -85
  1705. data/lib/ddtrace/profiling/pprof/message_set.rb +0 -12
  1706. data/lib/ddtrace/profiling/pprof/payload.rb +0 -18
  1707. data/lib/ddtrace/profiling/pprof/pprof_pb.rb +0 -81
  1708. data/lib/ddtrace/profiling/pprof/stack_sample.rb +0 -90
  1709. data/lib/ddtrace/profiling/pprof/string_table.rb +0 -10
  1710. data/lib/ddtrace/profiling/pprof/template.rb +0 -114
  1711. data/lib/ddtrace/profiling/profiler.rb +0 -30
  1712. data/lib/ddtrace/profiling/recorder.rb +0 -95
  1713. data/lib/ddtrace/profiling/scheduler.rb +0 -105
  1714. data/lib/ddtrace/profiling/tasks/setup.rb +0 -77
  1715. data/lib/ddtrace/profiling/transport/client.rb +0 -12
  1716. data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +0 -91
  1717. data/lib/ddtrace/profiling/transport/http/api/instance.rb +0 -36
  1718. data/lib/ddtrace/profiling/transport/http/api/spec.rb +0 -40
  1719. data/lib/ddtrace/profiling/transport/http/api.rb +0 -43
  1720. data/lib/ddtrace/profiling/transport/http/builder.rb +0 -28
  1721. data/lib/ddtrace/profiling/transport/http/client.rb +0 -33
  1722. data/lib/ddtrace/profiling/transport/http/response.rb +0 -21
  1723. data/lib/ddtrace/profiling/transport/http.rb +0 -118
  1724. data/lib/ddtrace/profiling/transport/io/client.rb +0 -27
  1725. data/lib/ddtrace/profiling/transport/io/response.rb +0 -16
  1726. data/lib/ddtrace/profiling/transport/io.rb +0 -30
  1727. data/lib/ddtrace/profiling/transport/parcel.rb +0 -17
  1728. data/lib/ddtrace/profiling/transport/request.rb +0 -15
  1729. data/lib/ddtrace/profiling/transport/response.rb +0 -8
  1730. data/lib/ddtrace/profiling.rb +0 -105
  1731. data/lib/ddtrace/propagation/grpc_propagator.rb +0 -74
  1732. data/lib/ddtrace/propagation/http_propagator.rb +0 -90
  1733. data/lib/ddtrace/quantization/hash.rb +0 -103
  1734. data/lib/ddtrace/quantization/http.rb +0 -87
  1735. data/lib/ddtrace/runtime/cgroup.rb +0 -44
  1736. data/lib/ddtrace/runtime/class_count.rb +0 -17
  1737. data/lib/ddtrace/runtime/container.rb +0 -87
  1738. data/lib/ddtrace/runtime/gc.rb +0 -16
  1739. data/lib/ddtrace/runtime/identity.rb +0 -48
  1740. data/lib/ddtrace/runtime/metrics.rb +0 -114
  1741. data/lib/ddtrace/runtime/object_space.rb +0 -19
  1742. data/lib/ddtrace/runtime/socket.rb +0 -14
  1743. data/lib/ddtrace/runtime/thread_count.rb +0 -16
  1744. data/lib/ddtrace/sampler.rb +0 -292
  1745. data/lib/ddtrace/sampling/matcher.rb +0 -57
  1746. data/lib/ddtrace/sampling/rate_limiter.rb +0 -176
  1747. data/lib/ddtrace/sampling/rule.rb +0 -61
  1748. data/lib/ddtrace/sampling/rule_sampler.rb +0 -120
  1749. data/lib/ddtrace/sampling.rb +0 -2
  1750. data/lib/ddtrace/span.rb +0 -432
  1751. data/lib/ddtrace/sync_writer.rb +0 -67
  1752. data/lib/ddtrace/tasks/exec.rb +0 -48
  1753. data/lib/ddtrace/tasks/help.rb +0 -14
  1754. data/lib/ddtrace/tracer.rb +0 -453
  1755. data/lib/ddtrace/utils/compression.rb +0 -27
  1756. data/lib/ddtrace/utils/database.rb +0 -25
  1757. data/lib/ddtrace/utils/forking.rb +0 -52
  1758. data/lib/ddtrace/utils/object_set.rb +0 -41
  1759. data/lib/ddtrace/utils/only_once.rb +0 -40
  1760. data/lib/ddtrace/utils/sequence.rb +0 -17
  1761. data/lib/ddtrace/utils/string_table.rb +0 -45
  1762. data/lib/ddtrace/utils/time.rb +0 -45
  1763. data/lib/ddtrace/utils.rb +0 -68
  1764. data/lib/ddtrace/vendor/active_record/connection_specification.rb +0 -301
  1765. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +0 -116
  1766. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +0 -57
  1767. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +0 -135
  1768. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +0 -9
  1769. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +0 -8
  1770. data/lib/ddtrace/vendor/multipart-post/multipart.rb +0 -12
  1771. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +0 -32
  1772. data/lib/ddtrace/worker.rb +0 -20
  1773. data/lib/ddtrace/workers/async.rb +0 -173
  1774. data/lib/ddtrace/workers/loop.rb +0 -131
  1775. data/lib/ddtrace/workers/polling.rb +0 -49
  1776. data/lib/ddtrace/workers/queue.rb +0 -40
  1777. data/lib/ddtrace/workers/runtime_metrics.rb +0 -64
  1778. data/lib/ddtrace/workers/trace_writer.rb +0 -199
  1779. data/lib/ddtrace/workers.rb +0 -122
  1780. data/lib/ddtrace/writer.rb +0 -199
  1781. data/tasks/release_gem.rake +0 -28
  1782. /data/lib/{ddtrace → datadog/core}/vendor/multipart-post/LICENSE +0 -0
  1783. /data/lib/{ddtrace → datadog}/profiling/pprof/pprof.proto +0 -0
  1784. /data/lib/{ddtrace/vendor/active_record → datadog/tracing/contrib/active_record/vendor}/MIT-LICENSE +0 -0
  1785. /data/lib/{ddtrace → datadog/tracing}/contrib/redis/vendor/LICENSE +0 -0
@@ -0,0 +1,931 @@
1
+ #include <ruby.h>
2
+ #include <ruby/thread.h>
3
+ #include <ruby/thread_native.h>
4
+ #include <ruby/debug.h>
5
+ #include <stdbool.h>
6
+ #include <stdatomic.h>
7
+ #include <signal.h>
8
+ #include <errno.h>
9
+
10
+ #include "helpers.h"
11
+ #include "ruby_helpers.h"
12
+ #include "collectors_thread_context.h"
13
+ #include "collectors_dynamic_sampling_rate.h"
14
+ #include "collectors_idle_sampling_helper.h"
15
+ #include "private_vm_api_access.h"
16
+ #include "setup_signal_handler.h"
17
+ #include "time_helpers.h"
18
+
19
+ // Used to trigger the execution of Collectors::ThreadState, which implements all of the sampling logic
20
+ // itself; this class only implements the "when to do it" part.
21
+ //
22
+ // This file implements the native bits of the Datadog::Profiling::Collectors::CpuAndWallTimeWorker class
23
+
24
+ // ---
25
+ // Here be dragons: This component is quite fiddly and probably one of the more complex in the profiler as it deals with
26
+ // multiple threads, signal handlers, global state, etc.
27
+ //
28
+ // ## Design notes for this class:
29
+ //
30
+ // ### Constraints
31
+ //
32
+ // Currently, sampling Ruby threads requires calling Ruby VM APIs that are only safe to call while holding on to the
33
+ // global VM lock (and are not async-signal safe -- cannot be called from a signal handler).
34
+ //
35
+ // @ivoanjo: As a note, I don't think we should think of this constraint as set in stone. Since can reach into the Ruby
36
+ // internals, we may be able to figure out a way of overcoming it. But it's definitely going to be hard so for now
37
+ // we're considering it as a given.
38
+ //
39
+ // ### Flow for triggering CPU/Wall-time samples
40
+ //
41
+ // The flow for triggering samples is as follows:
42
+ //
43
+ // 1. Inside the `run_sampling_trigger_loop` function (running in the `CpuAndWallTimeWorker` background thread),
44
+ // a `SIGPROF` signal gets sent to the current process.
45
+ //
46
+ // 2. The `handle_sampling_signal` signal handler function gets called to handle the `SIGPROF` signal.
47
+ //
48
+ // Which thread the signal handler function gets called on by the operating system is quite important. We need to perform
49
+ // an operation -- calling the `rb_postponed_job_register_one` API -- that can only be called from the thread that
50
+ // is holding on to the global VM lock. So this is the thread we're "hoping" our signal lands on.
51
+ //
52
+ // The signal never lands on the `CpuAndWallTimeWorker` background thread because we explicitly block it off from that
53
+ // thread in `block_sigprof_signal_handler_from_running_in_current_thread`.
54
+ //
55
+ // If the signal lands on a thread that is not holding onto the global VM lock, we can't proceed to the next step,
56
+ // and we need to restart the sampling flow from step 1. (There's still quite a few improvements we can make here,
57
+ // but this is the current state of the implementation).
58
+ //
59
+ // 3. Inside `handle_sampling_signal`, if it's getting executed by the Ruby thread that is holding the global VM lock,
60
+ // we can call `rb_postponed_job_register_one` to ask the Ruby VM to call our `sample_from_postponed_job` function
61
+ // "as soon as it can".
62
+ //
63
+ // 4. The Ruby VM calls our `sample_from_postponed_job` from a thread holding the global VM lock. A sample is recorded by
64
+ // calling `thread_context_collector_sample`.
65
+ //
66
+ // ### TracePoints and Forking
67
+ //
68
+ // When the Ruby VM forks, the CPU/Wall-time profiling stops naturally because it's triggered by a background thread
69
+ // that doesn't get automatically restarted by the VM on the child process. (The profiler does trigger its restart at
70
+ // some point -- see `Profiling::Tasks::Setup` for details).
71
+ //
72
+ // But this doesn't apply to any `TracePoint`s this class may use, which will continue to be active. Thus, we need to
73
+ // always remember consider this case of -- the worker thread may not be alive but the `TracePoint`s can continue to
74
+ // trigger samples.
75
+ //
76
+ // ---
77
+
78
+ // Contains state for a single CpuAndWallTimeWorker instance
79
+ struct cpu_and_wall_time_worker_state {
80
+ // These are immutable after initialization
81
+
82
+ bool gc_profiling_enabled;
83
+ bool allocation_counting_enabled;
84
+ bool no_signals_workaround_enabled;
85
+ bool dynamic_sampling_rate_enabled;
86
+ VALUE self_instance;
87
+ VALUE thread_context_collector_instance;
88
+ VALUE idle_sampling_helper_instance;
89
+ VALUE owner_thread;
90
+ dynamic_sampling_rate_state dynamic_sampling_rate;
91
+ VALUE gc_tracepoint; // Used to get gc start/finish information
92
+ VALUE object_allocation_tracepoint; // Used to get allocation counts and allocation profiling
93
+
94
+ // These are mutable and used to signal things between the worker thread and other threads
95
+
96
+ atomic_bool should_run;
97
+ // When something goes wrong during sampling, we record the Ruby exception here, so that it can be "re-raised" on
98
+ // the CpuAndWallTimeWorker thread
99
+ VALUE failure_exception;
100
+ // Used by `_native_stop` to flag the worker thread to start (see comment on `_native_sampling_loop`)
101
+ VALUE stop_thread;
102
+
103
+ // Others
104
+
105
+ // Used to detect/avoid nested sampling, e.g. when the object_allocation_tracepoint gets triggered by a memory allocation
106
+ // that happens during another sample.
107
+ bool during_sample;
108
+
109
+ struct stats {
110
+ // How many times we tried to trigger a sample
111
+ unsigned int trigger_sample_attempts;
112
+ // How many times we tried to simulate signal delivery
113
+ unsigned int trigger_simulated_signal_delivery_attempts;
114
+ // How many times we actually simulated signal delivery
115
+ unsigned int simulated_signal_delivery;
116
+ // How many times we actually called rb_postponed_job_register_one from a signal handler
117
+ unsigned int signal_handler_enqueued_sample;
118
+ // How many times the signal handler was called from the wrong thread
119
+ unsigned int signal_handler_wrong_thread;
120
+ // How many times we actually sampled (except GC samples)
121
+ unsigned int sampled;
122
+ // How many times we skipped a sample because of the dynamic sampling rate mechanism
123
+ unsigned int skipped_sample_because_of_dynamic_sampling_rate;
124
+
125
+ // Stats for the results of calling rb_postponed_job_register_one
126
+ // The same function was already waiting to be executed
127
+ unsigned int postponed_job_skipped_already_existed;
128
+ // The function was added to the queue successfully
129
+ unsigned int postponed_job_success;
130
+ // The queue was full
131
+ unsigned int postponed_job_full;
132
+ // The function returned an unknown result code
133
+ unsigned int postponed_job_unknown_result;
134
+
135
+ // Min/max/total wall-time spent sampling (except GC samples)
136
+ uint64_t sampling_time_ns_min;
137
+ uint64_t sampling_time_ns_max;
138
+ uint64_t sampling_time_ns_total;
139
+ // How many times we saw allocations being done inside a sample
140
+ unsigned int allocations_during_sample;
141
+ } stats;
142
+ };
143
+
144
+ static VALUE _native_new(VALUE klass);
145
+ static VALUE _native_initialize(
146
+ DDTRACE_UNUSED VALUE _self,
147
+ VALUE self_instance,
148
+ VALUE thread_context_collector_instance,
149
+ VALUE gc_profiling_enabled,
150
+ VALUE idle_sampling_helper_instance,
151
+ VALUE allocation_counting_enabled,
152
+ VALUE no_signals_workaround_enabled,
153
+ VALUE dynamic_sampling_rate_enabled
154
+ );
155
+ static void cpu_and_wall_time_worker_typed_data_mark(void *state_ptr);
156
+ static VALUE _native_sampling_loop(VALUE self, VALUE instance);
157
+ static VALUE _native_stop(DDTRACE_UNUSED VALUE _self, VALUE self_instance, VALUE worker_thread);
158
+ static VALUE stop(VALUE self_instance, VALUE optional_exception);
159
+ static void handle_sampling_signal(DDTRACE_UNUSED int _signal, DDTRACE_UNUSED siginfo_t *_info, DDTRACE_UNUSED void *_ucontext);
160
+ static void *run_sampling_trigger_loop(void *state_ptr);
161
+ static void interrupt_sampling_trigger_loop(void *state_ptr);
162
+ static void sample_from_postponed_job(DDTRACE_UNUSED void *_unused);
163
+ static VALUE rescued_sample_from_postponed_job(VALUE self_instance);
164
+ static VALUE handle_sampling_failure(VALUE self_instance, VALUE exception);
165
+ static VALUE _native_current_sigprof_signal_handler(DDTRACE_UNUSED VALUE self);
166
+ static VALUE release_gvl_and_run_sampling_trigger_loop(VALUE instance);
167
+ static VALUE _native_is_running(DDTRACE_UNUSED VALUE self, VALUE instance);
168
+ static void testing_signal_handler(DDTRACE_UNUSED int _signal, DDTRACE_UNUSED siginfo_t *_info, DDTRACE_UNUSED void *_ucontext);
169
+ static VALUE _native_install_testing_signal_handler(DDTRACE_UNUSED VALUE self);
170
+ static VALUE _native_remove_testing_signal_handler(DDTRACE_UNUSED VALUE self);
171
+ static VALUE _native_trigger_sample(DDTRACE_UNUSED VALUE self);
172
+ static VALUE _native_gc_tracepoint(DDTRACE_UNUSED VALUE self, VALUE instance);
173
+ static void on_gc_event(VALUE tracepoint_data, DDTRACE_UNUSED void *unused);
174
+ static void after_gc_from_postponed_job(DDTRACE_UNUSED void *_unused);
175
+ static VALUE safely_call(VALUE (*function_to_call_safely)(VALUE), VALUE function_to_call_safely_arg, VALUE instance);
176
+ static VALUE _native_simulate_handle_sampling_signal(DDTRACE_UNUSED VALUE self);
177
+ static VALUE _native_simulate_sample_from_postponed_job(DDTRACE_UNUSED VALUE self);
178
+ static VALUE _native_reset_after_fork(DDTRACE_UNUSED VALUE self, VALUE instance);
179
+ static VALUE _native_is_sigprof_blocked_in_current_thread(DDTRACE_UNUSED VALUE self);
180
+ static VALUE _native_stats(DDTRACE_UNUSED VALUE self, VALUE instance);
181
+ void *simulate_sampling_signal_delivery(DDTRACE_UNUSED void *_unused);
182
+ static void grab_gvl_and_sample(void);
183
+ static void reset_stats(struct cpu_and_wall_time_worker_state *state);
184
+ static void sleep_for(uint64_t time_ns);
185
+ static VALUE _native_allocation_count(DDTRACE_UNUSED VALUE self);
186
+ static void on_newobj_event(DDTRACE_UNUSED VALUE tracepoint_data, DDTRACE_UNUSED void *unused);
187
+ static void disable_tracepoints(struct cpu_and_wall_time_worker_state *state);
188
+ static VALUE _native_with_blocked_sigprof(DDTRACE_UNUSED VALUE self);
189
+
190
+ // Note on sampler global state safety:
191
+ //
192
+ // Both `active_sampler_instance` and `active_sampler_instance_state` are **GLOBAL** state. Be careful when accessing
193
+ // or modifying them.
194
+ // In particular, it's important to only mutate them while holding the global VM lock, to ensure correctness.
195
+ //
196
+ // This global state is needed because a bunch of functions on this file need to access it from situations
197
+ // (e.g. signal handler) where it's impossible or just awkward to pass it as an argument.
198
+ static VALUE active_sampler_instance = Qnil;
199
+ static struct cpu_and_wall_time_worker_state *active_sampler_instance_state = NULL;
200
+
201
+ // Used to implement CpuAndWallTimeWorker._native_allocation_count . To be able to use cheap thread-local variables
202
+ // (here with `__thread`, see https://gcc.gnu.org/onlinedocs/gcc/Thread-Local.html), this needs to be global.
203
+ //
204
+ // Carryover of state between profiler instances can happen and is not considered to be a problem -- see expectations for this
205
+ // API documented in profiling.rb .
206
+ __thread uint64_t allocation_count = 0;
207
+
208
+ void collectors_cpu_and_wall_time_worker_init(VALUE profiling_module) {
209
+ rb_global_variable(&active_sampler_instance);
210
+
211
+ VALUE collectors_module = rb_define_module_under(profiling_module, "Collectors");
212
+ VALUE collectors_cpu_and_wall_time_worker_class = rb_define_class_under(collectors_module, "CpuAndWallTimeWorker", rb_cObject);
213
+ // Hosts methods used for testing the native code using RSpec
214
+ VALUE testing_module = rb_define_module_under(collectors_cpu_and_wall_time_worker_class, "Testing");
215
+
216
+ // Instances of the CpuAndWallTimeWorker class are "TypedData" objects.
217
+ // "TypedData" objects are special objects in the Ruby VM that can wrap C structs.
218
+ // In this case, it wraps the cpu_and_wall_time_worker_state.
219
+ //
220
+ // Because Ruby doesn't know how to initialize native-level structs, we MUST override the allocation function for objects
221
+ // of this class so that we can manage this part. Not overriding or disabling the allocation function is a common
222
+ // gotcha for "TypedData" objects that can very easily lead to VM crashes, see for instance
223
+ // https://bugs.ruby-lang.org/issues/18007 for a discussion around this.
224
+ rb_define_alloc_func(collectors_cpu_and_wall_time_worker_class, _native_new);
225
+
226
+ rb_define_singleton_method(collectors_cpu_and_wall_time_worker_class, "_native_initialize", _native_initialize, 7);
227
+ rb_define_singleton_method(collectors_cpu_and_wall_time_worker_class, "_native_sampling_loop", _native_sampling_loop, 1);
228
+ rb_define_singleton_method(collectors_cpu_and_wall_time_worker_class, "_native_stop", _native_stop, 2);
229
+ rb_define_singleton_method(collectors_cpu_and_wall_time_worker_class, "_native_reset_after_fork", _native_reset_after_fork, 1);
230
+ rb_define_singleton_method(collectors_cpu_and_wall_time_worker_class, "_native_stats", _native_stats, 1);
231
+ rb_define_singleton_method(collectors_cpu_and_wall_time_worker_class, "_native_allocation_count", _native_allocation_count, 0);
232
+ rb_define_singleton_method(testing_module, "_native_current_sigprof_signal_handler", _native_current_sigprof_signal_handler, 0);
233
+ rb_define_singleton_method(testing_module, "_native_is_running?", _native_is_running, 1);
234
+ rb_define_singleton_method(testing_module, "_native_install_testing_signal_handler", _native_install_testing_signal_handler, 0);
235
+ rb_define_singleton_method(testing_module, "_native_remove_testing_signal_handler", _native_remove_testing_signal_handler, 0);
236
+ rb_define_singleton_method(testing_module, "_native_trigger_sample", _native_trigger_sample, 0);
237
+ rb_define_singleton_method(testing_module, "_native_gc_tracepoint", _native_gc_tracepoint, 1);
238
+ rb_define_singleton_method(testing_module, "_native_simulate_handle_sampling_signal", _native_simulate_handle_sampling_signal, 0);
239
+ rb_define_singleton_method(testing_module, "_native_simulate_sample_from_postponed_job", _native_simulate_sample_from_postponed_job, 0);
240
+ rb_define_singleton_method(testing_module, "_native_is_sigprof_blocked_in_current_thread", _native_is_sigprof_blocked_in_current_thread, 0);
241
+ rb_define_singleton_method(testing_module, "_native_with_blocked_sigprof", _native_with_blocked_sigprof, 0);
242
+ }
243
+
244
+ // This structure is used to define a Ruby object that stores a pointer to a struct cpu_and_wall_time_worker_state
245
+ // See also https://github.com/ruby/ruby/blob/master/doc/extension.rdoc for how this works
246
+ static const rb_data_type_t cpu_and_wall_time_worker_typed_data = {
247
+ .wrap_struct_name = "Datadog::Profiling::Collectors::CpuAndWallTimeWorker",
248
+ .function = {
249
+ .dmark = cpu_and_wall_time_worker_typed_data_mark,
250
+ .dfree = RUBY_DEFAULT_FREE,
251
+ .dsize = NULL, // We don't track memory usage (although it'd be cool if we did!)
252
+ //.dcompact = NULL, // FIXME: Add support for compaction
253
+ },
254
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY
255
+ };
256
+
257
+ static VALUE _native_new(VALUE klass) {
258
+ struct cpu_and_wall_time_worker_state *state = ruby_xcalloc(1, sizeof(struct cpu_and_wall_time_worker_state));
259
+
260
+ state->gc_profiling_enabled = false;
261
+ state->allocation_counting_enabled = false;
262
+ state->no_signals_workaround_enabled = false;
263
+ state->dynamic_sampling_rate_enabled = true;
264
+ state->thread_context_collector_instance = Qnil;
265
+ state->idle_sampling_helper_instance = Qnil;
266
+ state->owner_thread = Qnil;
267
+ dynamic_sampling_rate_init(&state->dynamic_sampling_rate);
268
+ state->gc_tracepoint = Qnil;
269
+ state->object_allocation_tracepoint = Qnil;
270
+
271
+ atomic_init(&state->should_run, false);
272
+ state->failure_exception = Qnil;
273
+ state->stop_thread = Qnil;
274
+
275
+ state->during_sample = false;
276
+
277
+ reset_stats(state);
278
+
279
+ return state->self_instance = TypedData_Wrap_Struct(klass, &cpu_and_wall_time_worker_typed_data, state);
280
+ }
281
+
282
+ static VALUE _native_initialize(
283
+ DDTRACE_UNUSED VALUE _self,
284
+ VALUE self_instance,
285
+ VALUE thread_context_collector_instance,
286
+ VALUE gc_profiling_enabled,
287
+ VALUE idle_sampling_helper_instance,
288
+ VALUE allocation_counting_enabled,
289
+ VALUE no_signals_workaround_enabled,
290
+ VALUE dynamic_sampling_rate_enabled
291
+ ) {
292
+ ENFORCE_BOOLEAN(gc_profiling_enabled);
293
+ ENFORCE_BOOLEAN(allocation_counting_enabled);
294
+ ENFORCE_BOOLEAN(no_signals_workaround_enabled);
295
+ ENFORCE_BOOLEAN(dynamic_sampling_rate_enabled);
296
+
297
+ struct cpu_and_wall_time_worker_state *state;
298
+ TypedData_Get_Struct(self_instance, struct cpu_and_wall_time_worker_state, &cpu_and_wall_time_worker_typed_data, state);
299
+
300
+ state->gc_profiling_enabled = (gc_profiling_enabled == Qtrue);
301
+ state->allocation_counting_enabled = (allocation_counting_enabled == Qtrue);
302
+ state->no_signals_workaround_enabled = (no_signals_workaround_enabled == Qtrue);
303
+ state->dynamic_sampling_rate_enabled = (dynamic_sampling_rate_enabled == Qtrue);
304
+ state->thread_context_collector_instance = enforce_thread_context_collector_instance(thread_context_collector_instance);
305
+ state->idle_sampling_helper_instance = idle_sampling_helper_instance;
306
+ state->gc_tracepoint = rb_tracepoint_new(Qnil, RUBY_INTERNAL_EVENT_GC_ENTER | RUBY_INTERNAL_EVENT_GC_EXIT, on_gc_event, NULL /* unused */);
307
+ state->object_allocation_tracepoint = rb_tracepoint_new(Qnil, RUBY_INTERNAL_EVENT_NEWOBJ, on_newobj_event, NULL /* unused */);
308
+
309
+ return Qtrue;
310
+ }
311
+
312
+ // Since our state contains references to Ruby objects, we need to tell the Ruby GC about them
313
+ static void cpu_and_wall_time_worker_typed_data_mark(void *state_ptr) {
314
+ struct cpu_and_wall_time_worker_state *state = (struct cpu_and_wall_time_worker_state *) state_ptr;
315
+
316
+ rb_gc_mark(state->thread_context_collector_instance);
317
+ rb_gc_mark(state->idle_sampling_helper_instance);
318
+ rb_gc_mark(state->owner_thread);
319
+ rb_gc_mark(state->failure_exception);
320
+ rb_gc_mark(state->stop_thread);
321
+ rb_gc_mark(state->gc_tracepoint);
322
+ rb_gc_mark(state->object_allocation_tracepoint);
323
+ }
324
+
325
+ // Called in a background thread created in CpuAndWallTimeWorker#start
326
+ static VALUE _native_sampling_loop(DDTRACE_UNUSED VALUE _self, VALUE instance) {
327
+ struct cpu_and_wall_time_worker_state *state;
328
+ TypedData_Get_Struct(instance, struct cpu_and_wall_time_worker_state, &cpu_and_wall_time_worker_typed_data, state);
329
+
330
+ struct cpu_and_wall_time_worker_state *old_state = active_sampler_instance_state;
331
+ if (old_state != NULL) {
332
+ if (is_thread_alive(old_state->owner_thread)) {
333
+ rb_raise(
334
+ rb_eRuntimeError,
335
+ "Could not start CpuAndWallTimeWorker: There's already another instance of CpuAndWallTimeWorker active in a different thread"
336
+ );
337
+ } else {
338
+ // The previously active thread seems to have died without cleaning up after itself.
339
+ // In this case, we can still go ahead and start the profiler BUT we make sure to disable any existing tracepoint
340
+ // first as:
341
+ // a) If this is a new instance of the CpuAndWallTimeWorker, we don't want the tracepoint from the old instance
342
+ // being kept around
343
+ // b) If this is the same instance of the CpuAndWallTimeWorker if we call enable on a tracepoint that is already
344
+ // enabled, it will start firing more than once, see https://bugs.ruby-lang.org/issues/19114 for details.
345
+ disable_tracepoints(old_state);
346
+ }
347
+ }
348
+
349
+ // We use `stop_thread` to distinguish when `_native_stop` was called before we actually had a chance to start. In this
350
+ // situation we stop immediately and never even start the sampling trigger loop.
351
+ if (state->stop_thread == rb_thread_current()) return Qnil;
352
+
353
+ // Reset the dynamic sampling rate state, if any (reminder: the monotonic clock reference may change after a fork)
354
+ dynamic_sampling_rate_reset(&state->dynamic_sampling_rate);
355
+
356
+ // This write to a global is thread-safe BECAUSE we're still holding on to the global VM lock at this point
357
+ active_sampler_instance_state = state;
358
+ active_sampler_instance = instance;
359
+ state->owner_thread = rb_thread_current();
360
+
361
+ atomic_store(&state->should_run, true);
362
+
363
+ block_sigprof_signal_handler_from_running_in_current_thread(); // We want to interrupt the thread with the global VM lock, never this one
364
+
365
+ // Release GVL, get to the actual work!
366
+ int exception_state;
367
+ rb_protect(release_gvl_and_run_sampling_trigger_loop, instance, &exception_state);
368
+
369
+ // The sample trigger loop finished (either cleanly or with an error); let's clean up
370
+
371
+ disable_tracepoints(state);
372
+
373
+ active_sampler_instance_state = NULL;
374
+ active_sampler_instance = Qnil;
375
+ state->owner_thread = Qnil;
376
+
377
+ // If this `Thread` is about to die, why is this important? It's because Ruby caches native threads for a period after
378
+ // the `Thread` dies, and reuses them if a new Ruby `Thread` gets created. This means that while conceptually the
379
+ // worker background `Thread` is about to die, the low-level native OS thread can be reused for something else in the Ruby app.
380
+ // Then, the reused thread would "inherit" the SIGPROF blocking, which is... really unexpected.
381
+ // This actually caused a flaky test -- the `native_extension_spec.rb` creates a `Thread` and tries to specifically
382
+ // send SIGPROF signals to it, and oops it could fail if it got the reused native thread from the worker which still
383
+ // had SIGPROF delivery blocked. :hide_the_pain_harold:
384
+ unblock_sigprof_signal_handler_from_running_in_current_thread();
385
+
386
+ // Why replace and not use remove the signal handler? We do this because when a process receives a SIGPROF without
387
+ // having an explicit signal handler set up, the process will instantly terminate with a confusing
388
+ // "Profiling timer expired" message left behind. (This message doesn't come from us -- it's the default message for
389
+ // an unhandled SIGPROF. Pretty confusing UNIX/POSIX behavior...)
390
+ //
391
+ // Unfortunately, because signal delivery is asynchronous, there's no way to guarantee that there are no pending
392
+ // profiler-sent signals by the time we get here and want to clean up.
393
+ // @ivoanjo: I suspect this will never happen, but the cost of getting it wrong is really high (VM terminates) so this
394
+ // is a just-in-case situation.
395
+ //
396
+ // Note 2: This can raise exceptions as well, so make sure that all cleanups are done by the time we get here.
397
+ replace_sigprof_signal_handler_with_empty_handler(handle_sampling_signal);
398
+
399
+ // Ensure that instance is not garbage collected while the native sampling loop is running; this is probably not needed, but just in case
400
+ RB_GC_GUARD(instance);
401
+
402
+ if (exception_state) rb_jump_tag(exception_state); // Re-raise any exception that happened
403
+
404
+ return Qnil;
405
+ }
406
+
407
+ static VALUE _native_stop(DDTRACE_UNUSED VALUE _self, VALUE self_instance, VALUE worker_thread) {
408
+ struct cpu_and_wall_time_worker_state *state;
409
+ TypedData_Get_Struct(self_instance, struct cpu_and_wall_time_worker_state, &cpu_and_wall_time_worker_typed_data, state);
410
+
411
+ state->stop_thread = worker_thread;
412
+
413
+ return stop(self_instance, /* optional_exception: */ Qnil);
414
+ }
415
+
416
+ static VALUE stop(VALUE self_instance, VALUE optional_exception) {
417
+ struct cpu_and_wall_time_worker_state *state;
418
+ TypedData_Get_Struct(self_instance, struct cpu_and_wall_time_worker_state, &cpu_and_wall_time_worker_typed_data, state);
419
+
420
+ atomic_store(&state->should_run, false);
421
+ state->failure_exception = optional_exception;
422
+
423
+ // Disable the tracepoints as soon as possible, so the VM doesn't keep on calling them
424
+ disable_tracepoints(state);
425
+
426
+ return Qtrue;
427
+ }
428
+
429
+ // NOTE: Remember that this will run in the thread and within the scope of user code, including user C code.
430
+ // We need to be careful not to change any state that may be observed OR to restore it if we do. For instance, if anything
431
+ // we do here can set `errno`, then we must be careful to restore the old `errno` after the fact.
432
+ static void handle_sampling_signal(DDTRACE_UNUSED int _signal, DDTRACE_UNUSED siginfo_t *_info, DDTRACE_UNUSED void *_ucontext) {
433
+ struct cpu_and_wall_time_worker_state *state = active_sampler_instance_state; // Read from global variable, see "sampler global state safety" note above
434
+
435
+ // This can potentially happen if the CpuAndWallTimeWorker was stopped while the signal delivery was happening; nothing to do
436
+ if (state == NULL) return;
437
+
438
+ if (
439
+ !ruby_native_thread_p() || // Not a Ruby thread
440
+ !is_current_thread_holding_the_gvl() || // Not safe to enqueue a sample from this thread
441
+ !ddtrace_rb_ractor_main_p() // We're not on the main Ractor; we currently don't support profiling non-main Ractors
442
+ ) {
443
+ state->stats.signal_handler_wrong_thread++;
444
+ return;
445
+ }
446
+
447
+ // We implicitly assume there can be no concurrent nor nested calls to handle_sampling_signal because
448
+ // a) we get triggered using SIGPROF, and the docs state a second SIGPROF will not interrupt an existing one
449
+ // b) we validate we are in the thread that has the global VM lock; if a different thread gets a signal, it will return early
450
+ // because it will not have the global VM lock
451
+
452
+ // Note: rb_postponed_job_register_one ensures that if there's a previous sample_from_postponed_job queued for execution
453
+ // then we will not queue a second one. It does this by doing a linear scan on the existing jobs; in the future we
454
+ // may want to implement that check ourselves.
455
+
456
+ state->stats.signal_handler_enqueued_sample++;
457
+
458
+ // Note: If we ever want to get rid of rb_postponed_job_register_one, remember not to clobber Ruby exceptions, as
459
+ // this function does this helpful job for us now -- https://github.com/ruby/ruby/commit/a98e343d39c4d7bf1e2190b076720f32d9f298b3.
460
+ int result = rb_postponed_job_register_one(0, sample_from_postponed_job, NULL);
461
+
462
+ // Officially, the result of rb_postponed_job_register_one is documented as being opaque, but in practice it does not
463
+ // seem to have changed between Ruby 2.3 and 3.2, and so we track it as a debugging mechanism
464
+ switch (result) {
465
+ case 0:
466
+ state->stats.postponed_job_full++; break;
467
+ case 1:
468
+ state->stats.postponed_job_success++; break;
469
+ case 2:
470
+ state->stats.postponed_job_skipped_already_existed++; break;
471
+ default:
472
+ state->stats.postponed_job_unknown_result++;
473
+ }
474
+ }
475
+
476
+ // The actual sampling trigger loop always runs **without** the global vm lock.
477
+ static void *run_sampling_trigger_loop(void *state_ptr) {
478
+ struct cpu_and_wall_time_worker_state *state = (struct cpu_and_wall_time_worker_state *) state_ptr;
479
+
480
+ uint64_t minimum_time_between_signals = MILLIS_AS_NS(10);
481
+
482
+ while (atomic_load(&state->should_run)) {
483
+ state->stats.trigger_sample_attempts++;
484
+
485
+ if (state->no_signals_workaround_enabled) {
486
+ // In the no_signals_workaround_enabled mode, the profiler never sends SIGPROF signals.
487
+ //
488
+ // This is a fallback for a few incompatibilities and limitations -- see the code that decides when to enable
489
+ // `no_signals_workaround_enabled` in `Profiling::Component` for details.
490
+ //
491
+ // Thus, we instead pretty please ask Ruby to let us run. This means profiling data can be biased by when the Ruby
492
+ // scheduler chooses to schedule us.
493
+ state->stats.trigger_simulated_signal_delivery_attempts++;
494
+ grab_gvl_and_sample(); // Note: Can raise exceptions
495
+ } else {
496
+ current_gvl_owner owner = gvl_owner();
497
+ if (owner.valid) {
498
+ // Note that reading the GVL owner and sending them a signal is a race -- the Ruby VM keeps on executing while
499
+ // we're doing this, so we may still not signal the correct thread from time to time, but our signal handler
500
+ // includes a check to see if it got called in the right thread
501
+ pthread_kill(owner.owner, SIGPROF);
502
+ } else {
503
+ // If no thread owns the Global VM Lock, the application is probably idle at the moment. We still want to sample
504
+ // so we "ask a friend" (the IdleSamplingHelper component) to grab the GVL and simulate getting a SIGPROF.
505
+ //
506
+ // In a previous version of the code, we called `grab_gvl_and_sample` directly BUT this was problematic because
507
+ // Ruby may concurrently get busy and so the CpuAndWallTimeWorker would be blocked in line to acquire the GVL
508
+ // for an uncontrolled amount of time. (This can still happen to the IdleSamplingHelper, but the
509
+ // CpuAndWallTimeWorker will still be free to interrupt the Ruby VM and keep sampling for the entire blocking period).
510
+ state->stats.trigger_simulated_signal_delivery_attempts++;
511
+ idle_sampling_helper_request_action(state->idle_sampling_helper_instance, grab_gvl_and_sample);
512
+ }
513
+ }
514
+
515
+ sleep_for(minimum_time_between_signals);
516
+
517
+ // The dynamic sampling rate module keeps track of how long samples are taking, and in here we extend our sleep time
518
+ // to take that into account.
519
+ // Note that we deliberately should NOT combine this sleep_for with the one above because the result of
520
+ // `dynamic_sampling_rate_get_sleep` may have changed while the above sleep was ongoing.
521
+ uint64_t extra_sleep =
522
+ dynamic_sampling_rate_get_sleep(&state->dynamic_sampling_rate, monotonic_wall_time_now_ns(DO_NOT_RAISE_ON_FAILURE));
523
+ if (state->dynamic_sampling_rate_enabled && extra_sleep > 0) sleep_for(extra_sleep);
524
+ }
525
+
526
+ return NULL; // Unused
527
+ }
528
+
529
+ // This is called by the Ruby VM when it wants to shut down the background thread
530
+ static void interrupt_sampling_trigger_loop(void *state_ptr) {
531
+ struct cpu_and_wall_time_worker_state *state = (struct cpu_and_wall_time_worker_state *) state_ptr;
532
+
533
+ atomic_store(&state->should_run, false);
534
+ }
535
+
536
+ static void sample_from_postponed_job(DDTRACE_UNUSED void *_unused) {
537
+ struct cpu_and_wall_time_worker_state *state = active_sampler_instance_state; // Read from global variable, see "sampler global state safety" note above
538
+
539
+ // This can potentially happen if the CpuAndWallTimeWorker was stopped while the postponed job was waiting to be executed; nothing to do
540
+ if (state == NULL) return;
541
+
542
+ // @ivoanjo: I'm not sure this can ever happen because `handle_sampling_signal` only enqueues this callback if
543
+ // it's running on the main Ractor, but just in case...
544
+ if (!ddtrace_rb_ractor_main_p()) {
545
+ return; // We're not on the main Ractor; we currently don't support profiling non-main Ractors
546
+ }
547
+
548
+ state->during_sample = true;
549
+
550
+ // Rescue against any exceptions that happen during sampling
551
+ safely_call(rescued_sample_from_postponed_job, state->self_instance, state->self_instance);
552
+
553
+ state->during_sample = false;
554
+ }
555
+
556
+ static VALUE rescued_sample_from_postponed_job(VALUE self_instance) {
557
+ struct cpu_and_wall_time_worker_state *state;
558
+ TypedData_Get_Struct(self_instance, struct cpu_and_wall_time_worker_state, &cpu_and_wall_time_worker_typed_data, state);
559
+
560
+ long wall_time_ns_before_sample = monotonic_wall_time_now_ns(RAISE_ON_FAILURE);
561
+
562
+ if (state->dynamic_sampling_rate_enabled && !dynamic_sampling_rate_should_sample(&state->dynamic_sampling_rate, wall_time_ns_before_sample)) {
563
+ state->stats.skipped_sample_because_of_dynamic_sampling_rate++;
564
+ return Qnil;
565
+ }
566
+
567
+ state->stats.sampled++;
568
+
569
+ VALUE profiler_overhead_stack_thread = state->owner_thread; // Used to attribute profiler overhead to a different stack
570
+ thread_context_collector_sample(state->thread_context_collector_instance, wall_time_ns_before_sample, profiler_overhead_stack_thread);
571
+
572
+ long wall_time_ns_after_sample = monotonic_wall_time_now_ns(RAISE_ON_FAILURE);
573
+ long delta_ns = wall_time_ns_after_sample - wall_time_ns_before_sample;
574
+
575
+ // Guard against wall-time going backwards, see https://github.com/DataDog/dd-trace-rb/pull/2336 for discussion.
576
+ uint64_t sampling_time_ns = delta_ns < 0 ? 0 : delta_ns;
577
+
578
+ state->stats.sampling_time_ns_min = uint64_min_of(sampling_time_ns, state->stats.sampling_time_ns_min);
579
+ state->stats.sampling_time_ns_max = uint64_max_of(sampling_time_ns, state->stats.sampling_time_ns_max);
580
+ state->stats.sampling_time_ns_total += sampling_time_ns;
581
+
582
+ dynamic_sampling_rate_after_sample(&state->dynamic_sampling_rate, wall_time_ns_after_sample, sampling_time_ns);
583
+
584
+ // Return a dummy VALUE because we're called from rb_rescue2 which requires it
585
+ return Qnil;
586
+ }
587
+
588
+ static VALUE handle_sampling_failure(VALUE self_instance, VALUE exception) {
589
+ stop(self_instance, exception);
590
+ return Qnil;
591
+ }
592
+
593
+ // This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTimeWorker behavior using RSpec.
594
+ // It SHOULD NOT be used for other purposes.
595
+ static VALUE _native_current_sigprof_signal_handler(DDTRACE_UNUSED VALUE self) {
596
+ struct sigaction existing_signal_handler_config = {.sa_sigaction = NULL};
597
+ if (sigaction(SIGPROF, NULL, &existing_signal_handler_config) != 0) {
598
+ rb_sys_fail("Failed to probe existing handler");
599
+ }
600
+
601
+ if (existing_signal_handler_config.sa_sigaction == handle_sampling_signal) {
602
+ return ID2SYM(rb_intern("profiling"));
603
+ } else if (existing_signal_handler_config.sa_sigaction == empty_signal_handler) {
604
+ return ID2SYM(rb_intern("empty"));
605
+ } else if (existing_signal_handler_config.sa_sigaction != NULL) {
606
+ return ID2SYM(rb_intern("other"));
607
+ } else {
608
+ return Qnil;
609
+ }
610
+ }
611
+
612
+ static VALUE release_gvl_and_run_sampling_trigger_loop(VALUE instance) {
613
+ struct cpu_and_wall_time_worker_state *state;
614
+ TypedData_Get_Struct(instance, struct cpu_and_wall_time_worker_state, &cpu_and_wall_time_worker_typed_data, state);
615
+
616
+ // Final preparations: Setup signal handler and enable tracepoints. We run these here and not in `_native_sampling_loop`
617
+ // because they may raise exceptions.
618
+ install_sigprof_signal_handler(handle_sampling_signal, "handle_sampling_signal");
619
+ if (state->gc_profiling_enabled) rb_tracepoint_enable(state->gc_tracepoint);
620
+ if (state->allocation_counting_enabled) rb_tracepoint_enable(state->object_allocation_tracepoint);
621
+
622
+ rb_thread_call_without_gvl(run_sampling_trigger_loop, state, interrupt_sampling_trigger_loop, state);
623
+
624
+ // If we stopped sampling due to an exception, re-raise it (now in the worker thread)
625
+ if (state->failure_exception != Qnil) rb_exc_raise(state->failure_exception);
626
+
627
+ return Qnil;
628
+ }
629
+
630
+ // This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTimeWorker behavior using RSpec.
631
+ // It SHOULD NOT be used for other purposes.
632
+ static VALUE _native_is_running(DDTRACE_UNUSED VALUE self, VALUE instance) {
633
+ struct cpu_and_wall_time_worker_state *state = active_sampler_instance_state; // Read from global variable, see "sampler global state safety" note above
634
+
635
+ return (state != NULL && is_thread_alive(state->owner_thread) && state->self_instance == instance) ? Qtrue : Qfalse;
636
+ }
637
+
638
+ static void testing_signal_handler(DDTRACE_UNUSED int _signal, DDTRACE_UNUSED siginfo_t *_info, DDTRACE_UNUSED void *_ucontext) {
639
+ /* Does nothing on purpose */
640
+ }
641
+
642
+ // This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTimeWorker behavior using RSpec.
643
+ // It SHOULD NOT be used for other purposes.
644
+ static VALUE _native_install_testing_signal_handler(DDTRACE_UNUSED VALUE self) {
645
+ install_sigprof_signal_handler(testing_signal_handler, "testing_signal_handler");
646
+ return Qtrue;
647
+ }
648
+
649
+ // This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTimeWorker behavior using RSpec.
650
+ // It SHOULD NOT be used for other purposes.
651
+ static VALUE _native_remove_testing_signal_handler(DDTRACE_UNUSED VALUE self) {
652
+ remove_sigprof_signal_handler();
653
+ return Qtrue;
654
+ }
655
+
656
+ // This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTimeWorker behavior using RSpec.
657
+ // It SHOULD NOT be used for other purposes.
658
+ static VALUE _native_trigger_sample(DDTRACE_UNUSED VALUE self) {
659
+ sample_from_postponed_job(NULL);
660
+ return Qtrue;
661
+ }
662
+
663
+ // This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTimeWorker behavior using RSpec.
664
+ // It SHOULD NOT be used for other purposes.
665
+ static VALUE _native_gc_tracepoint(DDTRACE_UNUSED VALUE self, VALUE instance) {
666
+ struct cpu_and_wall_time_worker_state *state;
667
+ TypedData_Get_Struct(instance, struct cpu_and_wall_time_worker_state, &cpu_and_wall_time_worker_typed_data, state);
668
+
669
+ return state->gc_tracepoint;
670
+ }
671
+
672
+ // Implements tracking of cpu-time and wall-time spent doing GC. This function is called by Ruby from the `gc_tracepoint`
673
+ // when the RUBY_INTERNAL_EVENT_GC_ENTER and RUBY_INTERNAL_EVENT_GC_EXIT events are triggered.
674
+ //
675
+ // See the comments on
676
+ // * thread_context_collector_on_gc_start
677
+ // * thread_context_collector_on_gc_finish
678
+ // * thread_context_collector_sample_after_gc
679
+ //
680
+ // For the expected times in which to call them, and their assumptions.
681
+ //
682
+ // Safety: This function gets called while Ruby is doing garbage collection. While Ruby is doing garbage collection,
683
+ // *NO ALLOCATION* is allowed. This function, and any it calls must never trigger memory or object allocation.
684
+ // This includes exceptions and use of ruby_xcalloc (because xcalloc can trigger GC)!
685
+ static void on_gc_event(VALUE tracepoint_data, DDTRACE_UNUSED void *unused) {
686
+ if (!ddtrace_rb_ractor_main_p()) {
687
+ return; // We're not on the main Ractor; we currently don't support profiling non-main Ractors
688
+ }
689
+
690
+ int event = rb_tracearg_event_flag(rb_tracearg_from_tracepoint(tracepoint_data));
691
+ if (event != RUBY_INTERNAL_EVENT_GC_ENTER && event != RUBY_INTERNAL_EVENT_GC_EXIT) return; // Unknown event
692
+
693
+ struct cpu_and_wall_time_worker_state *state = active_sampler_instance_state; // Read from global variable, see "sampler global state safety" note above
694
+
695
+ // This should not happen in a normal situation because the tracepoint is always enabled after the instance is set
696
+ // and disabled before it is cleared, but just in case...
697
+ if (state == NULL) return;
698
+
699
+ if (event == RUBY_INTERNAL_EVENT_GC_ENTER) {
700
+ thread_context_collector_on_gc_start(state->thread_context_collector_instance);
701
+ } else if (event == RUBY_INTERNAL_EVENT_GC_EXIT) {
702
+ // Design: In an earlier iteration of this feature (see https://github.com/DataDog/dd-trace-rb/pull/2308) we
703
+ // actually had a single method to implement the behavior of both thread_context_collector_on_gc_finish
704
+ // and thread_context_collector_sample_after_gc (the latter is called via after_gc_from_postponed_job).
705
+ //
706
+ // Unfortunately, then we discovered the safety issue around no allocations, and thus decided to separate them -- so that
707
+ // the sampling could run outside the tight safety constraints of the garbage collection process.
708
+ //
709
+ // There is a downside: The sample is now taken very very shortly afterwards the GC finishes, and not immediately
710
+ // as the GC finishes, which means the stack captured may by affected by "skid", e.g. point slightly after where
711
+ // it should be pointing at.
712
+ // Alternatives to solve this would be to capture no stack for garbage collection (as we do for Java and .net);
713
+ // making the sampling process allocation-safe (very hard); or separate stack sampling from sample recording,
714
+ // e.g. enabling us to capture the stack in thread_context_collector_on_gc_finish and do the rest later
715
+ // (medium hard).
716
+
717
+ thread_context_collector_on_gc_finish(state->thread_context_collector_instance);
718
+ // We use rb_postponed_job_register_one to ask Ruby to run thread_context_collector_sample_after_gc after if
719
+ // fully finishes the garbage collection, so that one is allowed to do allocations and throw exceptions as usual.
720
+ //
721
+ // Note: If we ever want to get rid of rb_postponed_job_register_one, remember not to clobber Ruby exceptions, as
722
+ // this function does this helpful job for us now -- https://github.com/ruby/ruby/commit/a98e343d39c4d7bf1e2190b076720f32d9f298b3.
723
+ rb_postponed_job_register_one(0, after_gc_from_postponed_job, NULL);
724
+ }
725
+ }
726
+
727
+ static void after_gc_from_postponed_job(DDTRACE_UNUSED void *_unused) {
728
+ struct cpu_and_wall_time_worker_state *state = active_sampler_instance_state; // Read from global variable, see "sampler global state safety" note above
729
+
730
+ // This can potentially happen if the CpuAndWallTimeWorker was stopped while the postponed job was waiting to be executed; nothing to do
731
+ if (state == NULL) return;
732
+
733
+ // @ivoanjo: I'm not sure this can ever happen because `on_gc_event` only enqueues this callback if
734
+ // it's running on the main Ractor, but just in case...
735
+ if (!ddtrace_rb_ractor_main_p()) {
736
+ return; // We're not on the main Ractor; we currently don't support profiling non-main Ractors
737
+ }
738
+
739
+ state->during_sample = true;
740
+
741
+ // Trigger sampling using the Collectors::ThreadState; rescue against any exceptions that happen during sampling
742
+ safely_call(thread_context_collector_sample_after_gc, state->thread_context_collector_instance, state->self_instance);
743
+
744
+ state->during_sample = false;
745
+ }
746
+
747
+ // Equivalent to Ruby begin/rescue call, where we call a C function and jump to the exception handler if an
748
+ // exception gets raised within
749
+ static VALUE safely_call(VALUE (*function_to_call_safely)(VALUE), VALUE function_to_call_safely_arg, VALUE instance) {
750
+ VALUE exception_handler_function_arg = instance;
751
+ return rb_rescue2(
752
+ function_to_call_safely,
753
+ function_to_call_safely_arg,
754
+ handle_sampling_failure,
755
+ exception_handler_function_arg,
756
+ rb_eException, // rb_eException is the base class of all Ruby exceptions
757
+ 0 // Required by API to be the last argument
758
+ );
759
+ }
760
+
761
+ // This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTimeWorker behavior using RSpec.
762
+ // It SHOULD NOT be used for other purposes.
763
+ static VALUE _native_simulate_handle_sampling_signal(DDTRACE_UNUSED VALUE self) {
764
+ handle_sampling_signal(0, NULL, NULL);
765
+ return Qtrue;
766
+ }
767
+
768
+ // This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTimeWorker behavior using RSpec.
769
+ // It SHOULD NOT be used for other purposes.
770
+ static VALUE _native_simulate_sample_from_postponed_job(DDTRACE_UNUSED VALUE self) {
771
+ sample_from_postponed_job(NULL);
772
+ return Qtrue;
773
+ }
774
+
775
+ // After the Ruby VM forks, this method gets called in the child process to clean up any leftover state from the parent.
776
+ //
777
+ // Assumption: This method gets called BEFORE restarting profiling. Note that profiling-related tracepoints may still
778
+ // be active, so we make sure to disable them before calling into anything else, so that there are no components
779
+ // attempting to trigger samples at the same time as the reset is done.
780
+ //
781
+ // In the future, if we add more other components with tracepoints, we will need to coordinate stopping all such
782
+ // tracepoints before doing the other cleaning steps.
783
+ static VALUE _native_reset_after_fork(DDTRACE_UNUSED VALUE self, VALUE instance) {
784
+ struct cpu_and_wall_time_worker_state *state;
785
+ TypedData_Get_Struct(instance, struct cpu_and_wall_time_worker_state, &cpu_and_wall_time_worker_typed_data, state);
786
+
787
+ // Disable all tracepoints, so that there are no more attempts to mutate the profile
788
+ disable_tracepoints(state);
789
+
790
+ reset_stats(state);
791
+
792
+ // Remove all state from the `Collectors::ThreadState` and connected downstream components
793
+ rb_funcall(state->thread_context_collector_instance, rb_intern("reset_after_fork"), 0);
794
+
795
+ return Qtrue;
796
+ }
797
+
798
+ static VALUE _native_is_sigprof_blocked_in_current_thread(DDTRACE_UNUSED VALUE self) {
799
+ return is_sigprof_blocked_in_current_thread();
800
+ }
801
+
802
+ static VALUE _native_stats(DDTRACE_UNUSED VALUE self, VALUE instance) {
803
+ struct cpu_and_wall_time_worker_state *state;
804
+ TypedData_Get_Struct(instance, struct cpu_and_wall_time_worker_state, &cpu_and_wall_time_worker_typed_data, state);
805
+
806
+ VALUE pretty_sampling_time_ns_min = state->stats.sampling_time_ns_min == UINT64_MAX ? Qnil : ULL2NUM(state->stats.sampling_time_ns_min);
807
+ VALUE pretty_sampling_time_ns_max = state->stats.sampling_time_ns_max == 0 ? Qnil : ULL2NUM(state->stats.sampling_time_ns_max);
808
+ VALUE pretty_sampling_time_ns_total = state->stats.sampling_time_ns_total == 0 ? Qnil : ULL2NUM(state->stats.sampling_time_ns_total);
809
+ VALUE pretty_sampling_time_ns_avg =
810
+ state->stats.sampled == 0 ? Qnil : DBL2NUM(((double) state->stats.sampling_time_ns_total) / state->stats.sampled);
811
+
812
+ VALUE stats_as_hash = rb_hash_new();
813
+ VALUE arguments[] = {
814
+ ID2SYM(rb_intern("trigger_sample_attempts")), /* => */ UINT2NUM(state->stats.trigger_sample_attempts),
815
+ ID2SYM(rb_intern("trigger_simulated_signal_delivery_attempts")), /* => */ UINT2NUM(state->stats.trigger_simulated_signal_delivery_attempts),
816
+ ID2SYM(rb_intern("simulated_signal_delivery")), /* => */ UINT2NUM(state->stats.simulated_signal_delivery),
817
+ ID2SYM(rb_intern("signal_handler_enqueued_sample")), /* => */ UINT2NUM(state->stats.signal_handler_enqueued_sample),
818
+ ID2SYM(rb_intern("signal_handler_wrong_thread")), /* => */ UINT2NUM(state->stats.signal_handler_wrong_thread),
819
+ ID2SYM(rb_intern("sampled")), /* => */ UINT2NUM(state->stats.sampled),
820
+ ID2SYM(rb_intern("skipped_sample_because_of_dynamic_sampling_rate")), /* => */ UINT2NUM(state->stats.skipped_sample_because_of_dynamic_sampling_rate),
821
+ ID2SYM(rb_intern("postponed_job_skipped_already_existed")), /* => */ UINT2NUM(state->stats.postponed_job_skipped_already_existed),
822
+ ID2SYM(rb_intern("postponed_job_success")), /* => */ UINT2NUM(state->stats.postponed_job_success),
823
+ ID2SYM(rb_intern("postponed_job_full")), /* => */ UINT2NUM(state->stats.postponed_job_full),
824
+ ID2SYM(rb_intern("postponed_job_unknown_result")), /* => */ UINT2NUM(state->stats.postponed_job_unknown_result),
825
+ ID2SYM(rb_intern("sampling_time_ns_min")), /* => */ pretty_sampling_time_ns_min,
826
+ ID2SYM(rb_intern("sampling_time_ns_max")), /* => */ pretty_sampling_time_ns_max,
827
+ ID2SYM(rb_intern("sampling_time_ns_total")), /* => */ pretty_sampling_time_ns_total,
828
+ ID2SYM(rb_intern("sampling_time_ns_avg")), /* => */ pretty_sampling_time_ns_avg,
829
+ ID2SYM(rb_intern("allocations_during_sample")), /* => */ UINT2NUM(state->stats.allocations_during_sample),
830
+ };
831
+ for (long unsigned int i = 0; i < VALUE_COUNT(arguments); i += 2) rb_hash_aset(stats_as_hash, arguments[i], arguments[i+1]);
832
+ return stats_as_hash;
833
+ }
834
+
835
+ void *simulate_sampling_signal_delivery(DDTRACE_UNUSED void *_unused) {
836
+ struct cpu_and_wall_time_worker_state *state = active_sampler_instance_state; // Read from global variable, see "sampler global state safety" note above
837
+
838
+ // This can potentially happen if the CpuAndWallTimeWorker was stopped while the IdleSamplingHelper was trying to execute this action
839
+ if (state == NULL) return NULL;
840
+
841
+ state->stats.simulated_signal_delivery++;
842
+
843
+ // @ivoanjo: We could instead directly call sample_from_postponed_job, but I chose to go through the signal handler
844
+ // so that the simulated case is as close to the original one as well (including any metrics increases, etc).
845
+ handle_sampling_signal(0, NULL, NULL);
846
+
847
+ return NULL; // Unused
848
+ }
849
+
850
+ static void grab_gvl_and_sample(void) { rb_thread_call_with_gvl(simulate_sampling_signal_delivery, NULL); }
851
+
852
+ static void reset_stats(struct cpu_and_wall_time_worker_state *state) {
853
+ state->stats = (struct stats) {}; // Resets all stats back to zero
854
+ state->stats.sampling_time_ns_min = UINT64_MAX; // Since we always take the min between existing and latest sample
855
+ }
856
+
857
+ static void sleep_for(uint64_t time_ns) {
858
+ // As a simplification, we currently only support setting .tv_nsec
859
+ if (time_ns >= SECONDS_AS_NS(1)) {
860
+ grab_gvl_and_raise(rb_eArgError, "sleep_for can only sleep for less than 1 second, time_ns: %"PRIu64, time_ns);
861
+ }
862
+
863
+ struct timespec time_to_sleep = {.tv_nsec = time_ns};
864
+
865
+ while (nanosleep(&time_to_sleep, &time_to_sleep) != 0) {
866
+ if (errno == EINTR) {
867
+ // We were interrupted. nanosleep updates "time_to_sleep" to contain only the remaining time, so we just let the
868
+ // loop keep going.
869
+ } else {
870
+ ENFORCE_SUCCESS_NO_GVL(errno);
871
+ }
872
+ }
873
+ }
874
+
875
+ static VALUE _native_allocation_count(DDTRACE_UNUSED VALUE self) {
876
+ bool is_profiler_running = active_sampler_instance_state != NULL;
877
+
878
+ return is_profiler_running ? ULL2NUM(allocation_count) : Qnil;
879
+ }
880
+
881
+ // Implements memory-related profiling events. This function is called by Ruby via the `object_allocation_tracepoint`
882
+ // when the RUBY_INTERNAL_EVENT_NEWOBJ event is triggered.
883
+ static void on_newobj_event(DDTRACE_UNUSED VALUE tracepoint_data, DDTRACE_UNUSED void *unused) {
884
+ // Update thread-local allocation count
885
+ if (RB_UNLIKELY(allocation_count == UINT64_MAX)) {
886
+ allocation_count = 0;
887
+ } else {
888
+ allocation_count++;
889
+ }
890
+
891
+ struct cpu_and_wall_time_worker_state *state = active_sampler_instance_state; // Read from global variable, see "sampler global state safety" note above
892
+
893
+ // This should not happen in a normal situation because the tracepoint is always enabled after the instance is set
894
+ // and disabled before it is cleared, but just in case...
895
+ if (state == NULL) return;
896
+
897
+ // In a few cases, we may actually be allocating an object as part of profiler sampling. We don't want to recursively
898
+ // sample, so we just return early
899
+ if (state->during_sample) {
900
+ state->stats.allocations_during_sample++;
901
+ return;
902
+ }
903
+
904
+ // @ivoanjo: Strictly speaking, this is not needed because Ruby should not call the same tracepoint while a previous
905
+ // invocation is still pending, (e.g. it wouldn't call `on_newobj_event` while it's already running), but I decided
906
+ // to keep this here for consistency -- every call to the thread context (other than the special gc calls which are
907
+ // defined as not being able to allocate) sets this.
908
+ state->during_sample = true;
909
+
910
+ // TODO: Sampling goes here (calling into `thread_context_collector_sample_allocation`)
911
+
912
+ state->during_sample = false;
913
+ }
914
+
915
+ static void disable_tracepoints(struct cpu_and_wall_time_worker_state *state) {
916
+ rb_tracepoint_disable(state->gc_tracepoint);
917
+ rb_tracepoint_disable(state->object_allocation_tracepoint);
918
+ }
919
+
920
+ static VALUE _native_with_blocked_sigprof(DDTRACE_UNUSED VALUE self) {
921
+ block_sigprof_signal_handler_from_running_in_current_thread();
922
+ int exception_state;
923
+ VALUE result = rb_protect(rb_yield, Qundef, &exception_state);
924
+ unblock_sigprof_signal_handler_from_running_in_current_thread();
925
+
926
+ if (exception_state) {
927
+ rb_jump_tag(exception_state);
928
+ } else {
929
+ return result;
930
+ }
931
+ }