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,73 @@
1
+ require 'ddtrace/ext/http'
2
+ require 'ddtrace/contrib/analytics'
3
+ require 'ddtrace/contrib/grpc/ext'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module GRPC
8
+ module DatadogInterceptor
9
+ # The DatadogInterceptor::Server implements the tracing strategy
10
+ # for gRPC server-side endpoints. When the datadog fields have been
11
+ # added to the gRPC call metadata, this middleware component will
12
+ # extract any client-side tracing information, attempting to associate
13
+ # its tracing context with a parent client-side context
14
+ class Server < Base
15
+ def trace(keywords)
16
+ options = {
17
+ span_type: Datadog::Ext::HTTP::TYPE_INBOUND,
18
+ service: service_name,
19
+ resource: format_resource(keywords[:method])
20
+ }
21
+ metadata = keywords[:call].metadata
22
+
23
+ set_distributed_context!(tracer, metadata)
24
+
25
+ tracer.trace(Ext::SPAN_SERVICE, options) do |span|
26
+ annotate!(span, metadata)
27
+
28
+ yield
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def set_distributed_context!(tracer, metadata)
35
+ tracer.provider.context = Datadog::GRPCPropagator
36
+ .extract(metadata)
37
+ rescue StandardError => e
38
+ Datadog::Tracer.log.debug(
39
+ "unable to propagate GRPC metadata to context: #{e}"
40
+ )
41
+ end
42
+
43
+ def annotate!(span, metadata)
44
+ metadata.each do |header, value|
45
+ next if reserved_headers.include?(header)
46
+ span.set_tag(header, value)
47
+ end
48
+
49
+ # Set analytics sample rate
50
+ Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
51
+ rescue StandardError => e
52
+ Datadog::Tracer.log.debug("GRPC client trace failed: #{e}")
53
+ end
54
+
55
+ def reserved_headers
56
+ [Datadog::Ext::DistributedTracing::GRPC_METADATA_TRACE_ID,
57
+ Datadog::Ext::DistributedTracing::GRPC_METADATA_PARENT_ID,
58
+ Datadog::Ext::DistributedTracing::GRPC_METADATA_SAMPLING_PRIORITY]
59
+ end
60
+
61
+ def format_resource(proto_method)
62
+ proto_method.owner
63
+ .to_s
64
+ .downcase
65
+ .split('::')
66
+ .<<(proto_method.name)
67
+ .join('.')
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,15 @@
1
+ module Datadog
2
+ module Contrib
3
+ module GRPC
4
+ # gRPC integration constants
5
+ module Ext
6
+ APP = 'grpc'.freeze
7
+ ENV_ANALYTICS_ENABLED = 'DD_GRPC_ANALYTICS_ENABLED'.freeze
8
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_GRPC_ANALYTICS_SAMPLE_RATE'.freeze
9
+ SERVICE_NAME = 'grpc'.freeze
10
+ SPAN_CLIENT = 'grpc.client'.freeze
11
+ SPAN_SERVICE = 'grpc.service'.freeze
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,36 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/grpc/configuration/settings'
3
+ require 'ddtrace/contrib/grpc/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module GRPC
8
+ # Description of gRPC integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ register_as :grpc, auto_patch: true
13
+
14
+ def self.version
15
+ Gem.loaded_specs['grpc'] && Gem.loaded_specs['grpc'].version
16
+ end
17
+
18
+ def self.present?
19
+ super && defined?(::GRPC)
20
+ end
21
+
22
+ def self.compatible?
23
+ super && version >= Gem::Version.new('0.10.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,49 @@
1
+ require_relative 'datadog_interceptor'
2
+
3
+ module Datadog
4
+ module Contrib
5
+ module GRPC
6
+ # :nodoc:
7
+ # The `#intercept!` method is implemented in gRPC; this module
8
+ # will be prepended to the original class, effectively injecting
9
+ # our tracing middleware into the head of the call chain.
10
+ module InterceptWithDatadog
11
+ def intercept!(type, args = {})
12
+ if should_prepend?
13
+ datadog_interceptor = choose_datadog_interceptor(args)
14
+
15
+ @interceptors.unshift(datadog_interceptor.new) if datadog_interceptor
16
+
17
+ @trace_started = true
18
+ end
19
+
20
+ super
21
+ end
22
+
23
+ private
24
+
25
+ def should_prepend?
26
+ !trace_started? && !already_prepended?
27
+ end
28
+
29
+ def trace_started?
30
+ defined?(@trace_started) && @trace_started
31
+ end
32
+
33
+ def already_prepended?
34
+ @interceptors.any? do |interceptor|
35
+ interceptor.class.ancestors.include?(Datadog::Contrib::GRPC::DatadogInterceptor::Base)
36
+ end
37
+ end
38
+
39
+ def choose_datadog_interceptor(args)
40
+ if args.key?(:metadata)
41
+ Datadog::Contrib::GRPC::DatadogInterceptor::Client
42
+ elsif args.key?(:call)
43
+ Datadog::Contrib::GRPC::DatadogInterceptor::Server
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,78 @@
1
+ require 'ddtrace/contrib/patcher'
2
+ require 'ddtrace/contrib/grpc/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module GRPC
7
+ # Patcher enables patching of 'grpc' module.
8
+ module Patcher
9
+ include Contrib::Patcher
10
+
11
+ module_function
12
+
13
+ def patched?
14
+ done?(:grpc)
15
+ end
16
+
17
+ def patch
18
+ do_once(:grpc) do
19
+ begin
20
+ require 'ddtrace/propagation/grpc_propagator'
21
+ require 'ddtrace/contrib/grpc/datadog_interceptor'
22
+ require 'ddtrace/contrib/grpc/intercept_with_datadog'
23
+
24
+ add_pin!
25
+
26
+ prepend_interceptor
27
+ rescue StandardError => e
28
+ Datadog::Tracer.log.error("Unable to apply gRPC integration: #{e}")
29
+ end
30
+ end
31
+ end
32
+
33
+ def add_pin!
34
+ DeprecatedPin.new(
35
+ get_option(:service_name),
36
+ app: Ext::APP,
37
+ app_type: Datadog::Ext::AppTypes::WEB,
38
+ tracer: get_option(:tracer)
39
+ ).onto(::GRPC)
40
+ end
41
+
42
+ def prepend_interceptor
43
+ ::GRPC::InterceptionContext
44
+ .send(:prepend, Datadog::Contrib::GRPC::InterceptWithDatadog)
45
+ end
46
+
47
+ def get_option(option)
48
+ Datadog.configuration[:grpc].get_option(option)
49
+ end
50
+
51
+ # Implementation of deprecated Pin, which raises warnings when accessed.
52
+ # To be removed when support for Datadog::Pin with GRPC is removed.
53
+ class DeprecatedPin < Datadog::Pin
54
+ include Datadog::DeprecatedPin
55
+
56
+ DEPRECATION_WARNING = %(
57
+ Use of Datadog::Pin with GRPC is DEPRECATED.
58
+ Upgrade to the configuration API using the migration guide here:
59
+ https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
60
+
61
+ def tracer=(tracer)
62
+ Datadog.configuration[:grpc][:tracer] = tracer
63
+ end
64
+
65
+ def service_name=(service_name)
66
+ Datadog.configuration[:grpc][:service_name] = service_name
67
+ end
68
+
69
+ def log_deprecation_warning(method_name)
70
+ do_once(method_name) do
71
+ Datadog::Tracer.log.warn("#{method_name}:#{DEPRECATION_WARNING}")
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,63 @@
1
+ module Datadog
2
+ module Contrib
3
+ module HTTP
4
+ # HTTP integration circuit breaker behavior
5
+ # For avoiding recursive traces.
6
+ module CircuitBreaker
7
+ def should_skip_tracing?(req, address, port, tracer)
8
+ return true if datadog_http_request?(req, address, port, tracer)
9
+
10
+ # we don't want a "shotgun" effect with two nested traces for one
11
+ # logical get, and request is likely to call itself recursively
12
+ active = tracer.active_span
13
+ return true if active && (active.name == Ext::SPAN_REQUEST)
14
+
15
+ false
16
+ end
17
+
18
+ # We don't want to trace our own call to the API (they use net/http)
19
+ # TODO: We don't want this kind of coupling with the transport.
20
+ # Remove this when transport implements its own "skip tracing" mechanism.
21
+ def datadog_http_request?(req, address, port, tracer)
22
+ transport = tracer.writer.transport
23
+
24
+ transport_hostname = nil
25
+ transport_port = nil
26
+
27
+ # Get settings from transport, if available.
28
+ case transport
29
+ when Datadog::Transport::HTTP::Client
30
+ adapter = transport.current_api.adapter
31
+ if adapter.is_a?(Datadog::Transport::HTTP::Adapters::Net)
32
+ transport_hostname = adapter.hostname.to_s
33
+ transport_port = adapter.port.to_i
34
+ end
35
+ end
36
+
37
+ # When we know the host & port (from the URI) we use it, else (most-likely
38
+ # called with a block) rely on the URL at the end.
39
+ if req.respond_to?(:uri) && req.uri
40
+ if req.uri.host.to_s == transport_hostname &&
41
+ req.uri.port.to_i == transport_port
42
+ return true
43
+ end
44
+ elsif address && port &&
45
+ address.to_s == transport_hostname &&
46
+ port.to_i == transport_port
47
+ return true
48
+ end
49
+
50
+ false
51
+ end
52
+
53
+ def should_skip_distributed_tracing?(pin)
54
+ if pin.config && pin.config.key?(:distributed_tracing)
55
+ return !pin.config[:distributed_tracing]
56
+ end
57
+
58
+ !Datadog.configuration[:http][:distributed_tracing]
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,26 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/http/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module HTTP
7
+ module Configuration
8
+ # Custom settings for the HTTP integration
9
+ class Settings < Contrib::Configuration::Settings
10
+ option :analytics_enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
12
+ o.lazy
13
+ end
14
+
15
+ option :analytics_sample_rate do |o|
16
+ o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
17
+ o.lazy
18
+ end
19
+
20
+ option :distributed_tracing, default: true
21
+ option :service_name, default: Ext::SERVICE_NAME
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,14 @@
1
+ module Datadog
2
+ module Contrib
3
+ module HTTP
4
+ # HTTP integration constants
5
+ module Ext
6
+ APP = 'net/http'.freeze
7
+ ENV_ANALYTICS_ENABLED = 'DD_HTTP_ANALYTICS_ENABLED'.freeze
8
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_HTTP_ANALYTICS_SAMPLE_RATE'.freeze
9
+ SERVICE_NAME = 'net/http'.freeze
10
+ SPAN_REQUEST = 'http.request'.freeze
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,114 @@
1
+ require 'uri'
2
+ require 'ddtrace/pin'
3
+ require 'ddtrace/ext/app_types'
4
+ require 'ddtrace/ext/http'
5
+ require 'ddtrace/ext/net'
6
+ require 'ddtrace/ext/distributed'
7
+ require 'ddtrace/contrib/analytics'
8
+
9
+ module Datadog
10
+ module Contrib
11
+ module HTTP
12
+ # Instrumentation for Net::HTTP
13
+ module Instrumentation
14
+ def self.included(base)
15
+ base.send(:prepend, InstanceMethods)
16
+ end
17
+
18
+ # Span hook invoked after request is completed.
19
+ def self.after_request(&block)
20
+ if block_given?
21
+ # Set hook
22
+ @after_request = block
23
+ else
24
+ # Get hook
25
+ @after_request ||= nil
26
+ end
27
+ end
28
+
29
+ # InstanceMethods - implementing instrumentation
30
+ module InstanceMethods
31
+ def request(req, body = nil, &block) # :yield: +response+
32
+ pin = datadog_pin
33
+ return super(req, body, &block) unless pin && pin.tracer
34
+
35
+ if Datadog::Contrib::HTTP.should_skip_tracing?(req, @address, @port, pin.tracer)
36
+ return super(req, body, &block)
37
+ end
38
+
39
+ pin.tracer.trace(Ext::SPAN_REQUEST) do |span|
40
+ begin
41
+ span.service = pin.service
42
+ span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
43
+ span.resource = req.method
44
+
45
+ if pin.tracer.enabled && !Datadog::Contrib::HTTP.should_skip_distributed_tracing?(pin)
46
+ Datadog::HTTPPropagator.inject!(span.context, req)
47
+ end
48
+ rescue StandardError => e
49
+ Datadog::Tracer.log.error("error preparing span for http request: #{e}")
50
+ ensure
51
+ response = super(req, body, &block)
52
+ end
53
+
54
+ # Add additional tags to the span.
55
+ annotate_span!(span, req, response)
56
+
57
+ # Invoke hook, if set.
58
+ unless Contrib::HTTP::Instrumentation.after_request.nil?
59
+ Contrib::HTTP::Instrumentation.after_request.call(span, self, req, response)
60
+ end
61
+
62
+ response
63
+ end
64
+ end
65
+
66
+ def annotate_span!(span, request, response)
67
+ span.set_tag(Datadog::Ext::HTTP::URL, request.path)
68
+ span.set_tag(Datadog::Ext::HTTP::METHOD, request.method)
69
+ span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.code)
70
+
71
+ if request.respond_to?(:uri) && request.uri
72
+ span.set_tag(Datadog::Ext::NET::TARGET_HOST, request.uri.host)
73
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, request.uri.port.to_s)
74
+ else
75
+ span.set_tag(Datadog::Ext::NET::TARGET_HOST, @address)
76
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, @port.to_s)
77
+ end
78
+
79
+ # Set analytics sample rate
80
+ Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
81
+
82
+ case response.code.to_i
83
+ when 400...599
84
+ span.set_error(response)
85
+ end
86
+ end
87
+
88
+ def datadog_pin
89
+ @datadog_pin ||= begin
90
+ service = Datadog.configuration[:http][:service_name]
91
+ tracer = Datadog.configuration[:http][:tracer]
92
+
93
+ Datadog::Pin.new(service, app: Ext::APP, app_type: Datadog::Ext::AppTypes::WEB, tracer: tracer)
94
+ end
95
+ end
96
+
97
+ private
98
+
99
+ def datadog_configuration
100
+ Datadog.configuration[:http]
101
+ end
102
+
103
+ def analytics_enabled?
104
+ Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
105
+ end
106
+
107
+ def analytics_sample_rate
108
+ datadog_configuration[:analytics_sample_rate]
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end