ddtrace 0.50.0 → 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1107) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +22 -0
  3. data/.gitignore +7 -0
  4. data/CHANGELOG.md +196 -1
  5. data/CONTRIBUTING.md +1 -5
  6. data/ddtrace.gemspec +10 -1
  7. data/docs/DevelopmentGuide.md +16 -6
  8. data/docs/GettingStarted.md +108 -20
  9. data/docs/ProfilingDevelopment.md +33 -14
  10. data/ext/ddtrace_profiling_native_extension/extconf.rb +28 -0
  11. data/ext/ddtrace_profiling_native_extension/profiling.c +17 -0
  12. data/lib/datadog/ci/configuration/components.rb +1 -0
  13. data/lib/datadog/ci/configuration/settings.rb +1 -0
  14. data/lib/datadog/ci/context_flush.rb +1 -0
  15. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +2 -1
  16. data/lib/datadog/ci/contrib/cucumber/ext.rb +1 -0
  17. data/lib/datadog/ci/contrib/cucumber/formatter.rb +1 -0
  18. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +1 -0
  19. data/lib/datadog/ci/contrib/cucumber/integration.rb +1 -0
  20. data/lib/datadog/ci/contrib/cucumber/patcher.rb +1 -0
  21. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +2 -1
  22. data/lib/datadog/ci/contrib/rspec/example.rb +1 -0
  23. data/lib/datadog/ci/contrib/rspec/ext.rb +1 -0
  24. data/lib/datadog/ci/contrib/rspec/integration.rb +3 -2
  25. data/lib/datadog/ci/contrib/rspec/patcher.rb +1 -0
  26. data/lib/datadog/ci/ext/app_types.rb +1 -0
  27. data/lib/datadog/ci/ext/environment.rb +269 -92
  28. data/lib/datadog/ci/ext/settings.rb +1 -0
  29. data/lib/datadog/ci/ext/test.rb +8 -1
  30. data/lib/datadog/ci/extensions.rb +1 -0
  31. data/lib/datadog/ci/test.rb +14 -0
  32. data/lib/datadog/ci.rb +1 -0
  33. data/lib/datadog/contrib.rb +71 -0
  34. data/lib/datadog/core/environment/cgroup.rb +52 -0
  35. data/lib/datadog/core/environment/class_count.rb +20 -0
  36. data/lib/datadog/core/environment/container.rb +91 -0
  37. data/lib/datadog/core/environment/ext.rb +27 -0
  38. data/lib/datadog/core/environment/gc.rb +19 -0
  39. data/lib/datadog/core/environment/identity.rb +51 -0
  40. data/lib/datadog/core/environment/socket.rb +17 -0
  41. data/lib/datadog/core/environment/thread_count.rb +19 -0
  42. data/lib/datadog/core/environment/variable_helpers.rb +42 -0
  43. data/lib/datadog/core/environment/vm_cache.rb +46 -0
  44. data/lib/ddtrace/analytics.rb +1 -0
  45. data/lib/ddtrace/auto_instrument.rb +2 -0
  46. data/lib/ddtrace/auto_instrument_base.rb +1 -0
  47. data/lib/ddtrace/buffer.rb +7 -5
  48. data/lib/ddtrace/chunker.rb +1 -0
  49. data/lib/ddtrace/configuration/agent_settings_resolver.rb +108 -40
  50. data/lib/ddtrace/configuration/base.rb +4 -3
  51. data/lib/ddtrace/configuration/components.rb +54 -11
  52. data/lib/ddtrace/configuration/dependency_resolver.rb +1 -0
  53. data/lib/ddtrace/configuration/option.rb +1 -0
  54. data/lib/ddtrace/configuration/option_definition.rb +1 -0
  55. data/lib/ddtrace/configuration/option_definition_set.rb +1 -0
  56. data/lib/ddtrace/configuration/option_set.rb +1 -0
  57. data/lib/ddtrace/configuration/options.rb +1 -0
  58. data/lib/ddtrace/configuration/pin_setup.rb +1 -0
  59. data/lib/ddtrace/configuration/settings.rb +34 -9
  60. data/lib/ddtrace/configuration.rb +21 -2
  61. data/lib/ddtrace/context.rb +1 -0
  62. data/lib/ddtrace/context_flush.rb +1 -0
  63. data/lib/ddtrace/context_provider.rb +1 -0
  64. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +1 -0
  65. data/lib/ddtrace/contrib/action_cable/event.rb +1 -0
  66. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +1 -0
  67. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +1 -0
  68. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +1 -0
  69. data/lib/ddtrace/contrib/action_cable/events.rb +1 -0
  70. data/lib/ddtrace/contrib/action_cable/ext.rb +1 -0
  71. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +47 -0
  72. data/lib/ddtrace/contrib/action_cable/integration.rb +1 -0
  73. data/lib/ddtrace/contrib/action_cable/patcher.rb +2 -0
  74. data/lib/ddtrace/contrib/action_mailer/configuration/settings.rb +32 -0
  75. data/lib/ddtrace/contrib/action_mailer/event.rb +50 -0
  76. data/lib/ddtrace/contrib/action_mailer/events/deliver.rb +54 -0
  77. data/lib/ddtrace/contrib/action_mailer/events/process.rb +41 -0
  78. data/lib/ddtrace/contrib/action_mailer/events.rb +31 -0
  79. data/lib/ddtrace/contrib/action_mailer/ext.rb +32 -0
  80. data/lib/ddtrace/contrib/action_mailer/integration.rb +45 -0
  81. data/lib/ddtrace/contrib/action_mailer/patcher.rb +27 -0
  82. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +21 -10
  83. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +1 -0
  84. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +1 -0
  85. data/lib/ddtrace/contrib/action_pack/ext.rb +1 -0
  86. data/lib/ddtrace/contrib/action_pack/integration.rb +1 -0
  87. data/lib/ddtrace/contrib/action_pack/patcher.rb +1 -0
  88. data/lib/ddtrace/contrib/action_pack/utils.rb +1 -0
  89. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +1 -0
  90. data/lib/ddtrace/contrib/action_view/event.rb +1 -0
  91. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +1 -0
  92. data/lib/ddtrace/contrib/action_view/events/render_template.rb +1 -0
  93. data/lib/ddtrace/contrib/action_view/events.rb +1 -0
  94. data/lib/ddtrace/contrib/action_view/ext.rb +1 -0
  95. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +1 -0
  96. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +1 -0
  97. data/lib/ddtrace/contrib/action_view/integration.rb +1 -0
  98. data/lib/ddtrace/contrib/action_view/patcher.rb +1 -0
  99. data/lib/ddtrace/contrib/action_view/utils.rb +1 -0
  100. data/lib/ddtrace/contrib/active_job/configuration/settings.rb +33 -0
  101. data/lib/ddtrace/contrib/active_job/event.rb +54 -0
  102. data/lib/ddtrace/contrib/active_job/events/discard.rb +46 -0
  103. data/lib/ddtrace/contrib/active_job/events/enqueue.rb +45 -0
  104. data/lib/ddtrace/contrib/active_job/events/enqueue_at.rb +45 -0
  105. data/lib/ddtrace/contrib/active_job/events/enqueue_retry.rb +47 -0
  106. data/lib/ddtrace/contrib/active_job/events/perform.rb +45 -0
  107. data/lib/ddtrace/contrib/active_job/events/retry_stopped.rb +46 -0
  108. data/lib/ddtrace/contrib/active_job/events.rb +39 -0
  109. data/lib/ddtrace/contrib/active_job/ext.rb +32 -0
  110. data/lib/ddtrace/contrib/active_job/integration.rb +46 -0
  111. data/lib/ddtrace/contrib/active_job/log_injection.rb +21 -0
  112. data/lib/ddtrace/contrib/active_job/patcher.rb +33 -0
  113. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +1 -0
  114. data/lib/ddtrace/contrib/active_model_serializers/event.rb +1 -0
  115. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +1 -0
  116. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +1 -0
  117. data/lib/ddtrace/contrib/active_model_serializers/events.rb +1 -0
  118. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +1 -0
  119. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +1 -0
  120. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +1 -0
  121. data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +1 -0
  122. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +3 -2
  123. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +1 -0
  124. data/lib/ddtrace/contrib/active_record/event.rb +1 -0
  125. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +1 -0
  126. data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -0
  127. data/lib/ddtrace/contrib/active_record/events.rb +1 -0
  128. data/lib/ddtrace/contrib/active_record/ext.rb +1 -0
  129. data/lib/ddtrace/contrib/active_record/integration.rb +1 -0
  130. data/lib/ddtrace/contrib/active_record/patcher.rb +1 -0
  131. data/lib/ddtrace/contrib/active_record/utils.rb +4 -3
  132. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +1 -0
  133. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +1 -0
  134. data/lib/ddtrace/contrib/active_support/cache/redis.rb +1 -0
  135. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +1 -0
  136. data/lib/ddtrace/contrib/active_support/ext.rb +1 -0
  137. data/lib/ddtrace/contrib/active_support/integration.rb +1 -0
  138. data/lib/ddtrace/contrib/active_support/notifications/event.rb +1 -0
  139. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +1 -0
  140. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +1 -0
  141. data/lib/ddtrace/contrib/active_support/patcher.rb +1 -0
  142. data/lib/ddtrace/contrib/analytics.rb +1 -0
  143. data/lib/ddtrace/contrib/auto_instrument.rb +2 -2
  144. data/lib/ddtrace/contrib/aws/configuration/settings.rb +1 -0
  145. data/lib/ddtrace/contrib/aws/ext.rb +1 -0
  146. data/lib/ddtrace/contrib/aws/instrumentation.rb +1 -0
  147. data/lib/ddtrace/contrib/aws/integration.rb +1 -0
  148. data/lib/ddtrace/contrib/aws/parsed_context.rb +1 -0
  149. data/lib/ddtrace/contrib/aws/patcher.rb +2 -1
  150. data/lib/ddtrace/contrib/aws/services.rb +1 -0
  151. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +1 -0
  152. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -0
  153. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
  154. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +1 -0
  155. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +1 -0
  156. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +2 -0
  157. data/lib/ddtrace/contrib/configurable.rb +1 -0
  158. data/lib/ddtrace/contrib/configuration/resolver.rb +1 -0
  159. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +1 -0
  160. data/lib/ddtrace/contrib/configuration/settings.rb +1 -0
  161. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +1 -0
  162. data/lib/ddtrace/contrib/dalli/ext.rb +1 -0
  163. data/lib/ddtrace/contrib/dalli/instrumentation.rb +1 -0
  164. data/lib/ddtrace/contrib/dalli/integration.rb +1 -0
  165. data/lib/ddtrace/contrib/dalli/patcher.rb +1 -0
  166. data/lib/ddtrace/contrib/dalli/quantize.rb +1 -0
  167. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +1 -0
  168. data/lib/ddtrace/contrib/delayed_job/ext.rb +1 -0
  169. data/lib/ddtrace/contrib/delayed_job/integration.rb +1 -0
  170. data/lib/ddtrace/contrib/delayed_job/patcher.rb +1 -0
  171. data/lib/ddtrace/contrib/delayed_job/plugin.rb +1 -0
  172. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +1 -0
  173. data/lib/ddtrace/contrib/elasticsearch/ext.rb +1 -0
  174. data/lib/ddtrace/contrib/elasticsearch/integration.rb +1 -0
  175. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -0
  176. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -0
  177. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +1 -0
  178. data/lib/ddtrace/contrib/ethon/easy_patch.rb +1 -0
  179. data/lib/ddtrace/contrib/ethon/ext.rb +1 -0
  180. data/lib/ddtrace/contrib/ethon/integration.rb +1 -0
  181. data/lib/ddtrace/contrib/ethon/multi_patch.rb +1 -0
  182. data/lib/ddtrace/contrib/ethon/patcher.rb +2 -0
  183. data/lib/ddtrace/contrib/excon/configuration/settings.rb +1 -0
  184. data/lib/ddtrace/contrib/excon/ext.rb +1 -0
  185. data/lib/ddtrace/contrib/excon/integration.rb +1 -0
  186. data/lib/ddtrace/contrib/excon/middleware.rb +1 -0
  187. data/lib/ddtrace/contrib/excon/patcher.rb +1 -0
  188. data/lib/ddtrace/contrib/extensions.rb +37 -11
  189. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +1 -0
  190. data/lib/ddtrace/contrib/faraday/connection.rb +1 -0
  191. data/lib/ddtrace/contrib/faraday/ext.rb +1 -0
  192. data/lib/ddtrace/contrib/faraday/integration.rb +1 -0
  193. data/lib/ddtrace/contrib/faraday/middleware.rb +1 -0
  194. data/lib/ddtrace/contrib/faraday/patcher.rb +1 -0
  195. data/lib/ddtrace/contrib/faraday/rack_builder.rb +1 -0
  196. data/lib/ddtrace/contrib/grape/configuration/settings.rb +1 -0
  197. data/lib/ddtrace/contrib/grape/endpoint.rb +26 -16
  198. data/lib/ddtrace/contrib/grape/ext.rb +1 -0
  199. data/lib/ddtrace/contrib/grape/instrumentation.rb +2 -1
  200. data/lib/ddtrace/contrib/grape/integration.rb +1 -0
  201. data/lib/ddtrace/contrib/grape/patcher.rb +1 -0
  202. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +1 -0
  203. data/lib/ddtrace/contrib/graphql/ext.rb +1 -0
  204. data/lib/ddtrace/contrib/graphql/integration.rb +1 -0
  205. data/lib/ddtrace/contrib/graphql/patcher.rb +1 -0
  206. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +2 -0
  207. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -0
  208. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +3 -4
  209. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +5 -0
  210. data/lib/ddtrace/contrib/grpc/ext.rb +1 -0
  211. data/lib/ddtrace/contrib/grpc/integration.rb +1 -0
  212. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +1 -0
  213. data/lib/ddtrace/contrib/grpc/patcher.rb +2 -0
  214. data/lib/ddtrace/contrib/http/circuit_breaker.rb +1 -0
  215. data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
  216. data/lib/ddtrace/contrib/http/ext.rb +1 -0
  217. data/lib/ddtrace/contrib/http/instrumentation.rb +1 -0
  218. data/lib/ddtrace/contrib/http/integration.rb +1 -0
  219. data/lib/ddtrace/contrib/http/patcher.rb +1 -0
  220. data/lib/ddtrace/contrib/http_annotation_helper.rb +1 -0
  221. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +1 -0
  222. data/lib/ddtrace/contrib/httpclient/ext.rb +1 -0
  223. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +1 -0
  224. data/lib/ddtrace/contrib/httpclient/integration.rb +1 -0
  225. data/lib/ddtrace/contrib/httpclient/patcher.rb +2 -1
  226. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +1 -0
  227. data/lib/ddtrace/contrib/httprb/ext.rb +1 -0
  228. data/lib/ddtrace/contrib/httprb/instrumentation.rb +1 -0
  229. data/lib/ddtrace/contrib/httprb/integration.rb +1 -0
  230. data/lib/ddtrace/contrib/httprb/patcher.rb +2 -1
  231. data/lib/ddtrace/contrib/integration.rb +1 -0
  232. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +1 -0
  233. data/lib/ddtrace/contrib/kafka/consumer_event.rb +1 -0
  234. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +1 -0
  235. data/lib/ddtrace/contrib/kafka/event.rb +1 -0
  236. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +1 -0
  237. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +1 -0
  238. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +1 -0
  239. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +1 -0
  240. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +1 -0
  241. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +1 -0
  242. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +1 -0
  243. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
  244. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +1 -0
  245. data/lib/ddtrace/contrib/kafka/events.rb +1 -0
  246. data/lib/ddtrace/contrib/kafka/ext.rb +1 -0
  247. data/lib/ddtrace/contrib/kafka/integration.rb +1 -0
  248. data/lib/ddtrace/contrib/kafka/patcher.rb +1 -0
  249. data/lib/ddtrace/contrib/lograge/configuration/settings.rb +19 -0
  250. data/lib/ddtrace/contrib/lograge/ext.rb +11 -0
  251. data/lib/ddtrace/contrib/lograge/instrumentation.rb +39 -0
  252. data/lib/ddtrace/contrib/lograge/integration.rb +46 -0
  253. data/lib/ddtrace/contrib/lograge/patcher.rb +26 -0
  254. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +1 -0
  255. data/lib/ddtrace/contrib/mongodb/ext.rb +1 -0
  256. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +1 -0
  257. data/lib/ddtrace/contrib/mongodb/integration.rb +1 -0
  258. data/lib/ddtrace/contrib/mongodb/parsers.rb +1 -0
  259. data/lib/ddtrace/contrib/mongodb/patcher.rb +1 -0
  260. data/lib/ddtrace/contrib/mongodb/subscribers.rb +1 -0
  261. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +1 -0
  262. data/lib/ddtrace/contrib/mysql2/ext.rb +1 -0
  263. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -0
  264. data/lib/ddtrace/contrib/mysql2/integration.rb +1 -0
  265. data/lib/ddtrace/contrib/mysql2/patcher.rb +1 -0
  266. data/lib/ddtrace/contrib/patchable.rb +1 -0
  267. data/lib/ddtrace/contrib/patcher.rb +2 -1
  268. data/lib/ddtrace/contrib/presto/configuration/settings.rb +1 -0
  269. data/lib/ddtrace/contrib/presto/ext.rb +1 -0
  270. data/lib/ddtrace/contrib/presto/instrumentation.rb +1 -0
  271. data/lib/ddtrace/contrib/presto/integration.rb +1 -0
  272. data/lib/ddtrace/contrib/presto/patcher.rb +1 -0
  273. data/lib/ddtrace/contrib/qless/configuration/settings.rb +1 -0
  274. data/lib/ddtrace/contrib/qless/ext.rb +1 -0
  275. data/lib/ddtrace/contrib/qless/integration.rb +1 -0
  276. data/lib/ddtrace/contrib/qless/patcher.rb +2 -0
  277. data/lib/ddtrace/contrib/qless/qless_job.rb +1 -0
  278. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +1 -0
  279. data/lib/ddtrace/contrib/que/configuration/settings.rb +1 -0
  280. data/lib/ddtrace/contrib/que/ext.rb +1 -0
  281. data/lib/ddtrace/contrib/que/integration.rb +1 -0
  282. data/lib/ddtrace/contrib/que/patcher.rb +1 -0
  283. data/lib/ddtrace/contrib/que/tracer.rb +1 -0
  284. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -0
  285. data/lib/ddtrace/contrib/racecar/event.rb +1 -0
  286. data/lib/ddtrace/contrib/racecar/events/batch.rb +1 -0
  287. data/lib/ddtrace/contrib/racecar/events/consume.rb +1 -0
  288. data/lib/ddtrace/contrib/racecar/events/message.rb +1 -0
  289. data/lib/ddtrace/contrib/racecar/events.rb +1 -0
  290. data/lib/ddtrace/contrib/racecar/ext.rb +1 -0
  291. data/lib/ddtrace/contrib/racecar/integration.rb +1 -0
  292. data/lib/ddtrace/contrib/racecar/patcher.rb +1 -0
  293. data/lib/ddtrace/contrib/rack/configuration/settings.rb +1 -0
  294. data/lib/ddtrace/contrib/rack/ext.rb +1 -0
  295. data/lib/ddtrace/contrib/rack/integration.rb +1 -0
  296. data/lib/ddtrace/contrib/rack/middlewares.rb +2 -1
  297. data/lib/ddtrace/contrib/rack/patcher.rb +1 -0
  298. data/lib/ddtrace/contrib/rack/request_queue.rb +1 -0
  299. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +1 -1
  300. data/lib/ddtrace/contrib/rails/configuration/settings.rb +1 -0
  301. data/lib/ddtrace/contrib/rails/ext.rb +1 -0
  302. data/lib/ddtrace/contrib/rails/framework.rb +48 -1
  303. data/lib/ddtrace/contrib/rails/integration.rb +1 -0
  304. data/lib/ddtrace/contrib/rails/log_injection.rb +1 -40
  305. data/lib/ddtrace/contrib/rails/middlewares.rb +1 -0
  306. data/lib/ddtrace/contrib/rails/patcher.rb +30 -18
  307. data/lib/ddtrace/contrib/rails/railtie.rb +1 -0
  308. data/lib/ddtrace/contrib/rails/utils.rb +1 -0
  309. data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -0
  310. data/lib/ddtrace/contrib/rake/ext.rb +1 -0
  311. data/lib/ddtrace/contrib/rake/instrumentation.rb +1 -0
  312. data/lib/ddtrace/contrib/rake/integration.rb +1 -0
  313. data/lib/ddtrace/contrib/rake/patcher.rb +1 -0
  314. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +1 -0
  315. data/lib/ddtrace/contrib/redis/configuration/settings.rb +1 -0
  316. data/lib/ddtrace/contrib/redis/ext.rb +1 -0
  317. data/lib/ddtrace/contrib/redis/integration.rb +1 -0
  318. data/lib/ddtrace/contrib/redis/patcher.rb +1 -0
  319. data/lib/ddtrace/contrib/redis/quantize.rb +1 -0
  320. data/lib/ddtrace/contrib/redis/tags.rb +1 -0
  321. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +1 -0
  322. data/lib/ddtrace/contrib/registerable.rb +2 -2
  323. data/lib/ddtrace/contrib/registry.rb +1 -0
  324. data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -0
  325. data/lib/ddtrace/contrib/resque/ext.rb +1 -0
  326. data/lib/ddtrace/contrib/resque/integration.rb +1 -0
  327. data/lib/ddtrace/contrib/resque/patcher.rb +1 -0
  328. data/lib/ddtrace/contrib/resque/resque_job.rb +1 -0
  329. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +1 -0
  330. data/lib/ddtrace/contrib/rest_client/ext.rb +1 -0
  331. data/lib/ddtrace/contrib/rest_client/integration.rb +1 -0
  332. data/lib/ddtrace/contrib/rest_client/patcher.rb +2 -0
  333. data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -0
  334. data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +19 -0
  335. data/lib/ddtrace/contrib/semantic_logger/ext.rb +11 -0
  336. data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +43 -0
  337. data/lib/ddtrace/contrib/semantic_logger/integration.rb +48 -0
  338. data/lib/ddtrace/contrib/semantic_logger/patcher.rb +26 -0
  339. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +1 -0
  340. data/lib/ddtrace/contrib/sequel/database.rb +1 -0
  341. data/lib/ddtrace/contrib/sequel/dataset.rb +1 -0
  342. data/lib/ddtrace/contrib/sequel/ext.rb +1 -0
  343. data/lib/ddtrace/contrib/sequel/integration.rb +1 -0
  344. data/lib/ddtrace/contrib/sequel/patcher.rb +1 -0
  345. data/lib/ddtrace/contrib/sequel/utils.rb +1 -0
  346. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
  347. data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -0
  348. data/lib/ddtrace/contrib/shoryuken/integration.rb +1 -0
  349. data/lib/ddtrace/contrib/shoryuken/patcher.rb +1 -0
  350. data/lib/ddtrace/contrib/shoryuken/tracer.rb +1 -0
  351. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +1 -0
  352. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -0
  353. data/lib/ddtrace/contrib/sidekiq/ext.rb +4 -0
  354. data/lib/ddtrace/contrib/sidekiq/integration.rb +11 -0
  355. data/lib/ddtrace/contrib/sidekiq/patcher.rb +27 -0
  356. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/heartbeat.rb +30 -0
  357. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/job_fetch.rb +30 -0
  358. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +29 -0
  359. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +1 -0
  360. data/lib/ddtrace/contrib/sidekiq/tracing.rb +1 -0
  361. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +1 -0
  362. data/lib/ddtrace/contrib/sinatra/env.rb +3 -1
  363. data/lib/ddtrace/contrib/sinatra/ext.rb +1 -0
  364. data/lib/ddtrace/contrib/sinatra/headers.rb +1 -0
  365. data/lib/ddtrace/contrib/sinatra/integration.rb +1 -0
  366. data/lib/ddtrace/contrib/sinatra/patcher.rb +2 -0
  367. data/lib/ddtrace/contrib/sinatra/tracer.rb +27 -4
  368. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +8 -1
  369. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +1 -0
  370. data/lib/ddtrace/contrib/sneakers/ext.rb +1 -0
  371. data/lib/ddtrace/contrib/sneakers/integration.rb +1 -0
  372. data/lib/ddtrace/contrib/sneakers/patcher.rb +1 -0
  373. data/lib/ddtrace/contrib/sneakers/tracer.rb +1 -0
  374. data/lib/ddtrace/contrib/status_code_matcher.rb +1 -0
  375. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -0
  376. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +1 -0
  377. data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -0
  378. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +1 -0
  379. data/lib/ddtrace/contrib/sucker_punch/integration.rb +1 -0
  380. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +2 -0
  381. data/lib/ddtrace/correlation.rb +2 -1
  382. data/lib/ddtrace/diagnostics/environment_logger.rb +4 -3
  383. data/lib/ddtrace/diagnostics/health.rb +1 -0
  384. data/lib/ddtrace/distributed_tracing/headers/b3.rb +1 -0
  385. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +1 -0
  386. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +1 -0
  387. data/lib/ddtrace/distributed_tracing/headers/headers.rb +1 -0
  388. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +1 -0
  389. data/lib/ddtrace/encoding.rb +3 -0
  390. data/lib/ddtrace/error.rb +1 -0
  391. data/lib/ddtrace/event.rb +1 -0
  392. data/lib/ddtrace/ext/analytics.rb +1 -0
  393. data/lib/ddtrace/ext/app_types.rb +1 -0
  394. data/lib/ddtrace/ext/correlation.rb +1 -0
  395. data/lib/ddtrace/ext/diagnostics.rb +1 -0
  396. data/lib/ddtrace/ext/distributed.rb +1 -0
  397. data/lib/ddtrace/ext/environment.rb +8 -0
  398. data/lib/ddtrace/ext/errors.rb +1 -0
  399. data/lib/ddtrace/ext/forced_tracing.rb +1 -0
  400. data/lib/ddtrace/ext/git.rb +22 -1
  401. data/lib/ddtrace/ext/http.rb +1 -0
  402. data/lib/ddtrace/ext/integration.rb +1 -0
  403. data/lib/ddtrace/ext/manual_tracing.rb +1 -0
  404. data/lib/ddtrace/ext/metrics.rb +1 -0
  405. data/lib/ddtrace/ext/net.rb +1 -0
  406. data/lib/ddtrace/ext/priority.rb +1 -0
  407. data/lib/ddtrace/ext/profiling.rb +4 -0
  408. data/lib/ddtrace/ext/runtime.rb +4 -9
  409. data/lib/ddtrace/ext/sampling.rb +1 -0
  410. data/lib/ddtrace/ext/sql.rb +1 -0
  411. data/lib/ddtrace/ext/test.rb +1 -0
  412. data/lib/ddtrace/ext/transport.rb +12 -0
  413. data/lib/ddtrace/forced_tracing.rb +1 -0
  414. data/lib/ddtrace/logger.rb +1 -0
  415. data/lib/ddtrace/metrics.rb +60 -33
  416. data/lib/ddtrace/opentelemetry/extensions.rb +1 -0
  417. data/lib/ddtrace/opentelemetry/span.rb +1 -0
  418. data/lib/ddtrace/opentracer/binary_propagator.rb +1 -0
  419. data/lib/ddtrace/opentracer/carrier.rb +1 -0
  420. data/lib/ddtrace/opentracer/distributed_headers.rb +1 -0
  421. data/lib/ddtrace/opentracer/global_tracer.rb +1 -0
  422. data/lib/ddtrace/opentracer/propagator.rb +1 -0
  423. data/lib/ddtrace/opentracer/rack_propagator.rb +1 -0
  424. data/lib/ddtrace/opentracer/scope.rb +1 -0
  425. data/lib/ddtrace/opentracer/scope_manager.rb +1 -0
  426. data/lib/ddtrace/opentracer/span.rb +1 -0
  427. data/lib/ddtrace/opentracer/span_context.rb +1 -0
  428. data/lib/ddtrace/opentracer/span_context_factory.rb +1 -0
  429. data/lib/ddtrace/opentracer/text_map_propagator.rb +1 -0
  430. data/lib/ddtrace/opentracer/thread_local_scope.rb +1 -0
  431. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +1 -0
  432. data/lib/ddtrace/opentracer/tracer.rb +1 -0
  433. data/lib/ddtrace/opentracer.rb +1 -0
  434. data/lib/ddtrace/patcher.rb +1 -0
  435. data/lib/ddtrace/pin.rb +1 -0
  436. data/lib/ddtrace/pipeline/span_filter.rb +1 -0
  437. data/lib/ddtrace/pipeline/span_processor.rb +1 -0
  438. data/lib/ddtrace/pipeline.rb +1 -0
  439. data/lib/ddtrace/profiling/backtrace_location.rb +1 -0
  440. data/lib/ddtrace/profiling/buffer.rb +1 -0
  441. data/lib/ddtrace/profiling/collectors/stack.rb +77 -38
  442. data/lib/ddtrace/profiling/encoding/profile.rb +10 -1
  443. data/lib/ddtrace/profiling/event.rb +1 -0
  444. data/lib/ddtrace/profiling/events/stack.rb +16 -37
  445. data/lib/ddtrace/profiling/exporter.rb +1 -0
  446. data/lib/ddtrace/profiling/ext/cpu.rb +16 -1
  447. data/lib/ddtrace/profiling/ext/cthread.rb +1 -0
  448. data/lib/ddtrace/profiling/ext/forking.rb +1 -0
  449. data/lib/ddtrace/profiling/flush.rb +10 -9
  450. data/lib/ddtrace/profiling/native_extension.rb +18 -0
  451. data/lib/ddtrace/profiling/pprof/builder.rb +1 -0
  452. data/lib/ddtrace/profiling/pprof/converter.rb +23 -9
  453. data/lib/ddtrace/profiling/pprof/message_set.rb +4 -1
  454. data/lib/ddtrace/profiling/pprof/payload.rb +2 -1
  455. data/lib/ddtrace/profiling/pprof/pprof_pb.rb +1 -0
  456. data/lib/ddtrace/profiling/pprof/stack_sample.rb +43 -6
  457. data/lib/ddtrace/profiling/pprof/string_table.rb +1 -0
  458. data/lib/ddtrace/profiling/pprof/template.rb +1 -0
  459. data/lib/ddtrace/profiling/preload.rb +1 -0
  460. data/lib/ddtrace/profiling/profiler.rb +1 -0
  461. data/lib/ddtrace/profiling/recorder.rb +3 -2
  462. data/lib/ddtrace/profiling/scheduler.rb +21 -3
  463. data/lib/ddtrace/profiling/tasks/setup.rb +9 -5
  464. data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +41 -0
  465. data/lib/ddtrace/profiling/trace_identifiers/helper.rb +46 -0
  466. data/lib/ddtrace/profiling/transport/client.rb +3 -0
  467. data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +1 -0
  468. data/lib/ddtrace/profiling/transport/http/api/instance.rb +1 -0
  469. data/lib/ddtrace/profiling/transport/http/api/spec.rb +1 -0
  470. data/lib/ddtrace/profiling/transport/http/api.rb +1 -0
  471. data/lib/ddtrace/profiling/transport/http/builder.rb +1 -0
  472. data/lib/ddtrace/profiling/transport/http/client.rb +1 -0
  473. data/lib/ddtrace/profiling/transport/http/response.rb +1 -0
  474. data/lib/ddtrace/profiling/transport/http.rb +33 -40
  475. data/lib/ddtrace/profiling/transport/io/client.rb +1 -0
  476. data/lib/ddtrace/profiling/transport/io/response.rb +1 -0
  477. data/lib/ddtrace/profiling/transport/io.rb +1 -0
  478. data/lib/ddtrace/profiling/transport/parcel.rb +1 -0
  479. data/lib/ddtrace/profiling/transport/request.rb +1 -0
  480. data/lib/ddtrace/profiling/transport/response.rb +1 -0
  481. data/lib/ddtrace/profiling.rb +64 -20
  482. data/lib/ddtrace/propagation/grpc_propagator.rb +1 -0
  483. data/lib/ddtrace/propagation/http_propagator.rb +3 -2
  484. data/lib/ddtrace/quantization/hash.rb +1 -0
  485. data/lib/ddtrace/quantization/http.rb +3 -0
  486. data/lib/ddtrace/runtime/metrics.rb +33 -10
  487. data/lib/ddtrace/sampler.rb +1 -0
  488. data/lib/ddtrace/sampling/matcher.rb +1 -0
  489. data/lib/ddtrace/sampling/rate_limiter.rb +1 -0
  490. data/lib/ddtrace/sampling/rule.rb +2 -1
  491. data/lib/ddtrace/sampling/rule_sampler.rb +2 -1
  492. data/lib/ddtrace/sampling.rb +1 -0
  493. data/lib/ddtrace/span.rb +21 -8
  494. data/lib/ddtrace/sync_writer.rb +3 -2
  495. data/lib/ddtrace/tasks/exec.rb +4 -5
  496. data/lib/ddtrace/tasks/help.rb +1 -0
  497. data/lib/ddtrace/tracer.rb +7 -15
  498. data/lib/ddtrace/transport/http/adapters/net.rb +14 -3
  499. data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
  500. data/lib/ddtrace/transport/http/adapters/test.rb +5 -2
  501. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +24 -12
  502. data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
  503. data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
  504. data/lib/ddtrace/transport/http/api/instance.rb +1 -0
  505. data/lib/ddtrace/transport/http/api/map.rb +1 -0
  506. data/lib/ddtrace/transport/http/api/spec.rb +1 -0
  507. data/lib/ddtrace/transport/http/api.rb +1 -0
  508. data/lib/ddtrace/transport/http/builder.rb +14 -6
  509. data/lib/ddtrace/transport/http/client.rb +3 -1
  510. data/lib/ddtrace/transport/http/env.rb +1 -0
  511. data/lib/ddtrace/transport/http/response.rb +1 -0
  512. data/lib/ddtrace/transport/http/statistics.rb +1 -0
  513. data/lib/ddtrace/transport/http/traces.rb +1 -0
  514. data/lib/ddtrace/transport/http.rb +15 -18
  515. data/lib/ddtrace/transport/io/client.rb +2 -1
  516. data/lib/ddtrace/transport/io/response.rb +1 -0
  517. data/lib/ddtrace/transport/io/traces.rb +3 -0
  518. data/lib/ddtrace/transport/io.rb +1 -0
  519. data/lib/ddtrace/transport/parcel.rb +3 -0
  520. data/lib/ddtrace/transport/request.rb +1 -0
  521. data/lib/ddtrace/transport/response.rb +1 -0
  522. data/lib/ddtrace/transport/statistics.rb +1 -0
  523. data/lib/ddtrace/transport/traces.rb +3 -2
  524. data/lib/ddtrace/utils/compression.rb +1 -0
  525. data/lib/ddtrace/utils/database.rb +1 -0
  526. data/lib/ddtrace/utils/forking.rb +1 -0
  527. data/lib/ddtrace/utils/object_set.rb +1 -0
  528. data/lib/ddtrace/utils/only_once.rb +1 -0
  529. data/lib/ddtrace/utils/sequence.rb +1 -0
  530. data/lib/ddtrace/utils/string_table.rb +1 -0
  531. data/lib/ddtrace/utils/time.rb +8 -6
  532. data/lib/ddtrace/utils.rb +14 -2
  533. data/lib/ddtrace/vendor/active_record/connection_specification.rb +1 -0
  534. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -0
  535. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +1 -0
  536. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +1 -0
  537. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +1 -0
  538. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +1 -0
  539. data/lib/ddtrace/vendor/multipart-post/multipart.rb +1 -0
  540. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +1 -0
  541. data/lib/ddtrace/version.rb +2 -1
  542. data/lib/ddtrace/worker.rb +1 -0
  543. data/lib/ddtrace/workers/async.rb +2 -1
  544. data/lib/ddtrace/workers/loop.rb +1 -0
  545. data/lib/ddtrace/workers/polling.rb +1 -0
  546. data/lib/ddtrace/workers/queue.rb +1 -0
  547. data/lib/ddtrace/workers/runtime_metrics.rb +1 -0
  548. data/lib/ddtrace/workers/trace_writer.rb +3 -2
  549. data/lib/ddtrace/workers.rb +2 -1
  550. data/lib/ddtrace/writer.rb +3 -2
  551. data/lib/ddtrace.rb +19 -49
  552. metadata +59 -562
  553. data/.circleci/config.yml +0 -870
  554. data/.circleci/images/primary/Dockerfile-2.1.10 +0 -83
  555. data/.circleci/images/primary/Dockerfile-2.2.10 +0 -83
  556. data/.circleci/images/primary/Dockerfile-2.3.8 +0 -85
  557. data/.circleci/images/primary/Dockerfile-2.4.6 +0 -83
  558. data/.circleci/images/primary/Dockerfile-2.5.6 +0 -83
  559. data/.circleci/images/primary/Dockerfile-2.6.4 +0 -83
  560. data/.circleci/images/primary/Dockerfile-2.7.0 +0 -83
  561. data/.circleci/images/primary/Dockerfile-3.0.0 +0 -73
  562. data/.circleci/images/primary/Dockerfile-jruby-9.2-latest +0 -88
  563. data/.circleci/images/primary/Dockerfile-jruby-9.2.0.0 +0 -73
  564. data/.circleci/images/primary/Dockerfile-truffleruby-21.1.0 +0 -73
  565. data/.dockerignore +0 -0
  566. data/.env +0 -26
  567. data/.github/CODEOWNERS +0 -1
  568. data/.github/workflows/add-milestone-to-pull-requests.yml +0 -42
  569. data/.github/workflows/create-next-milestone.yml +0 -20
  570. data/.gitlab-ci.yml +0 -27
  571. data/.rspec +0 -1
  572. data/.rubocop.yml +0 -351
  573. data/.rubocop_todo.yml +0 -438
  574. data/.simplecov +0 -47
  575. data/Appraisals +0 -1323
  576. data/Gemfile +0 -69
  577. data/Rakefile +0 -939
  578. data/benchmarks/data/profiler-submission-marshal.gz +0 -0
  579. data/benchmarks/postgres_database.yml +0 -9
  580. data/benchmarks/profiler_sample_loop.rb +0 -69
  581. data/benchmarks/profiler_submission.rb +0 -93
  582. data/benchmarks/sidekiq_test.rb +0 -154
  583. data/docker-compose.yml +0 -414
  584. data/gemfiles/jruby_9.2.0.0_contrib.gemfile +0 -79
  585. data/gemfiles/jruby_9.2.0.0_contrib.gemfile.lock +0 -1518
  586. data/gemfiles/jruby_9.2.0.0_contrib_old.gemfile +0 -35
  587. data/gemfiles/jruby_9.2.0.0_contrib_old.gemfile.lock +0 -157
  588. data/gemfiles/jruby_9.2.0.0_core_old.gemfile +0 -34
  589. data/gemfiles/jruby_9.2.0.0_core_old.gemfile.lock +0 -153
  590. data/gemfiles/jruby_9.2.0.0_cucumber3.gemfile +0 -35
  591. data/gemfiles/jruby_9.2.0.0_cucumber3.gemfile.lock +0 -174
  592. data/gemfiles/jruby_9.2.0.0_cucumber4.gemfile +0 -35
  593. data/gemfiles/jruby_9.2.0.0_cucumber4.gemfile.lock +0 -206
  594. data/gemfiles/jruby_9.2.0.0_cucumber5.gemfile +0 -35
  595. data/gemfiles/jruby_9.2.0.0_cucumber5.gemfile.lock +0 -206
  596. data/gemfiles/jruby_9.2.0.0_rails5_mysql2.gemfile +0 -40
  597. data/gemfiles/jruby_9.2.0.0_rails5_mysql2.gemfile.lock +0 -271
  598. data/gemfiles/jruby_9.2.0.0_rails5_postgres.gemfile +0 -40
  599. data/gemfiles/jruby_9.2.0.0_rails5_postgres.gemfile.lock +0 -271
  600. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis.gemfile +0 -41
  601. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis.gemfile.lock +0 -273
  602. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis_activesupport.gemfile +0 -41
  603. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis_activesupport.gemfile.lock +0 -273
  604. data/gemfiles/jruby_9.2.0.0_rails5_postgres_sidekiq.gemfile +0 -42
  605. data/gemfiles/jruby_9.2.0.0_rails5_postgres_sidekiq.gemfile.lock +0 -279
  606. data/gemfiles/jruby_9.2.0.0_rails61_mysql2.gemfile +0 -40
  607. data/gemfiles/jruby_9.2.0.0_rails61_mysql2.gemfile.lock +0 -290
  608. data/gemfiles/jruby_9.2.0.0_rails61_postgres.gemfile +0 -40
  609. data/gemfiles/jruby_9.2.0.0_rails61_postgres.gemfile.lock +0 -290
  610. data/gemfiles/jruby_9.2.0.0_rails61_postgres_redis.gemfile +0 -41
  611. data/gemfiles/jruby_9.2.0.0_rails61_postgres_redis.gemfile.lock +0 -292
  612. data/gemfiles/jruby_9.2.0.0_rails61_postgres_sidekiq.gemfile +0 -41
  613. data/gemfiles/jruby_9.2.0.0_rails61_postgres_sidekiq.gemfile.lock +0 -297
  614. data/gemfiles/jruby_9.2.0.0_rails6_mysql2.gemfile +0 -40
  615. data/gemfiles/jruby_9.2.0.0_rails6_mysql2.gemfile.lock +0 -287
  616. data/gemfiles/jruby_9.2.0.0_rails6_postgres.gemfile +0 -40
  617. data/gemfiles/jruby_9.2.0.0_rails6_postgres.gemfile.lock +0 -287
  618. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis.gemfile +0 -41
  619. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis.gemfile.lock +0 -289
  620. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis_activesupport.gemfile +0 -41
  621. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis_activesupport.gemfile.lock +0 -289
  622. data/gemfiles/jruby_9.2.0.0_rails6_postgres_sidekiq.gemfile +0 -42
  623. data/gemfiles/jruby_9.2.0.0_rails6_postgres_sidekiq.gemfile.lock +0 -295
  624. data/gemfiles/jruby_9.2.0.0_resque2_redis3.gemfile +0 -36
  625. data/gemfiles/jruby_9.2.0.0_resque2_redis3.gemfile.lock +0 -180
  626. data/gemfiles/jruby_9.2.0.0_resque2_redis4.gemfile +0 -36
  627. data/gemfiles/jruby_9.2.0.0_resque2_redis4.gemfile.lock +0 -180
  628. data/gemfiles/jruby_9.2.11.1_contrib.gemfile +0 -79
  629. data/gemfiles/jruby_9.2.11.1_contrib.gemfile.lock +0 -1518
  630. data/gemfiles/jruby_9.2.11.1_contrib_old.gemfile +0 -35
  631. data/gemfiles/jruby_9.2.11.1_contrib_old.gemfile.lock +0 -157
  632. data/gemfiles/jruby_9.2.11.1_core_old.gemfile +0 -34
  633. data/gemfiles/jruby_9.2.11.1_core_old.gemfile.lock +0 -153
  634. data/gemfiles/jruby_9.2.11.1_cucumber3.gemfile +0 -35
  635. data/gemfiles/jruby_9.2.11.1_cucumber3.gemfile.lock +0 -174
  636. data/gemfiles/jruby_9.2.11.1_cucumber4.gemfile +0 -35
  637. data/gemfiles/jruby_9.2.11.1_cucumber4.gemfile.lock +0 -206
  638. data/gemfiles/jruby_9.2.11.1_cucumber5.gemfile +0 -35
  639. data/gemfiles/jruby_9.2.11.1_cucumber5.gemfile.lock +0 -206
  640. data/gemfiles/jruby_9.2.11.1_rails5_mysql2.gemfile +0 -40
  641. data/gemfiles/jruby_9.2.11.1_rails5_mysql2.gemfile.lock +0 -271
  642. data/gemfiles/jruby_9.2.11.1_rails5_postgres.gemfile +0 -40
  643. data/gemfiles/jruby_9.2.11.1_rails5_postgres.gemfile.lock +0 -271
  644. data/gemfiles/jruby_9.2.11.1_rails5_postgres_redis.gemfile +0 -41
  645. data/gemfiles/jruby_9.2.11.1_rails5_postgres_redis.gemfile.lock +0 -273
  646. data/gemfiles/jruby_9.2.11.1_rails5_postgres_redis_activesupport.gemfile +0 -41
  647. data/gemfiles/jruby_9.2.11.1_rails5_postgres_redis_activesupport.gemfile.lock +0 -273
  648. data/gemfiles/jruby_9.2.11.1_rails5_postgres_sidekiq.gemfile +0 -42
  649. data/gemfiles/jruby_9.2.11.1_rails5_postgres_sidekiq.gemfile.lock +0 -279
  650. data/gemfiles/jruby_9.2.11.1_rails61_mysql2.gemfile +0 -40
  651. data/gemfiles/jruby_9.2.11.1_rails61_mysql2.gemfile.lock +0 -290
  652. data/gemfiles/jruby_9.2.11.1_rails61_postgres.gemfile +0 -40
  653. data/gemfiles/jruby_9.2.11.1_rails61_postgres.gemfile.lock +0 -290
  654. data/gemfiles/jruby_9.2.11.1_rails61_postgres_redis.gemfile +0 -41
  655. data/gemfiles/jruby_9.2.11.1_rails61_postgres_redis.gemfile.lock +0 -292
  656. data/gemfiles/jruby_9.2.11.1_rails61_postgres_sidekiq.gemfile +0 -41
  657. data/gemfiles/jruby_9.2.11.1_rails61_postgres_sidekiq.gemfile.lock +0 -297
  658. data/gemfiles/jruby_9.2.11.1_rails6_mysql2.gemfile +0 -40
  659. data/gemfiles/jruby_9.2.11.1_rails6_mysql2.gemfile.lock +0 -287
  660. data/gemfiles/jruby_9.2.11.1_rails6_postgres.gemfile +0 -40
  661. data/gemfiles/jruby_9.2.11.1_rails6_postgres.gemfile.lock +0 -287
  662. data/gemfiles/jruby_9.2.11.1_rails6_postgres_redis.gemfile +0 -41
  663. data/gemfiles/jruby_9.2.11.1_rails6_postgres_redis.gemfile.lock +0 -289
  664. data/gemfiles/jruby_9.2.11.1_rails6_postgres_redis_activesupport.gemfile +0 -41
  665. data/gemfiles/jruby_9.2.11.1_rails6_postgres_redis_activesupport.gemfile.lock +0 -289
  666. data/gemfiles/jruby_9.2.11.1_rails6_postgres_sidekiq.gemfile +0 -42
  667. data/gemfiles/jruby_9.2.11.1_rails6_postgres_sidekiq.gemfile.lock +0 -295
  668. data/gemfiles/jruby_9.2.11.1_resque2_redis3.gemfile +0 -36
  669. data/gemfiles/jruby_9.2.11.1_resque2_redis3.gemfile.lock +0 -180
  670. data/gemfiles/jruby_9.2.11.1_resque2_redis4.gemfile +0 -36
  671. data/gemfiles/jruby_9.2.11.1_resque2_redis4.gemfile.lock +0 -180
  672. data/gemfiles/ruby_2.1.10_contrib_old.gemfile +0 -66
  673. data/gemfiles/ruby_2.1.10_contrib_old.gemfile.lock +0 -305
  674. data/gemfiles/ruby_2.1.10_core_old.gemfile +0 -33
  675. data/gemfiles/ruby_2.1.10_core_old.gemfile.lock +0 -118
  676. data/gemfiles/ruby_2.1.10_rails30_postgres.gemfile +0 -39
  677. data/gemfiles/ruby_2.1.10_rails30_postgres.gemfile.lock +0 -196
  678. data/gemfiles/ruby_2.1.10_rails30_postgres_sidekiq.gemfile +0 -40
  679. data/gemfiles/ruby_2.1.10_rails30_postgres_sidekiq.gemfile.lock +0 -205
  680. data/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile +0 -42
  681. data/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock +0 -215
  682. data/gemfiles/ruby_2.1.10_rails32_postgres.gemfile +0 -39
  683. data/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock +0 -204
  684. data/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile +0 -41
  685. data/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock +0 -223
  686. data/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile +0 -40
  687. data/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock +0 -213
  688. data/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile +0 -38
  689. data/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock +0 -218
  690. data/gemfiles/ruby_2.1.10_rails4_postgres.gemfile +0 -38
  691. data/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock +0 -218
  692. data/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile +0 -40
  693. data/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock +0 -237
  694. data/gemfiles/ruby_2.2.10_contrib.gemfile +0 -73
  695. data/gemfiles/ruby_2.2.10_contrib.gemfile.lock +0 -1450
  696. data/gemfiles/ruby_2.2.10_core_old.gemfile +0 -33
  697. data/gemfiles/ruby_2.2.10_core_old.gemfile.lock +0 -118
  698. data/gemfiles/ruby_2.2.10_rails30_postgres.gemfile +0 -39
  699. data/gemfiles/ruby_2.2.10_rails30_postgres.gemfile.lock +0 -196
  700. data/gemfiles/ruby_2.2.10_rails30_postgres_sidekiq.gemfile +0 -40
  701. data/gemfiles/ruby_2.2.10_rails30_postgres_sidekiq.gemfile.lock +0 -205
  702. data/gemfiles/ruby_2.2.10_rails32_mysql2.gemfile +0 -41
  703. data/gemfiles/ruby_2.2.10_rails32_mysql2.gemfile.lock +0 -212
  704. data/gemfiles/ruby_2.2.10_rails32_postgres.gemfile +0 -39
  705. data/gemfiles/ruby_2.2.10_rails32_postgres.gemfile.lock +0 -204
  706. data/gemfiles/ruby_2.2.10_rails32_postgres_redis.gemfile +0 -41
  707. data/gemfiles/ruby_2.2.10_rails32_postgres_redis.gemfile.lock +0 -223
  708. data/gemfiles/ruby_2.2.10_rails32_postgres_sidekiq.gemfile +0 -40
  709. data/gemfiles/ruby_2.2.10_rails32_postgres_sidekiq.gemfile.lock +0 -213
  710. data/gemfiles/ruby_2.2.10_rails4_mysql2.gemfile +0 -38
  711. data/gemfiles/ruby_2.2.10_rails4_mysql2.gemfile.lock +0 -218
  712. data/gemfiles/ruby_2.2.10_rails4_postgres.gemfile +0 -38
  713. data/gemfiles/ruby_2.2.10_rails4_postgres.gemfile.lock +0 -218
  714. data/gemfiles/ruby_2.2.10_rails4_postgres_redis.gemfile +0 -40
  715. data/gemfiles/ruby_2.2.10_rails4_postgres_redis.gemfile.lock +0 -237
  716. data/gemfiles/ruby_2.2.10_rails4_postgres_sidekiq.gemfile +0 -40
  717. data/gemfiles/ruby_2.2.10_rails4_postgres_sidekiq.gemfile.lock +0 -229
  718. data/gemfiles/ruby_2.2.10_rails5_mysql2.gemfile +0 -38
  719. data/gemfiles/ruby_2.2.10_rails5_mysql2.gemfile.lock +0 -234
  720. data/gemfiles/ruby_2.2.10_rails5_postgres.gemfile +0 -38
  721. data/gemfiles/ruby_2.2.10_rails5_postgres.gemfile.lock +0 -234
  722. data/gemfiles/ruby_2.2.10_rails5_postgres_redis.gemfile +0 -39
  723. data/gemfiles/ruby_2.2.10_rails5_postgres_redis.gemfile.lock +0 -236
  724. data/gemfiles/ruby_2.2.10_rails5_postgres_redis_activesupport.gemfile +0 -39
  725. data/gemfiles/ruby_2.2.10_rails5_postgres_redis_activesupport.gemfile.lock +0 -236
  726. data/gemfiles/ruby_2.2.10_rails5_postgres_sidekiq.gemfile +0 -40
  727. data/gemfiles/ruby_2.2.10_rails5_postgres_sidekiq.gemfile.lock +0 -245
  728. data/gemfiles/ruby_2.3.8_contrib.gemfile +0 -73
  729. data/gemfiles/ruby_2.3.8_contrib.gemfile.lock +0 -1459
  730. data/gemfiles/ruby_2.3.8_contrib_old.gemfile +0 -34
  731. data/gemfiles/ruby_2.3.8_contrib_old.gemfile.lock +0 -127
  732. data/gemfiles/ruby_2.3.8_core_old.gemfile +0 -33
  733. data/gemfiles/ruby_2.3.8_core_old.gemfile.lock +0 -123
  734. data/gemfiles/ruby_2.3.8_cucumber3.gemfile +0 -34
  735. data/gemfiles/ruby_2.3.8_cucumber3.gemfile.lock +0 -144
  736. data/gemfiles/ruby_2.3.8_cucumber4.gemfile +0 -34
  737. data/gemfiles/ruby_2.3.8_cucumber4.gemfile.lock +0 -174
  738. data/gemfiles/ruby_2.3.8_rails30_postgres.gemfile +0 -39
  739. data/gemfiles/ruby_2.3.8_rails30_postgres.gemfile.lock +0 -201
  740. data/gemfiles/ruby_2.3.8_rails30_postgres_sidekiq.gemfile +0 -40
  741. data/gemfiles/ruby_2.3.8_rails30_postgres_sidekiq.gemfile.lock +0 -210
  742. data/gemfiles/ruby_2.3.8_rails32_mysql2.gemfile +0 -41
  743. data/gemfiles/ruby_2.3.8_rails32_mysql2.gemfile.lock +0 -217
  744. data/gemfiles/ruby_2.3.8_rails32_postgres.gemfile +0 -39
  745. data/gemfiles/ruby_2.3.8_rails32_postgres.gemfile.lock +0 -209
  746. data/gemfiles/ruby_2.3.8_rails32_postgres_redis.gemfile +0 -41
  747. data/gemfiles/ruby_2.3.8_rails32_postgres_redis.gemfile.lock +0 -228
  748. data/gemfiles/ruby_2.3.8_rails32_postgres_sidekiq.gemfile +0 -40
  749. data/gemfiles/ruby_2.3.8_rails32_postgres_sidekiq.gemfile.lock +0 -218
  750. data/gemfiles/ruby_2.3.8_rails4_mysql2.gemfile +0 -38
  751. data/gemfiles/ruby_2.3.8_rails4_mysql2.gemfile.lock +0 -223
  752. data/gemfiles/ruby_2.3.8_rails4_postgres.gemfile +0 -38
  753. data/gemfiles/ruby_2.3.8_rails4_postgres.gemfile.lock +0 -223
  754. data/gemfiles/ruby_2.3.8_rails4_postgres_redis.gemfile +0 -40
  755. data/gemfiles/ruby_2.3.8_rails4_postgres_redis.gemfile.lock +0 -242
  756. data/gemfiles/ruby_2.3.8_rails4_postgres_sidekiq.gemfile +0 -40
  757. data/gemfiles/ruby_2.3.8_rails4_postgres_sidekiq.gemfile.lock +0 -234
  758. data/gemfiles/ruby_2.3.8_rails5_mysql2.gemfile +0 -37
  759. data/gemfiles/ruby_2.3.8_rails5_mysql2.gemfile.lock +0 -234
  760. data/gemfiles/ruby_2.3.8_rails5_postgres.gemfile +0 -37
  761. data/gemfiles/ruby_2.3.8_rails5_postgres.gemfile.lock +0 -234
  762. data/gemfiles/ruby_2.3.8_rails5_postgres_redis.gemfile +0 -38
  763. data/gemfiles/ruby_2.3.8_rails5_postgres_redis.gemfile.lock +0 -236
  764. data/gemfiles/ruby_2.3.8_rails5_postgres_redis_activesupport.gemfile +0 -38
  765. data/gemfiles/ruby_2.3.8_rails5_postgres_redis_activesupport.gemfile.lock +0 -236
  766. data/gemfiles/ruby_2.3.8_rails5_postgres_sidekiq.gemfile +0 -39
  767. data/gemfiles/ruby_2.3.8_rails5_postgres_sidekiq.gemfile.lock +0 -245
  768. data/gemfiles/ruby_2.3.8_resque2_redis3.gemfile +0 -35
  769. data/gemfiles/ruby_2.3.8_resque2_redis3.gemfile.lock +0 -150
  770. data/gemfiles/ruby_2.3.8_resque2_redis4.gemfile +0 -35
  771. data/gemfiles/ruby_2.3.8_resque2_redis4.gemfile.lock +0 -150
  772. data/gemfiles/ruby_2.4.6_contrib.gemfile +0 -78
  773. data/gemfiles/ruby_2.4.6_contrib.gemfile.lock +0 -1513
  774. data/gemfiles/ruby_2.4.6_contrib_old.gemfile +0 -38
  775. data/gemfiles/ruby_2.4.6_contrib_old.gemfile.lock +0 -155
  776. data/gemfiles/ruby_2.4.6_core_old.gemfile +0 -37
  777. data/gemfiles/ruby_2.4.6_core_old.gemfile.lock +0 -151
  778. data/gemfiles/ruby_2.4.6_cucumber3.gemfile +0 -38
  779. data/gemfiles/ruby_2.4.6_cucumber3.gemfile.lock +0 -172
  780. data/gemfiles/ruby_2.4.6_cucumber4.gemfile +0 -38
  781. data/gemfiles/ruby_2.4.6_cucumber4.gemfile.lock +0 -202
  782. data/gemfiles/ruby_2.4.6_rails5_mysql2.gemfile +0 -41
  783. data/gemfiles/ruby_2.4.6_rails5_mysql2.gemfile.lock +0 -262
  784. data/gemfiles/ruby_2.4.6_rails5_postgres.gemfile +0 -41
  785. data/gemfiles/ruby_2.4.6_rails5_postgres.gemfile.lock +0 -262
  786. data/gemfiles/ruby_2.4.6_rails5_postgres_redis.gemfile +0 -42
  787. data/gemfiles/ruby_2.4.6_rails5_postgres_redis.gemfile.lock +0 -264
  788. data/gemfiles/ruby_2.4.6_rails5_postgres_redis_activesupport.gemfile +0 -42
  789. data/gemfiles/ruby_2.4.6_rails5_postgres_redis_activesupport.gemfile.lock +0 -264
  790. data/gemfiles/ruby_2.4.6_rails5_postgres_sidekiq.gemfile +0 -43
  791. data/gemfiles/ruby_2.4.6_rails5_postgres_sidekiq.gemfile.lock +0 -273
  792. data/gemfiles/ruby_2.4.6_resque2_redis3.gemfile +0 -39
  793. data/gemfiles/ruby_2.4.6_resque2_redis3.gemfile.lock +0 -178
  794. data/gemfiles/ruby_2.4.6_resque2_redis4.gemfile +0 -39
  795. data/gemfiles/ruby_2.4.6_resque2_redis4.gemfile.lock +0 -178
  796. data/gemfiles/ruby_2.5.6_contrib.gemfile +0 -83
  797. data/gemfiles/ruby_2.5.6_contrib.gemfile.lock +0 -1526
  798. data/gemfiles/ruby_2.5.6_contrib_old.gemfile +0 -39
  799. data/gemfiles/ruby_2.5.6_contrib_old.gemfile.lock +0 -165
  800. data/gemfiles/ruby_2.5.6_core_old.gemfile +0 -38
  801. data/gemfiles/ruby_2.5.6_core_old.gemfile.lock +0 -161
  802. data/gemfiles/ruby_2.5.6_cucumber3.gemfile +0 -39
  803. data/gemfiles/ruby_2.5.6_cucumber3.gemfile.lock +0 -182
  804. data/gemfiles/ruby_2.5.6_cucumber4.gemfile +0 -39
  805. data/gemfiles/ruby_2.5.6_cucumber4.gemfile.lock +0 -214
  806. data/gemfiles/ruby_2.5.6_cucumber5.gemfile +0 -39
  807. data/gemfiles/ruby_2.5.6_cucumber5.gemfile.lock +0 -214
  808. data/gemfiles/ruby_2.5.6_rails5_mysql2.gemfile +0 -44
  809. data/gemfiles/ruby_2.5.6_rails5_mysql2.gemfile.lock +0 -276
  810. data/gemfiles/ruby_2.5.6_rails5_postgres.gemfile +0 -44
  811. data/gemfiles/ruby_2.5.6_rails5_postgres.gemfile.lock +0 -276
  812. data/gemfiles/ruby_2.5.6_rails5_postgres_redis.gemfile +0 -45
  813. data/gemfiles/ruby_2.5.6_rails5_postgres_redis.gemfile.lock +0 -278
  814. data/gemfiles/ruby_2.5.6_rails5_postgres_redis_activesupport.gemfile +0 -45
  815. data/gemfiles/ruby_2.5.6_rails5_postgres_redis_activesupport.gemfile.lock +0 -278
  816. data/gemfiles/ruby_2.5.6_rails5_postgres_sidekiq.gemfile +0 -46
  817. data/gemfiles/ruby_2.5.6_rails5_postgres_sidekiq.gemfile.lock +0 -284
  818. data/gemfiles/ruby_2.5.6_rails61_mysql2.gemfile +0 -44
  819. data/gemfiles/ruby_2.5.6_rails61_mysql2.gemfile.lock +0 -295
  820. data/gemfiles/ruby_2.5.6_rails61_postgres.gemfile +0 -44
  821. data/gemfiles/ruby_2.5.6_rails61_postgres.gemfile.lock +0 -295
  822. data/gemfiles/ruby_2.5.6_rails61_postgres_redis.gemfile +0 -45
  823. data/gemfiles/ruby_2.5.6_rails61_postgres_redis.gemfile.lock +0 -297
  824. data/gemfiles/ruby_2.5.6_rails61_postgres_sidekiq.gemfile +0 -45
  825. data/gemfiles/ruby_2.5.6_rails61_postgres_sidekiq.gemfile.lock +0 -302
  826. data/gemfiles/ruby_2.5.6_rails6_mysql2.gemfile +0 -44
  827. data/gemfiles/ruby_2.5.6_rails6_mysql2.gemfile.lock +0 -292
  828. data/gemfiles/ruby_2.5.6_rails6_postgres.gemfile +0 -44
  829. data/gemfiles/ruby_2.5.6_rails6_postgres.gemfile.lock +0 -292
  830. data/gemfiles/ruby_2.5.6_rails6_postgres_redis.gemfile +0 -45
  831. data/gemfiles/ruby_2.5.6_rails6_postgres_redis.gemfile.lock +0 -294
  832. data/gemfiles/ruby_2.5.6_rails6_postgres_redis_activesupport.gemfile +0 -45
  833. data/gemfiles/ruby_2.5.6_rails6_postgres_redis_activesupport.gemfile.lock +0 -294
  834. data/gemfiles/ruby_2.5.6_rails6_postgres_sidekiq.gemfile +0 -46
  835. data/gemfiles/ruby_2.5.6_rails6_postgres_sidekiq.gemfile.lock +0 -300
  836. data/gemfiles/ruby_2.5.6_resque2_redis3.gemfile +0 -40
  837. data/gemfiles/ruby_2.5.6_resque2_redis3.gemfile.lock +0 -188
  838. data/gemfiles/ruby_2.5.6_resque2_redis4.gemfile +0 -40
  839. data/gemfiles/ruby_2.5.6_resque2_redis4.gemfile.lock +0 -188
  840. data/gemfiles/ruby_2.6.4_contrib.gemfile +0 -79
  841. data/gemfiles/ruby_2.6.4_contrib.gemfile.lock +0 -1524
  842. data/gemfiles/ruby_2.6.4_contrib_old.gemfile +0 -39
  843. data/gemfiles/ruby_2.6.4_contrib_old.gemfile.lock +0 -167
  844. data/gemfiles/ruby_2.6.4_core_old.gemfile +0 -38
  845. data/gemfiles/ruby_2.6.4_core_old.gemfile.lock +0 -163
  846. data/gemfiles/ruby_2.6.4_cucumber3.gemfile +0 -39
  847. data/gemfiles/ruby_2.6.4_cucumber3.gemfile.lock +0 -184
  848. data/gemfiles/ruby_2.6.4_cucumber4.gemfile +0 -39
  849. data/gemfiles/ruby_2.6.4_cucumber4.gemfile.lock +0 -216
  850. data/gemfiles/ruby_2.6.4_cucumber5.gemfile +0 -39
  851. data/gemfiles/ruby_2.6.4_cucumber5.gemfile.lock +0 -216
  852. data/gemfiles/ruby_2.6.4_rails5_mysql2.gemfile +0 -42
  853. data/gemfiles/ruby_2.6.4_rails5_mysql2.gemfile.lock +0 -276
  854. data/gemfiles/ruby_2.6.4_rails5_postgres.gemfile +0 -42
  855. data/gemfiles/ruby_2.6.4_rails5_postgres.gemfile.lock +0 -276
  856. data/gemfiles/ruby_2.6.4_rails5_postgres_redis.gemfile +0 -43
  857. data/gemfiles/ruby_2.6.4_rails5_postgres_redis.gemfile.lock +0 -278
  858. data/gemfiles/ruby_2.6.4_rails5_postgres_redis_activesupport.gemfile +0 -43
  859. data/gemfiles/ruby_2.6.4_rails5_postgres_redis_activesupport.gemfile.lock +0 -278
  860. data/gemfiles/ruby_2.6.4_rails5_postgres_sidekiq.gemfile +0 -44
  861. data/gemfiles/ruby_2.6.4_rails5_postgres_sidekiq.gemfile.lock +0 -284
  862. data/gemfiles/ruby_2.6.4_rails61_mysql2.gemfile +0 -42
  863. data/gemfiles/ruby_2.6.4_rails61_mysql2.gemfile.lock +0 -295
  864. data/gemfiles/ruby_2.6.4_rails61_postgres.gemfile +0 -42
  865. data/gemfiles/ruby_2.6.4_rails61_postgres.gemfile.lock +0 -295
  866. data/gemfiles/ruby_2.6.4_rails61_postgres_redis.gemfile +0 -43
  867. data/gemfiles/ruby_2.6.4_rails61_postgres_redis.gemfile.lock +0 -297
  868. data/gemfiles/ruby_2.6.4_rails61_postgres_sidekiq.gemfile +0 -43
  869. data/gemfiles/ruby_2.6.4_rails61_postgres_sidekiq.gemfile.lock +0 -302
  870. data/gemfiles/ruby_2.6.4_rails6_mysql2.gemfile +0 -42
  871. data/gemfiles/ruby_2.6.4_rails6_mysql2.gemfile.lock +0 -292
  872. data/gemfiles/ruby_2.6.4_rails6_postgres.gemfile +0 -42
  873. data/gemfiles/ruby_2.6.4_rails6_postgres.gemfile.lock +0 -292
  874. data/gemfiles/ruby_2.6.4_rails6_postgres_redis.gemfile +0 -43
  875. data/gemfiles/ruby_2.6.4_rails6_postgres_redis.gemfile.lock +0 -294
  876. data/gemfiles/ruby_2.6.4_rails6_postgres_redis_activesupport.gemfile +0 -43
  877. data/gemfiles/ruby_2.6.4_rails6_postgres_redis_activesupport.gemfile.lock +0 -294
  878. data/gemfiles/ruby_2.6.4_rails6_postgres_sidekiq.gemfile +0 -44
  879. data/gemfiles/ruby_2.6.4_rails6_postgres_sidekiq.gemfile.lock +0 -300
  880. data/gemfiles/ruby_2.6.4_resque2_redis3.gemfile +0 -40
  881. data/gemfiles/ruby_2.6.4_resque2_redis3.gemfile.lock +0 -190
  882. data/gemfiles/ruby_2.6.4_resque2_redis4.gemfile +0 -40
  883. data/gemfiles/ruby_2.6.4_resque2_redis4.gemfile.lock +0 -190
  884. data/gemfiles/ruby_2.7.0_contrib.gemfile +0 -78
  885. data/gemfiles/ruby_2.7.0_contrib.gemfile.lock +0 -1523
  886. data/gemfiles/ruby_2.7.0_contrib_old.gemfile +0 -39
  887. data/gemfiles/ruby_2.7.0_contrib_old.gemfile.lock +0 -167
  888. data/gemfiles/ruby_2.7.0_core_old.gemfile +0 -38
  889. data/gemfiles/ruby_2.7.0_core_old.gemfile.lock +0 -163
  890. data/gemfiles/ruby_2.7.0_cucumber3.gemfile +0 -39
  891. data/gemfiles/ruby_2.7.0_cucumber3.gemfile.lock +0 -184
  892. data/gemfiles/ruby_2.7.0_cucumber4.gemfile +0 -39
  893. data/gemfiles/ruby_2.7.0_cucumber4.gemfile.lock +0 -216
  894. data/gemfiles/ruby_2.7.0_cucumber5.gemfile +0 -39
  895. data/gemfiles/ruby_2.7.0_cucumber5.gemfile.lock +0 -216
  896. data/gemfiles/ruby_2.7.0_rails5_mysql2.gemfile +0 -42
  897. data/gemfiles/ruby_2.7.0_rails5_mysql2.gemfile.lock +0 -276
  898. data/gemfiles/ruby_2.7.0_rails5_postgres.gemfile +0 -42
  899. data/gemfiles/ruby_2.7.0_rails5_postgres.gemfile.lock +0 -276
  900. data/gemfiles/ruby_2.7.0_rails5_postgres_redis.gemfile +0 -44
  901. data/gemfiles/ruby_2.7.0_rails5_postgres_redis.gemfile.lock +0 -295
  902. data/gemfiles/ruby_2.7.0_rails5_postgres_redis_activesupport.gemfile +0 -44
  903. data/gemfiles/ruby_2.7.0_rails5_postgres_redis_activesupport.gemfile.lock +0 -295
  904. data/gemfiles/ruby_2.7.0_rails5_postgres_sidekiq.gemfile +0 -44
  905. data/gemfiles/ruby_2.7.0_rails5_postgres_sidekiq.gemfile.lock +0 -284
  906. data/gemfiles/ruby_2.7.0_rails61_mysql2.gemfile +0 -42
  907. data/gemfiles/ruby_2.7.0_rails61_mysql2.gemfile.lock +0 -295
  908. data/gemfiles/ruby_2.7.0_rails61_postgres.gemfile +0 -42
  909. data/gemfiles/ruby_2.7.0_rails61_postgres.gemfile.lock +0 -295
  910. data/gemfiles/ruby_2.7.0_rails61_postgres_redis.gemfile +0 -43
  911. data/gemfiles/ruby_2.7.0_rails61_postgres_redis.gemfile.lock +0 -297
  912. data/gemfiles/ruby_2.7.0_rails61_postgres_sidekiq.gemfile +0 -43
  913. data/gemfiles/ruby_2.7.0_rails61_postgres_sidekiq.gemfile.lock +0 -302
  914. data/gemfiles/ruby_2.7.0_rails6_mysql2.gemfile +0 -42
  915. data/gemfiles/ruby_2.7.0_rails6_mysql2.gemfile.lock +0 -292
  916. data/gemfiles/ruby_2.7.0_rails6_postgres.gemfile +0 -42
  917. data/gemfiles/ruby_2.7.0_rails6_postgres.gemfile.lock +0 -292
  918. data/gemfiles/ruby_2.7.0_rails6_postgres_redis.gemfile +0 -44
  919. data/gemfiles/ruby_2.7.0_rails6_postgres_redis.gemfile.lock +0 -311
  920. data/gemfiles/ruby_2.7.0_rails6_postgres_redis_activesupport.gemfile +0 -44
  921. data/gemfiles/ruby_2.7.0_rails6_postgres_redis_activesupport.gemfile.lock +0 -311
  922. data/gemfiles/ruby_2.7.0_rails6_postgres_sidekiq.gemfile +0 -44
  923. data/gemfiles/ruby_2.7.0_rails6_postgres_sidekiq.gemfile.lock +0 -300
  924. data/gemfiles/ruby_2.7.0_resque2_redis3.gemfile +0 -40
  925. data/gemfiles/ruby_2.7.0_resque2_redis3.gemfile.lock +0 -190
  926. data/gemfiles/ruby_2.7.0_resque2_redis4.gemfile +0 -40
  927. data/gemfiles/ruby_2.7.0_resque2_redis4.gemfile.lock +0 -190
  928. data/gemfiles/ruby_3.0.0_contrib.gemfile +0 -78
  929. data/gemfiles/ruby_3.0.0_contrib.gemfile.lock +0 -1540
  930. data/gemfiles/ruby_3.0.0_core_old.gemfile +0 -39
  931. data/gemfiles/ruby_3.0.0_core_old.gemfile.lock +0 -165
  932. data/gemfiles/ruby_3.0.0_cucumber3.gemfile +0 -40
  933. data/gemfiles/ruby_3.0.0_cucumber3.gemfile.lock +0 -186
  934. data/gemfiles/ruby_3.0.0_cucumber4.gemfile +0 -40
  935. data/gemfiles/ruby_3.0.0_cucumber4.gemfile.lock +0 -218
  936. data/gemfiles/ruby_3.0.0_cucumber5.gemfile +0 -40
  937. data/gemfiles/ruby_3.0.0_cucumber5.gemfile.lock +0 -218
  938. data/gemfiles/ruby_3.0.0_rails61_mysql2.gemfile +0 -43
  939. data/gemfiles/ruby_3.0.0_rails61_mysql2.gemfile.lock +0 -295
  940. data/gemfiles/ruby_3.0.0_rails61_postgres.gemfile +0 -43
  941. data/gemfiles/ruby_3.0.0_rails61_postgres.gemfile.lock +0 -295
  942. data/gemfiles/ruby_3.0.0_rails61_postgres_redis.gemfile +0 -44
  943. data/gemfiles/ruby_3.0.0_rails61_postgres_redis.gemfile.lock +0 -297
  944. data/gemfiles/ruby_3.0.0_rails61_postgres_sidekiq.gemfile +0 -44
  945. data/gemfiles/ruby_3.0.0_rails61_postgres_sidekiq.gemfile.lock +0 -302
  946. data/gemfiles/ruby_3.0.0_resque2_redis3.gemfile +0 -41
  947. data/gemfiles/ruby_3.0.0_resque2_redis3.gemfile.lock +0 -192
  948. data/gemfiles/ruby_3.0.0_resque2_redis4.gemfile +0 -41
  949. data/gemfiles/ruby_3.0.0_resque2_redis4.gemfile.lock +0 -192
  950. data/integration/README.md +0 -67
  951. data/integration/apps/rack/.dockerignore +0 -1
  952. data/integration/apps/rack/.envrc.sample +0 -1
  953. data/integration/apps/rack/.gitignore +0 -4
  954. data/integration/apps/rack/.rspec +0 -1
  955. data/integration/apps/rack/Dockerfile +0 -28
  956. data/integration/apps/rack/Dockerfile-ci +0 -11
  957. data/integration/apps/rack/Gemfile +0 -24
  958. data/integration/apps/rack/README.md +0 -93
  959. data/integration/apps/rack/app/acme.rb +0 -80
  960. data/integration/apps/rack/app/datadog.rb +0 -17
  961. data/integration/apps/rack/bin/run +0 -22
  962. data/integration/apps/rack/bin/setup +0 -17
  963. data/integration/apps/rack/bin/test +0 -24
  964. data/integration/apps/rack/config/puma.rb +0 -14
  965. data/integration/apps/rack/config/unicorn.rb +0 -23
  966. data/integration/apps/rack/config.ru +0 -6
  967. data/integration/apps/rack/docker-compose.ci.yml +0 -62
  968. data/integration/apps/rack/docker-compose.yml +0 -78
  969. data/integration/apps/rack/script/build-images +0 -38
  970. data/integration/apps/rack/script/ci +0 -51
  971. data/integration/apps/rack/spec/integration/basic_spec.rb +0 -10
  972. data/integration/apps/rack/spec/spec_helper.rb +0 -16
  973. data/integration/apps/rack/spec/support/integration_helper.rb +0 -22
  974. data/integration/apps/rails-five/.dockerignore +0 -1
  975. data/integration/apps/rails-five/.env +0 -3
  976. data/integration/apps/rails-five/.envrc.sample +0 -1
  977. data/integration/apps/rails-five/.gitignore +0 -30
  978. data/integration/apps/rails-five/Dockerfile +0 -25
  979. data/integration/apps/rails-five/Dockerfile-ci +0 -11
  980. data/integration/apps/rails-five/Gemfile +0 -104
  981. data/integration/apps/rails-five/README.md +0 -94
  982. data/integration/apps/rails-five/Rakefile +0 -6
  983. data/integration/apps/rails-five/app/channels/application_cable/channel.rb +0 -4
  984. data/integration/apps/rails-five/app/channels/application_cable/connection.rb +0 -4
  985. data/integration/apps/rails-five/app/controllers/application_controller.rb +0 -2
  986. data/integration/apps/rails-five/app/controllers/basic_controller.rb +0 -36
  987. data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
  988. data/integration/apps/rails-five/app/controllers/health_controller.rb +0 -9
  989. data/integration/apps/rails-five/app/controllers/jobs_controller.rb +0 -12
  990. data/integration/apps/rails-five/app/jobs/application_job.rb +0 -2
  991. data/integration/apps/rails-five/app/jobs/test_job.rb +0 -12
  992. data/integration/apps/rails-five/app/mailers/application_mailer.rb +0 -4
  993. data/integration/apps/rails-five/app/models/application_record.rb +0 -3
  994. data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
  995. data/integration/apps/rails-five/app/models/test.rb +0 -2
  996. data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +0 -13
  997. data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +0 -1
  998. data/integration/apps/rails-five/bin/bundle +0 -3
  999. data/integration/apps/rails-five/bin/rails +0 -9
  1000. data/integration/apps/rails-five/bin/rake +0 -9
  1001. data/integration/apps/rails-five/bin/run +0 -24
  1002. data/integration/apps/rails-five/bin/setup +0 -27
  1003. data/integration/apps/rails-five/bin/spring +0 -17
  1004. data/integration/apps/rails-five/bin/test +0 -21
  1005. data/integration/apps/rails-five/bin/update +0 -28
  1006. data/integration/apps/rails-five/config/application.rb +0 -97
  1007. data/integration/apps/rails-five/config/boot.rb +0 -4
  1008. data/integration/apps/rails-five/config/cable.yml +0 -10
  1009. data/integration/apps/rails-five/config/credentials.yml.enc +0 -1
  1010. data/integration/apps/rails-five/config/database.yml +0 -28
  1011. data/integration/apps/rails-five/config/environment.rb +0 -5
  1012. data/integration/apps/rails-five/config/environments/development.rb +0 -51
  1013. data/integration/apps/rails-five/config/environments/production.rb +0 -82
  1014. data/integration/apps/rails-five/config/environments/test.rb +0 -43
  1015. data/integration/apps/rails-five/config/initializers/datadog.rb +0 -18
  1016. data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +0 -4
  1017. data/integration/apps/rails-five/config/initializers/resque.rb +0 -4
  1018. data/integration/apps/rails-five/config/initializers/rollbar.rb +0 -5
  1019. data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +0 -14
  1020. data/integration/apps/rails-five/config/locales/en.yml +0 -33
  1021. data/integration/apps/rails-five/config/puma.rb +0 -24
  1022. data/integration/apps/rails-five/config/routes.rb +0 -11
  1023. data/integration/apps/rails-five/config/spring.rb +0 -6
  1024. data/integration/apps/rails-five/config/unicorn.rb +0 -29
  1025. data/integration/apps/rails-five/config.ru +0 -5
  1026. data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +0 -11
  1027. data/integration/apps/rails-five/db/schema.rb +0 -23
  1028. data/integration/apps/rails-five/db/seeds.rb +0 -7
  1029. data/integration/apps/rails-five/docker-compose.ci.yml +0 -98
  1030. data/integration/apps/rails-five/docker-compose.yml +0 -100
  1031. data/integration/apps/rails-five/lib/tasks/.keep +0 -0
  1032. data/integration/apps/rails-five/log/.keep +0 -0
  1033. data/integration/apps/rails-five/public/robots.txt +0 -1
  1034. data/integration/apps/rails-five/script/build-images +0 -35
  1035. data/integration/apps/rails-five/script/ci +0 -51
  1036. data/integration/apps/rails-five/spec/integration/basic_spec.rb +0 -10
  1037. data/integration/apps/rails-five/spec/spec_helper.rb +0 -16
  1038. data/integration/apps/rails-five/spec/support/integration_helper.rb +0 -22
  1039. data/integration/apps/rails-five/storage/.keep +0 -0
  1040. data/integration/apps/rails-five/tmp/.keep +0 -0
  1041. data/integration/apps/rails-five/vendor/.keep +0 -0
  1042. data/integration/apps/rspec/.dockerignore +0 -1
  1043. data/integration/apps/rspec/.envrc.sample +0 -1
  1044. data/integration/apps/rspec/.gitignore +0 -2
  1045. data/integration/apps/rspec/.rspec +0 -1
  1046. data/integration/apps/rspec/Dockerfile +0 -25
  1047. data/integration/apps/rspec/Dockerfile-ci +0 -11
  1048. data/integration/apps/rspec/Gemfile +0 -14
  1049. data/integration/apps/rspec/README.md +0 -70
  1050. data/integration/apps/rspec/agent.yaml +0 -3
  1051. data/integration/apps/rspec/app/datadog.rb +0 -13
  1052. data/integration/apps/rspec/app/fibonacci.rb +0 -30
  1053. data/integration/apps/rspec/bin/run +0 -20
  1054. data/integration/apps/rspec/bin/setup +0 -17
  1055. data/integration/apps/rspec/bin/test +0 -21
  1056. data/integration/apps/rspec/docker-compose.ci.yml +0 -51
  1057. data/integration/apps/rspec/docker-compose.yml +0 -63
  1058. data/integration/apps/rspec/script/build-images +0 -37
  1059. data/integration/apps/rspec/script/ci +0 -53
  1060. data/integration/apps/rspec/spec/fibonacci_spec.rb +0 -16
  1061. data/integration/apps/rspec/spec/rspec_spec.rb +0 -58
  1062. data/integration/apps/rspec/spec/spec_helper.rb +0 -24
  1063. data/integration/apps/ruby/.dockerignore +0 -1
  1064. data/integration/apps/ruby/.envrc.sample +0 -1
  1065. data/integration/apps/ruby/.gitignore +0 -2
  1066. data/integration/apps/ruby/Dockerfile +0 -25
  1067. data/integration/apps/ruby/Dockerfile-ci +0 -11
  1068. data/integration/apps/ruby/Gemfile +0 -11
  1069. data/integration/apps/ruby/README.md +0 -70
  1070. data/integration/apps/ruby/agent.yaml +0 -3
  1071. data/integration/apps/ruby/app/datadog.rb +0 -13
  1072. data/integration/apps/ruby/app/fibonacci.rb +0 -58
  1073. data/integration/apps/ruby/bin/run +0 -20
  1074. data/integration/apps/ruby/bin/setup +0 -17
  1075. data/integration/apps/ruby/bin/test +0 -21
  1076. data/integration/apps/ruby/docker-compose.ci.yml +0 -51
  1077. data/integration/apps/ruby/docker-compose.yml +0 -63
  1078. data/integration/apps/ruby/script/build-images +0 -38
  1079. data/integration/apps/ruby/script/ci +0 -51
  1080. data/integration/images/agent/Dockerfile +0 -2
  1081. data/integration/images/agent/agent.yaml +0 -3
  1082. data/integration/images/include/datadog/analyzer.rb +0 -71
  1083. data/integration/images/include/datadog/demo_env.rb +0 -101
  1084. data/integration/images/include/http-health-check +0 -33
  1085. data/integration/images/ruby/2.1/Dockerfile +0 -54
  1086. data/integration/images/ruby/2.2/Dockerfile +0 -54
  1087. data/integration/images/ruby/2.3/Dockerfile +0 -70
  1088. data/integration/images/ruby/2.4/Dockerfile +0 -54
  1089. data/integration/images/ruby/2.5/Dockerfile +0 -54
  1090. data/integration/images/ruby/2.6/Dockerfile +0 -54
  1091. data/integration/images/ruby/2.7/Dockerfile +0 -54
  1092. data/integration/images/ruby/3.0/Dockerfile +0 -54
  1093. data/integration/images/wrk/Dockerfile +0 -33
  1094. data/integration/images/wrk/scripts/entrypoint.sh +0 -17
  1095. data/integration/images/wrk/scripts/scenarios/basic/default.lua +0 -1
  1096. data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +0 -1
  1097. data/integration/script/build-images +0 -43
  1098. data/lib/ddtrace/environment.rb +0 -41
  1099. data/lib/ddtrace/runtime/cgroup.rb +0 -44
  1100. data/lib/ddtrace/runtime/class_count.rb +0 -17
  1101. data/lib/ddtrace/runtime/container.rb +0 -87
  1102. data/lib/ddtrace/runtime/gc.rb +0 -16
  1103. data/lib/ddtrace/runtime/identity.rb +0 -48
  1104. data/lib/ddtrace/runtime/object_space.rb +0 -19
  1105. data/lib/ddtrace/runtime/socket.rb +0 -14
  1106. data/lib/ddtrace/runtime/thread_count.rb +0 -16
  1107. data/tasks/release_gem.rake +0 -28
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  # Profiling entry point, which coordinates collectors and a scheduler
3
4
  class Profiler
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/profiling/buffer'
2
3
  require 'ddtrace/profiling/flush'
3
4
 
@@ -7,9 +8,9 @@ module Datadog
7
8
  class Recorder
8
9
  attr_reader :max_size
9
10
 
10
- def initialize(event_classes, max_size)
11
+ def initialize(event_classes, max_size, last_flush_time: Time.now.utc)
11
12
  @buffers = {}
12
- @last_flush_time = Time.now.utc
13
+ @last_flush_time = last_flush_time
13
14
  @max_size = max_size
14
15
 
15
16
  # Add a buffer for each class
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/utils/time'
2
3
 
3
4
  require 'ddtrace/worker'
@@ -11,7 +12,12 @@ module Datadog
11
12
  include Workers::Polling
12
13
 
13
14
  DEFAULT_INTERVAL_SECONDS = 60
14
- MIN_INTERVAL_SECONDS = 0
15
+ MINIMUM_INTERVAL_SECONDS = 0
16
+
17
+ # Profiles with duration less than this will not be reported
18
+ PROFILE_DURATION_THRESHOLD_SECONDS = 1
19
+
20
+ private_constant :DEFAULT_INTERVAL_SECONDS, :MINIMUM_INTERVAL_SECONDS, :PROFILE_DURATION_THRESHOLD_SECONDS
15
21
 
16
22
  attr_reader \
17
23
  :exporters,
@@ -89,13 +95,21 @@ module Datadog
89
95
 
90
96
  # Update wait time to try to wake consistently on time.
91
97
  # Don't drop below the minimum interval.
92
- self.loop_wait_time = [loop_base_interval - run_time, MIN_INTERVAL_SECONDS].max
98
+ self.loop_wait_time = [loop_base_interval - run_time, MINIMUM_INTERVAL_SECONDS].max
93
99
  end
94
100
 
95
101
  def flush_events
96
102
  # Get events from recorder
97
103
  flush = recorder.flush
98
104
 
105
+ if duration_below_threshold?(flush)
106
+ Datadog.logger.debug do
107
+ "Skipped exporting profiling events as profile duration is below minimum (#{flush.event_count} events skipped)"
108
+ end
109
+
110
+ return flush
111
+ end
112
+
99
113
  # Send events to each exporter
100
114
  if flush.event_count > 0
101
115
  exporters.each do |exporter|
@@ -103,7 +117,7 @@ module Datadog
103
117
  exporter.export(flush)
104
118
  rescue StandardError => e
105
119
  Datadog.logger.error(
106
- "Unable to export #{flush.event_count} profiling events. Cause: #{e} Location: #{e.backtrace.first}"
120
+ "Unable to export #{flush.event_count} profiling events. Cause: #{e} Location: #{Array(e.backtrace).first}"
107
121
  )
108
122
  end
109
123
  end
@@ -111,6 +125,10 @@ module Datadog
111
125
 
112
126
  flush
113
127
  end
128
+
129
+ def duration_below_threshold?(flush)
130
+ (flush.finish - flush.start) < PROFILE_DURATION_THRESHOLD_SECONDS
131
+ end
114
132
  end
115
133
  end
116
134
  end
@@ -1,4 +1,4 @@
1
- require 'ddtrace'
1
+ # typed: false
2
2
  require 'ddtrace/utils/only_once'
3
3
  require 'ddtrace/profiling'
4
4
  require 'ddtrace/profiling/ext/cpu'
@@ -18,7 +18,9 @@ module Datadog
18
18
  activate_cpu_extensions
19
19
  setup_at_fork_hooks
20
20
  rescue StandardError, ScriptError => e
21
- Datadog.logger.warn { "Profiler extensions unavailable. Cause: #{e.message} Location: #{e.backtrace.first}" }
21
+ Datadog.logger.warn do
22
+ "Profiler extensions unavailable. Cause: #{e.message} Location: #{Array(e.backtrace).first}"
23
+ end
22
24
  end
23
25
  end
24
26
  end
@@ -33,7 +35,7 @@ module Datadog
33
35
  end
34
36
  rescue StandardError, ScriptError => e
35
37
  Datadog.logger.warn do
36
- "Profiler forking extensions unavailable. Cause: #{e.message} Location: #{e.backtrace.first}"
38
+ "Profiler forking extensions unavailable. Cause: #{e.message} Location: #{Array(e.backtrace).first}"
37
39
  end
38
40
  end
39
41
 
@@ -48,7 +50,7 @@ module Datadog
48
50
  end
49
51
  rescue StandardError, ScriptError => e
50
52
  Datadog.logger.warn do
51
- "Profiler CPU profiling extensions unavailable. Cause: #{e.message} Location: #{e.backtrace.first}"
53
+ "Profiler CPU profiling extensions unavailable. Cause: #{e.message} Location: #{Array(e.backtrace).first}"
52
54
  end
53
55
  end
54
56
 
@@ -66,7 +68,9 @@ module Datadog
66
68
  # Restart profiler, if enabled
67
69
  Datadog.profiler.start if Datadog.profiler
68
70
  rescue StandardError => e
69
- Datadog.logger.warn { "Error during post-fork hooks. Cause: #{e.message} Location: #{e.backtrace.first}" }
71
+ Datadog.logger.warn do
72
+ "Error during post-fork hooks. Cause: #{e.message} Location: #{Array(e.backtrace).first}"
73
+ end
70
74
  end
71
75
  end
72
76
  end
@@ -0,0 +1,41 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require 'ddtrace/ext/http'
5
+
6
+ module Datadog
7
+ module Profiling
8
+ module TraceIdentifiers
9
+ # Used by Datadog::Profiling::TraceIdentifiers::Helper to get the trace identifiers (trace id and span id) for a
10
+ # given thread, if there is an active trace for that thread in Datadog.tracer.
11
+ class Ddtrace
12
+ def initialize(tracer: nil)
13
+ @tracer = (tracer if tracer.respond_to?(:call_context))
14
+ end
15
+
16
+ def trace_identifiers_for(thread)
17
+ return unless @tracer
18
+
19
+ context = @tracer.call_context(thread)
20
+ return unless context
21
+
22
+ trace_id = context.trace_id || 0
23
+ span_id = context.span_id || 0
24
+
25
+ [trace_id, span_id, maybe_extract_resource(context.current_root_span)] if trace_id != 0 && span_id != 0
26
+ end
27
+
28
+ private
29
+
30
+ # NOTE: Currently we're only interested in HTTP service endpoints. Over time, this list may be expanded.
31
+ # Resources MUST NOT include personal identifiable information (PII); this should not be the case with
32
+ # ddtrace integrations, but worth mentioning just in case :)
33
+ def maybe_extract_resource(root_span)
34
+ return unless root_span
35
+
36
+ root_span.resource if root_span.span_type == Datadog::Ext::HTTP::TYPE_INBOUND
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,46 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require 'ddtrace/profiling/trace_identifiers/ddtrace'
5
+
6
+ module Datadog
7
+ module Profiling
8
+ module TraceIdentifiers
9
+ # Helper used to retrieve the trace identifiers (trace id and span id) for a given thread,
10
+ # if there is an active trace for that thread for the supported tracing APIs.
11
+ #
12
+ # This data is used to connect profiles to the traces -- samples in a profile will be tagged with this data and
13
+ # the profile can be filtered down to look at only the samples for a given trace.
14
+ class Helper
15
+ DEFAULT_SUPPORTED_APIS = [
16
+ ::Datadog::Profiling::TraceIdentifiers::Ddtrace
17
+ ].freeze
18
+ private_constant :DEFAULT_SUPPORTED_APIS
19
+
20
+ def initialize(
21
+ tracer:,
22
+ # If this is disabled, the helper will strip the optional trace_resource_container even if provided by the api
23
+ endpoint_collection_enabled:,
24
+ supported_apis: DEFAULT_SUPPORTED_APIS.map { |api| api.new(tracer: tracer) }
25
+ )
26
+ @endpoint_collection_enabled = endpoint_collection_enabled
27
+ @supported_apis = supported_apis
28
+ end
29
+
30
+ # Expected output of the #trace_identifiers_for
31
+ # duck type is [trace_id, span_id, (optional trace_resource_container)]
32
+ def trace_identifiers_for(thread)
33
+ @supported_apis.each do |api|
34
+ trace_identifiers = api.trace_identifiers_for(thread)
35
+
36
+ if trace_identifiers
37
+ return @endpoint_collection_enabled ? trace_identifiers : trace_identifiers[0..1]
38
+ end
39
+ end
40
+
41
+ nil
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,8 +1,11 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Profiling
3
4
  module Transport
4
5
  # Generic interface for profiling transports
5
6
  module Client
7
+ include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
8
+
6
9
  def send_profiling_flush(flush)
7
10
  raise NotImplementedError
8
11
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/ext/profiling'
2
3
  require 'ddtrace/utils/compression'
3
4
  require 'ddtrace/vendor/multipart-post/multipart/post/composite_read_io'
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/http/api/instance'
2
3
  require 'ddtrace/profiling/transport/http/api/spec'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/http/api/spec'
2
3
 
3
4
  module Datadog
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/http/api/map'
2
3
  require 'ddtrace/profiling/encoding/profile'
3
4
  require 'ddtrace/profiling/transport/http/api/spec'
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/http/builder'
2
3
 
3
4
  require 'ddtrace/profiling/transport/http/api'
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/http/client'
2
3
  require 'ddtrace/profiling/transport/client'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/http/response'
2
3
  require 'ddtrace/profiling/transport/response'
3
4
 
@@ -1,7 +1,9 @@
1
- require 'ddtrace/ext/runtime'
1
+ # typed: true
2
+ require 'datadog/core/environment/ext'
2
3
  require 'ddtrace/ext/transport'
3
4
 
4
- require 'ddtrace/runtime/container'
5
+ require 'datadog/core/environment/container'
6
+ require 'datadog/core/environment/variable_helpers'
5
7
 
6
8
  require 'ddtrace/profiling/transport/http/builder'
7
9
  require 'ddtrace/profiling/transport/http/api'
@@ -15,21 +17,24 @@ module Datadog
15
17
  module Transport
16
18
  # Namespace for HTTP transport components
17
19
  module HTTP
18
- module_function
19
-
20
20
  # Builds a new Transport::HTTP::Client
21
- def new(&block)
21
+ def self.new(&block)
22
22
  Builder.new(&block).to_transport
23
23
  end
24
24
 
25
25
  # Builds a new Transport::HTTP::Client with default settings
26
- # Pass a block to override any settings.
27
- def default(profiling_upload_timeout_seconds:, agent_settings: nil, site: nil, api_key: nil)
26
+ def self.default(
27
+ profiling_upload_timeout_seconds:,
28
+ agent_settings:,
29
+ site: nil,
30
+ api_key: nil,
31
+ agentless_allowed: agentless_allowed?
32
+ )
28
33
  new do |transport|
29
34
  transport.headers default_headers
30
35
 
31
36
  # Configure adapter & API
32
- if site && api_key
37
+ if site && api_key && agentless_allowed
33
38
  configure_for_agentless(
34
39
  transport,
35
40
  profiling_upload_timeout_seconds: profiling_upload_timeout_seconds,
@@ -37,13 +42,6 @@ module Datadog
37
42
  api_key: api_key
38
43
  )
39
44
  else
40
- unless agent_settings
41
- raise(
42
- ArgumentError,
43
- "Missing configuration for #{self}.default: All of `agent_settings`, `site` and `api_key` are nil"
44
- )
45
- end
46
-
47
45
  configure_for_agent(
48
46
  transport,
49
47
  profiling_upload_timeout_seconds: profiling_upload_timeout_seconds,
@@ -53,35 +51,23 @@ module Datadog
53
51
  end
54
52
  end
55
53
 
56
- def default_headers
54
+ def self.default_headers
57
55
  {
58
- Datadog::Ext::Transport::HTTP::HEADER_META_LANG => Datadog::Ext::Runtime::LANG,
59
- Datadog::Ext::Transport::HTTP::HEADER_META_LANG_VERSION => Datadog::Ext::Runtime::LANG_VERSION,
60
- Datadog::Ext::Transport::HTTP::HEADER_META_LANG_INTERPRETER => Datadog::Ext::Runtime::LANG_INTERPRETER,
61
- Datadog::Ext::Transport::HTTP::HEADER_META_TRACER_VERSION => Datadog::Ext::Runtime::TRACER_VERSION
56
+ Datadog::Ext::Transport::HTTP::HEADER_META_LANG => Core::Environment::Ext::LANG,
57
+ Datadog::Ext::Transport::HTTP::HEADER_META_LANG_VERSION => Core::Environment::Ext::LANG_VERSION,
58
+ Datadog::Ext::Transport::HTTP::HEADER_META_LANG_INTERPRETER => Core::Environment::Ext::LANG_INTERPRETER,
59
+ Datadog::Ext::Transport::HTTP::HEADER_META_TRACER_VERSION => Core::Environment::Ext::TRACER_VERSION
62
60
  }.tap do |headers|
63
61
  # Add container ID, if present.
64
- container_id = Datadog::Runtime::Container.container_id
62
+ container_id = Datadog::Core::Environment::Container.container_id
65
63
  headers[Datadog::Ext::Transport::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
66
64
  end
67
65
  end
68
66
 
69
- private_class_method def default_adapter
70
- :net_http
71
- end
72
-
73
- private_class_method def configure_for_agent(transport, profiling_upload_timeout_seconds:, agent_settings:)
67
+ private_class_method def self.configure_for_agent(transport, profiling_upload_timeout_seconds:, agent_settings:)
74
68
  apis = API.agent_defaults
75
69
 
76
- transport.adapter(
77
- default_adapter,
78
- agent_settings.hostname,
79
- agent_settings.port,
80
- # We explictly use profiling_upload_timeout_seconds instead of agent_settings.timeout because profile
81
- # uploads are bigger and thus we employ a separate configuration.
82
- timeout: profiling_upload_timeout_seconds,
83
- ssl: agent_settings.ssl
84
- )
70
+ transport.adapter(agent_settings.merge(timeout_seconds: profiling_upload_timeout_seconds))
85
71
  transport.api(API::V1, apis[API::V1], default: true)
86
72
 
87
73
  # NOTE: This proc, when it exists, usually overrides the transport specified above
@@ -90,7 +76,7 @@ module Datadog
90
76
  end
91
77
  end
92
78
 
93
- private_class_method def configure_for_agentless(transport, profiling_upload_timeout_seconds:, site:, api_key:)
79
+ private_class_method def self.configure_for_agentless(transport, profiling_upload_timeout_seconds:, site:, api_key:)
94
80
  apis = API.api_defaults
95
81
 
96
82
  site_uri = URI(format(Datadog::Ext::Profiling::Transport::HTTP::URI_TEMPLATE_DD_API, site))
@@ -98,7 +84,7 @@ module Datadog
98
84
  port = site_uri.port
99
85
 
100
86
  transport.adapter(
101
- default_adapter,
87
+ Datadog::Ext::Transport::HTTP::ADAPTER,
102
88
  hostname,
103
89
  port,
104
90
  timeout: profiling_upload_timeout_seconds,
@@ -108,10 +94,17 @@ module Datadog
108
94
  transport.headers(Datadog::Ext::Transport::HTTP::HEADER_DD_API_KEY => api_key)
109
95
  end
110
96
 
97
+ private_class_method def self.agentless_allowed?
98
+ Datadog::Core::Environment::VariableHelpers.env_to_bool(Datadog::Ext::Profiling::ENV_AGENTLESS, false)
99
+ end
100
+
111
101
  # Add adapters to registry
112
- Builder::REGISTRY.set(Datadog::Transport::HTTP::Adapters::Net, :net_http)
113
- Builder::REGISTRY.set(Datadog::Transport::HTTP::Adapters::Test, :test)
114
- Builder::REGISTRY.set(Datadog::Transport::HTTP::Adapters::UnixSocket, :unix)
102
+ Datadog::Transport::HTTP::Builder::REGISTRY.set(Datadog::Transport::HTTP::Adapters::Net,
103
+ Datadog::Ext::Transport::HTTP::ADAPTER)
104
+ Datadog::Transport::HTTP::Builder::REGISTRY.set(Datadog::Transport::HTTP::Adapters::Test,
105
+ Datadog::Ext::Transport::Test::ADAPTER)
106
+ Datadog::Transport::HTTP::Builder::REGISTRY.set(Datadog::Transport::HTTP::Adapters::UnixSocket,
107
+ Datadog::Ext::Transport::UnixSocket::ADAPTER)
115
108
  end
116
109
  end
117
110
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/io/client'
2
3
  require 'ddtrace/profiling/transport/client'
3
4
  require 'ddtrace/profiling/transport/request'
@@ -1,3 +1,4 @@
1
+ # typed: strict
1
2
  require 'ddtrace/transport/io/response'
2
3
  require 'ddtrace/profiling/transport/response'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/profiling/transport/io/client'
2
3
  require 'ddtrace/profiling/encoding/profile'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/parcel'
2
3
 
3
4
  module Datadog
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/request'
2
3
  require 'ddtrace/profiling/transport/parcel'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: strict
1
2
  module Datadog
2
3
  module Profiling
3
4
  module Transport
@@ -1,28 +1,36 @@
1
+ # typed: true
2
+ require 'datadog/core/environment/variable_helpers'
3
+ require 'ddtrace/utils/only_once'
4
+
1
5
  module Datadog
2
6
  # Contains profiler for generating stack profiles, etc.
3
- module Profiling
4
- module_function
5
-
7
+ module Profiling # rubocop:disable Metrics/ModuleLength
6
8
  GOOGLE_PROTOBUF_MINIMUM_VERSION = Gem::Version.new('3.0')
7
9
  private_constant :GOOGLE_PROTOBUF_MINIMUM_VERSION
8
10
 
9
- def supported?
11
+ SKIPPED_NATIVE_EXTENSION_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
12
+ private_constant :SKIPPED_NATIVE_EXTENSION_ONLY_ONCE
13
+
14
+ def self.supported?
10
15
  unsupported_reason.nil?
11
16
  end
12
17
 
13
- def unsupported_reason
18
+ def self.unsupported_reason
14
19
  # NOTE: Only the first matching reason is returned, so try to keep a nice order on reasons -- e.g. tell users
15
20
  # first that they can't use this on JRuby before telling them that they are missing protobuf
16
21
 
17
- ruby_engine_unsupported? || protobuf_gem_unavailable? || protobuf_version_unsupported? || protobuf_failed_to_load?
22
+ ruby_engine_unsupported? ||
23
+ native_library_failed_to_load? ||
24
+ protobuf_gem_unavailable? ||
25
+ protobuf_version_unsupported? ||
26
+ protobuf_failed_to_load?
18
27
  end
19
28
 
20
- def self.ruby_engine_unsupported?
29
+ private_class_method def self.ruby_engine_unsupported?
21
30
  'JRuby is not supported' if RUBY_ENGINE == 'jruby'
22
31
  end
23
- private_class_method :ruby_engine_unsupported?
24
32
 
25
- def self.protobuf_gem_unavailable?
33
+ private_class_method def self.protobuf_gem_unavailable?
26
34
  # NOTE: On environments where protobuf is already loaded, we skip the check. This allows us to support environments
27
35
  # where no Gem.loaded_version is NOT available but customers are able to load protobuf; see for instance
28
36
  # https://github.com/teamcapybara/capybara/commit/caf3bcd7664f4f2691d0ca9ef3be9a2a954fecfb
@@ -30,9 +38,8 @@ module Datadog
30
38
  "Missing google-protobuf dependency; please add `gem 'google-protobuf', '~> 3.0'` to your Gemfile or gems.rb file"
31
39
  end
32
40
  end
33
- private_class_method :protobuf_gem_unavailable?
34
41
 
35
- def self.protobuf_version_unsupported?
42
+ private_class_method def self.protobuf_version_unsupported?
36
43
  # See above for why we skip the check when protobuf is already loaded; note that when protobuf was already loaded
37
44
  # we skip the version check to avoid the call to Gem.loaded_specs. Unfortunately, protobuf does not seem to
38
45
  # expose the gem version constant elsewhere, so in that setup we are not able to check the version.
@@ -41,14 +48,12 @@ module Datadog
41
48
  "adding `gem 'google-protobuf', '~> 3.0'` to your Gemfile or gems.rb file"
42
49
  end
43
50
  end
44
- private_class_method :protobuf_version_unsupported?
45
51
 
46
- def self.protobuf_failed_to_load?
52
+ private_class_method def self.protobuf_failed_to_load?
47
53
  unless protobuf_loaded_successfully?
48
54
  'There was an error loading the google-protobuf library; see previous warning message for details'
49
55
  end
50
56
  end
51
- private_class_method :protobuf_failed_to_load?
52
57
 
53
58
  # The `google-protobuf` gem depends on a native component, and its creators helpfully tried to provide precompiled
54
59
  # versions of this extension on rubygems.org.
@@ -59,7 +64,7 @@ module Datadog
59
64
  #
60
65
  # Thus, the gem can still be installed, but can be in a broken state. To avoid breaking customer applications, we
61
66
  # use this helper to load it and gracefully handle failures.
62
- def self.protobuf_loaded_successfully?
67
+ private_class_method def self.protobuf_loaded_successfully?
63
68
  return @protobuf_loaded if defined?(@protobuf_loaded)
64
69
 
65
70
  begin
@@ -69,7 +74,8 @@ module Datadog
69
74
  # NOTE: We use Kernel#warn here because this code gets run BEFORE Datadog.logger is actually set up.
70
75
  # In the future it'd be nice to shuffle the logger startup to happen first to avoid this special case.
71
76
  Kernel.warn(
72
- "[DDTRACE] Error while loading google-protobuf gem. Cause: '#{e.message}' Location: '#{e.backtrace.first}'. " \
77
+ '[DDTRACE] Error while loading google-protobuf gem. ' \
78
+ "Cause: '#{e.message}' Location: '#{Array(e.backtrace).first}'. " \
73
79
  'This can happen when google-protobuf is missing its native components. ' \
74
80
  'To fix this, try removing and reinstalling the gem, forcing it to recompile the components: ' \
75
81
  '`gem uninstall google-protobuf -a; BUNDLE_FORCE_RUBY_PLATFORM=true bundle install`. ' \
@@ -79,9 +85,47 @@ module Datadog
79
85
  @protobuf_loaded = false
80
86
  end
81
87
  end
82
- private_class_method :protobuf_loaded_successfully?
83
88
 
84
- def self.load_profiling
89
+ private_class_method def self.native_library_failed_to_load?
90
+ success, exception = try_loading_native_library
91
+
92
+ unless success
93
+ if exception
94
+ 'There was an error loading the profiling native extension due to ' \
95
+ "'#{exception.message}' at '#{exception.backtrace.first}'"
96
+ else
97
+ 'The profiling native extension did not load correctly. ' \
98
+ 'If the error persists, please contact support via <https://docs.datadoghq.com/help/> or ' \
99
+ 'file a bug at <https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug>.'
100
+ end
101
+ end
102
+ end
103
+
104
+ private_class_method def self.try_loading_native_library
105
+ if Datadog::Core::Environment::VariableHelpers.env_to_bool('DD_PROFILING_NO_EXTENSION', false)
106
+ SKIPPED_NATIVE_EXTENSION_ONLY_ONCE.run do
107
+ Kernel.warn(
108
+ '[DDTRACE] Skipped loading of profiling native extension due to DD_PROFILING_NO_EXTENSION environment ' \
109
+ 'variable being set. ' \
110
+ 'This option is experimental and will lead to the profiler not working in future releases. ' \
111
+ 'If you needed to use this, please tell us why on <https://github.com/DataDog/dd-trace-rb/issues/new>.'
112
+ )
113
+ end
114
+
115
+ return [true, nil]
116
+ end
117
+
118
+ begin
119
+ require "ddtrace_profiling_native_extension.#{RUBY_VERSION}_#{RUBY_PLATFORM}"
120
+ success =
121
+ defined?(Datadog::Profiling::NativeExtension) && Datadog::Profiling::NativeExtension.send(:native_working?)
122
+ [success, nil]
123
+ rescue StandardError, LoadError => e
124
+ [false, e]
125
+ end
126
+ end
127
+
128
+ private_class_method def self.load_profiling
85
129
  return false unless supported?
86
130
 
87
131
  require 'ddtrace/profiling/ext/cpu'
@@ -95,12 +139,12 @@ module Datadog
95
139
  require 'ddtrace/profiling/transport/io'
96
140
  require 'ddtrace/profiling/transport/http'
97
141
  require 'ddtrace/profiling/profiler'
98
-
142
+ require 'ddtrace/profiling/native_extension'
143
+ require 'ddtrace/profiling/trace_identifiers/helper'
99
144
  require 'ddtrace/profiling/pprof/pprof_pb'
100
145
 
101
146
  true
102
147
  end
103
- private_class_method :load_profiling
104
148
 
105
149
  load_profiling if supported?
106
150
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/context'
2
3
  require 'ddtrace/ext/distributed'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/configuration'
2
3
  require 'ddtrace/context'
3
4
  require 'ddtrace/ext/distributed'
@@ -31,7 +32,7 @@ module Datadog
31
32
  rescue => e
32
33
  Datadog.logger.error(
33
34
  'Error injecting propagated context into the environment. ' \
34
- "Cause: #{e} Location: #{e.backtrace.first}"
35
+ "Cause: #{e} Location: #{Array(e.backtrace).first}"
35
36
  )
36
37
  end
37
38
  end
@@ -54,7 +55,7 @@ module Datadog
54
55
  rescue => e
55
56
  Datadog.logger.error(
56
57
  'Error extracting propagated context from the environment. ' \
57
- "Cause: #{e} Location: #{e.backtrace.first}"
58
+ "Cause: #{e} Location: #{Array(e.backtrace).first}"
58
59
  )
59
60
  end
60
61
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Quantization
3
4
  # Quantization for HTTP resources
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'uri'
2
3
  require 'set'
3
4
 
@@ -5,6 +6,8 @@ module Datadog
5
6
  module Quantization
6
7
  # Quantization for HTTP resources
7
8
  module HTTP
9
+ include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
10
+
8
11
  PLACEHOLDER = '?'.freeze
9
12
 
10
13
  module_function