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,58 @@
1
+ module Datadog
2
+ # TODO: Remove me!
3
+ # Monkey was used for monkey-patching 3rd party libs.
4
+ # It is now DEPRECATED. This API is no-op, and serves only to warn
5
+ # of its deactivation.
6
+ module Monkey
7
+ @registry = Datadog.registry
8
+
9
+ DEPRECATION_WARNING = %(
10
+ Datadog::Monkey has been REMOVED as of version 0.11.1.
11
+ All calls to Datadog::Monkey are no-ops.
12
+ *Implementations using Monkey will no longer function*.
13
+ Upgrade to the new configuration API using the migration guide here:
14
+ https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
15
+
16
+ module_function
17
+
18
+ def registry
19
+ log_deprecation_warning('Monkey#registry')
20
+ @registry
21
+ end
22
+
23
+ def autopatch_modules
24
+ log_deprecation_warning('Monkey#autopatch_modules')
25
+ {}
26
+ end
27
+
28
+ def patch_all
29
+ log_deprecation_warning('Monkey#patch_all')
30
+ end
31
+
32
+ def patch_module(m)
33
+ log_deprecation_warning('Monkey#patch_module')
34
+ end
35
+
36
+ def patch(modules)
37
+ log_deprecation_warning('Monkey#patch')
38
+ end
39
+
40
+ def get_patched_modules
41
+ log_deprecation_warning('Monkey#get_patched_modules')
42
+ {}
43
+ end
44
+
45
+ def without_warnings(&block)
46
+ log_deprecation_warning('Monkey#without_warnings')
47
+ Datadog::Patcher.without_warnings(&block)
48
+ end
49
+
50
+ def log_deprecation_warning(method)
51
+ Datadog::Tracer.log.warn("#{method}:#{DEPRECATION_WARNING}")
52
+ end
53
+
54
+ class << self
55
+ attr_writer :registry
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,40 @@
1
+ module Datadog
2
+ # Namespace for ddtrace OpenTracing implementation
3
+ module OpenTracer
4
+ module_function
5
+
6
+ def supported?
7
+ Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.1')
8
+ end
9
+
10
+ def load_opentracer
11
+ require 'opentracing'
12
+ require 'opentracing/carrier'
13
+ require 'ddtrace'
14
+ require 'ddtrace/opentracer/carrier'
15
+ require 'ddtrace/opentracer/tracer'
16
+ require 'ddtrace/opentracer/span'
17
+ require 'ddtrace/opentracer/span_context'
18
+ require 'ddtrace/opentracer/span_context_factory'
19
+ require 'ddtrace/opentracer/scope'
20
+ require 'ddtrace/opentracer/scope_manager'
21
+ require 'ddtrace/opentracer/thread_local_scope'
22
+ require 'ddtrace/opentracer/thread_local_scope_manager'
23
+ require 'ddtrace/opentracer/distributed_headers'
24
+ require 'ddtrace/opentracer/propagator'
25
+ require 'ddtrace/opentracer/text_map_propagator'
26
+ require 'ddtrace/opentracer/binary_propagator'
27
+ require 'ddtrace/opentracer/rack_propagator'
28
+ require 'ddtrace/opentracer/global_tracer'
29
+
30
+ # Modify the OpenTracing module functions
31
+ OpenTracing.module_eval do
32
+ class << self
33
+ prepend Datadog::OpenTracer::GlobalTracer
34
+ end
35
+ end
36
+ end
37
+
38
+ load_opentracer if supported?
39
+ end
40
+ end
@@ -0,0 +1,24 @@
1
+ module Datadog
2
+ module OpenTracer
3
+ # OpenTracing propagator for Datadog::OpenTracer::Tracer
4
+ module BinaryPropagator
5
+ extend Propagator
6
+
7
+ # Inject a SpanContext into the given carrier
8
+ #
9
+ # @param span_context [SpanContext]
10
+ # @param carrier [Carrier] A carrier object of Binary type
11
+ def self.inject(span_context, carrier)
12
+ nil
13
+ end
14
+
15
+ # Extract a SpanContext in Binary format from the given carrier.
16
+ #
17
+ # @param carrier [Carrier] A carrier object of Binary type
18
+ # @return [SpanContext, nil] the extracted SpanContext or nil if none could be found
19
+ def self.extract(carrier)
20
+ SpanContext::NOOP_INSTANCE
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,6 @@
1
+ module Datadog
2
+ module OpenTracer
3
+ class Carrier < ::OpenTracing::Carrier
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,52 @@
1
+ require 'ddtrace/span'
2
+ require 'ddtrace/ext/distributed'
3
+
4
+ module Datadog
5
+ module OpenTracer
6
+ # DistributedHeaders provides easy access and validation to headers
7
+ class DistributedHeaders
8
+ include Datadog::Ext::DistributedTracing
9
+
10
+ def initialize(carrier)
11
+ @carrier = carrier
12
+ end
13
+
14
+ def valid?
15
+ # Sampling priority is optional.
16
+ !trace_id.nil? && !parent_id.nil?
17
+ end
18
+
19
+ def trace_id
20
+ id HTTP_HEADER_TRACE_ID
21
+ end
22
+
23
+ def parent_id
24
+ id HTTP_HEADER_PARENT_ID
25
+ end
26
+
27
+ def sampling_priority
28
+ hdr = @carrier[HTTP_HEADER_SAMPLING_PRIORITY]
29
+ # It's important to make a difference between no header,
30
+ # and a header defined to zero.
31
+ return unless hdr
32
+ value = hdr.to_i
33
+ return if value < 0
34
+ value
35
+ end
36
+
37
+ def origin
38
+ hdr = @carrier[HTTP_HEADER_ORIGIN]
39
+ # Only return the value if it is not an empty string
40
+ hdr if hdr != ''
41
+ end
42
+
43
+ private
44
+
45
+ def id(header)
46
+ value = @carrier[header].to_i
47
+ return if value.zero? || value >= Datadog::Span::MAX_ID
48
+ value < 0 ? value + 0x1_0000_0000_0000_0000 : value
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,15 @@
1
+ module Datadog
2
+ module OpenTracer
3
+ # Patch for OpenTracing module
4
+ module GlobalTracer
5
+ def global_tracer=(tracer)
6
+ super.tap do
7
+ if tracer.class <= Datadog::OpenTracer::Tracer
8
+ # Update the Datadog global tracer, too.
9
+ Datadog.configuration.tracer = tracer.datadog_tracer
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ module Datadog
2
+ module OpenTracer
3
+ # OpenTracing propagator for Datadog::OpenTracer::Tracer
4
+ module Propagator
5
+ # Inject a SpanContext into the given carrier
6
+ #
7
+ # @param span_context [SpanContext]
8
+ # @param carrier [Carrier] A carrier object of the type dictated by the specified `format`
9
+ def inject(span_context, carrier)
10
+ raise NotImplementedError
11
+ end
12
+
13
+ # Extract a SpanContext in the given format from the given carrier.
14
+ #
15
+ # @param carrier [Carrier] A carrier object of the type dictated by the specified `format`
16
+ # @return [SpanContext, nil] the extracted SpanContext or nil if none could be found
17
+ def extract(carrier)
18
+ raise NotImplementedError
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,60 @@
1
+ require 'ddtrace/propagation/http_propagator'
2
+
3
+ module Datadog
4
+ module OpenTracer
5
+ # OpenTracing propagator for Datadog::OpenTracer::Tracer
6
+ module RackPropagator
7
+ extend Propagator
8
+ extend Datadog::Ext::DistributedTracing
9
+ include Datadog::Ext::DistributedTracing
10
+
11
+ BAGGAGE_PREFIX = 'ot-baggage-'.freeze
12
+ BAGGAGE_PREFIX_FORMATTED = 'HTTP_OT_BAGGAGE_'.freeze
13
+
14
+ class << self
15
+ # Inject a SpanContext into the given carrier
16
+ #
17
+ # @param span_context [SpanContext]
18
+ # @param carrier [Carrier] A carrier object of Rack type
19
+ def inject(span_context, carrier)
20
+ # Inject Datadog trace properties
21
+ Datadog::HTTPPropagator.inject!(span_context.datadog_context, carrier)
22
+
23
+ # Inject baggage
24
+ span_context.baggage.each do |key, value|
25
+ carrier[BAGGAGE_PREFIX + key] = value
26
+ end
27
+
28
+ nil
29
+ end
30
+
31
+ # Extract a SpanContext in Rack format from the given carrier.
32
+ #
33
+ # @param carrier [Carrier] A carrier object of Rack type
34
+ # @return [SpanContext, nil] the extracted SpanContext or nil if none could be found
35
+ def extract(carrier)
36
+ # First extract & build a Datadog context
37
+ datadog_context = Datadog::HTTPPropagator.extract(carrier)
38
+
39
+ # Then extract any other baggage
40
+ baggage = {}
41
+ carrier.each do |key, value|
42
+ baggage[header_to_baggage(key)] = value if baggage_header?(key)
43
+ end
44
+
45
+ SpanContextFactory.build(datadog_context: datadog_context, baggage: baggage)
46
+ end
47
+
48
+ private
49
+
50
+ def baggage_header?(header)
51
+ header.to_s.start_with?(BAGGAGE_PREFIX_FORMATTED)
52
+ end
53
+
54
+ def header_to_baggage(key)
55
+ key[BAGGAGE_PREFIX_FORMATTED.length, key.length].downcase
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,15 @@
1
+ module Datadog
2
+ module OpenTracer
3
+ # OpenTracing adapter for scope
4
+ class Scope < ::OpenTracing::Scope
5
+ attr_reader \
6
+ :manager,
7
+ :span
8
+
9
+ def initialize(manager:, span:)
10
+ @manager = manager
11
+ @span = span
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ module Datadog
2
+ module OpenTracer
3
+ class ScopeManager < ::OpenTracing::ScopeManager
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,98 @@
1
+ module Datadog
2
+ module OpenTracer
3
+ # OpenTracing adapter for Datadog::Span
4
+ class Span < ::OpenTracing::Span
5
+ attr_reader \
6
+ :datadog_span
7
+
8
+ def initialize(datadog_span:, span_context:)
9
+ @datadog_span = datadog_span
10
+ @span_context = span_context
11
+ end
12
+
13
+ # Set the name of the operation
14
+ #
15
+ # @param [String] name
16
+ def operation_name=(name)
17
+ datadog_span.name = name
18
+ end
19
+
20
+ # Span Context
21
+ #
22
+ # @return [SpanContext]
23
+ def context
24
+ @span_context
25
+ end
26
+
27
+ # Set a tag value on this span
28
+ # @param key [String] the key of the tag
29
+ # @param value [String, Numeric, Boolean] the value of the tag. If it's not
30
+ # a String, Numeric, or Boolean it will be encoded with to_s
31
+ def set_tag(key, value)
32
+ # Special cases to convert opentracing tags to datadog tags
33
+ case key
34
+ when 'error'
35
+ # Opentracing supports and `error: <bool>` tag, we need to convert to span status
36
+ # DEV: Do not return, we want to still set the `error` tag as they requested
37
+ datadog_span.status = value ? Datadog::Ext::Errors::STATUS : 0
38
+ end
39
+
40
+ tap { datadog_span.set_tag(key, value) }
41
+ end
42
+
43
+ # Set a baggage item on the span
44
+ # @param key [String] the key of the baggage item
45
+ # @param value [String] the value of the baggage item
46
+ def set_baggage_item(key, value)
47
+ tap do
48
+ # SpanContext is immutable, so to make changes
49
+ # build a new span context.
50
+ @span_context = SpanContextFactory.clone(
51
+ span_context: context,
52
+ baggage: { key => value }
53
+ )
54
+ end
55
+ end
56
+
57
+ # Get a baggage item
58
+ # @param key [String] the key of the baggage item
59
+ # @return [String] value of the baggage item
60
+ def get_baggage_item(key)
61
+ context.baggage[key]
62
+ end
63
+
64
+ # @deprecated Use {#log_kv} instead.
65
+ # Reason: event is an optional standard log field defined in spec and not required. Also,
66
+ # method name {#log_kv} is more consistent with other language implementations such as Python and Go.
67
+ #
68
+ # Add a log entry to this span
69
+ # @param event [String] event name for the log
70
+ # @param timestamp [Time] time of the log
71
+ # @param fields [Hash] Additional information to log
72
+ def log(event: nil, timestamp: Time.now, **fields)
73
+ super # Log deprecation warning
74
+
75
+ # If the fields specify an error
76
+ if fields.key?(:'error.object')
77
+ datadog_span.set_error(fields[:'error.object'])
78
+ end
79
+ end
80
+
81
+ # Add a log entry to this span
82
+ # @param timestamp [Time] time of the log
83
+ # @param fields [Hash] Additional information to log
84
+ def log_kv(timestamp: Time.now, **fields)
85
+ # If the fields specify an error
86
+ if fields.key?(:'error.object')
87
+ datadog_span.set_error(fields[:'error.object'])
88
+ end
89
+ end
90
+
91
+ # Finish the {Span}
92
+ # @param end_time [Time] custom end time, if not now
93
+ def finish(end_time: Time.now)
94
+ datadog_span.finish(end_time)
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,14 @@
1
+ module Datadog
2
+ module OpenTracer
3
+ # OpenTracing adapter for SpanContext
4
+ class SpanContext < ::OpenTracing::SpanContext
5
+ attr_reader \
6
+ :datadog_context
7
+
8
+ def initialize(datadog_context:, baggage: {})
9
+ @datadog_context = datadog_context
10
+ @baggage = baggage.freeze
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ module Datadog
2
+ module OpenTracer
3
+ # Creates new Datadog::OpenTracer::SpanContext
4
+ module SpanContextFactory
5
+ module_function
6
+
7
+ def build(datadog_context:, baggage: {})
8
+ SpanContext.new(
9
+ datadog_context: datadog_context,
10
+ baggage: baggage.dup
11
+ )
12
+ end
13
+
14
+ def clone(span_context:, baggage: {})
15
+ SpanContext.new(
16
+ datadog_context: span_context.datadog_context,
17
+ # Merge baggage from previous SpanContext
18
+ baggage: span_context.baggage.merge(baggage)
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end