ls-trace 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +673 -0
  3. data/.circleci/images/primary/Dockerfile-2.0.0 +73 -0
  4. data/.circleci/images/primary/Dockerfile-2.1.10 +73 -0
  5. data/.circleci/images/primary/Dockerfile-2.2.10 +73 -0
  6. data/.circleci/images/primary/Dockerfile-2.3.8 +75 -0
  7. data/.circleci/images/primary/Dockerfile-2.4.6 +73 -0
  8. data/.circleci/images/primary/Dockerfile-2.5.6 +73 -0
  9. data/.circleci/images/primary/Dockerfile-2.6.4 +73 -0
  10. data/.dockerignore +1 -0
  11. data/.env +24 -0
  12. data/.github/CODEOWNERS +1 -0
  13. data/.gitignore +59 -0
  14. data/.rspec +1 -0
  15. data/.rubocop.yml +77 -0
  16. data/.yardopts +5 -0
  17. data/Appraisals +820 -0
  18. data/CHANGELOG.md +1051 -0
  19. data/CONTRIBUTING.md +85 -0
  20. data/Gemfile +7 -0
  21. data/LICENSE +24 -0
  22. data/README.md +108 -0
  23. data/Rakefile +635 -0
  24. data/benchmarks/postgres_database.yml +9 -0
  25. data/benchmarks/sidekiq_test.rb +154 -0
  26. data/ddtrace.gemspec +63 -0
  27. data/docker-compose.yml +276 -0
  28. data/docs/DevelopmentGuide.md +195 -0
  29. data/docs/GettingStarted.md +1981 -0
  30. data/lib/ddtrace.rb +63 -0
  31. data/lib/ddtrace/analytics.rb +29 -0
  32. data/lib/ddtrace/augmentation.rb +13 -0
  33. data/lib/ddtrace/augmentation/method_wrapper.rb +20 -0
  34. data/lib/ddtrace/augmentation/method_wrapping.rb +38 -0
  35. data/lib/ddtrace/augmentation/shim.rb +102 -0
  36. data/lib/ddtrace/buffer.rb +119 -0
  37. data/lib/ddtrace/configuration.rb +30 -0
  38. data/lib/ddtrace/configuration/base.rb +82 -0
  39. data/lib/ddtrace/configuration/dependency_resolver.rb +24 -0
  40. data/lib/ddtrace/configuration/option.rb +55 -0
  41. data/lib/ddtrace/configuration/option_definition.rb +127 -0
  42. data/lib/ddtrace/configuration/option_definition_set.rb +18 -0
  43. data/lib/ddtrace/configuration/option_set.rb +6 -0
  44. data/lib/ddtrace/configuration/options.rb +107 -0
  45. data/lib/ddtrace/configuration/pin_setup.rb +30 -0
  46. data/lib/ddtrace/configuration/settings.rb +105 -0
  47. data/lib/ddtrace/context.rb +284 -0
  48. data/lib/ddtrace/context_flush.rb +132 -0
  49. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +144 -0
  50. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +37 -0
  51. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +27 -0
  52. data/lib/ddtrace/contrib/action_pack/ext.rb +16 -0
  53. data/lib/ddtrace/contrib/action_pack/integration.rb +36 -0
  54. data/lib/ddtrace/contrib/action_pack/patcher.rb +29 -0
  55. data/lib/ddtrace/contrib/action_pack/utils.rb +36 -0
  56. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +26 -0
  57. data/lib/ddtrace/contrib/action_view/ext.rb +17 -0
  58. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +78 -0
  59. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +167 -0
  60. data/lib/ddtrace/contrib/action_view/integration.rb +43 -0
  61. data/lib/ddtrace/contrib/action_view/patcher.rb +53 -0
  62. data/lib/ddtrace/contrib/action_view/utils.rb +32 -0
  63. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +25 -0
  64. data/lib/ddtrace/contrib/active_model_serializers/event.rb +65 -0
  65. data/lib/ddtrace/contrib/active_model_serializers/events.rb +30 -0
  66. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +32 -0
  67. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +35 -0
  68. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +17 -0
  69. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +39 -0
  70. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +36 -0
  71. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +46 -0
  72. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +30 -0
  73. data/lib/ddtrace/contrib/active_record/event.rb +30 -0
  74. data/lib/ddtrace/contrib/active_record/events.rb +30 -0
  75. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +57 -0
  76. data/lib/ddtrace/contrib/active_record/events/sql.rb +64 -0
  77. data/lib/ddtrace/contrib/active_record/ext.rb +21 -0
  78. data/lib/ddtrace/contrib/active_record/integration.rb +44 -0
  79. data/lib/ddtrace/contrib/active_record/patcher.rb +29 -0
  80. data/lib/ddtrace/contrib/active_record/utils.rb +76 -0
  81. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +157 -0
  82. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +62 -0
  83. data/lib/ddtrace/contrib/active_support/cache/redis.rb +47 -0
  84. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +25 -0
  85. data/lib/ddtrace/contrib/active_support/ext.rb +21 -0
  86. data/lib/ddtrace/contrib/active_support/integration.rb +38 -0
  87. data/lib/ddtrace/contrib/active_support/notifications/event.rb +62 -0
  88. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +66 -0
  89. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +159 -0
  90. data/lib/ddtrace/contrib/active_support/patcher.rb +29 -0
  91. data/lib/ddtrace/contrib/analytics.rb +20 -0
  92. data/lib/ddtrace/contrib/aws/configuration/settings.rb +25 -0
  93. data/lib/ddtrace/contrib/aws/ext.rb +20 -0
  94. data/lib/ddtrace/contrib/aws/instrumentation.rb +56 -0
  95. data/lib/ddtrace/contrib/aws/integration.rb +36 -0
  96. data/lib/ddtrace/contrib/aws/parsed_context.rb +56 -0
  97. data/lib/ddtrace/contrib/aws/patcher.rb +49 -0
  98. data/lib/ddtrace/contrib/aws/services.rb +115 -0
  99. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +15 -0
  100. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +35 -0
  101. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +11 -0
  102. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +23 -0
  103. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +32 -0
  104. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +35 -0
  105. data/lib/ddtrace/contrib/configurable.rb +59 -0
  106. data/lib/ddtrace/contrib/configuration/resolver.rb +12 -0
  107. data/lib/ddtrace/contrib/configuration/settings.rb +35 -0
  108. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +25 -0
  109. data/lib/ddtrace/contrib/dalli/ext.rb +17 -0
  110. data/lib/ddtrace/contrib/dalli/instrumentation.rb +50 -0
  111. data/lib/ddtrace/contrib/dalli/integration.rb +36 -0
  112. data/lib/ddtrace/contrib/dalli/patcher.rb +73 -0
  113. data/lib/ddtrace/contrib/dalli/quantize.rb +22 -0
  114. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +25 -0
  115. data/lib/ddtrace/contrib/delayed_job/ext.rb +18 -0
  116. data/lib/ddtrace/contrib/delayed_job/integration.rb +32 -0
  117. data/lib/ddtrace/contrib/delayed_job/patcher.rb +34 -0
  118. data/lib/ddtrace/contrib/delayed_job/plugin.rb +57 -0
  119. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +26 -0
  120. data/lib/ddtrace/contrib/elasticsearch/ext.rb +19 -0
  121. data/lib/ddtrace/contrib/elasticsearch/integration.rb +37 -0
  122. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +124 -0
  123. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +80 -0
  124. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +26 -0
  125. data/lib/ddtrace/contrib/ethon/easy_patch.rb +139 -0
  126. data/lib/ddtrace/contrib/ethon/ext.rb +15 -0
  127. data/lib/ddtrace/contrib/ethon/integration.rb +31 -0
  128. data/lib/ddtrace/contrib/ethon/multi_patch.rb +80 -0
  129. data/lib/ddtrace/contrib/ethon/patcher.rb +27 -0
  130. data/lib/ddtrace/contrib/excon/configuration/settings.rb +28 -0
  131. data/lib/ddtrace/contrib/excon/ext.rb +14 -0
  132. data/lib/ddtrace/contrib/excon/integration.rb +32 -0
  133. data/lib/ddtrace/contrib/excon/middleware.rb +154 -0
  134. data/lib/ddtrace/contrib/excon/patcher.rb +34 -0
  135. data/lib/ddtrace/contrib/extensions.rb +59 -0
  136. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +33 -0
  137. data/lib/ddtrace/contrib/faraday/ext.rb +14 -0
  138. data/lib/ddtrace/contrib/faraday/integration.rb +36 -0
  139. data/lib/ddtrace/contrib/faraday/middleware.rb +93 -0
  140. data/lib/ddtrace/contrib/faraday/patcher.rb +82 -0
  141. data/lib/ddtrace/contrib/faraday/rack_builder.rb +18 -0
  142. data/lib/ddtrace/contrib/grape/configuration/settings.rb +27 -0
  143. data/lib/ddtrace/contrib/grape/endpoint.rb +199 -0
  144. data/lib/ddtrace/contrib/grape/ext.rb +19 -0
  145. data/lib/ddtrace/contrib/grape/instrumentation.rb +33 -0
  146. data/lib/ddtrace/contrib/grape/integration.rb +36 -0
  147. data/lib/ddtrace/contrib/grape/patcher.rb +79 -0
  148. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +27 -0
  149. data/lib/ddtrace/contrib/graphql/ext.rb +13 -0
  150. data/lib/ddtrace/contrib/graphql/integration.rb +38 -0
  151. data/lib/ddtrace/contrib/graphql/patcher.rb +63 -0
  152. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +25 -0
  153. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +74 -0
  154. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +56 -0
  155. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +73 -0
  156. data/lib/ddtrace/contrib/grpc/ext.rb +15 -0
  157. data/lib/ddtrace/contrib/grpc/integration.rb +36 -0
  158. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +49 -0
  159. data/lib/ddtrace/contrib/grpc/patcher.rb +78 -0
  160. data/lib/ddtrace/contrib/http/circuit_breaker.rb +63 -0
  161. data/lib/ddtrace/contrib/http/configuration/settings.rb +26 -0
  162. data/lib/ddtrace/contrib/http/ext.rb +14 -0
  163. data/lib/ddtrace/contrib/http/instrumentation.rb +114 -0
  164. data/lib/ddtrace/contrib/http/integration.rb +32 -0
  165. data/lib/ddtrace/contrib/http/patcher.rb +32 -0
  166. data/lib/ddtrace/contrib/integration.rb +16 -0
  167. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +28 -0
  168. data/lib/ddtrace/contrib/mongodb/ext.rb +20 -0
  169. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +68 -0
  170. data/lib/ddtrace/contrib/mongodb/integration.rb +36 -0
  171. data/lib/ddtrace/contrib/mongodb/parsers.rb +68 -0
  172. data/lib/ddtrace/contrib/mongodb/patcher.rb +37 -0
  173. data/lib/ddtrace/contrib/mongodb/subscribers.rb +108 -0
  174. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +25 -0
  175. data/lib/ddtrace/contrib/mysql2/ext.rb +15 -0
  176. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +60 -0
  177. data/lib/ddtrace/contrib/mysql2/integration.rb +32 -0
  178. data/lib/ddtrace/contrib/mysql2/patcher.rb +33 -0
  179. data/lib/ddtrace/contrib/patchable.rb +42 -0
  180. data/lib/ddtrace/contrib/patcher.rb +28 -0
  181. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +25 -0
  182. data/lib/ddtrace/contrib/racecar/event.rb +67 -0
  183. data/lib/ddtrace/contrib/racecar/events.rb +30 -0
  184. data/lib/ddtrace/contrib/racecar/events/batch.rb +27 -0
  185. data/lib/ddtrace/contrib/racecar/events/message.rb +27 -0
  186. data/lib/ddtrace/contrib/racecar/ext.rb +21 -0
  187. data/lib/ddtrace/contrib/racecar/integration.rb +36 -0
  188. data/lib/ddtrace/contrib/racecar/patcher.rb +32 -0
  189. data/lib/ddtrace/contrib/rack/configuration/settings.rb +41 -0
  190. data/lib/ddtrace/contrib/rack/ext.rb +18 -0
  191. data/lib/ddtrace/contrib/rack/integration.rb +32 -0
  192. data/lib/ddtrace/contrib/rack/middlewares.rb +283 -0
  193. data/lib/ddtrace/contrib/rack/patcher.rb +72 -0
  194. data/lib/ddtrace/contrib/rack/request_queue.rb +39 -0
  195. data/lib/ddtrace/contrib/rails/configuration/settings.rb +80 -0
  196. data/lib/ddtrace/contrib/rails/ext.rb +12 -0
  197. data/lib/ddtrace/contrib/rails/framework.rb +100 -0
  198. data/lib/ddtrace/contrib/rails/integration.rb +37 -0
  199. data/lib/ddtrace/contrib/rails/middlewares.rb +38 -0
  200. data/lib/ddtrace/contrib/rails/patcher.rb +78 -0
  201. data/lib/ddtrace/contrib/rails/railtie.rb +17 -0
  202. data/lib/ddtrace/contrib/rails/utils.rb +20 -0
  203. data/lib/ddtrace/contrib/rake/configuration/settings.rb +27 -0
  204. data/lib/ddtrace/contrib/rake/ext.rb +18 -0
  205. data/lib/ddtrace/contrib/rake/instrumentation.rb +84 -0
  206. data/lib/ddtrace/contrib/rake/integration.rb +32 -0
  207. data/lib/ddtrace/contrib/rake/patcher.rb +36 -0
  208. data/lib/ddtrace/contrib/redis/configuration/settings.rb +25 -0
  209. data/lib/ddtrace/contrib/redis/ext.rb +18 -0
  210. data/lib/ddtrace/contrib/redis/integration.rb +36 -0
  211. data/lib/ddtrace/contrib/redis/patcher.rb +94 -0
  212. data/lib/ddtrace/contrib/redis/quantize.rb +47 -0
  213. data/lib/ddtrace/contrib/redis/tags.rb +38 -0
  214. data/lib/ddtrace/contrib/registerable.rb +33 -0
  215. data/lib/ddtrace/contrib/registry.rb +42 -0
  216. data/lib/ddtrace/contrib/resque/configuration/settings.rb +26 -0
  217. data/lib/ddtrace/contrib/resque/ext.rb +14 -0
  218. data/lib/ddtrace/contrib/resque/integration.rb +37 -0
  219. data/lib/ddtrace/contrib/resque/patcher.rb +35 -0
  220. data/lib/ddtrace/contrib/resque/resque_job.rb +76 -0
  221. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +26 -0
  222. data/lib/ddtrace/contrib/rest_client/ext.rb +14 -0
  223. data/lib/ddtrace/contrib/rest_client/integration.rb +31 -0
  224. data/lib/ddtrace/contrib/rest_client/patcher.rb +25 -0
  225. data/lib/ddtrace/contrib/rest_client/request_patch.rb +89 -0
  226. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +23 -0
  227. data/lib/ddtrace/contrib/sequel/database.rb +61 -0
  228. data/lib/ddtrace/contrib/sequel/dataset.rb +62 -0
  229. data/lib/ddtrace/contrib/sequel/ext.rb +15 -0
  230. data/lib/ddtrace/contrib/sequel/integration.rb +32 -0
  231. data/lib/ddtrace/contrib/sequel/patcher.rb +39 -0
  232. data/lib/ddtrace/contrib/sequel/utils.rb +46 -0
  233. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +24 -0
  234. data/lib/ddtrace/contrib/shoryuken/ext.rb +18 -0
  235. data/lib/ddtrace/contrib/shoryuken/integration.rb +35 -0
  236. data/lib/ddtrace/contrib/shoryuken/patcher.rb +30 -0
  237. data/lib/ddtrace/contrib/shoryuken/tracer.rb +45 -0
  238. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +43 -0
  239. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +26 -0
  240. data/lib/ddtrace/contrib/sidekiq/ext.rb +21 -0
  241. data/lib/ddtrace/contrib/sidekiq/integration.rb +36 -0
  242. data/lib/ddtrace/contrib/sidekiq/patcher.rb +40 -0
  243. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +58 -0
  244. data/lib/ddtrace/contrib/sidekiq/tracing.rb +28 -0
  245. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +34 -0
  246. data/lib/ddtrace/contrib/sinatra/env.rb +38 -0
  247. data/lib/ddtrace/contrib/sinatra/ext.rb +18 -0
  248. data/lib/ddtrace/contrib/sinatra/headers.rb +31 -0
  249. data/lib/ddtrace/contrib/sinatra/integration.rb +36 -0
  250. data/lib/ddtrace/contrib/sinatra/patcher.rb +33 -0
  251. data/lib/ddtrace/contrib/sinatra/tracer.rb +84 -0
  252. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +72 -0
  253. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +25 -0
  254. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +26 -0
  255. data/lib/ddtrace/contrib/sucker_punch/ext.rb +18 -0
  256. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +70 -0
  257. data/lib/ddtrace/contrib/sucker_punch/integration.rb +36 -0
  258. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +48 -0
  259. data/lib/ddtrace/correlation.rb +28 -0
  260. data/lib/ddtrace/diagnostics/health.rb +30 -0
  261. data/lib/ddtrace/distributed_tracing/headers/b3.rb +44 -0
  262. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +56 -0
  263. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +42 -0
  264. data/lib/ddtrace/distributed_tracing/headers/headers.rb +70 -0
  265. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +45 -0
  266. data/lib/ddtrace/encoding.rb +65 -0
  267. data/lib/ddtrace/environment.rb +23 -0
  268. data/lib/ddtrace/error.rb +27 -0
  269. data/lib/ddtrace/ext/analytics.rb +11 -0
  270. data/lib/ddtrace/ext/app_types.rb +11 -0
  271. data/lib/ddtrace/ext/diagnostics.rb +25 -0
  272. data/lib/ddtrace/ext/distributed.rb +33 -0
  273. data/lib/ddtrace/ext/errors.rb +10 -0
  274. data/lib/ddtrace/ext/forced_tracing.rb +25 -0
  275. data/lib/ddtrace/ext/http.rb +46 -0
  276. data/lib/ddtrace/ext/manual_tracing.rb +9 -0
  277. data/lib/ddtrace/ext/metrics.rb +15 -0
  278. data/lib/ddtrace/ext/net.rb +10 -0
  279. data/lib/ddtrace/ext/priority.rb +16 -0
  280. data/lib/ddtrace/ext/runtime.rb +26 -0
  281. data/lib/ddtrace/ext/sql.rb +8 -0
  282. data/lib/ddtrace/ext/transport.rb +17 -0
  283. data/lib/ddtrace/forced_tracing.rb +36 -0
  284. data/lib/ddtrace/logger.rb +39 -0
  285. data/lib/ddtrace/metrics.rb +215 -0
  286. data/lib/ddtrace/monkey.rb +58 -0
  287. data/lib/ddtrace/opentracer.rb +40 -0
  288. data/lib/ddtrace/opentracer/binary_propagator.rb +24 -0
  289. data/lib/ddtrace/opentracer/carrier.rb +6 -0
  290. data/lib/ddtrace/opentracer/distributed_headers.rb +52 -0
  291. data/lib/ddtrace/opentracer/global_tracer.rb +15 -0
  292. data/lib/ddtrace/opentracer/propagator.rb +22 -0
  293. data/lib/ddtrace/opentracer/rack_propagator.rb +60 -0
  294. data/lib/ddtrace/opentracer/scope.rb +15 -0
  295. data/lib/ddtrace/opentracer/scope_manager.rb +6 -0
  296. data/lib/ddtrace/opentracer/span.rb +98 -0
  297. data/lib/ddtrace/opentracer/span_context.rb +14 -0
  298. data/lib/ddtrace/opentracer/span_context_factory.rb +23 -0
  299. data/lib/ddtrace/opentracer/text_map_propagator.rb +75 -0
  300. data/lib/ddtrace/opentracer/thread_local_scope.rb +30 -0
  301. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +40 -0
  302. data/lib/ddtrace/opentracer/tracer.rb +208 -0
  303. data/lib/ddtrace/patcher.rb +47 -0
  304. data/lib/ddtrace/pin.rb +114 -0
  305. data/lib/ddtrace/pipeline.rb +46 -0
  306. data/lib/ddtrace/pipeline/span_filter.rb +38 -0
  307. data/lib/ddtrace/pipeline/span_processor.rb +20 -0
  308. data/lib/ddtrace/propagation/grpc_propagator.rb +61 -0
  309. data/lib/ddtrace/propagation/http_propagator.rb +75 -0
  310. data/lib/ddtrace/provider.rb +21 -0
  311. data/lib/ddtrace/quantization/hash.rb +103 -0
  312. data/lib/ddtrace/quantization/http.rb +86 -0
  313. data/lib/ddtrace/runtime/cgroup.rb +44 -0
  314. data/lib/ddtrace/runtime/class_count.rb +17 -0
  315. data/lib/ddtrace/runtime/container.rb +73 -0
  316. data/lib/ddtrace/runtime/gc.rb +16 -0
  317. data/lib/ddtrace/runtime/identity.rb +41 -0
  318. data/lib/ddtrace/runtime/metrics.rb +93 -0
  319. data/lib/ddtrace/runtime/object_space.rb +19 -0
  320. data/lib/ddtrace/runtime/socket.rb +14 -0
  321. data/lib/ddtrace/runtime/thread_count.rb +16 -0
  322. data/lib/ddtrace/sampler.rb +195 -0
  323. data/lib/ddtrace/span.rb +260 -0
  324. data/lib/ddtrace/sync_writer.rb +62 -0
  325. data/lib/ddtrace/tracer.rb +459 -0
  326. data/lib/ddtrace/transport/http.rb +91 -0
  327. data/lib/ddtrace/transport/http/adapters/net.rb +112 -0
  328. data/lib/ddtrace/transport/http/adapters/registry.rb +24 -0
  329. data/lib/ddtrace/transport/http/adapters/test.rb +77 -0
  330. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +64 -0
  331. data/lib/ddtrace/transport/http/api.rb +46 -0
  332. data/lib/ddtrace/transport/http/api/endpoint.rb +27 -0
  333. data/lib/ddtrace/transport/http/api/fallbacks.rb +22 -0
  334. data/lib/ddtrace/transport/http/api/instance.rb +29 -0
  335. data/lib/ddtrace/transport/http/api/map.rb +14 -0
  336. data/lib/ddtrace/transport/http/api/spec.rb +15 -0
  337. data/lib/ddtrace/transport/http/builder.rb +165 -0
  338. data/lib/ddtrace/transport/http/client.rb +107 -0
  339. data/lib/ddtrace/transport/http/env.rb +48 -0
  340. data/lib/ddtrace/transport/http/response.rb +26 -0
  341. data/lib/ddtrace/transport/http/statistics.rb +30 -0
  342. data/lib/ddtrace/transport/http/traces.rb +140 -0
  343. data/lib/ddtrace/transport/parcel.rb +13 -0
  344. data/lib/ddtrace/transport/request.rb +13 -0
  345. data/lib/ddtrace/transport/response.rb +49 -0
  346. data/lib/ddtrace/transport/statistics.rb +72 -0
  347. data/lib/ddtrace/transport/traces.rb +33 -0
  348. data/lib/ddtrace/utils.rb +65 -0
  349. data/lib/ddtrace/utils/database.rb +25 -0
  350. data/lib/ddtrace/utils/time.rb +14 -0
  351. data/lib/ddtrace/vendor/active_record/connection_specification.rb +301 -0
  352. data/lib/ddtrace/version.rb +12 -0
  353. data/lib/ddtrace/workers.rb +125 -0
  354. data/lib/ddtrace/writer.rb +157 -0
  355. data/tasks/release_gem.rake +28 -0
  356. metadata +682 -0
@@ -0,0 +1,34 @@
1
+ require 'ddtrace/contrib/patcher'
2
+
3
+ module Datadog
4
+ module Contrib
5
+ module Excon
6
+ # Patcher enables patching of 'excon' module.
7
+ module Patcher
8
+ include Contrib::Patcher
9
+
10
+ module_function
11
+
12
+ def patched?
13
+ done?(:excon)
14
+ end
15
+
16
+ def patch
17
+ do_once(:excon) do
18
+ begin
19
+ require 'ddtrace/contrib/excon/middleware'
20
+
21
+ add_middleware
22
+ rescue StandardError => e
23
+ Datadog::Tracer.log.error("Unable to apply Excon integration: #{e}")
24
+ end
25
+ end
26
+ end
27
+
28
+ def add_middleware
29
+ ::Excon.defaults[:middlewares] = Middleware.around_default_stack
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,59 @@
1
+ require 'ddtrace/contrib/registry'
2
+
3
+ module Datadog
4
+ module Contrib
5
+ # Extensions that can be added to the base library
6
+ # Adds registry, configuration access for integrations.
7
+ module Extensions
8
+ def self.extended(base)
9
+ Datadog.send(:extend, Helpers)
10
+ Datadog::Configuration::Settings.send(:include, Configuration::Settings)
11
+ end
12
+
13
+ # Helper methods for Datadog module.
14
+ module Helpers
15
+ def registry
16
+ configuration.registry
17
+ end
18
+ end
19
+
20
+ module Configuration
21
+ # Extensions for Datadog::Configuration::Settings
22
+ module Settings
23
+ InvalidIntegrationError = Class.new(StandardError)
24
+
25
+ def self.included(base)
26
+ # Add the additional options to the global configuration settings
27
+ base.instance_eval do
28
+ option :registry, default: Registry.new
29
+ end
30
+ end
31
+
32
+ def [](integration_name, configuration_name = :default)
33
+ integration = fetch_integration(integration_name)
34
+ integration.configuration(configuration_name) unless integration.nil?
35
+ end
36
+
37
+ def use(integration_name, options = {}, &block)
38
+ integration = fetch_integration(integration_name)
39
+
40
+ unless integration.nil?
41
+ configuration_name = options[:describes] || :default
42
+ filtered_options = options.reject { |k, _v| k == :describes }
43
+ integration.configure(configuration_name, filtered_options, &block)
44
+ end
45
+
46
+ integration.patch if integration.respond_to?(:patch)
47
+ end
48
+
49
+ private
50
+
51
+ def fetch_integration(name)
52
+ get_option(:registry)[name] ||
53
+ raise(InvalidIntegrationError, "'#{name}' is not a valid integration.")
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,33 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/ext/http'
3
+ require 'ddtrace/contrib/faraday/ext'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Faraday
8
+ module Configuration
9
+ # Custom settings for the Faraday integration
10
+ class Settings < Contrib::Configuration::Settings
11
+ DEFAULT_ERROR_HANDLER = lambda do |env|
12
+ Datadog::Ext::HTTP::ERROR_RANGE.cover?(env[:status])
13
+ end
14
+
15
+ option :analytics_enabled do |o|
16
+ o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
17
+ o.lazy
18
+ end
19
+
20
+ option :analytics_sample_rate do |o|
21
+ o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
22
+ o.lazy
23
+ end
24
+
25
+ option :distributed_tracing, default: true
26
+ option :error_handler, default: DEFAULT_ERROR_HANDLER
27
+ option :service_name, default: Ext::SERVICE_NAME
28
+ option :split_by_domain, default: false
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,14 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Faraday
4
+ # Faraday integration constants
5
+ module Ext
6
+ APP = 'faraday'.freeze
7
+ ENV_ANALYTICS_ENABLED = 'DD_FARADAY_ANALYTICS_ENABLED'.freeze
8
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_FARADAY_ANALYTICS_SAMPLE_RATE'.freeze
9
+ SERVICE_NAME = 'faraday'.freeze
10
+ SPAN_REQUEST = 'faraday.request'.freeze
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,36 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/faraday/configuration/settings'
3
+ require 'ddtrace/contrib/faraday/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Faraday
8
+ # Description of Faraday integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :faraday, auto_patch: true
13
+
14
+ def self.version
15
+ Gem.loaded_specs['faraday'] && Gem.loaded_specs['faraday'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::Faraday)
20
+ end
21
+
22
+ def self.compatible?
23
+ super && version < Gem::Version.new('1.0.0')
24
+ end
25
+
26
+ def default_configuration
27
+ Configuration::Settings.new
28
+ end
29
+
30
+ def patcher
31
+ Patcher
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,93 @@
1
+ require 'faraday'
2
+ require 'ddtrace/ext/http'
3
+ require 'ddtrace/ext/net'
4
+ require 'ddtrace/propagation/http_propagator'
5
+ require 'ddtrace/contrib/analytics'
6
+ require 'ddtrace/contrib/faraday/ext'
7
+
8
+ module Datadog
9
+ module Contrib
10
+ module Faraday
11
+ # Middleware implements a faraday-middleware for ddtrace instrumentation
12
+ class Middleware < ::Faraday::Middleware
13
+ include Datadog::Ext::DistributedTracing
14
+
15
+ def initialize(app, options = {})
16
+ super(app)
17
+ @options = datadog_configuration.options_hash.merge(options)
18
+ setup_service!
19
+ end
20
+
21
+ def call(env)
22
+ tracer.trace(Ext::SPAN_REQUEST) do |span|
23
+ annotate!(span, env)
24
+ propagate!(span, env) if options[:distributed_tracing] && tracer.enabled
25
+ app.call(env).on_complete { |resp| handle_response(span, resp) }
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ attr_reader :app, :options
32
+
33
+ def annotate!(span, env)
34
+ span.resource = resource_name(env)
35
+ span.service = service_name(env)
36
+ span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
37
+
38
+ # Set analytics sample rate
39
+ if analytics_enabled?
40
+ Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
41
+ end
42
+
43
+ span.set_tag(Datadog::Ext::HTTP::URL, env[:url].path)
44
+ span.set_tag(Datadog::Ext::HTTP::METHOD, env[:method].to_s.upcase)
45
+ span.set_tag(Datadog::Ext::NET::TARGET_HOST, env[:url].host)
46
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, env[:url].port)
47
+ end
48
+
49
+ def handle_response(span, env)
50
+ if options.fetch(:error_handler).call(env)
51
+ span.set_error(["Error #{env[:status]}", env[:body]])
52
+ end
53
+
54
+ span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, env[:status])
55
+ end
56
+
57
+ def propagate!(span, env)
58
+ Datadog::HTTPPropagator.inject!(span.context, env[:request_headers])
59
+ end
60
+
61
+ def datadog_configuration
62
+ Datadog.configuration[:faraday]
63
+ end
64
+
65
+ def tracer
66
+ options[:tracer]
67
+ end
68
+
69
+ def service_name(env)
70
+ return env[:url].host if options[:split_by_domain]
71
+
72
+ options[:service_name]
73
+ end
74
+
75
+ def resource_name(env)
76
+ env[:method].to_s.upcase
77
+ end
78
+
79
+ def analytics_enabled?
80
+ Contrib::Analytics.enabled?(options[:analytics_enabled])
81
+ end
82
+
83
+ def analytics_sample_rate
84
+ options[:analytics_sample_rate]
85
+ end
86
+
87
+ def setup_service!
88
+ return if options[:service_name] == datadog_configuration[:service_name]
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,82 @@
1
+ require 'ddtrace/contrib/patcher'
2
+ require 'ddtrace/ext/app_types'
3
+ require 'ddtrace/contrib/faraday/ext'
4
+ require 'ddtrace/contrib/faraday/rack_builder'
5
+
6
+ module Datadog
7
+ module Contrib
8
+ module Faraday
9
+ # Patcher enables patching of 'faraday' module.
10
+ module Patcher
11
+ include Contrib::Patcher
12
+
13
+ module_function
14
+
15
+ def patched?
16
+ done?(:faraday)
17
+ end
18
+
19
+ def patch
20
+ do_once(:faraday) do
21
+ begin
22
+ require 'ddtrace/contrib/faraday/middleware'
23
+
24
+ add_pin!
25
+ register_middleware!
26
+ add_default_middleware!
27
+ rescue StandardError => e
28
+ Datadog::Tracer.log.error("Unable to apply Faraday integration: #{e}")
29
+ end
30
+ end
31
+ end
32
+
33
+ def add_pin!
34
+ DeprecatedPin
35
+ .new(
36
+ get_option(:service_name),
37
+ app: Ext::APP,
38
+ app_type: Datadog::Ext::AppTypes::WEB,
39
+ tracer: get_option(:tracer)
40
+ ).onto(::Faraday)
41
+ end
42
+
43
+ def register_middleware!
44
+ ::Faraday::Middleware.register_middleware(ddtrace: Middleware)
45
+ end
46
+
47
+ def add_default_middleware!
48
+ ::Faraday::RackBuilder.send(:prepend, RackBuilder)
49
+ end
50
+
51
+ def get_option(option)
52
+ Datadog.configuration[:faraday].get_option(option)
53
+ end
54
+
55
+ # Implementation of deprecated Pin, which raises warnings when accessed.
56
+ # To be removed when support for Datadog::Pin with Faraday is removed.
57
+ class DeprecatedPin < Datadog::Pin
58
+ include Datadog::DeprecatedPin
59
+
60
+ DEPRECATION_WARNING = %(
61
+ Use of Datadog::Pin with Faraday is DEPRECATED.
62
+ Upgrade to the configuration API using the migration guide here:
63
+ https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
64
+
65
+ def tracer=(tracer)
66
+ Datadog.configuration[:faraday][:tracer] = tracer
67
+ end
68
+
69
+ def service_name=(service_name)
70
+ Datadog.configuration[:faraday][:service_name] = service_name
71
+ end
72
+
73
+ def log_deprecation_warning(method_name)
74
+ do_once(method_name) do
75
+ Datadog::Tracer.log.warn("#{method_name}:#{DEPRECATION_WARNING}")
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,18 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Faraday
4
+ # Handles installation of our middleware if the user has *not*
5
+ # already explicitly configured it for this correction.
6
+ #
7
+ # RackBuilder class was introduced in faraday 0.9.0:
8
+ # https://github.com/lostisland/faraday/commit/77d7546d6d626b91086f427c56bc2cdd951353b3
9
+ module RackBuilder
10
+ def adapter(*args)
11
+ use(:ddtrace) unless @handlers.any? { |h| h.klass == Middleware }
12
+
13
+ super
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,27 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/ext/http'
3
+ require 'ddtrace/contrib/grape/ext'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Grape
8
+ module Configuration
9
+ # Custom settings for the Grape integration
10
+ class Settings < Contrib::Configuration::Settings
11
+ option :analytics_enabled do |o|
12
+ o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
13
+ o.lazy
14
+ end
15
+
16
+ option :analytics_sample_rate do |o|
17
+ o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
18
+ o.lazy
19
+ end
20
+
21
+ option :enabled, default: true
22
+ option :service_name, default: Ext::SERVICE_NAME
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,199 @@
1
+ require 'ddtrace/ext/http'
2
+ require 'ddtrace/ext/errors'
3
+ require 'ddtrace/contrib/analytics'
4
+ require 'ddtrace/contrib/rack/ext'
5
+
6
+ module Datadog
7
+ module Contrib
8
+ module Grape
9
+ # rubocop:disable Metrics/ModuleLength
10
+ # Endpoint module includes a list of subscribers to create
11
+ # traces when a Grape endpoint is hit
12
+ module Endpoint
13
+ KEY_RUN = 'datadog_grape_endpoint_run'.freeze
14
+ KEY_RENDER = 'datadog_grape_endpoint_render'.freeze
15
+
16
+ class << self
17
+ def subscribe
18
+ # subscribe when a Grape endpoint is hit
19
+ ::ActiveSupport::Notifications.subscribe('endpoint_run.grape.start_process') do |*args|
20
+ endpoint_start_process(*args)
21
+ end
22
+ ::ActiveSupport::Notifications.subscribe('endpoint_run.grape') do |*args|
23
+ endpoint_run(*args)
24
+ end
25
+ ::ActiveSupport::Notifications.subscribe('endpoint_render.grape.start_render') do |*args|
26
+ endpoint_start_render(*args)
27
+ end
28
+ ::ActiveSupport::Notifications.subscribe('endpoint_render.grape') do |*args|
29
+ endpoint_render(*args)
30
+ end
31
+ ::ActiveSupport::Notifications.subscribe('endpoint_run_filters.grape') do |*args|
32
+ endpoint_run_filters(*args)
33
+ end
34
+ end
35
+
36
+ def endpoint_start_process(*)
37
+ return if Thread.current[KEY_RUN]
38
+ return unless enabled?
39
+
40
+ # Store the beginning of a trace
41
+ tracer.trace(
42
+ Ext::SPAN_ENDPOINT_RUN,
43
+ service: service_name,
44
+ span_type: Datadog::Ext::HTTP::TYPE_INBOUND
45
+ )
46
+
47
+ Thread.current[KEY_RUN] = true
48
+ rescue StandardError => e
49
+ Datadog::Tracer.log.error(e.message)
50
+ end
51
+
52
+ def endpoint_run(name, start, finish, id, payload)
53
+ return unless Thread.current[KEY_RUN]
54
+ Thread.current[KEY_RUN] = false
55
+
56
+ return unless enabled?
57
+
58
+ span = tracer.active_span
59
+ return unless span
60
+
61
+ begin
62
+ # collect endpoint details
63
+ api = payload[:endpoint].options[:for]
64
+ # If the API inherits from Grape::API in version >= 1.2.0
65
+ # then the API will be an instance and the name must be derived from the base.
66
+ # See https://github.com/ruby-grape/grape/issues/1825
67
+ api_view = if defined?(::Grape::API::Instance) && api <= ::Grape::API::Instance
68
+ api.base.to_s
69
+ else
70
+ api.to_s
71
+ end
72
+
73
+ path = payload[:endpoint].options[:path].join('/')
74
+ resource = "#{api_view}##{path}"
75
+ span.resource = resource
76
+
77
+ # set the request span resource if it's a `rack.request` span
78
+ request_span = payload[:env][Datadog::Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]
79
+ if !request_span.nil? && request_span.name == Datadog::Contrib::Rack::Ext::SPAN_REQUEST
80
+ request_span.resource = resource
81
+ end
82
+
83
+ # Set analytics sample rate
84
+ if analytics_enabled?
85
+ Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
86
+ end
87
+
88
+ # catch thrown exceptions
89
+ span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
90
+
91
+ # override the current span with this notification values
92
+ span.set_tag(Ext::TAG_ROUTE_ENDPOINT, api_view) unless api_view.nil?
93
+ span.set_tag(Ext::TAG_ROUTE_PATH, path)
94
+ ensure
95
+ span.start_time = start
96
+ span.finish(finish)
97
+ end
98
+ rescue StandardError => e
99
+ Datadog::Tracer.log.error(e.message)
100
+ end
101
+
102
+ def endpoint_start_render(*)
103
+ return if Thread.current[KEY_RENDER]
104
+ return unless enabled?
105
+
106
+ # Store the beginning of a trace
107
+ tracer.trace(
108
+ Ext::SPAN_ENDPOINT_RENDER,
109
+ service: service_name,
110
+ span_type: Datadog::Ext::HTTP::TEMPLATE
111
+ )
112
+
113
+ Thread.current[KEY_RENDER] = true
114
+ rescue StandardError => e
115
+ Datadog::Tracer.log.error(e.message)
116
+ end
117
+
118
+ def endpoint_render(name, start, finish, id, payload)
119
+ return unless Thread.current[KEY_RENDER]
120
+ Thread.current[KEY_RENDER] = false
121
+
122
+ return unless enabled?
123
+
124
+ span = tracer.active_span
125
+ return unless span
126
+
127
+ # catch thrown exceptions
128
+ begin
129
+ span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
130
+ ensure
131
+ span.start_time = start
132
+ span.finish(finish)
133
+ end
134
+ rescue StandardError => e
135
+ Datadog::Tracer.log.error(e.message)
136
+ end
137
+
138
+ def endpoint_run_filters(name, start, finish, id, payload)
139
+ return unless enabled?
140
+
141
+ # safe-guard to prevent submitting empty filters
142
+ zero_length = (finish - start).zero?
143
+ filters = payload[:filters]
144
+ type = payload[:type]
145
+ return if (!filters || filters.empty?) || !type || zero_length
146
+
147
+ span = tracer.trace(
148
+ Ext::SPAN_ENDPOINT_RUN_FILTERS,
149
+ service: service_name,
150
+ span_type: Datadog::Ext::HTTP::TYPE_INBOUND
151
+ )
152
+
153
+ begin
154
+ # Set analytics sample rate
155
+ if analytics_enabled?
156
+ Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
157
+ end
158
+
159
+ # catch thrown exceptions
160
+ span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
161
+ span.set_tag(Ext::TAG_FILTER_TYPE, type.to_s)
162
+ ensure
163
+ span.start_time = start
164
+ span.finish(finish)
165
+ end
166
+ rescue StandardError => e
167
+ Datadog::Tracer.log.error(e.message)
168
+ end
169
+
170
+ private
171
+
172
+ def tracer
173
+ datadog_configuration[:tracer]
174
+ end
175
+
176
+ def service_name
177
+ datadog_configuration[:service_name]
178
+ end
179
+
180
+ def analytics_enabled?
181
+ Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
182
+ end
183
+
184
+ def analytics_sample_rate
185
+ datadog_configuration[:analytics_sample_rate]
186
+ end
187
+
188
+ def enabled?
189
+ datadog_configuration[:enabled] == true
190
+ end
191
+
192
+ def datadog_configuration
193
+ Datadog.configuration[:grape]
194
+ end
195
+ end
196
+ end
197
+ end
198
+ end
199
+ end