ls-trace 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (337) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +419 -544
  3. data/.circleci/images/primary/Dockerfile-2.7.0 +73 -0
  4. data/.circleci/images/primary/Dockerfile-jruby-9.2 +77 -0
  5. data/.env +2 -0
  6. data/.gitignore +2 -0
  7. data/.gitlab-ci.yml +27 -0
  8. data/.rubocop.yml +8 -0
  9. data/.simplecov +38 -0
  10. data/Appraisals +299 -48
  11. data/CHANGELOG.md +3 -4
  12. data/LICENSE +4 -22
  13. data/LICENSE.Apache +200 -0
  14. data/LICENSE.BSD3 +24 -0
  15. data/NOTICE +4 -0
  16. data/README.md +4 -3
  17. data/Rakefile +561 -405
  18. data/ddtrace.gemspec +13 -4
  19. data/docker-compose.yml +96 -2
  20. data/docs/DevelopmentGuide.md +17 -1
  21. data/docs/GettingStarted.md +433 -138
  22. data/lib/ddtrace.rb +15 -0
  23. data/lib/ddtrace/analytics.rb +7 -0
  24. data/lib/ddtrace/buffer.rb +9 -9
  25. data/lib/ddtrace/chunker.rb +34 -0
  26. data/lib/ddtrace/configuration.rb +59 -5
  27. data/lib/ddtrace/configuration/base.rb +4 -2
  28. data/lib/ddtrace/configuration/components.rb +151 -0
  29. data/lib/ddtrace/configuration/option.rb +12 -3
  30. data/lib/ddtrace/configuration/option_definition.rb +1 -5
  31. data/lib/ddtrace/configuration/options.rb +6 -1
  32. data/lib/ddtrace/configuration/pin_setup.rb +3 -2
  33. data/lib/ddtrace/configuration/settings.rb +214 -40
  34. data/lib/ddtrace/context.rb +84 -63
  35. data/lib/ddtrace/context_flush.rb +51 -114
  36. data/lib/ddtrace/context_provider.rb +50 -0
  37. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +30 -0
  38. data/lib/ddtrace/contrib/action_cable/event.rb +65 -0
  39. data/lib/ddtrace/contrib/action_cable/events.rb +33 -0
  40. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +49 -0
  41. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +55 -0
  42. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +50 -0
  43. data/lib/ddtrace/contrib/action_cable/ext.rb +26 -0
  44. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +31 -0
  45. data/lib/ddtrace/contrib/action_cable/integration.rb +38 -0
  46. data/lib/ddtrace/contrib/action_cable/patcher.rb +27 -0
  47. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +6 -2
  48. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +3 -15
  49. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +7 -2
  50. data/lib/ddtrace/contrib/action_pack/ext.rb +5 -2
  51. data/lib/ddtrace/contrib/action_pack/integration.rb +5 -3
  52. data/lib/ddtrace/contrib/action_pack/patcher.rb +3 -9
  53. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +7 -2
  54. data/lib/ddtrace/contrib/action_view/event.rb +39 -0
  55. data/lib/ddtrace/contrib/action_view/events.rb +30 -0
  56. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +45 -0
  57. data/lib/ddtrace/contrib/action_view/events/render_template.rb +48 -0
  58. data/lib/ddtrace/contrib/action_view/ext.rb +5 -2
  59. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +9 -13
  60. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +16 -16
  61. data/lib/ddtrace/contrib/action_view/integration.rb +5 -3
  62. data/lib/ddtrace/contrib/action_view/patcher.rb +19 -25
  63. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +7 -2
  64. data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -0
  65. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +5 -2
  66. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +6 -5
  67. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +3 -10
  68. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +4 -5
  69. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +7 -2
  70. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +4 -1
  71. data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -1
  72. data/lib/ddtrace/contrib/active_record/ext.rb +5 -2
  73. data/lib/ddtrace/contrib/active_record/integration.rb +5 -3
  74. data/lib/ddtrace/contrib/active_record/patcher.rb +3 -9
  75. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +2 -2
  76. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +10 -24
  77. data/lib/ddtrace/contrib/active_support/cache/redis.rb +1 -1
  78. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +7 -2
  79. data/lib/ddtrace/contrib/active_support/ext.rb +5 -2
  80. data/lib/ddtrace/contrib/active_support/integration.rb +5 -3
  81. data/lib/ddtrace/contrib/active_support/notifications/event.rb +3 -1
  82. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +3 -3
  83. data/lib/ddtrace/contrib/active_support/patcher.rb +3 -9
  84. data/lib/ddtrace/contrib/analytics.rb +5 -1
  85. data/lib/ddtrace/contrib/aws/configuration/settings.rb +7 -2
  86. data/lib/ddtrace/contrib/aws/ext.rb +5 -2
  87. data/lib/ddtrace/contrib/aws/integration.rb +8 -2
  88. data/lib/ddtrace/contrib/aws/patcher.rb +15 -15
  89. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +5 -0
  90. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +9 -3
  91. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
  92. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +8 -2
  93. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +4 -11
  94. data/lib/ddtrace/contrib/configurable.rb +30 -13
  95. data/lib/ddtrace/contrib/configuration/resolver.rb +7 -3
  96. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +39 -0
  97. data/lib/ddtrace/contrib/configuration/settings.rb +20 -1
  98. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +7 -2
  99. data/lib/ddtrace/contrib/dalli/ext.rb +5 -2
  100. data/lib/ddtrace/contrib/dalli/integration.rb +5 -3
  101. data/lib/ddtrace/contrib/dalli/patcher.rb +6 -16
  102. data/lib/ddtrace/contrib/dalli/quantize.rb +1 -1
  103. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +7 -2
  104. data/lib/ddtrace/contrib/delayed_job/ext.rb +5 -2
  105. data/lib/ddtrace/contrib/delayed_job/integration.rb +8 -2
  106. data/lib/ddtrace/contrib/delayed_job/patcher.rb +4 -10
  107. data/lib/ddtrace/contrib/delayed_job/plugin.rb +4 -0
  108. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +7 -2
  109. data/lib/ddtrace/contrib/elasticsearch/ext.rb +5 -2
  110. data/lib/ddtrace/contrib/elasticsearch/integration.rb +5 -3
  111. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +10 -17
  112. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +8 -2
  113. data/lib/ddtrace/contrib/ethon/easy_patch.rb +22 -13
  114. data/lib/ddtrace/contrib/ethon/ext.rb +5 -2
  115. data/lib/ddtrace/contrib/ethon/integration.rb +14 -2
  116. data/lib/ddtrace/contrib/ethon/patcher.rb +7 -9
  117. data/lib/ddtrace/contrib/excon/configuration/settings.rb +7 -2
  118. data/lib/ddtrace/contrib/excon/ext.rb +5 -2
  119. data/lib/ddtrace/contrib/excon/integration.rb +13 -2
  120. data/lib/ddtrace/contrib/excon/middleware.rb +15 -12
  121. data/lib/ddtrace/contrib/excon/patcher.rb +4 -11
  122. data/lib/ddtrace/contrib/extensions.rb +39 -5
  123. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +7 -2
  124. data/lib/ddtrace/contrib/faraday/connection.rb +18 -0
  125. data/lib/ddtrace/contrib/faraday/ext.rb +5 -2
  126. data/lib/ddtrace/contrib/faraday/integration.rb +10 -3
  127. data/lib/ddtrace/contrib/faraday/middleware.rb +24 -34
  128. data/lib/ddtrace/contrib/faraday/patcher.rb +26 -19
  129. data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -3
  130. data/lib/ddtrace/contrib/grape/endpoint.rb +14 -5
  131. data/lib/ddtrace/contrib/grape/ext.rb +5 -2
  132. data/lib/ddtrace/contrib/grape/integration.rb +6 -3
  133. data/lib/ddtrace/contrib/grape/patcher.rb +9 -15
  134. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +7 -2
  135. data/lib/ddtrace/contrib/graphql/ext.rb +5 -2
  136. data/lib/ddtrace/contrib/graphql/integration.rb +6 -5
  137. data/lib/ddtrace/contrib/graphql/patcher.rb +11 -14
  138. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +7 -2
  139. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +1 -1
  140. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +2 -4
  141. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +5 -2
  142. data/lib/ddtrace/contrib/grpc/ext.rb +5 -2
  143. data/lib/ddtrace/contrib/grpc/integration.rb +5 -3
  144. data/lib/ddtrace/contrib/grpc/patcher.rb +9 -19
  145. data/lib/ddtrace/contrib/http/circuit_breaker.rb +8 -32
  146. data/lib/ddtrace/contrib/http/configuration/settings.rb +8 -2
  147. data/lib/ddtrace/contrib/http/ext.rb +5 -2
  148. data/lib/ddtrace/contrib/http/instrumentation.rb +89 -28
  149. data/lib/ddtrace/contrib/http/integration.rb +13 -0
  150. data/lib/ddtrace/contrib/http/patcher.rb +3 -9
  151. data/lib/ddtrace/contrib/http_annotation_helper.rb +10 -0
  152. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +32 -0
  153. data/lib/ddtrace/contrib/httprb/ext.rb +17 -0
  154. data/lib/ddtrace/contrib/httprb/instrumentation.rb +160 -0
  155. data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
  156. data/lib/ddtrace/contrib/httprb/patcher.rb +35 -0
  157. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +30 -0
  158. data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
  159. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
  160. data/lib/ddtrace/contrib/kafka/event.rb +51 -0
  161. data/lib/ddtrace/contrib/kafka/events.rb +44 -0
  162. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
  163. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
  164. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
  165. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
  166. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
  167. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
  168. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
  169. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
  170. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
  171. data/lib/ddtrace/contrib/kafka/ext.rb +41 -0
  172. data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
  173. data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
  174. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +7 -2
  175. data/lib/ddtrace/contrib/mongodb/ext.rb +5 -2
  176. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +1 -2
  177. data/lib/ddtrace/contrib/mongodb/integration.rb +5 -3
  178. data/lib/ddtrace/contrib/mongodb/patcher.rb +5 -11
  179. data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -2
  180. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +7 -2
  181. data/lib/ddtrace/contrib/mysql2/ext.rb +5 -2
  182. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -1
  183. data/lib/ddtrace/contrib/mysql2/integration.rb +8 -2
  184. data/lib/ddtrace/contrib/mysql2/patcher.rb +3 -9
  185. data/lib/ddtrace/contrib/patchable.rb +21 -4
  186. data/lib/ddtrace/contrib/patcher.rb +44 -10
  187. data/lib/ddtrace/contrib/presto/configuration/settings.rb +30 -0
  188. data/lib/ddtrace/contrib/presto/ext.rb +28 -0
  189. data/lib/ddtrace/contrib/presto/instrumentation.rb +107 -0
  190. data/lib/ddtrace/contrib/presto/integration.rb +38 -0
  191. data/lib/ddtrace/contrib/presto/patcher.rb +30 -0
  192. data/lib/ddtrace/contrib/que/configuration/settings.rb +42 -0
  193. data/lib/ddtrace/contrib/que/ext.rb +30 -0
  194. data/lib/ddtrace/contrib/que/integration.rb +42 -0
  195. data/lib/ddtrace/contrib/que/patcher.rb +24 -0
  196. data/lib/ddtrace/contrib/que/tracer.rb +56 -0
  197. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +7 -2
  198. data/lib/ddtrace/contrib/racecar/event.rb +4 -0
  199. data/lib/ddtrace/contrib/racecar/events.rb +2 -0
  200. data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
  201. data/lib/ddtrace/contrib/racecar/ext.rb +6 -2
  202. data/lib/ddtrace/contrib/racecar/integration.rb +6 -3
  203. data/lib/ddtrace/contrib/racecar/patcher.rb +4 -10
  204. data/lib/ddtrace/contrib/rack/configuration/settings.rb +7 -2
  205. data/lib/ddtrace/contrib/rack/ext.rb +5 -2
  206. data/lib/ddtrace/contrib/rack/integration.rb +8 -2
  207. data/lib/ddtrace/contrib/rack/middlewares.rb +23 -14
  208. data/lib/ddtrace/contrib/rack/patcher.rb +57 -22
  209. data/lib/ddtrace/contrib/rack/request_queue.rb +1 -1
  210. data/lib/ddtrace/contrib/rails/configuration/settings.rb +23 -10
  211. data/lib/ddtrace/contrib/rails/ext.rb +7 -2
  212. data/lib/ddtrace/contrib/rails/framework.rb +59 -35
  213. data/lib/ddtrace/contrib/rails/integration.rb +12 -5
  214. data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
  215. data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
  216. data/lib/ddtrace/contrib/rails/patcher.rb +19 -8
  217. data/lib/ddtrace/contrib/rake/configuration/settings.rb +7 -3
  218. data/lib/ddtrace/contrib/rake/ext.rb +5 -2
  219. data/lib/ddtrace/contrib/rake/instrumentation.rb +6 -2
  220. data/lib/ddtrace/contrib/rake/integration.rb +8 -2
  221. data/lib/ddtrace/contrib/rake/patcher.rb +4 -10
  222. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +36 -0
  223. data/lib/ddtrace/contrib/redis/configuration/settings.rb +7 -2
  224. data/lib/ddtrace/contrib/redis/ext.rb +5 -2
  225. data/lib/ddtrace/contrib/redis/integration.rb +9 -3
  226. data/lib/ddtrace/contrib/redis/patcher.rb +20 -17
  227. data/lib/ddtrace/contrib/redis/quantize.rb +1 -1
  228. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +159 -0
  229. data/lib/ddtrace/contrib/resque/configuration/settings.rb +7 -2
  230. data/lib/ddtrace/contrib/resque/ext.rb +5 -2
  231. data/lib/ddtrace/contrib/resque/integration.rb +12 -2
  232. data/lib/ddtrace/contrib/resque/patcher.rb +4 -10
  233. data/lib/ddtrace/contrib/resque/resque_job.rb +6 -2
  234. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +7 -2
  235. data/lib/ddtrace/contrib/rest_client/ext.rb +5 -2
  236. data/lib/ddtrace/contrib/rest_client/integration.rb +9 -2
  237. data/lib/ddtrace/contrib/rest_client/patcher.rb +5 -7
  238. data/lib/ddtrace/contrib/rest_client/request_patch.rb +2 -2
  239. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
  240. data/lib/ddtrace/contrib/sequel/database.rb +1 -1
  241. data/lib/ddtrace/contrib/sequel/ext.rb +5 -2
  242. data/lib/ddtrace/contrib/sequel/integration.rb +8 -2
  243. data/lib/ddtrace/contrib/sequel/patcher.rb +4 -10
  244. data/lib/ddtrace/contrib/sequel/utils.rb +19 -1
  245. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +7 -2
  246. data/lib/ddtrace/contrib/shoryuken/ext.rb +5 -2
  247. data/lib/ddtrace/contrib/shoryuken/integration.rb +11 -7
  248. data/lib/ddtrace/contrib/shoryuken/patcher.rb +4 -10
  249. data/lib/ddtrace/contrib/shoryuken/tracer.rb +4 -0
  250. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +12 -2
  251. data/lib/ddtrace/contrib/sidekiq/ext.rb +8 -2
  252. data/lib/ddtrace/contrib/sidekiq/integration.rb +5 -3
  253. data/lib/ddtrace/contrib/sidekiq/patcher.rb +19 -18
  254. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +12 -3
  255. data/lib/ddtrace/contrib/sidekiq/tracing.rb +19 -2
  256. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +7 -2
  257. data/lib/ddtrace/contrib/sinatra/env.rb +25 -4
  258. data/lib/ddtrace/contrib/sinatra/ext.rb +11 -2
  259. data/lib/ddtrace/contrib/sinatra/integration.rb +5 -3
  260. data/lib/ddtrace/contrib/sinatra/patcher.rb +5 -10
  261. data/lib/ddtrace/contrib/sinatra/tracer.rb +79 -34
  262. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +48 -15
  263. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +32 -0
  264. data/lib/ddtrace/contrib/sneakers/ext.rb +22 -0
  265. data/lib/ddtrace/contrib/sneakers/integration.rb +41 -0
  266. data/lib/ddtrace/contrib/sneakers/patcher.rb +24 -0
  267. data/lib/ddtrace/contrib/sneakers/tracer.rb +58 -0
  268. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +7 -2
  269. data/lib/ddtrace/contrib/sucker_punch/ext.rb +5 -2
  270. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +14 -0
  271. data/lib/ddtrace/contrib/sucker_punch/integration.rb +5 -3
  272. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +8 -14
  273. data/lib/ddtrace/correlation.rb +15 -5
  274. data/lib/ddtrace/diagnostics/environment_logger.rb +278 -0
  275. data/lib/ddtrace/diagnostics/health.rb +11 -8
  276. data/lib/ddtrace/encoding.rb +15 -11
  277. data/lib/ddtrace/environment.rb +21 -3
  278. data/lib/ddtrace/event.rb +52 -0
  279. data/lib/ddtrace/ext/analytics.rb +1 -0
  280. data/lib/ddtrace/ext/correlation.rb +11 -0
  281. data/lib/ddtrace/ext/diagnostics.rb +11 -0
  282. data/lib/ddtrace/ext/environment.rb +16 -0
  283. data/lib/ddtrace/ext/forced_tracing.rb +1 -1
  284. data/lib/ddtrace/ext/sampling.rb +16 -0
  285. data/lib/ddtrace/ext/transport.rb +1 -0
  286. data/lib/ddtrace/logger.rb +4 -3
  287. data/lib/ddtrace/metrics.rb +12 -5
  288. data/lib/ddtrace/monkey.rb +1 -1
  289. data/lib/ddtrace/opentelemetry/extensions.rb +13 -0
  290. data/lib/ddtrace/opentelemetry/span.rb +33 -0
  291. data/lib/ddtrace/opentracer/global_tracer.rb +1 -1
  292. data/lib/ddtrace/pin.rb +40 -16
  293. data/lib/ddtrace/pipeline.rb +1 -1
  294. data/lib/ddtrace/pipeline/span_filter.rb +15 -15
  295. data/lib/ddtrace/propagation/http_propagator.rb +2 -2
  296. data/lib/ddtrace/runtime/cgroup.rb +1 -1
  297. data/lib/ddtrace/runtime/container.rb +1 -1
  298. data/lib/ddtrace/runtime/metrics.rb +23 -6
  299. data/lib/ddtrace/sampler.rb +126 -29
  300. data/lib/ddtrace/sampling.rb +2 -0
  301. data/lib/ddtrace/sampling/matcher.rb +57 -0
  302. data/lib/ddtrace/sampling/rate_limiter.rb +127 -0
  303. data/lib/ddtrace/sampling/rule.rb +61 -0
  304. data/lib/ddtrace/sampling/rule_sampler.rb +125 -0
  305. data/lib/ddtrace/span.rb +54 -7
  306. data/lib/ddtrace/sync_writer.rb +13 -8
  307. data/lib/ddtrace/tracer.rb +72 -92
  308. data/lib/ddtrace/transport/http.rb +16 -1
  309. data/lib/ddtrace/transport/http/adapters/net.rb +8 -0
  310. data/lib/ddtrace/transport/http/adapters/test.rb +6 -0
  311. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +4 -0
  312. data/lib/ddtrace/transport/http/api/instance.rb +4 -0
  313. data/lib/ddtrace/transport/http/builder.rb +3 -5
  314. data/lib/ddtrace/transport/http/client.rb +7 -64
  315. data/lib/ddtrace/transport/http/response.rb +1 -1
  316. data/lib/ddtrace/transport/http/statistics.rb +1 -1
  317. data/lib/ddtrace/transport/http/traces.rb +10 -7
  318. data/lib/ddtrace/transport/io.rb +26 -0
  319. data/lib/ddtrace/transport/io/client.rb +76 -0
  320. data/lib/ddtrace/transport/io/response.rb +25 -0
  321. data/lib/ddtrace/transport/io/traces.rb +91 -0
  322. data/lib/ddtrace/transport/response.rb +11 -0
  323. data/lib/ddtrace/transport/statistics.rb +2 -2
  324. data/lib/ddtrace/transport/traces.rb +160 -10
  325. data/lib/ddtrace/utils.rb +1 -1
  326. data/lib/ddtrace/version.rb +2 -2
  327. data/lib/ddtrace/worker.rb +20 -0
  328. data/lib/ddtrace/workers.rb +5 -13
  329. data/lib/ddtrace/workers/async.rb +165 -0
  330. data/lib/ddtrace/workers/loop.rb +105 -0
  331. data/lib/ddtrace/workers/polling.rb +48 -0
  332. data/lib/ddtrace/workers/queue.rb +39 -0
  333. data/lib/ddtrace/workers/runtime_metrics.rb +47 -0
  334. data/lib/ddtrace/workers/trace_writer.rb +202 -0
  335. data/lib/ddtrace/writer.rb +56 -38
  336. metadata +185 -25
  337. data/lib/ddtrace/provider.rb +0 -21
@@ -4,8 +4,11 @@ module Datadog
4
4
  # Elasticsearch integration constants
5
5
  module Ext
6
6
  APP = 'elasticsearch'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_ELASTICSEARCH_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_ELASTICSEARCH_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_ELASTICSEARCH_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_ELASTICSEARCH_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'elasticsearch'.freeze
10
13
  SPAN_QUERY = 'elasticsearch.query'.freeze
11
14
  SPAN_TYPE_QUERY = 'elasticsearch'.freeze
@@ -9,6 +9,8 @@ module Datadog
9
9
  class Integration
10
10
  include Contrib::Integration
11
11
 
12
+ MINIMUM_VERSION = Gem::Version.new('1.0.0')
13
+
12
14
  register_as :elasticsearch, auto_patch: true
13
15
 
14
16
  def self.version
@@ -16,12 +18,12 @@ module Datadog
16
18
  && Gem.loaded_specs['elasticsearch-transport'].version
17
19
  end
18
20
 
19
- def self.present?
20
- super && defined?(::Elasticsearch::Transport)
21
+ def self.loaded?
22
+ !defined?(::Elasticsearch::Transport).nil?
21
23
  end
22
24
 
23
25
  def self.compatible?
24
- super && version >= Gem::Version.new('1.0.0')
26
+ super && version >= MINIMUM_VERSION
25
27
  end
26
28
 
27
29
  def default_configuration
@@ -13,23 +13,17 @@ module Datadog
13
13
 
14
14
  module_function
15
15
 
16
- def patched?
17
- done?(:elasticsearch)
16
+ def target_version
17
+ Integration.version
18
18
  end
19
19
 
20
20
  def patch
21
- do_once(:elasticsearch) do
22
- begin
23
- require 'uri'
24
- require 'json'
25
- require 'ddtrace/pin'
26
- require 'ddtrace/contrib/elasticsearch/quantize'
27
-
28
- patch_elasticsearch_transport_client
29
- rescue StandardError => e
30
- Datadog::Tracer.log.error("Unable to apply Elasticsearch integration: #{e}")
31
- end
32
- end
21
+ require 'uri'
22
+ require 'json'
23
+ require 'ddtrace/pin'
24
+ require 'ddtrace/contrib/elasticsearch/quantize'
25
+
26
+ patch_elasticsearch_transport_client
33
27
  end
34
28
 
35
29
  # rubocop:disable Metrics/MethodLength
@@ -43,14 +37,13 @@ module Datadog
43
37
  end
44
38
 
45
39
  def initialize(*args, &block)
46
- tracer = Datadog.configuration[:elasticsearch][:tracer]
47
40
  service = Datadog.configuration[:elasticsearch][:service_name]
48
41
 
49
42
  pin = Datadog::Pin.new(
50
43
  service,
51
44
  app: Datadog::Contrib::Elasticsearch::Ext::APP,
52
45
  app_type: Datadog::Ext::AppTypes::DB,
53
- tracer: tracer
46
+ tracer: -> { Datadog.configuration[:elasticsearch][:tracer] }
54
47
  )
55
48
  pin.onto(self)
56
49
  initialize_without_datadog(*args, &block)
@@ -103,7 +96,7 @@ module Datadog
103
96
  quantized_url = Datadog::Contrib::Elasticsearch::Quantize.format_url(url)
104
97
  span.resource = "#{method} #{quantized_url}"
105
98
  rescue StandardError => e
106
- Datadog::Tracer.log.error(e.message)
99
+ Datadog.logger.error(e.message)
107
100
  ensure
108
101
  # the call is still executed
109
102
  response = perform_request_without_datadog(*args)
@@ -7,18 +7,24 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the Ethon integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24
 
20
25
  option :distributed_tracing, default: true
21
26
  option :service_name, default: Ext::SERVICE_NAME
27
+ option :split_by_domain, default: false
22
28
  end
23
29
  end
24
30
  end
@@ -2,6 +2,7 @@ require 'ddtrace/ext/net'
2
2
  require 'ddtrace/ext/distributed'
3
3
  require 'ddtrace/propagation/http_propagator'
4
4
  require 'ddtrace/contrib/ethon/ext'
5
+ require 'ddtrace/contrib/http_annotation_helper'
5
6
 
6
7
  module Datadog
7
8
  module Contrib
@@ -14,7 +15,10 @@ module Datadog
14
15
 
15
16
  # InstanceMethods - implementing instrumentation
16
17
  module InstanceMethods
18
+ include Datadog::Contrib::HttpAnnotationHelper
19
+
17
20
  def http_request(url, action_name, options = {})
21
+ load_datadog_configuration_for(url)
18
22
  return super unless tracer_enabled?
19
23
 
20
24
  # It's tricky to get HTTP method from libcurl
@@ -23,14 +27,13 @@ module Datadog
23
27
  end
24
28
 
25
29
  def headers=(headers)
26
- return super unless tracer_enabled?
27
-
28
30
  # Store headers to call this method again when span is ready
29
31
  @datadog_original_headers = headers
30
32
  super
31
33
  end
32
34
 
33
35
  def perform
36
+ load_datadog_configuration_for(url)
34
37
  return super unless tracer_enabled?
35
38
  datadog_before_request
36
39
  super
@@ -61,17 +64,17 @@ module Datadog
61
64
  def reset
62
65
  super
63
66
  ensure
64
- if tracer_enabled?
65
- @datadog_span = nil
66
- @datadog_method = nil
67
- @datadog_original_headers = nil
68
- end
67
+ @datadog_span = nil
68
+ @datadog_method = nil
69
+ @datadog_original_headers = nil
70
+ @datadog_configuration = nil
69
71
  end
70
72
 
71
73
  def datadog_before_request(parent_span: nil)
74
+ load_datadog_configuration_for(url)
72
75
  @datadog_span = datadog_configuration[:tracer].trace(
73
76
  Ext::SPAN_REQUEST,
74
- service: datadog_configuration[:service_name],
77
+ service: uri ? service_name(uri.host, datadog_configuration) : datadog_configuration[:service_name],
75
78
  span_type: Datadog::Ext::HTTP::TYPE_OUTBOUND
76
79
  )
77
80
  @datadog_span.parent = parent_span unless parent_span.nil?
@@ -91,9 +94,10 @@ module Datadog
91
94
 
92
95
  private
93
96
 
97
+ attr_reader :datadog_configuration
98
+
94
99
  def datadog_tag_request
95
100
  span = @datadog_span
96
- uri = URI.parse(url)
97
101
  method = 'N/A'
98
102
  if instance_variable_defined?(:@datadog_method) && !@datadog_method.nil?
99
103
  method = @datadog_method.to_s
@@ -103,12 +107,11 @@ module Datadog
103
107
  # Set analytics sample rate
104
108
  Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
105
109
 
110
+ return unless uri
106
111
  span.set_tag(Datadog::Ext::HTTP::URL, uri.path)
107
112
  span.set_tag(Datadog::Ext::HTTP::METHOD, method)
108
113
  span.set_tag(Datadog::Ext::NET::TARGET_HOST, uri.host)
109
114
  span.set_tag(Datadog::Ext::NET::TARGET_PORT, uri.port)
110
- rescue URI::InvalidURIError
111
- return
112
115
  end
113
116
 
114
117
  def set_span_error_message(message)
@@ -117,8 +120,14 @@ module Datadog
117
120
  @datadog_span.set_tag(Datadog::Ext::Errors::MSG, message)
118
121
  end
119
122
 
120
- def datadog_configuration
121
- Datadog.configuration[:ethon]
123
+ def uri
124
+ URI.parse(url)
125
+ # rubocop:disable Lint/HandleExceptions
126
+ rescue URI::InvalidURIError
127
+ end
128
+
129
+ def load_datadog_configuration_for(host = :default)
130
+ @datadog_configuration = Datadog.configuration[:ethon, host]
122
131
  end
123
132
 
124
133
  def tracer_enabled?
@@ -4,8 +4,11 @@ module Datadog
4
4
  # Ethon integration constants
5
5
  module Ext
6
6
  APP = 'ethon'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_ETHON_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_ETHON_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_ETHON_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_ETHON_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_ETHON_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ETHON_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_ETHON_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'ethon'.freeze
10
13
  SPAN_REQUEST = 'ethon.request'.freeze
11
14
  SPAN_MULTI_REQUEST = 'ethon.multi.request'.freeze
@@ -1,5 +1,6 @@
1
1
  require 'ddtrace/contrib/integration'
2
2
  require 'ddtrace/contrib/ethon/configuration/settings'
3
+ require 'ddtrace/contrib/configuration/resolvers/pattern_resolver'
3
4
  require 'ddtrace/contrib/ethon/patcher'
4
5
 
5
6
  module Datadog
@@ -8,14 +9,21 @@ module Datadog
8
9
  # Description of Ethon integration
9
10
  class Integration
10
11
  include Contrib::Integration
12
+
13
+ MINIMUM_VERSION = Gem::Version.new('0.11.0')
14
+
11
15
  register_as :ethon
12
16
 
13
17
  def self.version
14
18
  Gem.loaded_specs['ethon'] && Gem.loaded_specs['ethon'].version
15
19
  end
16
20
 
17
- def self.present?
18
- super && defined?(::Ethon::Easy)
21
+ def self.loaded?
22
+ !defined?(::Ethon::Easy).nil?
23
+ end
24
+
25
+ def self.compatible?
26
+ super && version >= MINIMUM_VERSION
19
27
  end
20
28
 
21
29
  def default_configuration
@@ -25,6 +33,10 @@ module Datadog
25
33
  def patcher
26
34
  Patcher
27
35
  end
36
+
37
+ def resolver
38
+ @resolver ||= Contrib::Configuration::Resolvers::PatternResolver.new
39
+ end
28
40
  end
29
41
  end
30
42
  end
@@ -7,19 +7,17 @@ module Datadog
7
7
 
8
8
  module_function
9
9
 
10
- def patched?
11
- done?(:ethon)
10
+ def target_version
11
+ Integration.version
12
12
  end
13
13
 
14
14
  def patch
15
- do_once(:ethon) do
16
- require 'ddtrace/ext/app_types'
17
- require 'ddtrace/contrib/ethon/easy_patch'
18
- require 'ddtrace/contrib/ethon/multi_patch'
15
+ require 'ddtrace/ext/app_types'
16
+ require 'ddtrace/contrib/ethon/easy_patch'
17
+ require 'ddtrace/contrib/ethon/multi_patch'
19
18
 
20
- ::Ethon::Easy.send(:include, EasyPatch)
21
- ::Ethon::Multi.send(:include, MultiPatch)
22
- end
19
+ ::Ethon::Easy.send(:include, EasyPatch)
20
+ ::Ethon::Multi.send(:include, MultiPatch)
23
21
  end
24
22
  end
25
23
  end
@@ -7,13 +7,18 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the Excon integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24
 
@@ -4,8 +4,11 @@ module Datadog
4
4
  # Excon integration constants
5
5
  module Ext
6
6
  APP = 'excon'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_EXCON_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_EXCON_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_EXCON_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_EXCON_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_EXCON_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_EXCON_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_EXCON_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'excon'.freeze
10
13
  SPAN_REQUEST = 'excon.request'.freeze
11
14
  end
@@ -1,5 +1,6 @@
1
1
  require 'ddtrace/contrib/integration'
2
2
  require 'ddtrace/contrib/excon/configuration/settings'
3
+ require 'ddtrace/contrib/configuration/resolvers/pattern_resolver'
3
4
  require 'ddtrace/contrib/excon/patcher'
4
5
 
5
6
  module Datadog
@@ -9,14 +10,20 @@ module Datadog
9
10
  class Integration
10
11
  include Contrib::Integration
11
12
 
13
+ MINIMUM_VERSION = Gem::Version.new('0.50.0')
14
+
12
15
  register_as :excon
13
16
 
14
17
  def self.version
15
18
  Gem.loaded_specs['excon'] && Gem.loaded_specs['excon'].version
16
19
  end
17
20
 
18
- def self.present?
19
- super && defined?(::Excon)
21
+ def self.loaded?
22
+ !defined?(::Excon).nil?
23
+ end
24
+
25
+ def self.compatible?
26
+ super && version >= MINIMUM_VERSION
20
27
  end
21
28
 
22
29
  def default_configuration
@@ -26,6 +33,10 @@ module Datadog
26
33
  def patcher
27
34
  Patcher
28
35
  end
36
+
37
+ def resolver
38
+ @resolver ||= Contrib::Configuration::Resolvers::PatternResolver.new
39
+ end
29
40
  end
30
41
  end
31
42
  end
@@ -5,24 +5,28 @@ require 'ddtrace/ext/distributed'
5
5
  require 'ddtrace/propagation/http_propagator'
6
6
  require 'ddtrace/contrib/analytics'
7
7
  require 'ddtrace/contrib/excon/ext'
8
+ require 'ddtrace/contrib/http_annotation_helper'
8
9
 
9
10
  module Datadog
10
11
  module Contrib
11
12
  module Excon
12
13
  # Middleware implements an excon-middleware for ddtrace instrumentation
13
14
  class Middleware < ::Excon::Middleware::Base
15
+ include Datadog::Contrib::HttpAnnotationHelper
16
+
14
17
  DEFAULT_ERROR_HANDLER = lambda do |response|
15
18
  Datadog::Ext::HTTP::ERROR_RANGE.cover?(response[:status])
16
19
  end
17
20
 
18
21
  def initialize(stack, options = {})
19
22
  super(stack)
20
- @options = Datadog.configuration[:excon].options_hash.merge(options)
23
+ @default_options = datadog_configuration.options_hash.merge(options)
21
24
  end
22
25
 
23
26
  def request_call(datum)
24
27
  begin
25
28
  unless datum.key?(:datadog_span)
29
+ @options = build_request_options!(datum)
26
30
  tracer.trace(Ext::SPAN_REQUEST).tap do |span|
27
31
  datum[:datadog_span] = span
28
32
  annotate!(span, datum)
@@ -30,7 +34,7 @@ module Datadog
30
34
  end
31
35
  end
32
36
  rescue StandardError => e
33
- Datadog::Tracer.log.debug(e.message)
37
+ Datadog.logger.debug(e.message)
34
38
  end
35
39
 
36
40
  @stack.request_call(datum)
@@ -99,13 +103,9 @@ module Datadog
99
103
  @options[:error_handler] || DEFAULT_ERROR_HANDLER
100
104
  end
101
105
 
102
- def split_by_domain?
103
- @options[:split_by_domain] == true
104
- end
105
-
106
106
  def annotate!(span, datum)
107
107
  span.resource = datum[:method].to_s.upcase
108
- span.service = service_name(datum)
108
+ span.service = service_name(datum[:host], @options)
109
109
  span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
110
110
 
111
111
  # Set analytics sample rate
@@ -116,7 +116,7 @@ module Datadog
116
116
  span.set_tag(Datadog::Ext::HTTP::URL, datum[:path])
117
117
  span.set_tag(Datadog::Ext::HTTP::METHOD, datum[:method].to_s.upcase)
118
118
  span.set_tag(Datadog::Ext::NET::TARGET_HOST, datum[:host])
119
- span.set_tag(Datadog::Ext::NET::TARGET_PORT, datum[:port].to_s)
119
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, datum[:port])
120
120
  end
121
121
 
122
122
  def handle_response(datum)
@@ -137,16 +137,19 @@ module Datadog
137
137
  end
138
138
  end
139
139
  rescue StandardError => e
140
- Datadog::Tracer.log.debug(e.message)
140
+ Datadog.logger.debug(e.message)
141
141
  end
142
142
 
143
143
  def propagate!(span, datum)
144
144
  Datadog::HTTPPropagator.inject!(span.context, datum[:headers])
145
145
  end
146
146
 
147
- def service_name(datum)
148
- # TODO: Change this to implement more sensible multiplexing
149
- split_by_domain? ? datum[:host] : @options[:service_name]
147
+ def build_request_options!(datum)
148
+ datadog_configuration(datum[:host]).options_hash.merge(@default_options)
149
+ end
150
+
151
+ def datadog_configuration(host = :default)
152
+ Datadog.configuration[:excon, host]
150
153
  end
151
154
  end
152
155
  end