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,72 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Rack
4
+ # Provides instrumentation for `rack`
5
+ module Patcher
6
+ include Contrib::Patcher
7
+
8
+ module_function
9
+
10
+ def patched?
11
+ done?(:rack)
12
+ end
13
+
14
+ def patch
15
+ # Patch middleware
16
+ do_once(:rack) do
17
+ require_relative 'middlewares'
18
+ end
19
+
20
+ # Patch middleware names
21
+ if !done?(:rack_middleware_names) && get_option(:middleware_names)
22
+ if get_option(:application)
23
+ do_once(:rack_middleware_names) do
24
+ patch_middleware_names
25
+ end
26
+ else
27
+ Datadog::Tracer.log.warn(%(
28
+ Rack :middleware_names requires you to also pass :application.
29
+ Middleware names have NOT been patched; please provide :application.
30
+ e.g. use: :rack, middleware_names: true, application: my_rack_app).freeze)
31
+ end
32
+ end
33
+ rescue StandardError => e
34
+ Datadog::Tracer.log.error("Unable to apply Rack integration: #{e}")
35
+ end
36
+
37
+ def patch_middleware_names
38
+ retain_middleware_name(get_option(:application))
39
+ rescue => e
40
+ # We can safely ignore these exceptions since they happen only in the
41
+ # context of middleware patching outside a Rails server process (eg. a
42
+ # process that doesn't serve HTTP requests but has Rails environment
43
+ # loaded such as a Resque master process)
44
+ Tracer.log.debug("Error patching middleware stack: #{e}")
45
+ end
46
+
47
+ def retain_middleware_name(middleware)
48
+ return unless middleware && middleware.respond_to?(:call)
49
+
50
+ middleware.singleton_class.class_eval do
51
+ alias_method :__call, :call
52
+
53
+ def call(env)
54
+ env['RESPONSE_MIDDLEWARE'] = self.class.to_s
55
+ __call(env)
56
+ end
57
+ end
58
+
59
+ following = if middleware.instance_variable_defined?('@app')
60
+ middleware.instance_variable_get('@app')
61
+ end
62
+
63
+ retain_middleware_name(following)
64
+ end
65
+
66
+ def get_option(option)
67
+ Datadog.configuration[:rack].get_option(option)
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,39 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Rack
4
+ # QueueTime simply...
5
+ module QueueTime
6
+ REQUEST_START = 'HTTP_X_REQUEST_START'.freeze
7
+ QUEUE_START = 'HTTP_X_QUEUE_START'.freeze
8
+ MINIMUM_ACCEPTABLE_TIME_VALUE = 1_000_000_000
9
+
10
+ module_function
11
+
12
+ def get_request_start(env, now = Time.now.utc)
13
+ header = env[REQUEST_START] || env[QUEUE_START]
14
+ return unless header
15
+
16
+ # nginx header is seconds in the format "t=1512379167.574"
17
+ # apache header is microseconds in the format "t=1570633834463123"
18
+ # heroku header is milliseconds in the format "1570634024294"
19
+ time_string = header.to_s.delete('^0-9')
20
+ return if time_string.nil?
21
+
22
+ # Return nil if the time is clearly invalid
23
+ time_value = "#{time_string[0, 10]}.#{time_string[10, 6]}".to_f
24
+ return if time_value.zero? || time_value < MINIMUM_ACCEPTABLE_TIME_VALUE
25
+
26
+ # return the request_start only if it's lesser than
27
+ # current time, to avoid significant clock skew
28
+ request_start = Time.at(time_value)
29
+ request_start.utc > now ? nil : request_start
30
+ rescue StandardError => e
31
+ # in case of an Exception we don't create a
32
+ # `request.queuing` span
33
+ Datadog::Tracer.log.debug("[rack] unable to parse request queue headers: #{e}")
34
+ nil
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,80 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+
3
+ module Datadog
4
+ module Contrib
5
+ module Rails
6
+ module Configuration
7
+ # Custom settings for the Rails integration
8
+ class Settings < Contrib::Configuration::Settings
9
+ option :analytics_enabled do |o|
10
+ o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
11
+ o.lazy
12
+ o.on_set do |value|
13
+ # Update ActionPack analytics too
14
+ Datadog.configuration[:action_pack][:analytics_enabled] = value
15
+ end
16
+ end
17
+
18
+ option :analytics_sample_rate do |o|
19
+ o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
20
+ o.lazy
21
+ o.on_set do |value|
22
+ # Update ActionPack analytics too
23
+ Datadog.configuration[:action_pack][:analytics_sample_rate] = value
24
+ end
25
+ end
26
+
27
+ option :cache_service do |o|
28
+ o.on_set do |value|
29
+ # Update ActiveSupport service name too
30
+ Datadog.configuration[:active_support][:cache_service] = value
31
+ end
32
+ end
33
+
34
+ option :controller_service do |o|
35
+ o.on_set do |value|
36
+ # Update ActionPack service name too
37
+ Datadog.configuration[:action_pack][:controller_service] = value
38
+ end
39
+ end
40
+
41
+ option :database_service do |o|
42
+ o.depends_on :service_name
43
+ o.on_set do |value|
44
+ # Update ActiveRecord service name too
45
+ Datadog.configuration[:active_record][:service_name] = value
46
+ end
47
+ end
48
+
49
+ option :distributed_tracing, default: true
50
+ option :exception_controller do |o|
51
+ o.on_set do |value|
52
+ # Update ActionPack exception controller too
53
+ Datadog.configuration[:action_pack][:exception_controller] = value
54
+ end
55
+ end
56
+
57
+ option :middleware, default: true
58
+ option :middleware_names, default: false
59
+ option :template_base_path do |o|
60
+ o.default 'views/'
61
+ o.on_set do |value|
62
+ # Update ActionView template base path too
63
+ Datadog.configuration[:action_view][:template_base_path] = value
64
+ end
65
+ end
66
+
67
+ option :tracer do |o|
68
+ o.delegate_to { Datadog.tracer }
69
+ o.on_set do |value|
70
+ Datadog.configuration[:active_record][:tracer] = value
71
+ Datadog.configuration[:active_support][:tracer] = value
72
+ Datadog.configuration[:action_pack][:tracer] = value
73
+ Datadog.configuration[:action_view][:tracer] = value
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,12 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Rails
4
+ # Rails integration constants
5
+ module Ext
6
+ APP = 'rails'.freeze
7
+ ENV_ANALYTICS_ENABLED = 'DD_RAILS_ANALYTICS_ENABLED'.freeze
8
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_RAILS_ANALYTICS_SAMPLE_RATE'.freeze
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,100 @@
1
+ require 'ddtrace/pin'
2
+ require 'ddtrace/ext/app_types'
3
+
4
+ require 'ddtrace/contrib/active_record/integration'
5
+ require 'ddtrace/contrib/active_support/integration'
6
+ require 'ddtrace/contrib/action_pack/integration'
7
+ require 'ddtrace/contrib/action_view/integration'
8
+ require 'ddtrace/contrib/grape/endpoint'
9
+
10
+ require 'ddtrace/contrib/rails/ext'
11
+ require 'ddtrace/contrib/rails/utils'
12
+
13
+ module Datadog
14
+ module Contrib
15
+ # Instrument Rails.
16
+ module Rails
17
+ # Rails framework code, used to essentially:
18
+ # - handle configuration entries which are specific to Datadog tracing
19
+ # - instrument parts of the framework when needed
20
+ module Framework
21
+ # configure Datadog settings
22
+ def self.setup
23
+ config = config_with_defaults
24
+
25
+ activate_rack!(config)
26
+ activate_active_support!(config)
27
+ activate_action_pack!(config)
28
+ activate_action_view!(config)
29
+ activate_active_record!(config)
30
+
31
+ # By default, default service would be guessed from the script
32
+ # being executed, but here we know better, get it from Rails config.
33
+ config[:tracer].default_service = config[:service_name]
34
+ end
35
+
36
+ def self.config_with_defaults
37
+ # We set defaults here instead of in the patcher because we need to wait
38
+ # for the Rails application to be fully initialized.
39
+ Datadog.configuration[:rails].tap do |config|
40
+ config[:service_name] ||= Utils.app_name
41
+ config[:database_service] ||= "#{config[:service_name]}-#{Contrib::ActiveRecord::Utils.adapter_name}"
42
+ config[:controller_service] ||= config[:service_name]
43
+ config[:cache_service] ||= "#{config[:service_name]}-cache"
44
+ end
45
+ end
46
+
47
+ def self.activate_rack!(config)
48
+ Datadog.configuration.use(
49
+ :rack,
50
+ tracer: config[:tracer],
51
+ application: ::Rails.application,
52
+ service_name: config[:service_name],
53
+ middleware_names: config[:middleware_names],
54
+ distributed_tracing: config[:distributed_tracing]
55
+ )
56
+ end
57
+
58
+ def self.activate_active_support!(config)
59
+ return unless defined?(::ActiveSupport)
60
+
61
+ Datadog.configuration.use(
62
+ :active_support,
63
+ cache_service: config[:cache_service],
64
+ tracer: config[:tracer]
65
+ )
66
+ end
67
+
68
+ def self.activate_action_pack!(config)
69
+ return unless defined?(::ActionPack)
70
+
71
+ Datadog.configuration.use(
72
+ :action_pack,
73
+ service_name: config[:service_name],
74
+ tracer: config[:tracer]
75
+ )
76
+ end
77
+
78
+ def self.activate_action_view!(config)
79
+ return unless defined?(::ActionView)
80
+
81
+ Datadog.configuration.use(
82
+ :action_view,
83
+ service_name: config[:service_name],
84
+ tracer: config[:tracer]
85
+ )
86
+ end
87
+
88
+ def self.activate_active_record!(config)
89
+ return unless defined?(::ActiveRecord)
90
+
91
+ Datadog.configuration.use(
92
+ :active_record,
93
+ service_name: config[:database_service],
94
+ tracer: config[:tracer]
95
+ )
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,37 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/rails/configuration/settings'
3
+ require 'ddtrace/contrib/rails/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Rails
8
+ # Description of Rails integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :rails, auto_patch: false
13
+
14
+ def self.version
15
+ Gem.loaded_specs['rails'] && Gem.loaded_specs['rails'].version
16
+ end
17
+
18
+ def self.present?
19
+ defined?(::Rails)
20
+ end
21
+
22
+ def self.compatible?
23
+ return false if ENV['DISABLE_DATADOG_RAILS']
24
+ super && defined?(::Rails::VERSION) && ::Rails::VERSION::MAJOR.to_i >= 3
25
+ end
26
+
27
+ def default_configuration
28
+ Configuration::Settings.new
29
+ end
30
+
31
+ def patcher
32
+ Patcher
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,38 @@
1
+ require 'ddtrace/ext/http'
2
+ require 'ddtrace/contrib/action_pack/utils'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ # Rails module includes middlewares that are required for Rails to be properly instrumented.
7
+ module Rails
8
+ # This is only here to catch errors, the Rack module does something very similar, however,
9
+ # since it's not in the same place in the stack, when the Rack middleware is called,
10
+ # error is already swallowed and handled by Rails so we miss the call stack, for instance.
11
+ class ExceptionMiddleware
12
+ def initialize(app)
13
+ @app = app
14
+ end
15
+
16
+ def call(env)
17
+ @app.call(env)
18
+ # rubocop:disable Lint/RescueException
19
+ # Here we really want to catch *any* exception, not only StandardError,
20
+ # as we really have no clue of what is in the block,
21
+ # and it is user code which should be executed no matter what.
22
+ # It's not a problem since we re-raise it afterwards so for example a
23
+ # SignalException::Interrupt would still bubble up.
24
+ rescue Exception => e
25
+ tracer = Datadog.configuration[:rails][:tracer]
26
+ span = tracer.active_span
27
+ unless span.nil?
28
+ # Only set error if it's supposed to be flagged as such
29
+ # e.g. we don't want to flag 404s.
30
+ # You can add custom errors via `config.action_dispatch.rescue_responses`
31
+ span.set_error(e) if ActionPack::Utils.exception_is_error?(e)
32
+ end
33
+ raise e
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,78 @@
1
+ require 'ddtrace/contrib/rails/utils'
2
+ require 'ddtrace/contrib/rails/framework'
3
+ require 'ddtrace/contrib/rails/middlewares'
4
+ require 'ddtrace/contrib/rack/middlewares'
5
+
6
+ module Datadog
7
+ module Contrib
8
+ module Rails
9
+ # Patcher enables patching of 'rails' module.
10
+ module Patcher
11
+ include Contrib::Patcher
12
+
13
+ module_function
14
+
15
+ def patched?
16
+ done?(:rails)
17
+ end
18
+
19
+ def patch
20
+ do_once(:rails) do
21
+ patch_before_intialize
22
+ patch_after_intialize
23
+ end
24
+ rescue => e
25
+ Datadog::Tracer.log.error("Unable to apply Rails integration: #{e}")
26
+ end
27
+
28
+ def patch_before_intialize
29
+ ::ActiveSupport.on_load(:before_initialize) do
30
+ Datadog::Contrib::Rails::Patcher.before_intialize(self)
31
+ end
32
+ end
33
+
34
+ def before_intialize(app)
35
+ do_once(:rails_before_initialize, for: app) do
36
+ # Middleware must be added before the application is initialized.
37
+ # Otherwise the middleware stack will be frozen.
38
+ # Sometimes we don't want to activate middleware e.g. OpenTracing, etc.
39
+ add_middleware(app) if Datadog.configuration[:rails][:middleware]
40
+ end
41
+ end
42
+
43
+ def add_middleware(app)
44
+ # Add trace middleware
45
+ app.middleware.insert_before(0, Datadog::Contrib::Rack::TraceMiddleware)
46
+
47
+ # Insert right after Rails exception handling middleware, because if it's before,
48
+ # it catches and swallows the error. If it's too far after, custom middleware can find itself
49
+ # between, and raise exceptions that don't end up getting tagged on the request properly.
50
+ # e.g lost stack trace.
51
+ app.middleware.insert_after(
52
+ ActionDispatch::ShowExceptions,
53
+ Datadog::Contrib::Rails::ExceptionMiddleware
54
+ )
55
+ end
56
+
57
+ def patch_after_intialize
58
+ ::ActiveSupport.on_load(:after_initialize) do
59
+ Datadog::Contrib::Rails::Patcher.after_intialize(self)
60
+ end
61
+ end
62
+
63
+ def after_intialize(app)
64
+ do_once(:rails_after_initialize, for: app) do
65
+ # Finish configuring the tracer after the application is initialized.
66
+ # We need to wait for some things, like application name, middleware stack, etc.
67
+ setup_tracer
68
+ end
69
+ end
70
+
71
+ # Configure Rails tracing with settings
72
+ def setup_tracer
73
+ Datadog::Contrib::Rails::Framework.setup
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end