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,63 @@
1
+ require 'thread'
2
+
3
+ # During development, we load `ddtrace` by through `ddtrace.gemspec`,
4
+ # which in turn eager loads 'ddtrace/version'.
5
+ #
6
+ # Users load this gem by requiring this file.
7
+ # We need to ensure that any files loaded in our gemspec are also loaded here.
8
+ require 'ddtrace/version'
9
+
10
+ require 'ddtrace/pin'
11
+ require 'ddtrace/tracer'
12
+ require 'ddtrace/error'
13
+ require 'ddtrace/quantization/hash'
14
+ require 'ddtrace/quantization/http'
15
+ require 'ddtrace/pipeline'
16
+ require 'ddtrace/configuration'
17
+ require 'ddtrace/patcher'
18
+ require 'ddtrace/augmentation'
19
+ require 'ddtrace/metrics'
20
+
21
+ # \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
22
+ module Datadog
23
+ extend Augmentation
24
+ extend Configuration
25
+
26
+ # Load and extend Contrib by default
27
+ require 'ddtrace/contrib/extensions'
28
+ extend Contrib::Extensions
29
+ end
30
+
31
+ require 'ddtrace/contrib/action_pack/integration'
32
+ require 'ddtrace/contrib/action_view/integration'
33
+ require 'ddtrace/contrib/active_model_serializers/integration'
34
+ require 'ddtrace/contrib/active_record/integration'
35
+ require 'ddtrace/contrib/active_support/integration'
36
+ require 'ddtrace/contrib/aws/integration'
37
+ require 'ddtrace/contrib/concurrent_ruby/integration'
38
+ require 'ddtrace/contrib/dalli/integration'
39
+ require 'ddtrace/contrib/delayed_job/integration'
40
+ require 'ddtrace/contrib/elasticsearch/integration'
41
+ require 'ddtrace/contrib/ethon/integration'
42
+ require 'ddtrace/contrib/excon/integration'
43
+ require 'ddtrace/contrib/faraday/integration'
44
+ require 'ddtrace/contrib/grape/integration'
45
+ require 'ddtrace/contrib/graphql/integration'
46
+ require 'ddtrace/contrib/grpc/integration'
47
+ require 'ddtrace/contrib/http/integration'
48
+ require 'ddtrace/contrib/integration'
49
+ require 'ddtrace/contrib/mysql2/integration'
50
+ require 'ddtrace/contrib/mongodb/integration'
51
+ require 'ddtrace/contrib/racecar/integration'
52
+ require 'ddtrace/contrib/rack/integration'
53
+ require 'ddtrace/contrib/rails/integration'
54
+ require 'ddtrace/contrib/rake/integration'
55
+ require 'ddtrace/contrib/redis/integration'
56
+ require 'ddtrace/contrib/resque/integration'
57
+ require 'ddtrace/contrib/rest_client/integration'
58
+ require 'ddtrace/contrib/sequel/integration'
59
+ require 'ddtrace/contrib/shoryuken/integration'
60
+ require 'ddtrace/contrib/sidekiq/integration'
61
+ require 'ddtrace/contrib/sinatra/integration'
62
+ require 'ddtrace/contrib/sucker_punch/integration'
63
+ require 'ddtrace/monkey'
@@ -0,0 +1,29 @@
1
+ require 'ddtrace/ext/analytics'
2
+
3
+ module Datadog
4
+ # Defines analytics behavior
5
+ module Analytics
6
+ class << self
7
+ def set_sample_rate(span, sample_rate)
8
+ return if span.nil? || !sample_rate.is_a?(Numeric)
9
+ span.set_metric(Datadog::Ext::Analytics::TAG_SAMPLE_RATE, sample_rate)
10
+ end
11
+ end
12
+
13
+ # Extension for Datadog::Span
14
+ module Span
15
+ def set_tag(key, value)
16
+ case key
17
+ when Ext::Analytics::TAG_ENABLED
18
+ # If true, set rate to 1.0, otherwise set 0.0.
19
+ value = value == true ? Ext::Analytics::DEFAULT_SAMPLE_RATE : 0.0
20
+ Analytics.set_sample_rate(self, value)
21
+ when Ext::Analytics::TAG_SAMPLE_RATE
22
+ Analytics.set_sample_rate(self, value)
23
+ else
24
+ super if defined?(super)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ require 'ddtrace/augmentation/method_wrapper'
2
+ require 'ddtrace/augmentation/method_wrapping'
3
+ require 'ddtrace/augmentation/shim'
4
+
5
+ module Datadog
6
+ # Namespace for components that help modify
7
+ # existing code for instrumentation purposes.
8
+ module Augmentation
9
+ def shim(object, &block)
10
+ Shim.new(object, &block)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ module Datadog
2
+ # Represents an wrapped method, with a reference to the original block
3
+ # and the block that wraps around it.
4
+ class MethodWrapper
5
+ attr_reader \
6
+ :original,
7
+ :wrapper
8
+
9
+ DEFAULT_WRAPPER = proc { |original, *args, &block| original.call(*args, &block) }
10
+
11
+ def initialize(original, &block)
12
+ @original = original
13
+ @wrapper = block_given? ? block : DEFAULT_WRAPPER
14
+ end
15
+
16
+ def call(*args, &block)
17
+ wrapper.call(original, *args, &block)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,38 @@
1
+ require 'set'
2
+ require 'ddtrace/patcher'
3
+
4
+ module Datadog
5
+ # Shorthands for wrapping methods
6
+ module MethodWrapping
7
+ include Datadog::Patcher
8
+
9
+ def wrapped_methods
10
+ @wrapped_methods ||= Set.new
11
+ end
12
+
13
+ # Adds method block directly to the object.
14
+ # Block is evaluated in the context of the object.
15
+ # Faster than #wrap_method!
16
+ def override_method!(method_name, &block)
17
+ return unless block_given?
18
+
19
+ without_warnings do
20
+ define_singleton_method(method_name, &block).tap do
21
+ wrapped_methods.add(method_name)
22
+ end
23
+ end
24
+ end
25
+
26
+ # Adds method wrapper to the object.
27
+ # Block is evaluated in the original context of the block.
28
+ # Slower than #override_method!
29
+ def wrap_method!(original_method, &block)
30
+ return unless block_given?
31
+ original_method = original_method.is_a?(Symbol) ? method(original_method) : original_method
32
+
33
+ override_method!(original_method.name) do |*original_args, &original_block|
34
+ block.call(original_method, *original_args, &original_block)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,102 @@
1
+ require 'set'
2
+ require 'ddtrace/patcher'
3
+ require 'ddtrace/augmentation/method_wrapping'
4
+
5
+ module Datadog
6
+ # A "stand-in" that intercepts calls to another object. i.e. man-in-the-middle.
7
+ # This shim forwards all methods to object, except those overriden.
8
+ # Useful if you want to intercept inbound behavior to an object without modifying
9
+ # the object in question, especially useful if the overridding behavior shouldn't be global.
10
+ class Shim
11
+ extend Forwardable
12
+ include Datadog::Patcher
13
+ include Datadog::MethodWrapping
14
+
15
+ METHODS = Set[
16
+ :override_method!,
17
+ :shim,
18
+ :shim?,
19
+ :shim_target,
20
+ :wrap_method!,
21
+ :wrapped_methods
22
+ ].freeze
23
+
24
+ EXCLUDED_METHODS = Set[
25
+ # For all objects
26
+ :__binding__,
27
+ :__id__,
28
+ :__send__,
29
+ :extend,
30
+ :itself,
31
+ :object_id,
32
+ :respond_to?,
33
+ :tap
34
+ ].freeze
35
+
36
+ attr_reader :shim_target, :shim
37
+
38
+ def self.shim?(object)
39
+ # Check whether it responds to #shim? because otherwise the
40
+ # Shim forwards all method calls, including type checks to
41
+ # the wrapped object, to mimimize its intrusion.
42
+ object.respond_to?(:shim?)
43
+ end
44
+
45
+ # Pass this a block to override methods
46
+ def initialize(shim_target)
47
+ @shim = self
48
+ @shim_target = shim_target
49
+
50
+ # Save a reference to the original :define_singleton_method
51
+ # so methods can be defined on the shim after forwarding is applied.
52
+ @definition_method = method(:define_singleton_method)
53
+
54
+ # Wrap any methods
55
+ yield(self) if block_given?
56
+
57
+ # Forward methods
58
+ forwarded_methods = (
59
+ shim_target.public_methods.to_set \
60
+ - METHODS \
61
+ - EXCLUDED_METHODS \
62
+ - wrapped_methods
63
+ )
64
+ forward_methods!(*forwarded_methods)
65
+ end
66
+
67
+ def override_method!(method_name, &block)
68
+ return unless block_given?
69
+
70
+ without_warnings do
71
+ @definition_method.call(method_name, &block).tap do
72
+ wrapped_methods.add(method_name)
73
+ end
74
+ end
75
+ end
76
+
77
+ def wrap_method!(method_name, &block)
78
+ super(shim_target.method(method_name), &block)
79
+ end
80
+
81
+ def shim?
82
+ true
83
+ end
84
+
85
+ def respond_to?(method_name)
86
+ return true if METHODS.include?(method_name)
87
+ shim_target.respond_to?(method_name)
88
+ end
89
+
90
+ private
91
+
92
+ def forward_methods!(*forwarded_methods)
93
+ return if forwarded_methods.empty?
94
+
95
+ singleton_class.send(
96
+ :def_delegators,
97
+ :@shim_target,
98
+ *forwarded_methods
99
+ )
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,119 @@
1
+ require 'thread'
2
+ require 'ddtrace/diagnostics/health'
3
+ require 'ddtrace/runtime/object_space'
4
+
5
+ module Datadog
6
+ # Trace buffer that stores application traces. The buffer has a maximum size and when
7
+ # the buffer is full, a random trace is discarded. This class is thread-safe and is used
8
+ # automatically by the ``Tracer`` instance when a ``Span`` is finished.
9
+ class TraceBuffer
10
+ def initialize(max_size)
11
+ @max_size = max_size
12
+
13
+ @mutex = Mutex.new()
14
+ @traces = []
15
+ @closed = false
16
+
17
+ # Initialize metric values
18
+ @buffer_accepted = 0
19
+ @buffer_accepted_lengths = 0
20
+ @buffer_dropped = 0
21
+ @buffer_spans = 0
22
+ end
23
+
24
+ # Add a new ``trace`` in the local queue. This method doesn't block the execution
25
+ # even if the buffer is full. In that case, a random trace is discarded.
26
+ def push(trace)
27
+ @mutex.synchronize do
28
+ return if @closed
29
+ len = @traces.length
30
+ if len < @max_size || @max_size <= 0
31
+ @traces << trace
32
+ else
33
+ # we should replace a random trace with the new one
34
+ replace_index = rand(len)
35
+ replaced_trace = @traces[replace_index]
36
+ @traces[replace_index] = trace
37
+ measure_drop(replaced_trace)
38
+ end
39
+
40
+ measure_accept(trace)
41
+ end
42
+ end
43
+
44
+ # Return the current number of stored traces.
45
+ def length
46
+ @mutex.synchronize do
47
+ return @traces.length
48
+ end
49
+ end
50
+
51
+ # Return if the buffer is empty.
52
+ def empty?
53
+ @mutex.synchronize do
54
+ return @traces.empty?
55
+ end
56
+ end
57
+
58
+ # Stored traces are returned and the local buffer is reset.
59
+ def pop
60
+ @mutex.synchronize do
61
+ traces = @traces
62
+ @traces = []
63
+
64
+ measure_pop(traces)
65
+
66
+ return traces
67
+ end
68
+ end
69
+
70
+ def close
71
+ @mutex.synchronize do
72
+ @closed = true
73
+ end
74
+ end
75
+
76
+ # Aggregate metrics:
77
+ # They reflect buffer activity since last #pop.
78
+ # These may not be as accurate or as granular, but they
79
+ # don't use as much network traffic as live stats.
80
+
81
+ def measure_accept(trace)
82
+ @buffer_spans += trace.length
83
+ @buffer_accepted += 1
84
+ @buffer_accepted_lengths += trace.length
85
+ rescue StandardError => e
86
+ Datadog::Tracer.log.debug("Failed to measure queue accept. Cause: #{e.message} Source: #{e.backtrace.first}")
87
+ end
88
+
89
+ def measure_drop(trace)
90
+ @buffer_dropped += 1
91
+ @buffer_spans -= trace.length
92
+ @buffer_accepted_lengths -= trace.length
93
+ rescue StandardError => e
94
+ Datadog::Tracer.log.debug("Failed to measure queue drop. Cause: #{e.message} Source: #{e.backtrace.first}")
95
+ end
96
+
97
+ def measure_pop(traces)
98
+ # Accepted
99
+ Diagnostics::Health.metrics.queue_accepted(@buffer_accepted)
100
+ Diagnostics::Health.metrics.queue_accepted_lengths(@buffer_accepted_lengths)
101
+
102
+ # Dropped
103
+ Diagnostics::Health.metrics.queue_dropped(@buffer_dropped)
104
+
105
+ # Queue gauges
106
+ Diagnostics::Health.metrics.queue_max_length(@max_size)
107
+ Diagnostics::Health.metrics.queue_spans(@buffer_spans)
108
+ Diagnostics::Health.metrics.queue_length(traces.length)
109
+
110
+ # Reset aggregated metrics
111
+ @buffer_accepted = 0
112
+ @buffer_accepted_lengths = 0
113
+ @buffer_dropped = 0
114
+ @buffer_spans = 0
115
+ rescue StandardError => e
116
+ Datadog::Tracer.log.debug("Failed to measure queue. Cause: #{e.message} Source: #{e.backtrace.first}")
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,30 @@
1
+ require 'ddtrace/configuration/pin_setup'
2
+ require 'ddtrace/configuration/settings'
3
+
4
+ module Datadog
5
+ # Configuration provides a unique access point for configurations
6
+ module Configuration
7
+ attr_writer :configuration
8
+
9
+ def configuration
10
+ @configuration ||= Settings.new
11
+ end
12
+
13
+ def configure(target = configuration, opts = {})
14
+ if target.is_a?(Settings)
15
+ yield(target) if block_given?
16
+ else
17
+ PinSetup.new(target, opts).call
18
+ end
19
+ end
20
+
21
+ # Helper methods
22
+ def tracer
23
+ configuration.tracer
24
+ end
25
+
26
+ def runtime_metrics
27
+ tracer.writer.runtime_metrics
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,82 @@
1
+ require 'ddtrace/environment'
2
+ require 'ddtrace/configuration/options'
3
+
4
+ module Datadog
5
+ module Configuration
6
+ # Basic configuration behavior
7
+ module Base
8
+ def self.included(base)
9
+ base.send(:extend, Datadog::Environment::Helpers)
10
+ base.send(:include, Options)
11
+
12
+ base.send(:extend, ClassMethods)
13
+ base.send(:include, InstanceMethods)
14
+ end
15
+
16
+ # Class methods for configuration
17
+ module ClassMethods
18
+ protected
19
+
20
+ # Allows subgroupings of settings to be defined.
21
+ # e.g. `settings :foo { option :bar }` --> `config.foo.bar`
22
+ def settings(name, &block)
23
+ settings_class = new_settings_class(&block)
24
+
25
+ option(name) do |o|
26
+ o.default settings_class.new
27
+ o.resetter do |value|
28
+ value.reset! if value.respond_to?(:reset!)
29
+ value
30
+ end
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def new_settings_class(&block)
37
+ Class.new { include Datadog::Configuration::Base }.tap do |klass|
38
+ klass.instance_eval(&block) if block_given?
39
+ end
40
+ end
41
+ end
42
+
43
+ # Instance methods for configuration
44
+ module InstanceMethods
45
+ def initialize(options = {})
46
+ configure(options)
47
+ end
48
+
49
+ def configure(opts = {})
50
+ # Sort the options in preference of dependency order first
51
+ ordering = self.class.options.dependency_order
52
+ sorted_opts = opts.sort_by do |name, _value|
53
+ ordering.index(name) || (ordering.length + 1)
54
+ end
55
+
56
+ # Ruby 2.0 doesn't support Array#to_h
57
+ sorted_opts = Hash[*sorted_opts.flatten]
58
+
59
+ # Apply options in sort order
60
+ sorted_opts.each do |name, value|
61
+ if respond_to?("#{name}=")
62
+ send("#{name}=", value)
63
+ elsif option_defined?(name)
64
+ set_option(name, value)
65
+ end
66
+ end
67
+
68
+ # Apply any additional settings from block
69
+ yield(self) if block_given?
70
+ end
71
+
72
+ def to_h
73
+ options_hash
74
+ end
75
+
76
+ def reset!
77
+ reset_options!
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end