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,1001 @@
1
+ #include <ruby.h>
2
+
3
+ #include "collectors_thread_context.h"
4
+ #include "clock_id.h"
5
+ #include "collectors_stack.h"
6
+ #include "helpers.h"
7
+ #include "libdatadog_helpers.h"
8
+ #include "private_vm_api_access.h"
9
+ #include "stack_recorder.h"
10
+ #include "time_helpers.h"
11
+
12
+ // Used to trigger sampling of threads, based on external "events", such as:
13
+ // * periodic timer for cpu-time and wall-time
14
+ // * VM garbage collection events
15
+ // * VM object allocation events
16
+ //
17
+ // This file implements the native bits of the Datadog::Profiling::Collectors::ThreadContext class
18
+ //
19
+ // Triggering of this component (e.g. watching for the above "events") is implemented by Collectors::CpuAndWallTimeWorker.
20
+
21
+ // ---
22
+ // ## Tracking of cpu-time and wall-time spent during garbage collection
23
+ //
24
+ // This feature works by having a special state that a thread can be in: doing garbage collection. This state is
25
+ // tracked inside the thread's `per_thread_context.gc_tracking` data, and three functions, listed below. The functions
26
+ // will get called by the `Collectors::CpuAndWallTimeWorker` at very specific times in the VM lifetime.
27
+ //
28
+ // * `thread_context_collector_on_gc_start`: Called at the very beginning of the garbage collection process.
29
+ // The internal VM `during_gc` flag is set to `true`, but Ruby has not done any work yet.
30
+ // * `thread_context_collector_on_gc_finish`: Called at the very end of the garbage collection process.
31
+ // The internal VM `during_gc` flag is still set to `true`, but all the work has been done.
32
+ // * `thread_context_collector_sample_after_gc`: Called shortly after the garbage collection process.
33
+ // The internal VM `during_gc` flag is set to `false`.
34
+ //
35
+ // Inside this component, here's what happens inside those three functions:
36
+ //
37
+ // When `thread_context_collector_on_gc_start` gets called, the current cpu and wall-time get recorded to the thread
38
+ // context: `cpu_time_at_gc_start_ns` and `wall_time_at_gc_start_ns`.
39
+ //
40
+ // While these fields are set, regular samples (if any) do not account for any time that passes after these two
41
+ // timestamps.
42
+ //
43
+ // (Regular samples can still account for the time between the previous sample and the start of GC.)
44
+ //
45
+ // When `thread_context_collector_on_gc_finish` gets called, the current cpu and wall-time again get recorded to the
46
+ // thread context: `cpu_time_at_gc_finish_ns` and `wall_time_at_gc_finish_ns`.
47
+ //
48
+ // Finally, when `thread_context_collector_sample_after_gc` gets called, the following happens:
49
+ //
50
+ // 1. A sample gets taken, using the special `SAMPLE_IN_GC` sample type, which produces a stack with a placeholder
51
+ // `Garbage Collection` frame as the latest frame. This sample gets assigned the cpu-time and wall-time period that was
52
+ // recorded between calls to `on_gc_start` and `on_gc_finish`.
53
+ //
54
+ // 2. The thread is no longer marked as being in gc (all gc tracking fields get reset back to `INVALID_TIME`).
55
+ //
56
+ // 3. The `cpu_time_at_previous_sample_ns` and `wall_time_at_previous_sample_ns` get updated with the elapsed time in
57
+ // GC, so that all time is accounted for -- e.g. the next sample will not get "blamed" by time spent in GC.
58
+ //
59
+ // In an earlier attempt at implementing this functionality (https://github.com/DataDog/dd-trace-rb/pull/2308), we
60
+ // discovered that we needed to factor the sampling work away from `thread_context_collector_on_gc_finish` and into a
61
+ // separate `thread_context_collector_sample_after_gc` because (as documented in more detail below),
62
+ // `sample_after_gc` could trigger memory allocation in rare occasions (usually exceptions), which is actually not
63
+ // allowed to happen during Ruby's garbage collection start/finish hooks.
64
+ // ---
65
+
66
+ #define INVALID_TIME -1
67
+ #define THREAD_ID_LIMIT_CHARS 44 // Why 44? "#{2**64} (#{2**64})".size + 1 for \0
68
+ #define IS_WALL_TIME true
69
+ #define IS_NOT_WALL_TIME false
70
+ #define MISSING_TRACER_CONTEXT_KEY 0
71
+
72
+ static ID at_active_span_id; // id of :@active_span in Ruby
73
+ static ID at_active_trace_id; // id of :@active_trace in Ruby
74
+ static ID at_id_id; // id of :@id in Ruby
75
+ static ID at_resource_id; // id of :@resource in Ruby
76
+ static ID at_root_span_id; // id of :@root_span in Ruby
77
+ static ID at_type_id; // id of :@type in Ruby
78
+
79
+ // Contains state for a single ThreadContext instance
80
+ struct thread_context_collector_state {
81
+ // Note: Places in this file that usually need to be changed when this struct is changed are tagged with
82
+ // "Update this when modifying state struct"
83
+
84
+ // Required by Datadog::Profiling::Collectors::Stack as a scratch buffer during sampling
85
+ sampling_buffer *sampling_buffer;
86
+ // Hashmap <Thread Object, struct per_thread_context>
87
+ st_table *hash_map_per_thread_context;
88
+ // Datadog::Profiling::StackRecorder instance
89
+ VALUE recorder_instance;
90
+ // If the tracer is available and enabled, this will be the fiber-local symbol for accessing its running context,
91
+ // to enable code hotspots and endpoint aggregation.
92
+ // When not available, this is set to MISSING_TRACER_CONTEXT_KEY.
93
+ ID tracer_context_key;
94
+ // Track how many regular samples we've taken. Does not include garbage collection samples.
95
+ // Currently **outside** of stats struct because we also use it to decide when to clean the contexts, and thus this
96
+ // is not (just) a stat.
97
+ unsigned int sample_count;
98
+ // Reusable array to get list of threads
99
+ VALUE thread_list_buffer;
100
+ // Used to omit endpoint names (retrieved from tracer) from collected data
101
+ bool endpoint_collection_enabled;
102
+
103
+ struct stats {
104
+ // Track how many garbage collection samples we've taken.
105
+ unsigned int gc_samples;
106
+ // See thread_context_collector_on_gc_start for details
107
+ unsigned int gc_samples_missed_due_to_missing_context;
108
+ } stats;
109
+ };
110
+
111
+ // Tracks per-thread state
112
+ struct per_thread_context {
113
+ char thread_id[THREAD_ID_LIMIT_CHARS];
114
+ ddog_CharSlice thread_id_char_slice;
115
+ thread_cpu_time_id thread_cpu_time_id;
116
+ long cpu_time_at_previous_sample_ns; // Can be INVALID_TIME until initialized or if getting it fails for another reason
117
+ long wall_time_at_previous_sample_ns; // Can be INVALID_TIME until initialized
118
+
119
+ struct {
120
+ // Both of these fields are set by on_gc_start and kept until sample_after_gc is called.
121
+ // Outside of this window, they will be INVALID_TIME.
122
+ long cpu_time_at_start_ns;
123
+ long wall_time_at_start_ns;
124
+
125
+ // Both of these fields are set by on_gc_finish and kept until sample_after_gc is called.
126
+ // Outside of this window, they will be INVALID_TIME.
127
+ long cpu_time_at_finish_ns;
128
+ long wall_time_at_finish_ns;
129
+ } gc_tracking;
130
+ };
131
+
132
+ // Used to correlate profiles with traces
133
+ struct trace_identifiers {
134
+ bool valid;
135
+ uint64_t local_root_span_id;
136
+ uint64_t span_id;
137
+ VALUE trace_endpoint;
138
+ };
139
+
140
+ static void thread_context_collector_typed_data_mark(void *state_ptr);
141
+ static void thread_context_collector_typed_data_free(void *state_ptr);
142
+ static int hash_map_per_thread_context_mark(st_data_t key_thread, st_data_t _value, st_data_t _argument);
143
+ static int hash_map_per_thread_context_free_values(st_data_t _thread, st_data_t value_per_thread_context, st_data_t _argument);
144
+ static VALUE _native_new(VALUE klass);
145
+ static VALUE _native_initialize(
146
+ VALUE self,
147
+ VALUE collector_instance,
148
+ VALUE recorder_instance,
149
+ VALUE max_frames,
150
+ VALUE tracer_context_key,
151
+ VALUE endpoint_collection_enabled
152
+ );
153
+ static VALUE _native_sample(VALUE self, VALUE collector_instance, VALUE profiler_overhead_stack_thread);
154
+ static VALUE _native_on_gc_start(VALUE self, VALUE collector_instance);
155
+ static VALUE _native_on_gc_finish(VALUE self, VALUE collector_instance);
156
+ static VALUE _native_sample_after_gc(DDTRACE_UNUSED VALUE self, VALUE collector_instance);
157
+ void update_metrics_and_sample(
158
+ struct thread_context_collector_state *state,
159
+ VALUE thread_being_sampled,
160
+ VALUE profiler_overhead_stack_thread,
161
+ struct per_thread_context *thread_context,
162
+ long current_cpu_time_ns,
163
+ long current_monotonic_wall_time_ns
164
+ );
165
+ static void trigger_sample_for_thread(
166
+ struct thread_context_collector_state *state,
167
+ VALUE thread,
168
+ VALUE stack_from_thread,
169
+ struct per_thread_context *thread_context,
170
+ sample_values values,
171
+ sample_type type
172
+ );
173
+ static VALUE _native_thread_list(VALUE self);
174
+ static struct per_thread_context *get_or_create_context_for(VALUE thread, struct thread_context_collector_state *state);
175
+ static struct per_thread_context *get_context_for(VALUE thread, struct thread_context_collector_state *state);
176
+ static void initialize_context(VALUE thread, struct per_thread_context *thread_context);
177
+ static VALUE _native_inspect(VALUE self, VALUE collector_instance);
178
+ static VALUE per_thread_context_st_table_as_ruby_hash(struct thread_context_collector_state *state);
179
+ static int per_thread_context_as_ruby_hash(st_data_t key_thread, st_data_t value_context, st_data_t result_hash);
180
+ static VALUE stats_as_ruby_hash(struct thread_context_collector_state *state);
181
+ static void remove_context_for_dead_threads(struct thread_context_collector_state *state);
182
+ static int remove_if_dead_thread(st_data_t key_thread, st_data_t value_context, st_data_t _argument);
183
+ static VALUE _native_per_thread_context(VALUE self, VALUE collector_instance);
184
+ static long update_time_since_previous_sample(long *time_at_previous_sample_ns, long current_time_ns, long gc_start_time_ns, bool is_wall_time);
185
+ static long cpu_time_now_ns(struct per_thread_context *thread_context);
186
+ static long thread_id_for(VALUE thread);
187
+ static VALUE _native_stats(VALUE self, VALUE collector_instance);
188
+ static void trace_identifiers_for(struct thread_context_collector_state *state, VALUE thread, struct trace_identifiers *trace_identifiers_result);
189
+ static bool is_type_web(VALUE root_span_type);
190
+ static VALUE _native_reset_after_fork(DDTRACE_UNUSED VALUE self, VALUE collector_instance);
191
+ static VALUE thread_list(struct thread_context_collector_state *state);
192
+ static VALUE _native_sample_allocation(VALUE self, VALUE collector_instance, VALUE sample_weight);
193
+
194
+ void collectors_thread_context_init(VALUE profiling_module) {
195
+ VALUE collectors_module = rb_define_module_under(profiling_module, "Collectors");
196
+ VALUE collectors_thread_context_class = rb_define_class_under(collectors_module, "ThreadContext", rb_cObject);
197
+ // Hosts methods used for testing the native code using RSpec
198
+ VALUE testing_module = rb_define_module_under(collectors_thread_context_class, "Testing");
199
+
200
+ // Instances of the ThreadContext class are "TypedData" objects.
201
+ // "TypedData" objects are special objects in the Ruby VM that can wrap C structs.
202
+ // In this case, it wraps the thread_context_collector_state.
203
+ //
204
+ // Because Ruby doesn't know how to initialize native-level structs, we MUST override the allocation function for objects
205
+ // of this class so that we can manage this part. Not overriding or disabling the allocation function is a common
206
+ // gotcha for "TypedData" objects that can very easily lead to VM crashes, see for instance
207
+ // https://bugs.ruby-lang.org/issues/18007 for a discussion around this.
208
+ rb_define_alloc_func(collectors_thread_context_class, _native_new);
209
+
210
+ rb_define_singleton_method(collectors_thread_context_class, "_native_initialize", _native_initialize, 5);
211
+ rb_define_singleton_method(collectors_thread_context_class, "_native_inspect", _native_inspect, 1);
212
+ rb_define_singleton_method(collectors_thread_context_class, "_native_reset_after_fork", _native_reset_after_fork, 1);
213
+ rb_define_singleton_method(testing_module, "_native_sample", _native_sample, 2);
214
+ rb_define_singleton_method(testing_module, "_native_sample_allocation", _native_sample_allocation, 2);
215
+ rb_define_singleton_method(testing_module, "_native_on_gc_start", _native_on_gc_start, 1);
216
+ rb_define_singleton_method(testing_module, "_native_on_gc_finish", _native_on_gc_finish, 1);
217
+ rb_define_singleton_method(testing_module, "_native_sample_after_gc", _native_sample_after_gc, 1);
218
+ rb_define_singleton_method(testing_module, "_native_thread_list", _native_thread_list, 0);
219
+ rb_define_singleton_method(testing_module, "_native_per_thread_context", _native_per_thread_context, 1);
220
+ rb_define_singleton_method(testing_module, "_native_stats", _native_stats, 1);
221
+
222
+ at_active_span_id = rb_intern_const("@active_span");
223
+ at_active_trace_id = rb_intern_const("@active_trace");
224
+ at_id_id = rb_intern_const("@id");
225
+ at_resource_id = rb_intern_const("@resource");
226
+ at_root_span_id = rb_intern_const("@root_span");
227
+ at_type_id = rb_intern_const("@type");
228
+ }
229
+
230
+ // This structure is used to define a Ruby object that stores a pointer to a struct thread_context_collector_state
231
+ // See also https://github.com/ruby/ruby/blob/master/doc/extension.rdoc for how this works
232
+ static const rb_data_type_t thread_context_collector_typed_data = {
233
+ .wrap_struct_name = "Datadog::Profiling::Collectors::ThreadContext",
234
+ .function = {
235
+ .dmark = thread_context_collector_typed_data_mark,
236
+ .dfree = thread_context_collector_typed_data_free,
237
+ .dsize = NULL, // We don't track profile memory usage (although it'd be cool if we did!)
238
+ //.dcompact = NULL, // FIXME: Add support for compaction
239
+ },
240
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY
241
+ };
242
+
243
+ // This function is called by the Ruby GC to give us a chance to mark any Ruby objects that we're holding on to,
244
+ // so that they don't get garbage collected
245
+ static void thread_context_collector_typed_data_mark(void *state_ptr) {
246
+ struct thread_context_collector_state *state = (struct thread_context_collector_state *) state_ptr;
247
+
248
+ // Update this when modifying state struct
249
+ rb_gc_mark(state->recorder_instance);
250
+ st_foreach(state->hash_map_per_thread_context, hash_map_per_thread_context_mark, 0 /* unused */);
251
+ rb_gc_mark(state->thread_list_buffer);
252
+ }
253
+
254
+ static void thread_context_collector_typed_data_free(void *state_ptr) {
255
+ struct thread_context_collector_state *state = (struct thread_context_collector_state *) state_ptr;
256
+
257
+ // Update this when modifying state struct
258
+
259
+ // Important: Remember that we're only guaranteed to see here what's been set in _native_new, aka
260
+ // pointers that have been set NULL there may still be NULL here.
261
+ if (state->sampling_buffer != NULL) sampling_buffer_free(state->sampling_buffer);
262
+
263
+ // Free each entry in the map
264
+ st_foreach(state->hash_map_per_thread_context, hash_map_per_thread_context_free_values, 0 /* unused */);
265
+ // ...and then the map
266
+ st_free_table(state->hash_map_per_thread_context);
267
+
268
+ ruby_xfree(state);
269
+ }
270
+
271
+ // Mark Ruby thread references we keep as keys in hash_map_per_thread_context
272
+ static int hash_map_per_thread_context_mark(st_data_t key_thread, DDTRACE_UNUSED st_data_t _value, DDTRACE_UNUSED st_data_t _argument) {
273
+ VALUE thread = (VALUE) key_thread;
274
+ rb_gc_mark(thread);
275
+ return ST_CONTINUE;
276
+ }
277
+
278
+ // Used to clear each of the per_thread_contexts inside the hash_map_per_thread_context
279
+ static int hash_map_per_thread_context_free_values(DDTRACE_UNUSED st_data_t _thread, st_data_t value_per_thread_context, DDTRACE_UNUSED st_data_t _argument) {
280
+ struct per_thread_context *per_thread_context = (struct per_thread_context*) value_per_thread_context;
281
+ ruby_xfree(per_thread_context);
282
+ return ST_CONTINUE;
283
+ }
284
+
285
+ static VALUE _native_new(VALUE klass) {
286
+ struct thread_context_collector_state *state = ruby_xcalloc(1, sizeof(struct thread_context_collector_state));
287
+
288
+ // Update this when modifying state struct
289
+ state->sampling_buffer = NULL;
290
+ state->hash_map_per_thread_context =
291
+ // "numtable" is an awful name, but TL;DR it's what should be used when keys are `VALUE`s.
292
+ st_init_numtable();
293
+ state->recorder_instance = Qnil;
294
+ state->tracer_context_key = MISSING_TRACER_CONTEXT_KEY;
295
+ state->thread_list_buffer = rb_ary_new();
296
+ state->endpoint_collection_enabled = true;
297
+
298
+ return TypedData_Wrap_Struct(klass, &thread_context_collector_typed_data, state);
299
+ }
300
+
301
+ static VALUE _native_initialize(
302
+ DDTRACE_UNUSED VALUE _self,
303
+ VALUE collector_instance,
304
+ VALUE recorder_instance,
305
+ VALUE max_frames,
306
+ VALUE tracer_context_key,
307
+ VALUE endpoint_collection_enabled
308
+ ) {
309
+ ENFORCE_BOOLEAN(endpoint_collection_enabled);
310
+
311
+ struct thread_context_collector_state *state;
312
+ TypedData_Get_Struct(collector_instance, struct thread_context_collector_state, &thread_context_collector_typed_data, state);
313
+
314
+ int max_frames_requested = NUM2INT(max_frames);
315
+ if (max_frames_requested < 0) rb_raise(rb_eArgError, "Invalid max_frames: value must not be negative");
316
+
317
+ // Update this when modifying state struct
318
+ state->sampling_buffer = sampling_buffer_new(max_frames_requested);
319
+ // hash_map_per_thread_context is already initialized, nothing to do here
320
+ state->recorder_instance = enforce_recorder_instance(recorder_instance);
321
+ state->endpoint_collection_enabled = (endpoint_collection_enabled == Qtrue);
322
+
323
+ if (RTEST(tracer_context_key)) {
324
+ ENFORCE_TYPE(tracer_context_key, T_SYMBOL);
325
+ // Note about rb_to_id and dynamic symbols: calling `rb_to_id` prevents symbols from ever being garbage collected.
326
+ // In this case, we can't really escape this because as of this writing, ruby master still calls `rb_to_id` inside
327
+ // the implementation of Thread#[]= so any symbol that gets used as a key there will already be prevented from GC.
328
+ state->tracer_context_key = rb_to_id(tracer_context_key);
329
+ }
330
+
331
+ return Qtrue;
332
+ }
333
+
334
+ // This method exists only to enable testing Datadog::Profiling::Collectors::ThreadContext behavior using RSpec.
335
+ // It SHOULD NOT be used for other purposes.
336
+ static VALUE _native_sample(DDTRACE_UNUSED VALUE _self, VALUE collector_instance, VALUE profiler_overhead_stack_thread) {
337
+ if (!is_thread_alive(profiler_overhead_stack_thread)) rb_raise(rb_eArgError, "Unexpected: profiler_overhead_stack_thread is not alive");
338
+
339
+ thread_context_collector_sample(collector_instance, monotonic_wall_time_now_ns(RAISE_ON_FAILURE), profiler_overhead_stack_thread);
340
+ return Qtrue;
341
+ }
342
+
343
+ // This method exists only to enable testing Datadog::Profiling::Collectors::ThreadContext behavior using RSpec.
344
+ // It SHOULD NOT be used for other purposes.
345
+ static VALUE _native_on_gc_start(DDTRACE_UNUSED VALUE self, VALUE collector_instance) {
346
+ thread_context_collector_on_gc_start(collector_instance);
347
+ return Qtrue;
348
+ }
349
+
350
+ // This method exists only to enable testing Datadog::Profiling::Collectors::ThreadContext behavior using RSpec.
351
+ // It SHOULD NOT be used for other purposes.
352
+ static VALUE _native_on_gc_finish(DDTRACE_UNUSED VALUE self, VALUE collector_instance) {
353
+ thread_context_collector_on_gc_finish(collector_instance);
354
+ return Qtrue;
355
+ }
356
+
357
+ // This method exists only to enable testing Datadog::Profiling::Collectors::ThreadContext behavior using RSpec.
358
+ // It SHOULD NOT be used for other purposes.
359
+ static VALUE _native_sample_after_gc(DDTRACE_UNUSED VALUE self, VALUE collector_instance) {
360
+ thread_context_collector_sample_after_gc(collector_instance);
361
+ return Qtrue;
362
+ }
363
+
364
+ // This function gets called from the Collectors::CpuAndWallTimeWorker to trigger the actual sampling.
365
+ //
366
+ // Assumption 1: This function is called in a thread that is holding the Global VM Lock. Caller is responsible for enforcing this.
367
+ // Assumption 2: This function is allowed to raise exceptions. Caller is responsible for handling them, if needed.
368
+ // Assumption 3: This function IS NOT called from a signal handler. This function is not async-signal-safe.
369
+ // Assumption 4: This function IS NOT called in a reentrant way.
370
+ // Assumption 5: This function is called from the main Ractor (if Ruby has support for Ractors).
371
+ //
372
+ // The `profiler_overhead_stack_thread` is used to attribute the profiler overhead to a stack borrowed from a different thread
373
+ // (belonging to ddtrace), so that the overhead is visible in the profile rather than blamed on user code.
374
+ void thread_context_collector_sample(VALUE self_instance, long current_monotonic_wall_time_ns, VALUE profiler_overhead_stack_thread) {
375
+ struct thread_context_collector_state *state;
376
+ TypedData_Get_Struct(self_instance, struct thread_context_collector_state, &thread_context_collector_typed_data, state);
377
+
378
+ VALUE current_thread = rb_thread_current();
379
+ struct per_thread_context *current_thread_context = get_or_create_context_for(current_thread, state);
380
+ long cpu_time_at_sample_start_for_current_thread = cpu_time_now_ns(current_thread_context);
381
+
382
+ VALUE threads = thread_list(state);
383
+
384
+ const long thread_count = RARRAY_LEN(threads);
385
+ for (long i = 0; i < thread_count; i++) {
386
+ VALUE thread = RARRAY_AREF(threads, i);
387
+ struct per_thread_context *thread_context = get_or_create_context_for(thread, state);
388
+
389
+ // We account for cpu-time for the current thread in a different way -- we use the cpu-time at sampling start, to avoid
390
+ // blaming the time the profiler took on whatever's running on the thread right now
391
+ long current_cpu_time_ns = thread != current_thread ? cpu_time_now_ns(thread_context) : cpu_time_at_sample_start_for_current_thread;
392
+
393
+ update_metrics_and_sample(
394
+ state,
395
+ /* thread_being_sampled: */ thread,
396
+ /* stack_from_thread: */ thread,
397
+ thread_context,
398
+ current_cpu_time_ns,
399
+ current_monotonic_wall_time_ns
400
+ );
401
+ }
402
+
403
+ state->sample_count++;
404
+
405
+ // TODO: This seems somewhat overkill and inefficient to do often; right now we just do it every few samples
406
+ // but there's probably a better way to do this if we actually track when threads finish
407
+ if (state->sample_count % 100 == 0) remove_context_for_dead_threads(state);
408
+
409
+ update_metrics_and_sample(
410
+ state,
411
+ /* thread_being_sampled: */ current_thread,
412
+ /* stack_from_thread: */ profiler_overhead_stack_thread,
413
+ current_thread_context,
414
+ cpu_time_now_ns(current_thread_context),
415
+ monotonic_wall_time_now_ns(RAISE_ON_FAILURE)
416
+ );
417
+ }
418
+
419
+ void update_metrics_and_sample(
420
+ struct thread_context_collector_state *state,
421
+ VALUE thread_being_sampled,
422
+ VALUE stack_from_thread, // This can be different when attributing profiler overhead using a different stack
423
+ struct per_thread_context *thread_context,
424
+ long current_cpu_time_ns,
425
+ long current_monotonic_wall_time_ns
426
+ ) {
427
+ long cpu_time_elapsed_ns = update_time_since_previous_sample(
428
+ &thread_context->cpu_time_at_previous_sample_ns,
429
+ current_cpu_time_ns,
430
+ thread_context->gc_tracking.cpu_time_at_start_ns,
431
+ IS_NOT_WALL_TIME
432
+ );
433
+ long wall_time_elapsed_ns = update_time_since_previous_sample(
434
+ &thread_context->wall_time_at_previous_sample_ns,
435
+ current_monotonic_wall_time_ns,
436
+ thread_context->gc_tracking.wall_time_at_start_ns,
437
+ IS_WALL_TIME
438
+ );
439
+
440
+ trigger_sample_for_thread(
441
+ state,
442
+ thread_being_sampled,
443
+ stack_from_thread,
444
+ thread_context,
445
+ (sample_values) {.cpu_time_ns = cpu_time_elapsed_ns, .cpu_samples = 1, .wall_time_ns = wall_time_elapsed_ns},
446
+ SAMPLE_REGULAR
447
+ );
448
+ }
449
+
450
+ // This function gets called when Ruby is about to start running the Garbage Collector on the current thread.
451
+ // It updates the per_thread_context of the current thread to include the current cpu/wall times, to be used to later
452
+ // create a stack sample that blames the cpu/wall time spent from now until the end of the garbage collector work.
453
+ //
454
+ // Safety: This function gets called while Ruby is doing garbage collection. While Ruby is doing garbage collection,
455
+ // *NO ALLOCATION* is allowed. This function, and any it calls must never trigger memory or object allocation.
456
+ // This includes exceptions and use of ruby_xcalloc (because xcalloc can trigger GC)!
457
+ //
458
+ // Assumption 1: This function is called in a thread that is holding the Global VM Lock. Caller is responsible for enforcing this.
459
+ // Assumption 2: This function is called from the main Ractor (if Ruby has support for Ractors).
460
+ void thread_context_collector_on_gc_start(VALUE self_instance) {
461
+ struct thread_context_collector_state *state;
462
+ if (!rb_typeddata_is_kind_of(self_instance, &thread_context_collector_typed_data)) return;
463
+ // This should never fail the the above check passes
464
+ TypedData_Get_Struct(self_instance, struct thread_context_collector_state, &thread_context_collector_typed_data, state);
465
+
466
+ struct per_thread_context *thread_context = get_context_for(rb_thread_current(), state);
467
+
468
+ // If there was no previously-existing context for this thread, we won't allocate one (see safety). For now we just drop
469
+ // the GC sample, under the assumption that "a thread that is so new that we never sampled it even once before it triggers
470
+ // GC" is a rare enough case that we can just ignore it.
471
+ // We can always improve this later if we find that this happens often (and we have the counter to help us figure that out)!
472
+ if (thread_context == NULL) {
473
+ state->stats.gc_samples_missed_due_to_missing_context++;
474
+ return;
475
+ }
476
+
477
+ // If these fields are set, there's an existing GC sample that still needs to be written out by `sample_after_gc`.
478
+ //
479
+ // When can this happen? Because we don't have precise control over when `sample_after_gc` gets called (it will be
480
+ // called sometime after GC finishes), there is no way to guarantee that Ruby will not trigger more than one GC cycle
481
+ // before we can actually run that method.
482
+ //
483
+ // We handle this by collapsing multiple GC cycles into one. That is, if the following happens:
484
+ // `on_gc_start` (time=0) -> `on_gc_finish` (time=1) -> `on_gc_start` (time=2) -> `on_gc_finish` (time=3) -> `sample_after_gc`
485
+ // then we just use time=0 from the first on_gc_start and time=3 from the last on_gc_finish, e.g. we behave as if
486
+ // there was a single, longer GC period.
487
+ if (thread_context->gc_tracking.cpu_time_at_finish_ns != INVALID_TIME &&
488
+ thread_context->gc_tracking.wall_time_at_finish_ns != INVALID_TIME) return;
489
+
490
+ // Here we record the wall-time first and in on_gc_finish we record it second to avoid having wall-time be slightly < cpu-time
491
+ thread_context->gc_tracking.wall_time_at_start_ns = monotonic_wall_time_now_ns(DO_NOT_RAISE_ON_FAILURE);
492
+ thread_context->gc_tracking.cpu_time_at_start_ns = cpu_time_now_ns(thread_context);
493
+ }
494
+
495
+ // This function gets called when Ruby has finished running the Garbage Collector on the current thread.
496
+ // It updates the per_thread_context of the current thread to include the current cpu/wall times, to be used to later
497
+ // create a stack sample that blames the cpu/wall time spent from the start of garbage collector work until now.
498
+ //
499
+ // Safety: This function gets called while Ruby is doing garbage collection. While Ruby is doing garbage collection,
500
+ // *NO ALLOCATION* is allowed. This function, and any it calls must never trigger memory or object allocation.
501
+ // This includes exceptions and use of ruby_xcalloc (because xcalloc can trigger GC)!
502
+ //
503
+ // Assumption 1: This function is called in a thread that is holding the Global VM Lock. Caller is responsible for enforcing this.
504
+ // Assumption 2: This function is called from the main Ractor (if Ruby has support for Ractors).
505
+ void thread_context_collector_on_gc_finish(VALUE self_instance) {
506
+ struct thread_context_collector_state *state;
507
+ if (!rb_typeddata_is_kind_of(self_instance, &thread_context_collector_typed_data)) return;
508
+ // This should never fail the the above check passes
509
+ TypedData_Get_Struct(self_instance, struct thread_context_collector_state, &thread_context_collector_typed_data, state);
510
+
511
+ struct per_thread_context *thread_context = get_context_for(rb_thread_current(), state);
512
+
513
+ // If there was no previously-existing context for this thread, we won't allocate one (see safety). We keep a metric for
514
+ // how often this happens -- see on_gc_start.
515
+ if (thread_context == NULL) return;
516
+
517
+ if (thread_context->gc_tracking.cpu_time_at_start_ns == INVALID_TIME &&
518
+ thread_context->gc_tracking.wall_time_at_start_ns == INVALID_TIME) {
519
+ // If this happened, it means that on_gc_start was either never called for the thread OR it was called but no thread
520
+ // context existed at the time. The former can be the result of a bug, but since we can't distinguish them, we just
521
+ // do nothing.
522
+ return;
523
+ }
524
+
525
+ // Here we record the wall-time second and in on_gc_start we record it first to avoid having wall-time be slightly < cpu-time
526
+ thread_context->gc_tracking.cpu_time_at_finish_ns = cpu_time_now_ns(thread_context);
527
+ thread_context->gc_tracking.wall_time_at_finish_ns = monotonic_wall_time_now_ns(DO_NOT_RAISE_ON_FAILURE);
528
+ }
529
+
530
+ // This function gets called shortly after Ruby has finished running the Garbage Collector.
531
+ // It creates a new sample including the cpu and wall-time spent by the garbage collector work, and resets any
532
+ // GC-related tracking.
533
+ //
534
+ // Specifically, it will search for thread(s) which have gone through a cycle of on_gc_start/on_gc_finish
535
+ // and thus have cpu_time_at_start_ns, cpu_time_at_finish_ns, wall_time_at_start_ns, wall_time_at_finish_ns
536
+ // set on their context.
537
+ //
538
+ // Assumption 1: This function is called in a thread that is holding the Global VM Lock. Caller is responsible for enforcing this.
539
+ // Assumption 2: This function is allowed to raise exceptions. Caller is responsible for handling them, if needed.
540
+ // Assumption 3: Unlike `on_gc_start` and `on_gc_finish`, this method is allowed to allocate memory as needed.
541
+ // Assumption 4: This function is called from the main Ractor (if Ruby has support for Ractors).
542
+ VALUE thread_context_collector_sample_after_gc(VALUE self_instance) {
543
+ struct thread_context_collector_state *state;
544
+ TypedData_Get_Struct(self_instance, struct thread_context_collector_state, &thread_context_collector_typed_data, state);
545
+
546
+ VALUE threads = thread_list(state);
547
+ bool sampled_any_thread = false;
548
+
549
+ const long thread_count = RARRAY_LEN(threads);
550
+ for (long i = 0; i < thread_count; i++) {
551
+ VALUE thread = RARRAY_AREF(threads, i);
552
+ struct per_thread_context *thread_context = get_or_create_context_for(thread, state);
553
+
554
+ if (
555
+ thread_context->gc_tracking.cpu_time_at_start_ns == INVALID_TIME ||
556
+ thread_context->gc_tracking.cpu_time_at_finish_ns == INVALID_TIME ||
557
+ thread_context->gc_tracking.wall_time_at_start_ns == INVALID_TIME ||
558
+ thread_context->gc_tracking.wall_time_at_finish_ns == INVALID_TIME
559
+ ) continue; // Ignore threads with no/incomplete garbage collection data
560
+
561
+ sampled_any_thread = true;
562
+
563
+ long gc_cpu_time_elapsed_ns =
564
+ thread_context->gc_tracking.cpu_time_at_finish_ns - thread_context->gc_tracking.cpu_time_at_start_ns;
565
+ long gc_wall_time_elapsed_ns =
566
+ thread_context->gc_tracking.wall_time_at_finish_ns - thread_context->gc_tracking.wall_time_at_start_ns;
567
+
568
+ // We don't expect non-wall time to go backwards, so let's flag this as a bug
569
+ if (gc_cpu_time_elapsed_ns < 0) rb_raise(rb_eRuntimeError, "BUG: Unexpected negative gc_cpu_time_elapsed_ns between samples");
570
+ // Wall-time can actually go backwards (e.g. when the system clock gets set) so we can't assume time going backwards
571
+ // was a bug.
572
+ // @ivoanjo: I've also observed time going backwards spuriously on macOS, see discussion on
573
+ // https://github.com/DataDog/dd-trace-rb/pull/2336.
574
+ if (gc_wall_time_elapsed_ns < 0) gc_wall_time_elapsed_ns = 0;
575
+
576
+ if (thread_context->gc_tracking.wall_time_at_start_ns == 0 && thread_context->gc_tracking.wall_time_at_finish_ns != 0) {
577
+ // Avoid using wall-clock if we got 0 for a start (meaning there was an error) but not 0 for finish so we don't
578
+ // come up with a crazy value for the frame
579
+ rb_raise(rb_eRuntimeError, "BUG: Unexpected zero value for gc_tracking.wall_time_at_start_ns");
580
+ }
581
+
582
+ trigger_sample_for_thread(
583
+ state,
584
+ /* thread: */ thread,
585
+ /* stack_from_thread: */ thread,
586
+ thread_context,
587
+ (sample_values) {.cpu_time_ns = gc_cpu_time_elapsed_ns, .cpu_samples = 1, .wall_time_ns = gc_wall_time_elapsed_ns},
588
+ SAMPLE_IN_GC
589
+ );
590
+
591
+ // Mark thread as no longer in GC
592
+ thread_context->gc_tracking.cpu_time_at_start_ns = INVALID_TIME;
593
+ thread_context->gc_tracking.cpu_time_at_finish_ns = INVALID_TIME;
594
+ thread_context->gc_tracking.wall_time_at_start_ns = INVALID_TIME;
595
+ thread_context->gc_tracking.wall_time_at_finish_ns = INVALID_TIME;
596
+
597
+ // Update counters so that they won't include the time in GC during the next sample
598
+ if (thread_context->cpu_time_at_previous_sample_ns != INVALID_TIME) {
599
+ thread_context->cpu_time_at_previous_sample_ns += gc_cpu_time_elapsed_ns;
600
+ }
601
+ if (thread_context->wall_time_at_previous_sample_ns != INVALID_TIME) {
602
+ thread_context->wall_time_at_previous_sample_ns += gc_wall_time_elapsed_ns;
603
+ }
604
+ }
605
+
606
+ if (sampled_any_thread) state->stats.gc_samples++;
607
+
608
+ // Return a VALUE to make it easier to call this function from Ruby APIs that expect a return value (such as rb_rescue2)
609
+ return Qnil;
610
+ }
611
+
612
+ static void trigger_sample_for_thread(
613
+ struct thread_context_collector_state *state,
614
+ VALUE thread,
615
+ VALUE stack_from_thread, // This can be different when attributing profiler overhead using a different stack
616
+ struct per_thread_context *thread_context,
617
+ sample_values values,
618
+ sample_type type
619
+ ) {
620
+ int max_label_count =
621
+ 1 + // thread id
622
+ 1 + // thread name
623
+ 1 + // profiler overhead
624
+ 2; // local root span id and span id
625
+ ddog_prof_Label labels[max_label_count];
626
+ int label_pos = 0;
627
+
628
+ labels[label_pos++] = (ddog_prof_Label) {
629
+ .key = DDOG_CHARSLICE_C("thread id"),
630
+ .str = thread_context->thread_id_char_slice
631
+ };
632
+
633
+ VALUE thread_name = thread_name_for(thread);
634
+ if (thread_name != Qnil) {
635
+ labels[label_pos++] = (ddog_prof_Label) {
636
+ .key = DDOG_CHARSLICE_C("thread name"),
637
+ .str = char_slice_from_ruby_string(thread_name)
638
+ };
639
+ }
640
+
641
+ struct trace_identifiers trace_identifiers_result = {.valid = false, .trace_endpoint = Qnil};
642
+ trace_identifiers_for(state, thread, &trace_identifiers_result);
643
+
644
+ if (trace_identifiers_result.valid) {
645
+ labels[label_pos++] = (ddog_prof_Label) {.key = DDOG_CHARSLICE_C("local root span id"), .num = trace_identifiers_result.local_root_span_id};
646
+ labels[label_pos++] = (ddog_prof_Label) {.key = DDOG_CHARSLICE_C("span id"), .num = trace_identifiers_result.span_id};
647
+
648
+ if (trace_identifiers_result.trace_endpoint != Qnil) {
649
+ // The endpoint gets recorded in a different way because it is mutable in the tracer and can change during a
650
+ // trace.
651
+ //
652
+ // Instead of each sample for the same local_root_span_id getting a potentially-different endpoint,
653
+ // `record_endpoint` (via libdatadog) keeps a list of local_root_span_id values and their most-recently-seen
654
+ // endpoint values, and at serialization time the most-recently-seen endpoint is applied to all relevant samples.
655
+ //
656
+ // This is why the endpoint is not directly added in this function to the labels array, although it will later
657
+ // show up in the array in the output pprof.
658
+ record_endpoint(
659
+ state->recorder_instance,
660
+ trace_identifiers_result.local_root_span_id,
661
+ char_slice_from_ruby_string(trace_identifiers_result.trace_endpoint)
662
+ );
663
+ }
664
+ }
665
+
666
+ if (thread != stack_from_thread) {
667
+ labels[label_pos++] = (ddog_prof_Label) {
668
+ .key = DDOG_CHARSLICE_C("profiler overhead"),
669
+ .num = 1
670
+ };
671
+ }
672
+
673
+ // The number of times `label_pos++` shows up in this function needs to match `max_label_count`. To avoid "oops I
674
+ // forgot to update max_label_count" in the future, we've also added this validation.
675
+ // @ivoanjo: I wonder if C compilers are smart enough to statically prove when this check never triggers happens and
676
+ // remove it entirely.
677
+ if (label_pos > max_label_count) {
678
+ rb_raise(rb_eRuntimeError, "BUG: Unexpected label_pos (%d) > max_label_count (%d)", label_pos, max_label_count);
679
+ }
680
+
681
+ sample_thread(
682
+ stack_from_thread,
683
+ state->sampling_buffer,
684
+ state->recorder_instance,
685
+ values,
686
+ (ddog_prof_Slice_Label) {.ptr = labels, .len = label_pos},
687
+ type
688
+ );
689
+ }
690
+
691
+ // This method exists only to enable testing Datadog::Profiling::Collectors::ThreadContext behavior using RSpec.
692
+ // It SHOULD NOT be used for other purposes.
693
+ static VALUE _native_thread_list(DDTRACE_UNUSED VALUE _self) {
694
+ VALUE result = rb_ary_new();
695
+ ddtrace_thread_list(result);
696
+ return result;
697
+ }
698
+
699
+ static struct per_thread_context *get_or_create_context_for(VALUE thread, struct thread_context_collector_state *state) {
700
+ struct per_thread_context* thread_context = NULL;
701
+ st_data_t value_context = 0;
702
+
703
+ if (st_lookup(state->hash_map_per_thread_context, (st_data_t) thread, &value_context)) {
704
+ thread_context = (struct per_thread_context*) value_context;
705
+ } else {
706
+ thread_context = ruby_xcalloc(1, sizeof(struct per_thread_context));
707
+ initialize_context(thread, thread_context);
708
+ st_insert(state->hash_map_per_thread_context, (st_data_t) thread, (st_data_t) thread_context);
709
+ }
710
+
711
+ return thread_context;
712
+ }
713
+
714
+ static struct per_thread_context *get_context_for(VALUE thread, struct thread_context_collector_state *state) {
715
+ struct per_thread_context* thread_context = NULL;
716
+ st_data_t value_context = 0;
717
+
718
+ if (st_lookup(state->hash_map_per_thread_context, (st_data_t) thread, &value_context)) {
719
+ thread_context = (struct per_thread_context*) value_context;
720
+ }
721
+
722
+ return thread_context;
723
+ }
724
+
725
+ static void initialize_context(VALUE thread, struct per_thread_context *thread_context) {
726
+ snprintf(thread_context->thread_id, THREAD_ID_LIMIT_CHARS, "%"PRIu64" (%lu)", native_thread_id_for(thread), (unsigned long) thread_id_for(thread));
727
+ thread_context->thread_id_char_slice = (ddog_CharSlice) {.ptr = thread_context->thread_id, .len = strlen(thread_context->thread_id)};
728
+
729
+ thread_context->thread_cpu_time_id = thread_cpu_time_id_for(thread);
730
+
731
+ // These will get initialized during actual sampling
732
+ thread_context->cpu_time_at_previous_sample_ns = INVALID_TIME;
733
+ thread_context->wall_time_at_previous_sample_ns = INVALID_TIME;
734
+
735
+ // These will only be used during a GC operation
736
+ thread_context->gc_tracking.cpu_time_at_start_ns = INVALID_TIME;
737
+ thread_context->gc_tracking.cpu_time_at_finish_ns = INVALID_TIME;
738
+ thread_context->gc_tracking.wall_time_at_start_ns = INVALID_TIME;
739
+ thread_context->gc_tracking.wall_time_at_finish_ns = INVALID_TIME;
740
+ }
741
+
742
+ static VALUE _native_inspect(DDTRACE_UNUSED VALUE _self, VALUE collector_instance) {
743
+ struct thread_context_collector_state *state;
744
+ TypedData_Get_Struct(collector_instance, struct thread_context_collector_state, &thread_context_collector_typed_data, state);
745
+
746
+ VALUE result = rb_str_new2(" (native state)");
747
+
748
+ // Update this when modifying state struct
749
+ rb_str_concat(result, rb_sprintf(" hash_map_per_thread_context=%"PRIsVALUE, per_thread_context_st_table_as_ruby_hash(state)));
750
+ rb_str_concat(result, rb_sprintf(" recorder_instance=%"PRIsVALUE, state->recorder_instance));
751
+ VALUE tracer_context_key = state->tracer_context_key == MISSING_TRACER_CONTEXT_KEY ? Qnil : ID2SYM(state->tracer_context_key);
752
+ rb_str_concat(result, rb_sprintf(" tracer_context_key=%+"PRIsVALUE, tracer_context_key));
753
+ rb_str_concat(result, rb_sprintf(" sample_count=%u", state->sample_count));
754
+ rb_str_concat(result, rb_sprintf(" stats=%"PRIsVALUE, stats_as_ruby_hash(state)));
755
+ rb_str_concat(result, rb_sprintf(" endpoint_collection_enabled=%"PRIsVALUE, state->endpoint_collection_enabled ? Qtrue : Qfalse));
756
+
757
+ return result;
758
+ }
759
+
760
+ static VALUE per_thread_context_st_table_as_ruby_hash(struct thread_context_collector_state *state) {
761
+ VALUE result = rb_hash_new();
762
+ st_foreach(state->hash_map_per_thread_context, per_thread_context_as_ruby_hash, result);
763
+ return result;
764
+ }
765
+
766
+ static int per_thread_context_as_ruby_hash(st_data_t key_thread, st_data_t value_context, st_data_t result_hash) {
767
+ VALUE thread = (VALUE) key_thread;
768
+ struct per_thread_context *thread_context = (struct per_thread_context*) value_context;
769
+ VALUE result = (VALUE) result_hash;
770
+ VALUE context_as_hash = rb_hash_new();
771
+ rb_hash_aset(result, thread, context_as_hash);
772
+
773
+ VALUE arguments[] = {
774
+ ID2SYM(rb_intern("thread_id")), /* => */ rb_str_new2(thread_context->thread_id),
775
+ ID2SYM(rb_intern("thread_cpu_time_id_valid?")), /* => */ thread_context->thread_cpu_time_id.valid ? Qtrue : Qfalse,
776
+ ID2SYM(rb_intern("thread_cpu_time_id")), /* => */ CLOCKID2NUM(thread_context->thread_cpu_time_id.clock_id),
777
+ ID2SYM(rb_intern("cpu_time_at_previous_sample_ns")), /* => */ LONG2NUM(thread_context->cpu_time_at_previous_sample_ns),
778
+ ID2SYM(rb_intern("wall_time_at_previous_sample_ns")), /* => */ LONG2NUM(thread_context->wall_time_at_previous_sample_ns),
779
+
780
+ ID2SYM(rb_intern("gc_tracking.cpu_time_at_start_ns")), /* => */ LONG2NUM(thread_context->gc_tracking.cpu_time_at_start_ns),
781
+ ID2SYM(rb_intern("gc_tracking.cpu_time_at_finish_ns")), /* => */ LONG2NUM(thread_context->gc_tracking.cpu_time_at_finish_ns),
782
+ ID2SYM(rb_intern("gc_tracking.wall_time_at_start_ns")), /* => */ LONG2NUM(thread_context->gc_tracking.wall_time_at_start_ns),
783
+ ID2SYM(rb_intern("gc_tracking.wall_time_at_finish_ns")), /* => */ LONG2NUM(thread_context->gc_tracking.wall_time_at_finish_ns)
784
+ };
785
+ for (long unsigned int i = 0; i < VALUE_COUNT(arguments); i += 2) rb_hash_aset(context_as_hash, arguments[i], arguments[i+1]);
786
+
787
+ return ST_CONTINUE;
788
+ }
789
+
790
+ static VALUE stats_as_ruby_hash(struct thread_context_collector_state *state) {
791
+ // Update this when modifying state struct (stats inner struct)
792
+ VALUE stats_as_hash = rb_hash_new();
793
+ VALUE arguments[] = {
794
+ ID2SYM(rb_intern("gc_samples")), /* => */ UINT2NUM(state->stats.gc_samples),
795
+ ID2SYM(rb_intern("gc_samples_missed_due_to_missing_context")), /* => */ UINT2NUM(state->stats.gc_samples_missed_due_to_missing_context),
796
+ };
797
+ for (long unsigned int i = 0; i < VALUE_COUNT(arguments); i += 2) rb_hash_aset(stats_as_hash, arguments[i], arguments[i+1]);
798
+ return stats_as_hash;
799
+ }
800
+
801
+ static void remove_context_for_dead_threads(struct thread_context_collector_state *state) {
802
+ st_foreach(state->hash_map_per_thread_context, remove_if_dead_thread, 0 /* unused */);
803
+ }
804
+
805
+ static int remove_if_dead_thread(st_data_t key_thread, st_data_t value_context, DDTRACE_UNUSED st_data_t _argument) {
806
+ VALUE thread = (VALUE) key_thread;
807
+ struct per_thread_context* thread_context = (struct per_thread_context*) value_context;
808
+
809
+ if (is_thread_alive(thread)) return ST_CONTINUE;
810
+
811
+ ruby_xfree(thread_context);
812
+ return ST_DELETE;
813
+ }
814
+
815
+ // This method exists only to enable testing Datadog::Profiling::Collectors::ThreadContext behavior using RSpec.
816
+ // It SHOULD NOT be used for other purposes.
817
+ //
818
+ // Returns the whole contents of the per_thread_context structs being tracked.
819
+ static VALUE _native_per_thread_context(DDTRACE_UNUSED VALUE _self, VALUE collector_instance) {
820
+ struct thread_context_collector_state *state;
821
+ TypedData_Get_Struct(collector_instance, struct thread_context_collector_state, &thread_context_collector_typed_data, state);
822
+
823
+ return per_thread_context_st_table_as_ruby_hash(state);
824
+ }
825
+
826
+ static long update_time_since_previous_sample(long *time_at_previous_sample_ns, long current_time_ns, long gc_start_time_ns, bool is_wall_time) {
827
+ // If we didn't have a time for the previous sample, we use the current one
828
+ if (*time_at_previous_sample_ns == INVALID_TIME) *time_at_previous_sample_ns = current_time_ns;
829
+
830
+ bool is_thread_doing_gc = gc_start_time_ns != INVALID_TIME;
831
+ long elapsed_time_ns = -1;
832
+
833
+ if (is_thread_doing_gc) {
834
+ bool previous_sample_was_during_gc = gc_start_time_ns <= *time_at_previous_sample_ns;
835
+
836
+ if (previous_sample_was_during_gc) {
837
+ elapsed_time_ns = 0; // No time to account for -- any time since the last sample is going to get assigned to GC separately
838
+ } else {
839
+ elapsed_time_ns = gc_start_time_ns - *time_at_previous_sample_ns; // Capture time between previous sample and start of GC only
840
+ }
841
+
842
+ // Remaining time (from gc_start_time to current_time_ns) will be accounted for inside `sample_after_gc`
843
+ *time_at_previous_sample_ns = gc_start_time_ns;
844
+ } else {
845
+ elapsed_time_ns = current_time_ns - *time_at_previous_sample_ns; // Capture all time since previous sample
846
+ *time_at_previous_sample_ns = current_time_ns;
847
+ }
848
+
849
+ if (elapsed_time_ns < 0) {
850
+ if (is_wall_time) {
851
+ // Wall-time can actually go backwards (e.g. when the system clock gets set) so we can't assume time going backwards
852
+ // was a bug.
853
+ // @ivoanjo: I've also observed time going backwards spuriously on macOS, see discussion on
854
+ // https://github.com/DataDog/dd-trace-rb/pull/2336.
855
+ elapsed_time_ns = 0;
856
+ } else {
857
+ // We don't expect non-wall time to go backwards, so let's flag this as a bug
858
+ rb_raise(rb_eRuntimeError, "BUG: Unexpected negative elapsed_time_ns between samples");
859
+ }
860
+ }
861
+
862
+ return elapsed_time_ns;
863
+ }
864
+
865
+ // Safety: This function is assumed never to raise exceptions by callers
866
+ static long cpu_time_now_ns(struct per_thread_context *thread_context) {
867
+ thread_cpu_time cpu_time = thread_cpu_time_for(thread_context->thread_cpu_time_id);
868
+
869
+ if (!cpu_time.valid) {
870
+ // Invalidate previous state of the counter (if any), it's no longer accurate. We need to get two good reads
871
+ // in a row to have an accurate delta.
872
+ thread_context->cpu_time_at_previous_sample_ns = INVALID_TIME;
873
+ return 0;
874
+ }
875
+
876
+ return cpu_time.result_ns;
877
+ }
878
+
879
+ static long thread_id_for(VALUE thread) {
880
+ VALUE object_id = rb_obj_id(thread);
881
+
882
+ // The API docs for Ruby state that `rb_obj_id` COULD be a BIGNUM and that if you want to be really sure you don't
883
+ // get a BIGNUM, then you should use `rb_memory_id`. But `rb_memory_id` is less interesting because it's less visible
884
+ // at the user level than the result of calling `#object_id`.
885
+ //
886
+ // It also seems uncommon to me that we'd ever get a BIGNUM; on old Ruby versions (pre-GC compaction), the object id
887
+ // was the pointer to the object, so that's not going to be a BIGNUM; on modern Ruby versions, Ruby keeps
888
+ // a counter, and only increments it for objects for which `#object_id`/`rb_obj_id` is called (e.g. most objects
889
+ // won't actually have an object id allocated).
890
+ //
891
+ // So, for now, let's simplify: we only support FIXNUMs, and we won't break if we get a BIGNUM; we just won't
892
+ // record the thread_id (but samples will still be collected).
893
+ return FIXNUM_P(object_id) ? FIX2LONG(object_id) : -1;
894
+ }
895
+
896
+ VALUE enforce_thread_context_collector_instance(VALUE object) {
897
+ Check_TypedStruct(object, &thread_context_collector_typed_data);
898
+ return object;
899
+ }
900
+
901
+ // This method exists only to enable testing Datadog::Profiling::Collectors::ThreadContext behavior using RSpec.
902
+ // It SHOULD NOT be used for other purposes.
903
+ //
904
+ // Returns the whole contents of the per_thread_context structs being tracked.
905
+ static VALUE _native_stats(DDTRACE_UNUSED VALUE _self, VALUE collector_instance) {
906
+ struct thread_context_collector_state *state;
907
+ TypedData_Get_Struct(collector_instance, struct thread_context_collector_state, &thread_context_collector_typed_data, state);
908
+
909
+ return stats_as_ruby_hash(state);
910
+ }
911
+
912
+ // Assumption 1: This function is called in a thread that is holding the Global VM Lock. Caller is responsible for enforcing this.
913
+ static void trace_identifiers_for(struct thread_context_collector_state *state, VALUE thread, struct trace_identifiers *trace_identifiers_result) {
914
+ if (state->tracer_context_key == MISSING_TRACER_CONTEXT_KEY) return;
915
+
916
+ VALUE current_context = rb_thread_local_aref(thread, state->tracer_context_key);
917
+ if (current_context == Qnil) return;
918
+
919
+ VALUE active_trace = rb_ivar_get(current_context, at_active_trace_id /* @active_trace */);
920
+ if (active_trace == Qnil) return;
921
+
922
+ VALUE root_span = rb_ivar_get(active_trace, at_root_span_id /* @root_span */);
923
+ VALUE active_span = rb_ivar_get(active_trace, at_active_span_id /* @active_span */);
924
+ if (root_span == Qnil || active_span == Qnil) return;
925
+
926
+ VALUE numeric_local_root_span_id = rb_ivar_get(root_span, at_id_id /* @id */);
927
+ VALUE numeric_span_id = rb_ivar_get(active_span, at_id_id /* @id */);
928
+ if (numeric_local_root_span_id == Qnil || numeric_span_id == Qnil) return;
929
+
930
+ trace_identifiers_result->local_root_span_id = NUM2ULL(numeric_local_root_span_id);
931
+ trace_identifiers_result->span_id = NUM2ULL(numeric_span_id);
932
+
933
+ trace_identifiers_result->valid = true;
934
+
935
+ if (!state->endpoint_collection_enabled) return;
936
+
937
+ VALUE root_span_type = rb_ivar_get(root_span, at_type_id /* @type */);
938
+ if (root_span_type == Qnil || !is_type_web(root_span_type)) return;
939
+
940
+ VALUE trace_resource = rb_ivar_get(active_trace, at_resource_id /* @resource */);
941
+ if (RB_TYPE_P(trace_resource, T_STRING)) {
942
+ trace_identifiers_result->trace_endpoint = trace_resource;
943
+ } else if (trace_resource == Qnil) {
944
+ // Fall back to resource from span, if any
945
+ trace_identifiers_result->trace_endpoint = rb_ivar_get(root_span, at_resource_id /* @resource */);
946
+ }
947
+ }
948
+
949
+ static bool is_type_web(VALUE root_span_type) {
950
+ ENFORCE_TYPE(root_span_type, T_STRING);
951
+
952
+ return RSTRING_LEN(root_span_type) == strlen("web") &&
953
+ (memcmp("web", StringValuePtr(root_span_type), strlen("web")) == 0);
954
+ }
955
+
956
+ // After the Ruby VM forks, this method gets called in the child process to clean up any leftover state from the parent.
957
+ //
958
+ // Assumption: This method gets called BEFORE restarting profiling -- e.g. there are no components attempting to
959
+ // trigger samples at the same time.
960
+ static VALUE _native_reset_after_fork(DDTRACE_UNUSED VALUE self, VALUE collector_instance) {
961
+ struct thread_context_collector_state *state;
962
+ TypedData_Get_Struct(collector_instance, struct thread_context_collector_state, &thread_context_collector_typed_data, state);
963
+
964
+ st_clear(state->hash_map_per_thread_context);
965
+
966
+ state->stats = (struct stats) {}; // Resets all stats back to zero
967
+
968
+ rb_funcall(state->recorder_instance, rb_intern("reset_after_fork"), 0);
969
+
970
+ return Qtrue;
971
+ }
972
+
973
+ static VALUE thread_list(struct thread_context_collector_state *state) {
974
+ VALUE result = state->thread_list_buffer;
975
+ rb_ary_clear(result);
976
+ ddtrace_thread_list(result);
977
+ return result;
978
+ }
979
+
980
+ void thread_context_collector_sample_allocation(VALUE self_instance, unsigned int sample_weight) {
981
+ struct thread_context_collector_state *state;
982
+ TypedData_Get_Struct(self_instance, struct thread_context_collector_state, &thread_context_collector_typed_data, state);
983
+
984
+ VALUE current_thread = rb_thread_current();
985
+
986
+ trigger_sample_for_thread(
987
+ state,
988
+ /* thread: */ current_thread,
989
+ /* stack_from_thread: */ current_thread,
990
+ get_or_create_context_for(current_thread, state),
991
+ (sample_values) {.alloc_samples = sample_weight},
992
+ SAMPLE_REGULAR
993
+ );
994
+ }
995
+
996
+ // This method exists only to enable testing Datadog::Profiling::Collectors::ThreadContext behavior using RSpec.
997
+ // It SHOULD NOT be used for other purposes.
998
+ static VALUE _native_sample_allocation(DDTRACE_UNUSED VALUE self, VALUE collector_instance, VALUE sample_weight) {
999
+ thread_context_collector_sample_allocation(collector_instance, NUM2UINT(sample_weight));
1000
+ return Qtrue;
1001
+ }