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,24 @@
1
+ require 'tsort'
2
+
3
+ module Datadog
4
+ module Configuration
5
+ # Resolver performs a topological sort over the dependency graph
6
+ class DependencyResolver
7
+ include TSort
8
+
9
+ def initialize(dependency_graph = {})
10
+ @dependency_graph = dependency_graph
11
+ end
12
+
13
+ def tsort_each_node(&blk)
14
+ @dependency_graph.each_key(&blk)
15
+ end
16
+
17
+ def tsort_each_child(node, &blk)
18
+ @dependency_graph.fetch(node).each(&blk)
19
+ end
20
+
21
+ alias call tsort
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,55 @@
1
+ module Datadog
2
+ module Configuration
3
+ # Represents an instance of an integration configuration option
4
+ class Option
5
+ attr_reader \
6
+ :definition
7
+
8
+ def initialize(definition, context)
9
+ @definition = definition
10
+ @context = context
11
+ @value = nil
12
+ @is_set = false
13
+ end
14
+
15
+ def set(value)
16
+ (@value = context_exec(value, &definition.setter)).tap do |v|
17
+ @is_set = true
18
+ context_exec(v, &definition.on_set) if definition.on_set
19
+ end
20
+ end
21
+
22
+ def get
23
+ if @is_set
24
+ @value
25
+ elsif definition.delegate_to
26
+ context_eval(&definition.delegate_to)
27
+ else
28
+ set(definition.default_value)
29
+ end
30
+ end
31
+
32
+ def reset
33
+ @value = if definition.resetter
34
+ # Don't change @is_set to false; custom resetters are
35
+ # responsible for changing @value back to a good state.
36
+ # Setting @is_set = false would cause a default to be applied.
37
+ context_exec(@value, &definition.resetter)
38
+ else
39
+ @is_set = false
40
+ nil
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def context_exec(*args, &block)
47
+ @context.instance_exec(*args, &block)
48
+ end
49
+
50
+ def context_eval(&block)
51
+ @context.instance_eval(&block)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,127 @@
1
+ require 'ddtrace/configuration/option'
2
+
3
+ module Datadog
4
+ module Configuration
5
+ # Represents a definition for an integration configuration option
6
+ class OptionDefinition
7
+ IDENTITY = ->(x) { x }
8
+
9
+ attr_reader \
10
+ :default,
11
+ :delegate_to,
12
+ :depends_on,
13
+ :lazy,
14
+ :name,
15
+ :on_set,
16
+ :resetter,
17
+ :setter
18
+
19
+ def initialize(name, meta = {}, &block)
20
+ @default = meta[:default]
21
+ @delegate_to = meta[:delegate_to]
22
+ @depends_on = meta[:depends_on] || []
23
+ @lazy = meta[:lazy] || false
24
+ @name = name.to_sym
25
+ @on_set = meta[:on_set]
26
+ @resetter = meta[:resetter]
27
+ @setter = meta[:setter] || block || IDENTITY
28
+ end
29
+
30
+ def default_value
31
+ lazy ? @default.call : @default
32
+ end
33
+
34
+ # Creates a new Option, bound to the context provided.
35
+ def build(context)
36
+ Option.new(self, context)
37
+ end
38
+
39
+ # Acts as DSL for building OptionDefinitions
40
+ class Builder
41
+ attr_reader \
42
+ :helpers
43
+
44
+ def initialize(name, options = {})
45
+ @default = nil
46
+ @delegate_to = nil
47
+ @depends_on = []
48
+ @helpers = {}
49
+ @lazy = false
50
+ @name = name.to_sym
51
+ @on_set = nil
52
+ @resetter = nil
53
+ @setter = OptionDefinition::IDENTITY
54
+
55
+ # If options were supplied, apply them.
56
+ apply_options!(options)
57
+
58
+ # Apply block if given.
59
+ yield(self) if block_given?
60
+ end
61
+
62
+ def depends_on(*values)
63
+ @depends_on = values.flatten
64
+ end
65
+
66
+ def default(value = nil, &block)
67
+ @default = block_given? ? block : value
68
+ end
69
+
70
+ def delegate_to(&block)
71
+ @delegate_to = block
72
+ end
73
+
74
+ def helper(name, *_args, &block)
75
+ @helpers[name] = block
76
+ end
77
+
78
+ # rubocop:disable Style/TrivialAccessors
79
+ # (Rubocop erroneously thinks #lazy == #lazy= )
80
+ def lazy(value = true)
81
+ @lazy = value
82
+ end
83
+
84
+ def on_set(&block)
85
+ @on_set = block
86
+ end
87
+
88
+ def resetter(&block)
89
+ @resetter = block
90
+ end
91
+
92
+ def setter(&block)
93
+ @setter = block
94
+ end
95
+
96
+ # For applying options for OptionDefinition
97
+ def apply_options!(options = {})
98
+ return if options.nil? || options.empty?
99
+
100
+ default(options[:default]) if options.key?(:default)
101
+ delegate_to(&options[:delegate_to]) if options.key?(:delegate_to)
102
+ depends_on(*options[:depends_on]) if options.key?(:depends_on)
103
+ lazy(options[:lazy]) if options.key?(:lazy)
104
+ on_set(&options[:on_set]) if options.key?(:on_set)
105
+ resetter(&options[:resetter]) if options.key?(:resetter)
106
+ setter(&options[:setter]) if options.key?(:setter)
107
+ end
108
+
109
+ def to_definition
110
+ OptionDefinition.new(@name, meta)
111
+ end
112
+
113
+ def meta
114
+ {
115
+ default: @default,
116
+ delegate_to: @delegate_to,
117
+ depends_on: @depends_on,
118
+ lazy: @lazy,
119
+ on_set: @on_set,
120
+ resetter: @resetter,
121
+ setter: @setter
122
+ }
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,18 @@
1
+ require 'ddtrace/configuration/dependency_resolver'
2
+
3
+ module Datadog
4
+ module Configuration
5
+ # Represents a set of configuration option definitions for an integration
6
+ class OptionDefinitionSet < Hash
7
+ def dependency_order
8
+ DependencyResolver.new(dependency_graph).call
9
+ end
10
+
11
+ def dependency_graph
12
+ each_with_object({}) do |(name, option), graph|
13
+ graph[name] = option.depends_on
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,6 @@
1
+ module Datadog
2
+ module Configuration
3
+ class OptionSet < Hash
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,107 @@
1
+ require 'ddtrace/configuration/option_set'
2
+ require 'ddtrace/configuration/option_definition'
3
+ require 'ddtrace/configuration/option_definition_set'
4
+
5
+ module Datadog
6
+ module Configuration
7
+ # Behavior for a configuration object that has options
8
+ module Options
9
+ def self.included(base)
10
+ base.send(:extend, ClassMethods)
11
+ base.send(:include, InstanceMethods)
12
+ end
13
+
14
+ # Class behavior for a configuration object with options
15
+ module ClassMethods
16
+ def options
17
+ @options ||= begin
18
+ # Allows for class inheritance of option definitions
19
+ superclass <= Options ? superclass.options.dup : OptionDefinitionSet.new
20
+ end
21
+ end
22
+
23
+ protected
24
+
25
+ def option(name, meta = {}, &block)
26
+ builder = OptionDefinition::Builder.new(name, meta, &block)
27
+ options[name] = builder.to_definition.tap do
28
+ # Resolve and define helper functions
29
+ helpers = default_helpers(name).merge(builder.helpers)
30
+ define_helpers(helpers)
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def default_helpers(name)
37
+ option_name = name.to_sym
38
+
39
+ {
40
+ option_name.to_sym => proc do
41
+ get_option(option_name)
42
+ end,
43
+ "#{option_name}=".to_sym => proc do |value|
44
+ set_option(option_name, value)
45
+ end
46
+ }
47
+ end
48
+
49
+ def define_helpers(helpers)
50
+ helpers.each do |name, block|
51
+ next unless block.is_a?(Proc)
52
+ define_method(name, &block)
53
+ end
54
+ end
55
+ end
56
+
57
+ # Instance behavior for a configuration object with options
58
+ module InstanceMethods
59
+ def options
60
+ @options ||= OptionSet.new
61
+ end
62
+
63
+ def set_option(name, value)
64
+ add_option(name) unless options.key?(name)
65
+ options[name].set(value)
66
+ end
67
+
68
+ def get_option(name)
69
+ add_option(name) unless options.key?(name)
70
+ options[name].get
71
+ end
72
+
73
+ def option_defined?(name)
74
+ self.class.options.key?(name)
75
+ end
76
+
77
+ def options_hash
78
+ options.each_with_object({}) do |(key, _), hash|
79
+ hash[key] = get_option(key)
80
+ end
81
+ end
82
+
83
+ def reset_options!
84
+ options.values.each(&:reset)
85
+ end
86
+
87
+ private
88
+
89
+ def add_option(name)
90
+ assert_valid_option!(name)
91
+ definition = self.class.options[name]
92
+ definition.build(self).tap do |option|
93
+ options[name] = option
94
+ end
95
+ end
96
+
97
+ def assert_valid_option!(name)
98
+ unless option_defined?(name)
99
+ raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}")
100
+ end
101
+ end
102
+ end
103
+
104
+ InvalidOptionError = Class.new(StandardError)
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,30 @@
1
+ module Datadog
2
+ module Configuration
3
+ # PinSetup translates a flat hash into a Pin configuration
4
+ # This class should be removed if we ever remove/refactor the Pin class
5
+ class PinSetup
6
+ def initialize(target, opts = {})
7
+ @pin = Pin.get_from(target)
8
+ @opts = opts
9
+ end
10
+
11
+ def call
12
+ return unless pin
13
+
14
+ ATTRS.each { |key| pin.public_send("#{key}=", opts[key]) if opts[key] }
15
+
16
+ pin.config = opts.reject { |key, _| ATTRS.include?(key) }
17
+
18
+ true
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :pin, :opts
24
+
25
+ ATTRS = [:app, :tags, :app_type, :name, :tracer, :service_name].freeze
26
+
27
+ private_constant :ATTRS
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,105 @@
1
+ require 'ddtrace/configuration/base'
2
+
3
+ require 'ddtrace/ext/analytics'
4
+ require 'ddtrace/ext/distributed'
5
+ require 'ddtrace/ext/runtime'
6
+
7
+ require 'ddtrace/tracer'
8
+ require 'ddtrace/metrics'
9
+ require 'ddtrace/diagnostics/health'
10
+
11
+ module Datadog
12
+ module Configuration
13
+ # Global configuration settings for the trace library.
14
+ class Settings
15
+ include Base
16
+
17
+ #
18
+ # Configuration options
19
+ #
20
+ option :analytics_enabled do |o|
21
+ o.default { env_to_bool(Ext::Analytics::ENV_TRACE_ANALYTICS_ENABLED, nil) }
22
+ o.lazy
23
+ end
24
+
25
+ option :report_hostname do |o|
26
+ o.default { env_to_bool(Ext::NET::ENV_REPORT_HOSTNAME, false) }
27
+ o.lazy
28
+ end
29
+
30
+ option :runtime_metrics_enabled do |o|
31
+ o.default { env_to_bool(Ext::Runtime::Metrics::ENV_ENABLED, false) }
32
+ o.lazy
33
+ end
34
+
35
+ settings :distributed_tracing do
36
+ option :propagation_extract_style do |o|
37
+ o.default do
38
+ # Look for all headers by default
39
+ env_to_list(Ext::DistributedTracing::PROPAGATION_EXTRACT_STYLE_ENV,
40
+ [Ext::DistributedTracing::PROPAGATION_STYLE_DATADOG,
41
+ Ext::DistributedTracing::PROPAGATION_STYLE_B3,
42
+ Ext::DistributedTracing::PROPAGATION_STYLE_B3_SINGLE_HEADER])
43
+ end
44
+
45
+ o.lazy
46
+ end
47
+
48
+ option :propagation_inject_style do |o|
49
+ o.default do
50
+ # Only inject Datadog headers by default
51
+ env_to_list(Ext::DistributedTracing::PROPAGATION_INJECT_STYLE_ENV,
52
+ [Ext::DistributedTracing::PROPAGATION_STYLE_DATADOG])
53
+ end
54
+
55
+ o.lazy
56
+ end
57
+ end
58
+
59
+ settings :diagnostics do
60
+ option :health_metrics do |o|
61
+ o.default do
62
+ Datadog::Diagnostics::Health::Metrics.new(
63
+ enabled: env_to_bool(Datadog::Ext::Diagnostics::Health::Metrics::ENV_ENABLED, false)
64
+ )
65
+ end
66
+
67
+ o.lazy
68
+ end
69
+ end
70
+
71
+ option :tracer do |o|
72
+ o.default Tracer.new
73
+
74
+ # On reset, shut down the old tracer,
75
+ # then instantiate a new one.
76
+ o.resetter do |tracer|
77
+ tracer.shutdown!
78
+ Tracer.new
79
+ end
80
+
81
+ # Backwards compatibility for configuring tracer e.g. `c.tracer debug: true`
82
+ o.helper :tracer do |options = nil|
83
+ tracer = options && options.key?(:instance) ? set_option(:tracer, options[:instance]) : get_option(:tracer)
84
+
85
+ tracer.tap do |t|
86
+ unless options.nil?
87
+ t.configure(options)
88
+ t.class.log = options[:log] if options[:log]
89
+ t.set_tags(options[:tags]) if options[:tags]
90
+ t.set_tags(env: options[:env]) if options[:env]
91
+ t.class.debug_logging = options.fetch(:debug, false)
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ def runtime_metrics(options = nil)
98
+ runtime_metrics = get_option(:tracer).writer.runtime_metrics
99
+ return runtime_metrics if options.nil?
100
+
101
+ runtime_metrics.configure(options)
102
+ end
103
+ end
104
+ end
105
+ end