ddtrace 0.41.0 → 0.52.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 (572) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +22 -0
  3. data/.gitignore +7 -1
  4. data/CHANGELOG.md +1496 -354
  5. data/CONTRIBUTING.md +3 -7
  6. data/LICENSE-3rdparty.csv +2 -0
  7. data/README.md +1 -0
  8. data/bin/ddtracerb +15 -0
  9. data/ddtrace.gemspec +18 -38
  10. data/docs/DevelopmentGuide.md +55 -2
  11. data/docs/GettingStarted.md +338 -79
  12. data/docs/ProfilingDevelopment.md +107 -0
  13. data/ext/ddtrace_profiling_native_extension/extconf.rb +28 -0
  14. data/ext/ddtrace_profiling_native_extension/profiling.c +17 -0
  15. data/lib/datadog/ci.rb +17 -0
  16. data/lib/datadog/ci/configuration/components.rb +31 -0
  17. data/lib/datadog/ci/configuration/settings.rb +37 -0
  18. data/lib/datadog/ci/context_flush.rb +29 -0
  19. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +31 -0
  20. data/lib/datadog/ci/contrib/cucumber/ext.rb +20 -0
  21. data/lib/datadog/ci/contrib/cucumber/formatter.rb +98 -0
  22. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +27 -0
  23. data/lib/datadog/ci/contrib/cucumber/integration.rb +48 -0
  24. data/lib/datadog/ci/contrib/cucumber/patcher.rb +26 -0
  25. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +31 -0
  26. data/lib/datadog/ci/contrib/rspec/example.rb +74 -0
  27. data/lib/datadog/ci/contrib/rspec/ext.rb +19 -0
  28. data/lib/datadog/ci/contrib/rspec/integration.rb +49 -0
  29. data/lib/datadog/ci/contrib/rspec/patcher.rb +26 -0
  30. data/lib/datadog/ci/ext/app_types.rb +10 -0
  31. data/lib/datadog/ci/ext/environment.rb +443 -0
  32. data/lib/datadog/ci/ext/settings.rb +11 -0
  33. data/lib/datadog/ci/ext/test.rb +35 -0
  34. data/lib/datadog/ci/extensions.rb +18 -0
  35. data/lib/datadog/ci/test.rb +77 -0
  36. data/lib/datadog/contrib.rb +69 -0
  37. data/lib/datadog/core/environment/cgroup.rb +52 -0
  38. data/lib/datadog/core/environment/class_count.rb +20 -0
  39. data/lib/datadog/core/environment/container.rb +91 -0
  40. data/lib/datadog/core/environment/ext.rb +27 -0
  41. data/lib/datadog/core/environment/gc.rb +19 -0
  42. data/lib/datadog/core/environment/identity.rb +51 -0
  43. data/lib/datadog/core/environment/socket.rb +17 -0
  44. data/lib/datadog/core/environment/thread_count.rb +19 -0
  45. data/lib/datadog/core/environment/variable_helpers.rb +42 -0
  46. data/lib/ddtrace.rb +22 -48
  47. data/lib/ddtrace/analytics.rb +3 -0
  48. data/lib/ddtrace/auto_instrument.rb +5 -0
  49. data/lib/ddtrace/auto_instrument_base.rb +7 -0
  50. data/lib/ddtrace/buffer.rb +233 -135
  51. data/lib/ddtrace/chunker.rb +1 -0
  52. data/lib/ddtrace/configuration.rb +132 -24
  53. data/lib/ddtrace/configuration/agent_settings_resolver.rb +231 -0
  54. data/lib/ddtrace/configuration/base.rb +9 -11
  55. data/lib/ddtrace/configuration/components.rb +167 -26
  56. data/lib/ddtrace/configuration/dependency_resolver.rb +1 -0
  57. data/lib/ddtrace/configuration/option.rb +1 -0
  58. data/lib/ddtrace/configuration/option_definition.rb +2 -3
  59. data/lib/ddtrace/configuration/option_definition_set.rb +1 -0
  60. data/lib/ddtrace/configuration/option_set.rb +1 -0
  61. data/lib/ddtrace/configuration/options.rb +7 -9
  62. data/lib/ddtrace/configuration/pin_setup.rb +1 -0
  63. data/lib/ddtrace/configuration/settings.rb +132 -12
  64. data/lib/ddtrace/context.rb +41 -20
  65. data/lib/ddtrace/context_flush.rb +15 -2
  66. data/lib/ddtrace/context_provider.rb +17 -5
  67. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +1 -0
  68. data/lib/ddtrace/contrib/action_cable/event.rb +6 -4
  69. data/lib/ddtrace/contrib/action_cable/events.rb +1 -0
  70. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +1 -0
  71. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +1 -0
  72. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +1 -0
  73. data/lib/ddtrace/contrib/action_cable/ext.rb +1 -0
  74. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +1 -0
  75. data/lib/ddtrace/contrib/action_cable/integration.rb +8 -0
  76. data/lib/ddtrace/contrib/action_cable/patcher.rb +1 -0
  77. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +22 -13
  78. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +2 -1
  79. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +1 -0
  80. data/lib/ddtrace/contrib/action_pack/ext.rb +1 -0
  81. data/lib/ddtrace/contrib/action_pack/integration.rb +8 -0
  82. data/lib/ddtrace/contrib/action_pack/patcher.rb +1 -0
  83. data/lib/ddtrace/contrib/action_pack/utils.rb +2 -1
  84. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +1 -0
  85. data/lib/ddtrace/contrib/action_view/event.rb +4 -7
  86. data/lib/ddtrace/contrib/action_view/events.rb +1 -0
  87. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +2 -0
  88. data/lib/ddtrace/contrib/action_view/events/render_template.rb +2 -0
  89. data/lib/ddtrace/contrib/action_view/ext.rb +1 -0
  90. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +1 -0
  91. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +1 -0
  92. data/lib/ddtrace/contrib/action_view/integration.rb +8 -0
  93. data/lib/ddtrace/contrib/action_view/patcher.rb +5 -4
  94. data/lib/ddtrace/contrib/action_view/utils.rb +2 -1
  95. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +1 -0
  96. data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -2
  97. data/lib/ddtrace/contrib/active_model_serializers/events.rb +1 -0
  98. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +1 -0
  99. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +1 -0
  100. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +1 -0
  101. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +1 -0
  102. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +1 -0
  103. data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +31 -0
  104. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +108 -18
  105. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +1 -0
  106. data/lib/ddtrace/contrib/active_record/event.rb +3 -2
  107. data/lib/ddtrace/contrib/active_record/events.rb +1 -0
  108. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +1 -0
  109. data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -0
  110. data/lib/ddtrace/contrib/active_record/ext.rb +1 -0
  111. data/lib/ddtrace/contrib/active_record/integration.rb +8 -0
  112. data/lib/ddtrace/contrib/active_record/patcher.rb +1 -0
  113. data/lib/ddtrace/contrib/active_record/utils.rb +69 -21
  114. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +105 -3
  115. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +26 -4
  116. data/lib/ddtrace/contrib/active_support/cache/redis.rb +2 -5
  117. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +1 -0
  118. data/lib/ddtrace/contrib/active_support/ext.rb +4 -0
  119. data/lib/ddtrace/contrib/active_support/integration.rb +8 -1
  120. data/lib/ddtrace/contrib/active_support/notifications/event.rb +15 -3
  121. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +3 -1
  122. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +10 -5
  123. data/lib/ddtrace/contrib/active_support/patcher.rb +1 -0
  124. data/lib/ddtrace/contrib/analytics.rb +1 -0
  125. data/lib/ddtrace/contrib/auto_instrument.rb +49 -0
  126. data/lib/ddtrace/contrib/aws/configuration/settings.rb +1 -0
  127. data/lib/ddtrace/contrib/aws/ext.rb +1 -0
  128. data/lib/ddtrace/contrib/aws/instrumentation.rb +32 -1
  129. data/lib/ddtrace/contrib/aws/integration.rb +1 -0
  130. data/lib/ddtrace/contrib/aws/parsed_context.rb +1 -0
  131. data/lib/ddtrace/contrib/aws/patcher.rb +6 -1
  132. data/lib/ddtrace/contrib/aws/services.rb +4 -0
  133. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +1 -0
  134. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -0
  135. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
  136. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +1 -0
  137. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +1 -0
  138. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +3 -1
  139. data/lib/ddtrace/contrib/configurable.rb +65 -38
  140. data/lib/ddtrace/contrib/configuration/resolver.rb +71 -5
  141. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +21 -20
  142. data/lib/ddtrace/contrib/configuration/settings.rb +8 -6
  143. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +1 -0
  144. data/lib/ddtrace/contrib/dalli/ext.rb +1 -0
  145. data/lib/ddtrace/contrib/dalli/instrumentation.rb +2 -1
  146. data/lib/ddtrace/contrib/dalli/integration.rb +1 -0
  147. data/lib/ddtrace/contrib/dalli/patcher.rb +2 -39
  148. data/lib/ddtrace/contrib/dalli/quantize.rb +1 -0
  149. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +3 -0
  150. data/lib/ddtrace/contrib/delayed_job/ext.rb +3 -0
  151. data/lib/ddtrace/contrib/delayed_job/integration.rb +1 -0
  152. data/lib/ddtrace/contrib/delayed_job/patcher.rb +1 -0
  153. data/lib/ddtrace/contrib/delayed_job/plugin.rb +39 -15
  154. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +1 -0
  155. data/lib/ddtrace/contrib/elasticsearch/ext.rb +1 -0
  156. data/lib/ddtrace/contrib/elasticsearch/integration.rb +1 -0
  157. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +2 -0
  158. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +6 -2
  159. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +1 -0
  160. data/lib/ddtrace/contrib/ethon/easy_patch.rb +13 -11
  161. data/lib/ddtrace/contrib/ethon/ext.rb +2 -0
  162. data/lib/ddtrace/contrib/ethon/integration.rb +1 -0
  163. data/lib/ddtrace/contrib/ethon/multi_patch.rb +2 -1
  164. data/lib/ddtrace/contrib/ethon/patcher.rb +4 -2
  165. data/lib/ddtrace/contrib/excon/configuration/settings.rb +1 -0
  166. data/lib/ddtrace/contrib/excon/ext.rb +1 -0
  167. data/lib/ddtrace/contrib/excon/integration.rb +1 -0
  168. data/lib/ddtrace/contrib/excon/middleware.rb +10 -7
  169. data/lib/ddtrace/contrib/excon/patcher.rb +1 -0
  170. data/lib/ddtrace/contrib/extensions.rb +90 -14
  171. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +1 -0
  172. data/lib/ddtrace/contrib/faraday/connection.rb +1 -0
  173. data/lib/ddtrace/contrib/faraday/ext.rb +1 -0
  174. data/lib/ddtrace/contrib/faraday/integration.rb +1 -0
  175. data/lib/ddtrace/contrib/faraday/middleware.rb +2 -3
  176. data/lib/ddtrace/contrib/faraday/patcher.rb +3 -38
  177. data/lib/ddtrace/contrib/faraday/rack_builder.rb +1 -0
  178. data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -0
  179. data/lib/ddtrace/contrib/grape/endpoint.rb +68 -32
  180. data/lib/ddtrace/contrib/grape/ext.rb +2 -0
  181. data/lib/ddtrace/contrib/grape/instrumentation.rb +4 -3
  182. data/lib/ddtrace/contrib/grape/integration.rb +1 -0
  183. data/lib/ddtrace/contrib/grape/patcher.rb +2 -43
  184. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +1 -0
  185. data/lib/ddtrace/contrib/graphql/ext.rb +1 -0
  186. data/lib/ddtrace/contrib/graphql/integration.rb +1 -0
  187. data/lib/ddtrace/contrib/graphql/patcher.rb +1 -0
  188. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +2 -0
  189. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +13 -8
  190. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +2 -1
  191. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -4
  192. data/lib/ddtrace/contrib/grpc/ext.rb +1 -0
  193. data/lib/ddtrace/contrib/grpc/integration.rb +1 -0
  194. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +1 -0
  195. data/lib/ddtrace/contrib/grpc/patcher.rb +3 -37
  196. data/lib/ddtrace/contrib/http/circuit_breaker.rb +2 -3
  197. data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
  198. data/lib/ddtrace/contrib/http/ext.rb +1 -0
  199. data/lib/ddtrace/contrib/http/instrumentation.rb +9 -8
  200. data/lib/ddtrace/contrib/http/integration.rb +1 -0
  201. data/lib/ddtrace/contrib/http/patcher.rb +2 -1
  202. data/lib/ddtrace/contrib/http_annotation_helper.rb +1 -0
  203. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +33 -0
  204. data/lib/ddtrace/contrib/httpclient/ext.rb +18 -0
  205. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +148 -0
  206. data/lib/ddtrace/contrib/httpclient/integration.rb +44 -0
  207. data/lib/ddtrace/contrib/httpclient/patcher.rb +39 -0
  208. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +1 -0
  209. data/lib/ddtrace/contrib/httprb/ext.rb +1 -0
  210. data/lib/ddtrace/contrib/httprb/instrumentation.rb +17 -22
  211. data/lib/ddtrace/contrib/httprb/integration.rb +1 -0
  212. data/lib/ddtrace/contrib/httprb/patcher.rb +8 -4
  213. data/lib/ddtrace/contrib/integration.rb +4 -3
  214. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +1 -0
  215. data/lib/ddtrace/contrib/kafka/consumer_event.rb +1 -0
  216. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +1 -0
  217. data/lib/ddtrace/contrib/kafka/event.rb +4 -3
  218. data/lib/ddtrace/contrib/kafka/events.rb +1 -0
  219. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +1 -0
  220. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +1 -0
  221. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +1 -0
  222. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +1 -0
  223. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +1 -0
  224. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +1 -0
  225. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +1 -0
  226. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
  227. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +1 -0
  228. data/lib/ddtrace/contrib/kafka/ext.rb +1 -0
  229. data/lib/ddtrace/contrib/kafka/integration.rb +1 -0
  230. data/lib/ddtrace/contrib/kafka/patcher.rb +1 -0
  231. data/lib/ddtrace/contrib/lograge/configuration/settings.rb +19 -0
  232. data/lib/ddtrace/contrib/lograge/ext.rb +11 -0
  233. data/lib/ddtrace/contrib/lograge/instrumentation.rb +39 -0
  234. data/lib/ddtrace/contrib/lograge/integration.rb +46 -0
  235. data/lib/ddtrace/contrib/lograge/patcher.rb +26 -0
  236. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +1 -0
  237. data/lib/ddtrace/contrib/mongodb/ext.rb +1 -0
  238. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +5 -2
  239. data/lib/ddtrace/contrib/mongodb/integration.rb +1 -0
  240. data/lib/ddtrace/contrib/mongodb/parsers.rb +1 -0
  241. data/lib/ddtrace/contrib/mongodb/patcher.rb +3 -2
  242. data/lib/ddtrace/contrib/mongodb/subscribers.rb +3 -3
  243. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +1 -0
  244. data/lib/ddtrace/contrib/mysql2/ext.rb +1 -0
  245. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +2 -1
  246. data/lib/ddtrace/contrib/mysql2/integration.rb +1 -0
  247. data/lib/ddtrace/contrib/mysql2/patcher.rb +2 -1
  248. data/lib/ddtrace/contrib/patchable.rb +21 -9
  249. data/lib/ddtrace/contrib/patcher.rb +12 -8
  250. data/lib/ddtrace/contrib/presto/configuration/settings.rb +1 -0
  251. data/lib/ddtrace/contrib/presto/ext.rb +1 -0
  252. data/lib/ddtrace/contrib/presto/instrumentation.rb +2 -1
  253. data/lib/ddtrace/contrib/presto/integration.rb +1 -0
  254. data/lib/ddtrace/contrib/presto/patcher.rb +7 -3
  255. data/lib/ddtrace/contrib/qless/configuration/settings.rb +36 -0
  256. data/lib/ddtrace/contrib/qless/ext.rb +21 -0
  257. data/lib/ddtrace/contrib/qless/integration.rb +39 -0
  258. data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
  259. data/lib/ddtrace/contrib/qless/qless_job.rb +74 -0
  260. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +34 -0
  261. data/lib/ddtrace/contrib/que/configuration/settings.rb +2 -0
  262. data/lib/ddtrace/contrib/que/ext.rb +20 -19
  263. data/lib/ddtrace/contrib/que/integration.rb +1 -0
  264. data/lib/ddtrace/contrib/que/patcher.rb +1 -0
  265. data/lib/ddtrace/contrib/que/tracer.rb +4 -2
  266. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -0
  267. data/lib/ddtrace/contrib/racecar/event.rb +4 -2
  268. data/lib/ddtrace/contrib/racecar/events.rb +1 -0
  269. data/lib/ddtrace/contrib/racecar/events/batch.rb +1 -0
  270. data/lib/ddtrace/contrib/racecar/events/consume.rb +1 -0
  271. data/lib/ddtrace/contrib/racecar/events/message.rb +1 -0
  272. data/lib/ddtrace/contrib/racecar/ext.rb +1 -0
  273. data/lib/ddtrace/contrib/racecar/integration.rb +1 -0
  274. data/lib/ddtrace/contrib/racecar/patcher.rb +1 -0
  275. data/lib/ddtrace/contrib/rack/configuration/settings.rb +4 -3
  276. data/lib/ddtrace/contrib/rack/ext.rb +1 -0
  277. data/lib/ddtrace/contrib/rack/integration.rb +8 -0
  278. data/lib/ddtrace/contrib/rack/middlewares.rb +8 -12
  279. data/lib/ddtrace/contrib/rack/patcher.rb +2 -3
  280. data/lib/ddtrace/contrib/rack/request_queue.rb +7 -1
  281. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +11 -0
  282. data/lib/ddtrace/contrib/rails/configuration/settings.rb +1 -0
  283. data/lib/ddtrace/contrib/rails/ext.rb +1 -0
  284. data/lib/ddtrace/contrib/rails/framework.rb +26 -1
  285. data/lib/ddtrace/contrib/rails/integration.rb +1 -0
  286. data/lib/ddtrace/contrib/rails/log_injection.rb +1 -40
  287. data/lib/ddtrace/contrib/rails/middlewares.rb +1 -0
  288. data/lib/ddtrace/contrib/rails/patcher.rb +29 -8
  289. data/lib/ddtrace/contrib/rails/railtie.rb +1 -0
  290. data/lib/ddtrace/contrib/rails/utils.rb +5 -0
  291. data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -0
  292. data/lib/ddtrace/contrib/rake/ext.rb +1 -0
  293. data/lib/ddtrace/contrib/rake/instrumentation.rb +6 -3
  294. data/lib/ddtrace/contrib/rake/integration.rb +2 -1
  295. data/lib/ddtrace/contrib/rake/patcher.rb +2 -1
  296. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +15 -5
  297. data/lib/ddtrace/contrib/redis/configuration/settings.rb +6 -0
  298. data/lib/ddtrace/contrib/redis/ext.rb +2 -0
  299. data/lib/ddtrace/contrib/redis/integration.rb +1 -0
  300. data/lib/ddtrace/contrib/redis/patcher.rb +21 -3
  301. data/lib/ddtrace/contrib/redis/quantize.rb +29 -0
  302. data/lib/ddtrace/contrib/redis/tags.rb +6 -1
  303. data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
  304. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +7 -7
  305. data/lib/ddtrace/contrib/registerable.rb +5 -4
  306. data/lib/ddtrace/contrib/registry.rb +3 -2
  307. data/lib/ddtrace/contrib/resque/configuration/settings.rb +19 -1
  308. data/lib/ddtrace/contrib/resque/ext.rb +1 -0
  309. data/lib/ddtrace/contrib/resque/integration.rb +3 -2
  310. data/lib/ddtrace/contrib/resque/patcher.rb +5 -4
  311. data/lib/ddtrace/contrib/resque/resque_job.rb +26 -2
  312. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +1 -0
  313. data/lib/ddtrace/contrib/rest_client/ext.rb +1 -0
  314. data/lib/ddtrace/contrib/rest_client/integration.rb +1 -0
  315. data/lib/ddtrace/contrib/rest_client/patcher.rb +3 -1
  316. data/lib/ddtrace/contrib/rest_client/request_patch.rb +3 -4
  317. data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +19 -0
  318. data/lib/ddtrace/contrib/semantic_logger/ext.rb +11 -0
  319. data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +43 -0
  320. data/lib/ddtrace/contrib/semantic_logger/integration.rb +48 -0
  321. data/lib/ddtrace/contrib/semantic_logger/patcher.rb +26 -0
  322. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +1 -0
  323. data/lib/ddtrace/contrib/sequel/database.rb +2 -1
  324. data/lib/ddtrace/contrib/sequel/dataset.rb +2 -1
  325. data/lib/ddtrace/contrib/sequel/ext.rb +1 -0
  326. data/lib/ddtrace/contrib/sequel/integration.rb +1 -0
  327. data/lib/ddtrace/contrib/sequel/patcher.rb +3 -2
  328. data/lib/ddtrace/contrib/sequel/utils.rb +6 -6
  329. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +3 -0
  330. data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -0
  331. data/lib/ddtrace/contrib/shoryuken/integration.rb +1 -0
  332. data/lib/ddtrace/contrib/shoryuken/patcher.rb +1 -0
  333. data/lib/ddtrace/contrib/shoryuken/tracer.rb +9 -2
  334. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +1 -0
  335. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +2 -0
  336. data/lib/ddtrace/contrib/sidekiq/ext.rb +1 -0
  337. data/lib/ddtrace/contrib/sidekiq/integration.rb +1 -0
  338. data/lib/ddtrace/contrib/sidekiq/patcher.rb +1 -0
  339. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +6 -7
  340. data/lib/ddtrace/contrib/sidekiq/tracing.rb +1 -1
  341. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +1 -0
  342. data/lib/ddtrace/contrib/sinatra/env.rb +2 -3
  343. data/lib/ddtrace/contrib/sinatra/ext.rb +1 -0
  344. data/lib/ddtrace/contrib/sinatra/headers.rb +2 -3
  345. data/lib/ddtrace/contrib/sinatra/integration.rb +1 -0
  346. data/lib/ddtrace/contrib/sinatra/patcher.rb +3 -1
  347. data/lib/ddtrace/contrib/sinatra/tracer.rb +14 -6
  348. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +13 -6
  349. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +2 -0
  350. data/lib/ddtrace/contrib/sneakers/ext.rb +12 -11
  351. data/lib/ddtrace/contrib/sneakers/integration.rb +1 -0
  352. data/lib/ddtrace/contrib/sneakers/patcher.rb +1 -0
  353. data/lib/ddtrace/contrib/sneakers/tracer.rb +17 -21
  354. data/lib/ddtrace/contrib/status_code_matcher.rb +70 -0
  355. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -0
  356. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +5 -6
  357. data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -0
  358. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +5 -0
  359. data/lib/ddtrace/contrib/sucker_punch/integration.rb +1 -0
  360. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +2 -0
  361. data/lib/ddtrace/correlation.rb +3 -1
  362. data/lib/ddtrace/diagnostics/environment_logger.rb +9 -7
  363. data/lib/ddtrace/diagnostics/health.rb +1 -0
  364. data/lib/ddtrace/distributed_tracing/headers/b3.rb +1 -0
  365. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +1 -0
  366. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +1 -0
  367. data/lib/ddtrace/distributed_tracing/headers/headers.rb +2 -0
  368. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +2 -3
  369. data/lib/ddtrace/encoding.rb +3 -0
  370. data/lib/ddtrace/error.rb +78 -8
  371. data/lib/ddtrace/event.rb +1 -0
  372. data/lib/ddtrace/ext/analytics.rb +1 -0
  373. data/lib/ddtrace/ext/app_types.rb +1 -0
  374. data/lib/ddtrace/ext/correlation.rb +1 -0
  375. data/lib/ddtrace/ext/diagnostics.rb +1 -0
  376. data/lib/ddtrace/ext/distributed.rb +9 -2
  377. data/lib/ddtrace/ext/environment.rb +8 -0
  378. data/lib/ddtrace/ext/errors.rb +1 -0
  379. data/lib/ddtrace/ext/forced_tracing.rb +1 -0
  380. data/lib/ddtrace/ext/git.rb +20 -0
  381. data/lib/ddtrace/ext/http.rb +2 -1
  382. data/lib/ddtrace/ext/integration.rb +1 -0
  383. data/lib/ddtrace/ext/manual_tracing.rb +1 -0
  384. data/lib/ddtrace/ext/metrics.rb +1 -0
  385. data/lib/ddtrace/ext/net.rb +1 -0
  386. data/lib/ddtrace/ext/priority.rb +1 -0
  387. data/lib/ddtrace/ext/profiling.rb +56 -0
  388. data/lib/ddtrace/ext/runtime.rb +2 -7
  389. data/lib/ddtrace/ext/sampling.rb +1 -0
  390. data/lib/ddtrace/ext/sql.rb +1 -0
  391. data/lib/ddtrace/ext/test.rb +9 -0
  392. data/lib/ddtrace/ext/transport.rb +3 -0
  393. data/lib/ddtrace/forced_tracing.rb +3 -0
  394. data/lib/ddtrace/logger.rb +2 -1
  395. data/lib/ddtrace/metrics.rb +84 -24
  396. data/lib/ddtrace/opentelemetry/extensions.rb +2 -1
  397. data/lib/ddtrace/opentelemetry/span.rb +1 -0
  398. data/lib/ddtrace/opentracer.rb +21 -39
  399. data/lib/ddtrace/opentracer/binary_propagator.rb +1 -0
  400. data/lib/ddtrace/opentracer/carrier.rb +1 -0
  401. data/lib/ddtrace/opentracer/distributed_headers.rb +4 -0
  402. data/lib/ddtrace/opentracer/global_tracer.rb +1 -0
  403. data/lib/ddtrace/opentracer/propagator.rb +1 -0
  404. data/lib/ddtrace/opentracer/rack_propagator.rb +1 -0
  405. data/lib/ddtrace/opentracer/scope.rb +1 -0
  406. data/lib/ddtrace/opentracer/scope_manager.rb +1 -0
  407. data/lib/ddtrace/opentracer/span.rb +3 -6
  408. data/lib/ddtrace/opentracer/span_context.rb +1 -0
  409. data/lib/ddtrace/opentracer/span_context_factory.rb +1 -0
  410. data/lib/ddtrace/opentracer/text_map_propagator.rb +1 -0
  411. data/lib/ddtrace/opentracer/thread_local_scope.rb +2 -0
  412. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +1 -0
  413. data/lib/ddtrace/opentracer/tracer.rb +1 -0
  414. data/lib/ddtrace/patcher.rb +28 -6
  415. data/lib/ddtrace/pin.rb +9 -61
  416. data/lib/ddtrace/pipeline.rb +1 -0
  417. data/lib/ddtrace/pipeline/span_filter.rb +2 -1
  418. data/lib/ddtrace/pipeline/span_processor.rb +1 -0
  419. data/lib/ddtrace/profiling.rb +151 -0
  420. data/lib/ddtrace/profiling/backtrace_location.rb +33 -0
  421. data/lib/ddtrace/profiling/buffer.rb +42 -0
  422. data/lib/ddtrace/profiling/collectors/stack.rb +257 -0
  423. data/lib/ddtrace/profiling/encoding/profile.rb +38 -0
  424. data/lib/ddtrace/profiling/event.rb +14 -0
  425. data/lib/ddtrace/profiling/events/stack.rb +81 -0
  426. data/lib/ddtrace/profiling/exporter.rb +24 -0
  427. data/lib/ddtrace/profiling/ext/cpu.rb +67 -0
  428. data/lib/ddtrace/profiling/ext/cthread.rb +156 -0
  429. data/lib/ddtrace/profiling/ext/forking.rb +98 -0
  430. data/lib/ddtrace/profiling/flush.rb +44 -0
  431. data/lib/ddtrace/profiling/native_extension.rb +18 -0
  432. data/lib/ddtrace/profiling/pprof/builder.rb +120 -0
  433. data/lib/ddtrace/profiling/pprof/converter.rb +90 -0
  434. data/lib/ddtrace/profiling/pprof/message_set.rb +15 -0
  435. data/lib/ddtrace/profiling/pprof/payload.rb +19 -0
  436. data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
  437. data/lib/ddtrace/profiling/pprof/pprof_pb.rb +82 -0
  438. data/lib/ddtrace/profiling/pprof/stack_sample.rb +117 -0
  439. data/lib/ddtrace/profiling/pprof/string_table.rb +11 -0
  440. data/lib/ddtrace/profiling/pprof/template.rb +119 -0
  441. data/lib/ddtrace/profiling/preload.rb +4 -0
  442. data/lib/ddtrace/profiling/profiler.rb +31 -0
  443. data/lib/ddtrace/profiling/recorder.rb +96 -0
  444. data/lib/ddtrace/profiling/scheduler.rb +134 -0
  445. data/lib/ddtrace/profiling/tasks/setup.rb +82 -0
  446. data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +41 -0
  447. data/lib/ddtrace/profiling/trace_identifiers/helper.rb +46 -0
  448. data/lib/ddtrace/profiling/transport/client.rb +15 -0
  449. data/lib/ddtrace/profiling/transport/http.rb +120 -0
  450. data/lib/ddtrace/profiling/transport/http/api.rb +44 -0
  451. data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +101 -0
  452. data/lib/ddtrace/profiling/transport/http/api/instance.rb +37 -0
  453. data/lib/ddtrace/profiling/transport/http/api/spec.rb +41 -0
  454. data/lib/ddtrace/profiling/transport/http/builder.rb +29 -0
  455. data/lib/ddtrace/profiling/transport/http/client.rb +34 -0
  456. data/lib/ddtrace/profiling/transport/http/response.rb +22 -0
  457. data/lib/ddtrace/profiling/transport/io.rb +31 -0
  458. data/lib/ddtrace/profiling/transport/io/client.rb +28 -0
  459. data/lib/ddtrace/profiling/transport/io/response.rb +17 -0
  460. data/lib/ddtrace/profiling/transport/parcel.rb +18 -0
  461. data/lib/ddtrace/profiling/transport/request.rb +16 -0
  462. data/lib/ddtrace/profiling/transport/response.rb +9 -0
  463. data/lib/ddtrace/propagation/grpc_propagator.rb +18 -4
  464. data/lib/ddtrace/propagation/http_propagator.rb +18 -2
  465. data/lib/ddtrace/quantization/hash.rb +1 -0
  466. data/lib/ddtrace/quantization/http.rb +4 -0
  467. data/lib/ddtrace/runtime/metrics.rb +21 -14
  468. data/lib/ddtrace/sampler.rb +2 -1
  469. data/lib/ddtrace/sampling.rb +1 -0
  470. data/lib/ddtrace/sampling/matcher.rb +1 -0
  471. data/lib/ddtrace/sampling/rate_limiter.rb +66 -16
  472. data/lib/ddtrace/sampling/rule.rb +2 -1
  473. data/lib/ddtrace/sampling/rule_sampler.rb +6 -10
  474. data/lib/ddtrace/span.rb +44 -19
  475. data/lib/ddtrace/sync_writer.rb +17 -15
  476. data/lib/ddtrace/tasks/exec.rb +47 -0
  477. data/lib/ddtrace/tasks/help.rb +15 -0
  478. data/lib/ddtrace/tracer.rb +68 -57
  479. data/lib/ddtrace/transport/http.rb +51 -38
  480. data/lib/ddtrace/transport/http/adapters/net.rb +28 -8
  481. data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
  482. data/lib/ddtrace/transport/http/adapters/test.rb +1 -0
  483. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +3 -4
  484. data/lib/ddtrace/transport/http/api.rb +1 -0
  485. data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
  486. data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
  487. data/lib/ddtrace/transport/http/api/instance.rb +1 -0
  488. data/lib/ddtrace/transport/http/api/map.rb +1 -0
  489. data/lib/ddtrace/transport/http/api/spec.rb +1 -0
  490. data/lib/ddtrace/transport/http/builder.rb +8 -1
  491. data/lib/ddtrace/transport/http/client.rb +3 -1
  492. data/lib/ddtrace/transport/http/env.rb +9 -0
  493. data/lib/ddtrace/transport/http/response.rb +1 -0
  494. data/lib/ddtrace/transport/http/statistics.rb +3 -2
  495. data/lib/ddtrace/transport/http/traces.rb +6 -6
  496. data/lib/ddtrace/transport/io.rb +2 -1
  497. data/lib/ddtrace/transport/io/client.rb +17 -9
  498. data/lib/ddtrace/transport/io/response.rb +2 -3
  499. data/lib/ddtrace/transport/io/traces.rb +10 -1
  500. data/lib/ddtrace/transport/parcel.rb +7 -0
  501. data/lib/ddtrace/transport/request.rb +1 -0
  502. data/lib/ddtrace/transport/response.rb +1 -0
  503. data/lib/ddtrace/transport/statistics.rb +1 -0
  504. data/lib/ddtrace/transport/traces.rb +21 -3
  505. data/lib/ddtrace/utils.rb +23 -12
  506. data/lib/ddtrace/utils/compression.rb +28 -0
  507. data/lib/ddtrace/utils/database.rb +1 -0
  508. data/lib/ddtrace/utils/forking.rb +53 -0
  509. data/lib/ddtrace/utils/object_set.rb +40 -0
  510. data/lib/ddtrace/utils/only_once.rb +41 -0
  511. data/lib/ddtrace/utils/sequence.rb +18 -0
  512. data/lib/ddtrace/utils/string_table.rb +46 -0
  513. data/lib/ddtrace/utils/time.rb +34 -2
  514. data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
  515. data/lib/ddtrace/vendor/active_record/connection_specification.rb +1 -0
  516. data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
  517. data/lib/ddtrace/vendor/multipart-post/multipart.rb +13 -0
  518. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +9 -0
  519. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +117 -0
  520. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +58 -0
  521. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +136 -0
  522. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +10 -0
  523. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +33 -0
  524. data/lib/ddtrace/version.rb +15 -2
  525. data/lib/ddtrace/worker.rb +1 -0
  526. data/lib/ddtrace/workers.rb +8 -2
  527. data/lib/ddtrace/workers/async.rb +15 -5
  528. data/lib/ddtrace/workers/loop.rb +32 -5
  529. data/lib/ddtrace/workers/polling.rb +13 -5
  530. data/lib/ddtrace/workers/queue.rb +3 -1
  531. data/lib/ddtrace/workers/runtime_metrics.rb +22 -4
  532. data/lib/ddtrace/workers/trace_writer.rb +14 -16
  533. data/lib/ddtrace/writer.rb +33 -8
  534. metadata +149 -388
  535. data/.circleci/config.yml +0 -548
  536. data/.circleci/images/primary/Dockerfile-2.0.0 +0 -73
  537. data/.circleci/images/primary/Dockerfile-2.1.10 +0 -73
  538. data/.circleci/images/primary/Dockerfile-2.2.10 +0 -73
  539. data/.circleci/images/primary/Dockerfile-2.3.8 +0 -75
  540. data/.circleci/images/primary/Dockerfile-2.4.6 +0 -73
  541. data/.circleci/images/primary/Dockerfile-2.5.6 +0 -73
  542. data/.circleci/images/primary/Dockerfile-2.6.4 +0 -73
  543. data/.circleci/images/primary/Dockerfile-2.7.0 +0 -73
  544. data/.circleci/images/primary/Dockerfile-jruby-9.2 +0 -77
  545. data/.dockerignore +0 -1
  546. data/.env +0 -26
  547. data/.github/CODEOWNERS +0 -1
  548. data/.gitlab-ci.yml +0 -27
  549. data/.rspec +0 -1
  550. data/.rubocop.yml +0 -85
  551. data/.simplecov +0 -38
  552. data/Appraisals +0 -1071
  553. data/Gemfile +0 -7
  554. data/Rakefile +0 -768
  555. data/benchmarks/postgres_database.yml +0 -9
  556. data/benchmarks/sidekiq_test.rb +0 -154
  557. data/docker-compose.yml +0 -370
  558. data/lib/ddtrace/augmentation.rb +0 -13
  559. data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
  560. data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
  561. data/lib/ddtrace/augmentation/shim.rb +0 -102
  562. data/lib/ddtrace/environment.rb +0 -41
  563. data/lib/ddtrace/monkey.rb +0 -58
  564. data/lib/ddtrace/runtime/cgroup.rb +0 -44
  565. data/lib/ddtrace/runtime/class_count.rb +0 -17
  566. data/lib/ddtrace/runtime/container.rb +0 -73
  567. data/lib/ddtrace/runtime/gc.rb +0 -16
  568. data/lib/ddtrace/runtime/identity.rb +0 -41
  569. data/lib/ddtrace/runtime/object_space.rb +0 -19
  570. data/lib/ddtrace/runtime/socket.rb +0 -14
  571. data/lib/ddtrace/runtime/thread_count.rb +0 -16
  572. data/tasks/release_gem.rake +0 -28
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/span'
2
3
  require 'ddtrace/opentelemetry/span'
3
4
 
@@ -6,7 +7,7 @@ module Datadog
6
7
  # Defines extensions to ddtrace for OpenTelemetry support
7
8
  module Extensions
8
9
  def self.extended(base)
9
- Datadog::Span.send(:prepend, OpenTelemetry::Span)
10
+ Datadog::Span.prepend(OpenTelemetry::Span)
10
11
  end
11
12
  end
12
13
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/ext/environment'
2
3
 
3
4
  module Datadog
@@ -1,40 +1,22 @@
1
- module Datadog
2
- # Namespace for ddtrace OpenTracing implementation
3
- module OpenTracer
4
- module_function
1
+ # typed: strict
2
+ require 'opentracing'
3
+ require 'opentracing/carrier'
4
+ require 'ddtrace'
5
+ require 'ddtrace/opentracer/carrier'
6
+ require 'ddtrace/opentracer/tracer'
7
+ require 'ddtrace/opentracer/span'
8
+ require 'ddtrace/opentracer/span_context'
9
+ require 'ddtrace/opentracer/span_context_factory'
10
+ require 'ddtrace/opentracer/scope'
11
+ require 'ddtrace/opentracer/scope_manager'
12
+ require 'ddtrace/opentracer/thread_local_scope'
13
+ require 'ddtrace/opentracer/thread_local_scope_manager'
14
+ require 'ddtrace/opentracer/distributed_headers'
15
+ require 'ddtrace/opentracer/propagator'
16
+ require 'ddtrace/opentracer/text_map_propagator'
17
+ require 'ddtrace/opentracer/binary_propagator'
18
+ require 'ddtrace/opentracer/rack_propagator'
19
+ require 'ddtrace/opentracer/global_tracer'
5
20
 
6
- def supported?
7
- Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.1')
8
- end
9
-
10
- def load_opentracer
11
- require 'opentracing'
12
- require 'opentracing/carrier'
13
- require 'ddtrace'
14
- require 'ddtrace/opentracer/carrier'
15
- require 'ddtrace/opentracer/tracer'
16
- require 'ddtrace/opentracer/span'
17
- require 'ddtrace/opentracer/span_context'
18
- require 'ddtrace/opentracer/span_context_factory'
19
- require 'ddtrace/opentracer/scope'
20
- require 'ddtrace/opentracer/scope_manager'
21
- require 'ddtrace/opentracer/thread_local_scope'
22
- require 'ddtrace/opentracer/thread_local_scope_manager'
23
- require 'ddtrace/opentracer/distributed_headers'
24
- require 'ddtrace/opentracer/propagator'
25
- require 'ddtrace/opentracer/text_map_propagator'
26
- require 'ddtrace/opentracer/binary_propagator'
27
- require 'ddtrace/opentracer/rack_propagator'
28
- require 'ddtrace/opentracer/global_tracer'
29
-
30
- # Modify the OpenTracing module functions
31
- OpenTracing.module_eval do
32
- class << self
33
- prepend Datadog::OpenTracer::GlobalTracer
34
- end
35
- end
36
- end
37
-
38
- load_opentracer if supported?
39
- end
40
- end
21
+ # Modify the OpenTracing module functions
22
+ ::OpenTracing.singleton_class.prepend(Datadog::OpenTracer::GlobalTracer)
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module OpenTracer
3
4
  # OpenTracing propagator for Datadog::OpenTracer::Tracer
@@ -1,3 +1,4 @@
1
+ # typed: strict
1
2
  module Datadog
2
3
  module OpenTracer
3
4
  class Carrier < ::OpenTracing::Carrier
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/span'
2
3
  require 'ddtrace/ext/distributed'
3
4
 
@@ -29,8 +30,10 @@ module Datadog
29
30
  # It's important to make a difference between no header,
30
31
  # and a header defined to zero.
31
32
  return unless hdr
33
+
32
34
  value = hdr.to_i
33
35
  return if value < 0
36
+
34
37
  value
35
38
  end
36
39
 
@@ -45,6 +48,7 @@ module Datadog
45
48
  def id(header)
46
49
  value = @carrier[header].to_i
47
50
  return if value.zero? || value >= Datadog::Span::EXTERNAL_MAX_ID
51
+
48
52
  value < 0 ? value + 0x1_0000_0000_0000_0000 : value
49
53
  end
50
54
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module OpenTracer
3
4
  # Patch for OpenTracing module
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  module Datadog
2
3
  module OpenTracer
3
4
  # OpenTracing propagator for Datadog::OpenTracer::Tracer
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/propagation/http_propagator'
2
3
 
3
4
  module Datadog
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module OpenTracer
3
4
  # OpenTracing adapter for scope
@@ -1,3 +1,4 @@
1
+ # typed: strict
1
2
  module Datadog
2
3
  module OpenTracer
3
4
  class ScopeManager < ::OpenTracing::ScopeManager
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module OpenTracer
3
4
  # OpenTracing adapter for Datadog::Span
@@ -73,9 +74,7 @@ module Datadog
73
74
  super # Log deprecation warning
74
75
 
75
76
  # If the fields specify an error
76
- if fields.key?(:'error.object')
77
- datadog_span.set_error(fields[:'error.object'])
78
- end
77
+ datadog_span.set_error(fields[:'error.object']) if fields.key?(:'error.object')
79
78
  end
80
79
 
81
80
  # Add a log entry to this span
@@ -83,9 +82,7 @@ module Datadog
83
82
  # @param fields [Hash] Additional information to log
84
83
  def log_kv(timestamp: Time.now, **fields)
85
84
  # If the fields specify an error
86
- if fields.key?(:'error.object')
87
- datadog_span.set_error(fields[:'error.object'])
88
- end
85
+ datadog_span.set_error(fields[:'error.object']) if fields.key?(:'error.object')
89
86
  end
90
87
 
91
88
  # Finish the {Span}
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module OpenTracer
3
4
  # OpenTracing adapter for SpanContext
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module OpenTracer
3
4
  # Creates new Datadog::OpenTracer::SpanContext
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/ext/distributed'
2
3
 
3
4
  module Datadog
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module OpenTracer
3
4
  # OpenTracing adapter for thread local scopes
@@ -22,6 +23,7 @@ module Datadog
22
23
  # undefined behavior.
23
24
  def close
24
25
  return unless equal?(manager.active)
26
+
25
27
  span.finish if finish_on_close
26
28
  manager.send(:set_scope, @previous_scope)
27
29
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module OpenTracer
3
4
  # OpenTracing adapter for thread local scope management
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/tracer'
2
3
 
3
4
  module Datadog
@@ -1,9 +1,24 @@
1
+ # typed: false
2
+ require 'ddtrace/utils/only_once'
3
+
1
4
  module Datadog
2
- # Defines some useful patching methods for integrations
5
+ # Deprecated: This module should no longer be included. It's only being kept around for backwards compatibility
6
+ # concerns regarding customer usage.
3
7
  module Patcher
8
+ INCLUDED_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
9
+ DO_ONCE_USAGE_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
10
+
4
11
  def self.included(base)
5
- base.send(:extend, CommonMethods)
6
- base.send(:include, CommonMethods)
12
+ INCLUDED_WARN_ONLY_ONCE.run do
13
+ Datadog.logger.warn(
14
+ 'Including Datadog::Patcher is deprecated. ' \
15
+ 'For the #do_once behavior, use Datadog::Utils::OnlyOnce instead. ' \
16
+ 'For the #without_warnings behavior, use Datadog::Patcher.without_warnings { ... } as a module function.'
17
+ )
18
+ end
19
+
20
+ base.extend(CommonMethods)
21
+ base.include(CommonMethods)
7
22
  end
8
23
 
9
24
  # Defines some common methods for patching, that can be used
@@ -22,11 +37,13 @@ module Datadog
22
37
  end
23
38
 
24
39
  def do_once(key = nil, options = {})
40
+ DO_ONCE_USAGE_WARN_ONLY_ONCE.run do
41
+ Datadog.logger.warn('Datadog::Patcher#do_once is deprecated. Use Datadog::Utils::OnlyOnce instead.')
42
+ end
43
+
25
44
  # If already done, don't do again
26
45
  @done_once ||= Hash.new { |h, k| h[k] = {} }
27
- if @done_once.key?(key) && @done_once[key].key?(options[:for])
28
- return @done_once[key][options[:for]]
29
- end
46
+ return @done_once[key][options[:for]] if @done_once.key?(key) && @done_once[key].key?(options[:for])
30
47
 
31
48
  # Otherwise 'do'
32
49
  yield.tap do
@@ -36,7 +53,12 @@ module Datadog
36
53
  end
37
54
 
38
55
  def done?(key, options = {})
56
+ DO_ONCE_USAGE_WARN_ONLY_ONCE.run do
57
+ Datadog.logger.warn('Datadog::Patcher#done? is deprecated. Use Datadog::Utils::OnlyOnce instead.')
58
+ end
59
+
39
60
  return false unless instance_variable_defined?(:@done_once)
61
+
40
62
  !@done_once.nil? && @done_once.key?(key) && @done_once[key].key?(options[:for])
41
63
  end
42
64
  end
data/lib/ddtrace/pin.rb CHANGED
@@ -1,4 +1,6 @@
1
+ # typed: true
1
2
  require 'ddtrace/patcher'
3
+ require 'ddtrace/utils/only_once'
2
4
 
3
5
  # \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
4
6
  module Datadog
@@ -7,19 +9,15 @@ module Datadog
7
9
  # This is useful if you wanted to, say, trace two different
8
10
  # database clusters.
9
11
  class Pin
12
+ DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
13
+
10
14
  def self.get_from(obj)
11
15
  return nil unless obj.respond_to? :datadog_pin
16
+
12
17
  obj.datadog_pin
13
18
  end
14
19
 
15
- attr_accessor :app
16
- attr_accessor :app_type
17
- attr_accessor :config
18
- attr_accessor :name
19
- attr_accessor :service_name
20
- attr_accessor :tags
21
- attr_reader :tracer
22
- attr_accessor :writer
20
+ attr_accessor :app, :app_type, :config, :name, :service_name, :tags, :writer
23
21
 
24
22
  alias service= service_name=
25
23
  alias service service_name
@@ -42,6 +40,7 @@ module Datadog
42
40
 
43
41
  def enabled?
44
42
  return tracer.enabled if tracer
43
+
45
44
  false
46
45
  end
47
46
 
@@ -79,59 +78,8 @@ module Datadog
79
78
  ).freeze
80
79
 
81
80
  def deprecation_warning
82
- log_deprecation_warning('Datadog::Pin.new')
83
- end
84
-
85
- include Datadog::Patcher
86
-
87
- def log_deprecation_warning(method_name)
88
- # Only log each deprecation warning once (safeguard against log spam)
89
- do_once(method_name) do
90
- Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
91
- end
92
- end
93
- end
94
-
95
- # Modification to Pin which logs deprecation warnings if accessed.
96
- # Will be used by integrations which are phasing out the direct use of #datadog_pin.
97
- module DeprecatedPin
98
- include Datadog::Patcher
99
-
100
- DEPRECATION_WARNING = %(
101
- Use of Datadog::Pin is DEPRECATED.
102
- Upgrade to the configuration API using the migration guide here:
103
- https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
104
-
105
- # Raise a deprecation warning when #datadog_pin or #datadog_pin= is accessed.
106
- def onto(obj)
107
- obj.instance_exec(self) do |pin|
108
- @datadog_deprecated_pin = pin
109
-
110
- unless respond_to? :datadog_pin=
111
- def datadog_pin=(pin)
112
- @datadog_deprecated_pin.log_deprecation_warning('#datadog_pin=')
113
- @datadog_pin = pin
114
- end
115
- end
116
-
117
- unless respond_to? :datadog_pin
118
- def datadog_pin
119
- @datadog_deprecated_pin.log_deprecation_warning('#datadog_pin')
120
- @datadog_pin
121
- end
122
- end
123
-
124
- # Set instance variable to avoid deprecation warnings
125
- @datadog_pin = @datadog_deprecated_pin
126
- end
127
-
128
- self
129
- end
130
-
131
- def log_deprecation_warning(method_name)
132
- # Only log each deprecation warning once (safeguard against log spam)
133
- do_once(method_name) do
134
- Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
81
+ DEPRECATION_WARN_ONLY_ONCE.run do
82
+ Datadog.logger.warn("Datadog::Pin.new:#{DEPRECATION_WARNING}")
135
83
  end
136
84
  end
137
85
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  # Pipeline
3
4
  module Pipeline
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Pipeline
3
4
  # SpanFilter implements a processor that filters entire span subtrees
@@ -10,7 +11,7 @@ module Datadog
10
11
  @criteria = filter || block
11
12
  end
12
13
 
13
- # Note: this SpanFilter implementation only handles traces in which child spans appear
14
+ # NOTE: this SpanFilter implementation only handles traces in which child spans appear
14
15
  # after parent spans in the trace array. If in the future child spans can be before
15
16
  # parent spans, then the code below will need to be updated.
16
17
  def call(trace)
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Pipeline
3
4
  # SpanProcessor
@@ -0,0 +1,151 @@
1
+ # typed: true
2
+ require 'datadog/core/environment/variable_helpers'
3
+ require 'ddtrace/utils/only_once'
4
+
5
+ module Datadog
6
+ # Contains profiler for generating stack profiles, etc.
7
+ module Profiling # rubocop:disable Metrics/ModuleLength
8
+ GOOGLE_PROTOBUF_MINIMUM_VERSION = Gem::Version.new('3.0')
9
+ private_constant :GOOGLE_PROTOBUF_MINIMUM_VERSION
10
+
11
+ SKIPPED_NATIVE_EXTENSION_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
12
+ private_constant :SKIPPED_NATIVE_EXTENSION_ONLY_ONCE
13
+
14
+ def self.supported?
15
+ unsupported_reason.nil?
16
+ end
17
+
18
+ def self.unsupported_reason
19
+ # NOTE: Only the first matching reason is returned, so try to keep a nice order on reasons -- e.g. tell users
20
+ # first that they can't use this on JRuby before telling them that they are missing protobuf
21
+
22
+ ruby_engine_unsupported? ||
23
+ native_library_failed_to_load? ||
24
+ protobuf_gem_unavailable? ||
25
+ protobuf_version_unsupported? ||
26
+ protobuf_failed_to_load?
27
+ end
28
+
29
+ private_class_method def self.ruby_engine_unsupported?
30
+ 'JRuby is not supported' if RUBY_ENGINE == 'jruby'
31
+ end
32
+
33
+ private_class_method def self.protobuf_gem_unavailable?
34
+ # NOTE: On environments where protobuf is already loaded, we skip the check. This allows us to support environments
35
+ # where no Gem.loaded_version is NOT available but customers are able to load protobuf; see for instance
36
+ # https://github.com/teamcapybara/capybara/commit/caf3bcd7664f4f2691d0ca9ef3be9a2a954fecfb
37
+ if !defined?(::Google::Protobuf) && Gem.loaded_specs['google-protobuf'].nil?
38
+ "Missing google-protobuf dependency; please add `gem 'google-protobuf', '~> 3.0'` to your Gemfile or gems.rb file"
39
+ end
40
+ end
41
+
42
+ private_class_method def self.protobuf_version_unsupported?
43
+ # See above for why we skip the check when protobuf is already loaded; note that when protobuf was already loaded
44
+ # we skip the version check to avoid the call to Gem.loaded_specs. Unfortunately, protobuf does not seem to
45
+ # expose the gem version constant elsewhere, so in that setup we are not able to check the version.
46
+ if !defined?(::Google::Protobuf) && Gem.loaded_specs['google-protobuf'].version < GOOGLE_PROTOBUF_MINIMUM_VERSION
47
+ 'Your google-protobuf is too old; ensure that you have google-protobuf >= 3.0 by ' \
48
+ "adding `gem 'google-protobuf', '~> 3.0'` to your Gemfile or gems.rb file"
49
+ end
50
+ end
51
+
52
+ private_class_method def self.protobuf_failed_to_load?
53
+ unless protobuf_loaded_successfully?
54
+ 'There was an error loading the google-protobuf library; see previous warning message for details'
55
+ end
56
+ end
57
+
58
+ # The `google-protobuf` gem depends on a native component, and its creators helpfully tried to provide precompiled
59
+ # versions of this extension on rubygems.org.
60
+ #
61
+ # Unfortunately, for a long time, the supported Ruby versions metadata on these precompiled versions of the extension
62
+ # was not correctly set. (This is fixed in newer versions -- but not all Ruby versions we want to support can use
63
+ # these.)
64
+ #
65
+ # Thus, the gem can still be installed, but can be in a broken state. To avoid breaking customer applications, we
66
+ # use this helper to load it and gracefully handle failures.
67
+ private_class_method def self.protobuf_loaded_successfully?
68
+ return @protobuf_loaded if defined?(@protobuf_loaded)
69
+
70
+ begin
71
+ require 'google/protobuf'
72
+ @protobuf_loaded = true
73
+ rescue LoadError => e
74
+ # NOTE: We use Kernel#warn here because this code gets run BEFORE Datadog.logger is actually set up.
75
+ # In the future it'd be nice to shuffle the logger startup to happen first to avoid this special case.
76
+ Kernel.warn(
77
+ '[DDTRACE] Error while loading google-protobuf gem. ' \
78
+ "Cause: '#{e.message}' Location: '#{Array(e.backtrace).first}'. " \
79
+ 'This can happen when google-protobuf is missing its native components. ' \
80
+ 'To fix this, try removing and reinstalling the gem, forcing it to recompile the components: ' \
81
+ '`gem uninstall google-protobuf -a; BUNDLE_FORCE_RUBY_PLATFORM=true bundle install`. ' \
82
+ 'If the error persists, please contact support via <https://docs.datadoghq.com/help/> or ' \
83
+ 'file a bug at <https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug>.'
84
+ )
85
+ @protobuf_loaded = false
86
+ end
87
+ end
88
+
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
129
+ return false unless supported?
130
+
131
+ require 'ddtrace/profiling/ext/cpu'
132
+ require 'ddtrace/profiling/ext/forking'
133
+
134
+ require 'ddtrace/profiling/collectors/stack'
135
+ require 'ddtrace/profiling/exporter'
136
+ require 'ddtrace/profiling/recorder'
137
+ require 'ddtrace/profiling/scheduler'
138
+ require 'ddtrace/profiling/tasks/setup'
139
+ require 'ddtrace/profiling/transport/io'
140
+ require 'ddtrace/profiling/transport/http'
141
+ require 'ddtrace/profiling/profiler'
142
+ require 'ddtrace/profiling/native_extension'
143
+ require 'ddtrace/profiling/trace_identifiers/helper'
144
+ require 'ddtrace/profiling/pprof/pprof_pb'
145
+
146
+ true
147
+ end
148
+
149
+ load_profiling if supported?
150
+ end
151
+ end