ddtrace 0.38.0

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 (433) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +492 -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/.circleci/images/primary/Dockerfile-2.7.0 +73 -0
  11. data/.circleci/images/primary/Dockerfile-jruby-9.2 +77 -0
  12. data/.dockerignore +1 -0
  13. data/.env +26 -0
  14. data/.github/CODEOWNERS +1 -0
  15. data/.gitignore +61 -0
  16. data/.gitlab-ci.yml +26 -0
  17. data/.rspec +1 -0
  18. data/.rubocop.yml +85 -0
  19. data/.yardopts +5 -0
  20. data/Appraisals +961 -0
  21. data/CHANGELOG.md +1402 -0
  22. data/CONTRIBUTING.md +85 -0
  23. data/Gemfile +7 -0
  24. data/LICENSE +6 -0
  25. data/LICENSE.Apache +200 -0
  26. data/LICENSE.BSD3 +24 -0
  27. data/NOTICE +4 -0
  28. data/README.md +23 -0
  29. data/Rakefile +753 -0
  30. data/benchmarks/postgres_database.yml +9 -0
  31. data/benchmarks/sidekiq_test.rb +154 -0
  32. data/ddtrace.gemspec +71 -0
  33. data/docker-compose.yml +370 -0
  34. data/docs/DevelopmentGuide.md +195 -0
  35. data/docs/GettingStarted.md +2224 -0
  36. data/lib/ddtrace.rb +76 -0
  37. data/lib/ddtrace/analytics.rb +36 -0
  38. data/lib/ddtrace/augmentation.rb +13 -0
  39. data/lib/ddtrace/augmentation/method_wrapper.rb +20 -0
  40. data/lib/ddtrace/augmentation/method_wrapping.rb +38 -0
  41. data/lib/ddtrace/augmentation/shim.rb +102 -0
  42. data/lib/ddtrace/buffer.rb +119 -0
  43. data/lib/ddtrace/chunker.rb +34 -0
  44. data/lib/ddtrace/configuration.rb +53 -0
  45. data/lib/ddtrace/configuration/base.rb +84 -0
  46. data/lib/ddtrace/configuration/components.rb +154 -0
  47. data/lib/ddtrace/configuration/dependency_resolver.rb +24 -0
  48. data/lib/ddtrace/configuration/option.rb +64 -0
  49. data/lib/ddtrace/configuration/option_definition.rb +123 -0
  50. data/lib/ddtrace/configuration/option_definition_set.rb +18 -0
  51. data/lib/ddtrace/configuration/option_set.rb +6 -0
  52. data/lib/ddtrace/configuration/options.rb +112 -0
  53. data/lib/ddtrace/configuration/pin_setup.rb +31 -0
  54. data/lib/ddtrace/configuration/settings.rb +273 -0
  55. data/lib/ddtrace/context.rb +305 -0
  56. data/lib/ddtrace/context_flush.rb +69 -0
  57. data/lib/ddtrace/context_provider.rb +50 -0
  58. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +25 -0
  59. data/lib/ddtrace/contrib/action_cable/event.rb +65 -0
  60. data/lib/ddtrace/contrib/action_cable/events.rb +33 -0
  61. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +49 -0
  62. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +55 -0
  63. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +50 -0
  64. data/lib/ddtrace/contrib/action_cable/ext.rb +23 -0
  65. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +31 -0
  66. data/lib/ddtrace/contrib/action_cable/integration.rb +38 -0
  67. data/lib/ddtrace/contrib/action_cable/patcher.rb +27 -0
  68. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +148 -0
  69. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +25 -0
  70. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +27 -0
  71. data/lib/ddtrace/contrib/action_pack/ext.rb +16 -0
  72. data/lib/ddtrace/contrib/action_pack/integration.rb +38 -0
  73. data/lib/ddtrace/contrib/action_pack/patcher.rb +23 -0
  74. data/lib/ddtrace/contrib/action_pack/utils.rb +36 -0
  75. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +26 -0
  76. data/lib/ddtrace/contrib/action_view/event.rb +39 -0
  77. data/lib/ddtrace/contrib/action_view/events.rb +30 -0
  78. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +45 -0
  79. data/lib/ddtrace/contrib/action_view/events/render_template.rb +48 -0
  80. data/lib/ddtrace/contrib/action_view/ext.rb +17 -0
  81. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +74 -0
  82. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +167 -0
  83. data/lib/ddtrace/contrib/action_view/integration.rb +45 -0
  84. data/lib/ddtrace/contrib/action_view/patcher.rb +47 -0
  85. data/lib/ddtrace/contrib/action_view/utils.rb +32 -0
  86. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +25 -0
  87. data/lib/ddtrace/contrib/active_model_serializers/event.rb +68 -0
  88. data/lib/ddtrace/contrib/active_model_serializers/events.rb +30 -0
  89. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +32 -0
  90. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +35 -0
  91. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +17 -0
  92. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +40 -0
  93. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +29 -0
  94. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +45 -0
  95. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +30 -0
  96. data/lib/ddtrace/contrib/active_record/event.rb +30 -0
  97. data/lib/ddtrace/contrib/active_record/events.rb +30 -0
  98. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +60 -0
  99. data/lib/ddtrace/contrib/active_record/events/sql.rb +64 -0
  100. data/lib/ddtrace/contrib/active_record/ext.rb +21 -0
  101. data/lib/ddtrace/contrib/active_record/integration.rb +46 -0
  102. data/lib/ddtrace/contrib/active_record/patcher.rb +23 -0
  103. data/lib/ddtrace/contrib/active_record/utils.rb +76 -0
  104. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +157 -0
  105. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +48 -0
  106. data/lib/ddtrace/contrib/active_support/cache/redis.rb +47 -0
  107. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +25 -0
  108. data/lib/ddtrace/contrib/active_support/ext.rb +21 -0
  109. data/lib/ddtrace/contrib/active_support/integration.rb +40 -0
  110. data/lib/ddtrace/contrib/active_support/notifications/event.rb +64 -0
  111. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +66 -0
  112. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +159 -0
  113. data/lib/ddtrace/contrib/active_support/patcher.rb +23 -0
  114. data/lib/ddtrace/contrib/analytics.rb +24 -0
  115. data/lib/ddtrace/contrib/aws/configuration/settings.rb +25 -0
  116. data/lib/ddtrace/contrib/aws/ext.rb +20 -0
  117. data/lib/ddtrace/contrib/aws/instrumentation.rb +56 -0
  118. data/lib/ddtrace/contrib/aws/integration.rb +42 -0
  119. data/lib/ddtrace/contrib/aws/parsed_context.rb +56 -0
  120. data/lib/ddtrace/contrib/aws/patcher.rb +49 -0
  121. data/lib/ddtrace/contrib/aws/services.rb +115 -0
  122. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +15 -0
  123. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +41 -0
  124. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +11 -0
  125. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +23 -0
  126. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +38 -0
  127. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +28 -0
  128. data/lib/ddtrace/contrib/configurable.rb +76 -0
  129. data/lib/ddtrace/contrib/configuration/resolver.rb +16 -0
  130. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +39 -0
  131. data/lib/ddtrace/contrib/configuration/settings.rb +53 -0
  132. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +25 -0
  133. data/lib/ddtrace/contrib/dalli/ext.rb +17 -0
  134. data/lib/ddtrace/contrib/dalli/instrumentation.rb +50 -0
  135. data/lib/ddtrace/contrib/dalli/integration.rb +38 -0
  136. data/lib/ddtrace/contrib/dalli/patcher.rb +63 -0
  137. data/lib/ddtrace/contrib/dalli/quantize.rb +22 -0
  138. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +25 -0
  139. data/lib/ddtrace/contrib/delayed_job/ext.rb +18 -0
  140. data/lib/ddtrace/contrib/delayed_job/integration.rb +38 -0
  141. data/lib/ddtrace/contrib/delayed_job/patcher.rb +28 -0
  142. data/lib/ddtrace/contrib/delayed_job/plugin.rb +61 -0
  143. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +26 -0
  144. data/lib/ddtrace/contrib/elasticsearch/ext.rb +19 -0
  145. data/lib/ddtrace/contrib/elasticsearch/integration.rb +39 -0
  146. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +117 -0
  147. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +80 -0
  148. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +27 -0
  149. data/lib/ddtrace/contrib/ethon/easy_patch.rb +148 -0
  150. data/lib/ddtrace/contrib/ethon/ext.rb +15 -0
  151. data/lib/ddtrace/contrib/ethon/integration.rb +43 -0
  152. data/lib/ddtrace/contrib/ethon/multi_patch.rb +80 -0
  153. data/lib/ddtrace/contrib/ethon/patcher.rb +25 -0
  154. data/lib/ddtrace/contrib/excon/configuration/settings.rb +28 -0
  155. data/lib/ddtrace/contrib/excon/ext.rb +14 -0
  156. data/lib/ddtrace/contrib/excon/integration.rb +43 -0
  157. data/lib/ddtrace/contrib/excon/middleware.rb +157 -0
  158. data/lib/ddtrace/contrib/excon/patcher.rb +27 -0
  159. data/lib/ddtrace/contrib/extensions.rb +93 -0
  160. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +33 -0
  161. data/lib/ddtrace/contrib/faraday/connection.rb +18 -0
  162. data/lib/ddtrace/contrib/faraday/ext.rb +14 -0
  163. data/lib/ddtrace/contrib/faraday/integration.rb +43 -0
  164. data/lib/ddtrace/contrib/faraday/middleware.rb +83 -0
  165. data/lib/ddtrace/contrib/faraday/patcher.rb +80 -0
  166. data/lib/ddtrace/contrib/faraday/rack_builder.rb +18 -0
  167. data/lib/ddtrace/contrib/grape/configuration/settings.rb +27 -0
  168. data/lib/ddtrace/contrib/grape/endpoint.rb +208 -0
  169. data/lib/ddtrace/contrib/grape/ext.rb +19 -0
  170. data/lib/ddtrace/contrib/grape/instrumentation.rb +33 -0
  171. data/lib/ddtrace/contrib/grape/integration.rb +39 -0
  172. data/lib/ddtrace/contrib/grape/patcher.rb +73 -0
  173. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +27 -0
  174. data/lib/ddtrace/contrib/graphql/ext.rb +13 -0
  175. data/lib/ddtrace/contrib/graphql/integration.rb +39 -0
  176. data/lib/ddtrace/contrib/graphql/patcher.rb +60 -0
  177. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +25 -0
  178. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +74 -0
  179. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +54 -0
  180. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +76 -0
  181. data/lib/ddtrace/contrib/grpc/ext.rb +15 -0
  182. data/lib/ddtrace/contrib/grpc/integration.rb +38 -0
  183. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +49 -0
  184. data/lib/ddtrace/contrib/grpc/patcher.rb +68 -0
  185. data/lib/ddtrace/contrib/http/circuit_breaker.rb +39 -0
  186. data/lib/ddtrace/contrib/http/configuration/settings.rb +27 -0
  187. data/lib/ddtrace/contrib/http/ext.rb +14 -0
  188. data/lib/ddtrace/contrib/http/instrumentation.rb +175 -0
  189. data/lib/ddtrace/contrib/http/integration.rb +45 -0
  190. data/lib/ddtrace/contrib/http/patcher.rb +26 -0
  191. data/lib/ddtrace/contrib/http_annotation_helper.rb +10 -0
  192. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +27 -0
  193. data/lib/ddtrace/contrib/httprb/ext.rb +14 -0
  194. data/lib/ddtrace/contrib/httprb/instrumentation.rb +163 -0
  195. data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
  196. data/lib/ddtrace/contrib/httprb/patcher.rb +35 -0
  197. data/lib/ddtrace/contrib/integration.rb +16 -0
  198. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +25 -0
  199. data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
  200. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
  201. data/lib/ddtrace/contrib/kafka/event.rb +51 -0
  202. data/lib/ddtrace/contrib/kafka/events.rb +44 -0
  203. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
  204. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
  205. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
  206. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
  207. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
  208. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
  209. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
  210. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
  211. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
  212. data/lib/ddtrace/contrib/kafka/ext.rb +38 -0
  213. data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
  214. data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
  215. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +28 -0
  216. data/lib/ddtrace/contrib/mongodb/ext.rb +20 -0
  217. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +67 -0
  218. data/lib/ddtrace/contrib/mongodb/integration.rb +38 -0
  219. data/lib/ddtrace/contrib/mongodb/parsers.rb +68 -0
  220. data/lib/ddtrace/contrib/mongodb/patcher.rb +31 -0
  221. data/lib/ddtrace/contrib/mongodb/subscribers.rb +108 -0
  222. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +25 -0
  223. data/lib/ddtrace/contrib/mysql2/ext.rb +15 -0
  224. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +60 -0
  225. data/lib/ddtrace/contrib/mysql2/integration.rb +38 -0
  226. data/lib/ddtrace/contrib/mysql2/patcher.rb +27 -0
  227. data/lib/ddtrace/contrib/patchable.rb +59 -0
  228. data/lib/ddtrace/contrib/patcher.rb +62 -0
  229. data/lib/ddtrace/contrib/presto/configuration/settings.rb +25 -0
  230. data/lib/ddtrace/contrib/presto/ext.rb +25 -0
  231. data/lib/ddtrace/contrib/presto/instrumentation.rb +107 -0
  232. data/lib/ddtrace/contrib/presto/integration.rb +38 -0
  233. data/lib/ddtrace/contrib/presto/patcher.rb +30 -0
  234. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +25 -0
  235. data/lib/ddtrace/contrib/racecar/event.rb +71 -0
  236. data/lib/ddtrace/contrib/racecar/events.rb +30 -0
  237. data/lib/ddtrace/contrib/racecar/events/batch.rb +27 -0
  238. data/lib/ddtrace/contrib/racecar/events/message.rb +27 -0
  239. data/lib/ddtrace/contrib/racecar/ext.rb +21 -0
  240. data/lib/ddtrace/contrib/racecar/integration.rb +39 -0
  241. data/lib/ddtrace/contrib/racecar/patcher.rb +26 -0
  242. data/lib/ddtrace/contrib/rack/configuration/settings.rb +41 -0
  243. data/lib/ddtrace/contrib/rack/ext.rb +18 -0
  244. data/lib/ddtrace/contrib/rack/integration.rb +38 -0
  245. data/lib/ddtrace/contrib/rack/middlewares.rb +290 -0
  246. data/lib/ddtrace/contrib/rack/patcher.rb +107 -0
  247. data/lib/ddtrace/contrib/rack/request_queue.rb +39 -0
  248. data/lib/ddtrace/contrib/rails/configuration/settings.rb +83 -0
  249. data/lib/ddtrace/contrib/rails/ext.rb +13 -0
  250. data/lib/ddtrace/contrib/rails/framework.rb +124 -0
  251. data/lib/ddtrace/contrib/rails/integration.rb +44 -0
  252. data/lib/ddtrace/contrib/rails/middlewares.rb +38 -0
  253. data/lib/ddtrace/contrib/rails/patcher.rb +74 -0
  254. data/lib/ddtrace/contrib/rails/railtie.rb +17 -0
  255. data/lib/ddtrace/contrib/rails/utils.rb +20 -0
  256. data/lib/ddtrace/contrib/rake/configuration/settings.rb +27 -0
  257. data/lib/ddtrace/contrib/rake/ext.rb +18 -0
  258. data/lib/ddtrace/contrib/rake/instrumentation.rb +88 -0
  259. data/lib/ddtrace/contrib/rake/integration.rb +38 -0
  260. data/lib/ddtrace/contrib/rake/patcher.rb +30 -0
  261. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +36 -0
  262. data/lib/ddtrace/contrib/redis/configuration/settings.rb +25 -0
  263. data/lib/ddtrace/contrib/redis/ext.rb +18 -0
  264. data/lib/ddtrace/contrib/redis/integration.rb +42 -0
  265. data/lib/ddtrace/contrib/redis/patcher.rb +97 -0
  266. data/lib/ddtrace/contrib/redis/quantize.rb +47 -0
  267. data/lib/ddtrace/contrib/redis/tags.rb +38 -0
  268. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +159 -0
  269. data/lib/ddtrace/contrib/registerable.rb +33 -0
  270. data/lib/ddtrace/contrib/registry.rb +42 -0
  271. data/lib/ddtrace/contrib/resque/configuration/settings.rb +26 -0
  272. data/lib/ddtrace/contrib/resque/ext.rb +14 -0
  273. data/lib/ddtrace/contrib/resque/integration.rb +47 -0
  274. data/lib/ddtrace/contrib/resque/patcher.rb +29 -0
  275. data/lib/ddtrace/contrib/resque/resque_job.rb +80 -0
  276. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +26 -0
  277. data/lib/ddtrace/contrib/rest_client/ext.rb +14 -0
  278. data/lib/ddtrace/contrib/rest_client/integration.rb +38 -0
  279. data/lib/ddtrace/contrib/rest_client/patcher.rb +23 -0
  280. data/lib/ddtrace/contrib/rest_client/request_patch.rb +89 -0
  281. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +23 -0
  282. data/lib/ddtrace/contrib/sequel/database.rb +61 -0
  283. data/lib/ddtrace/contrib/sequel/dataset.rb +62 -0
  284. data/lib/ddtrace/contrib/sequel/ext.rb +15 -0
  285. data/lib/ddtrace/contrib/sequel/integration.rb +38 -0
  286. data/lib/ddtrace/contrib/sequel/patcher.rb +33 -0
  287. data/lib/ddtrace/contrib/sequel/utils.rb +46 -0
  288. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +24 -0
  289. data/lib/ddtrace/contrib/shoryuken/ext.rb +18 -0
  290. data/lib/ddtrace/contrib/shoryuken/integration.rb +39 -0
  291. data/lib/ddtrace/contrib/shoryuken/patcher.rb +24 -0
  292. data/lib/ddtrace/contrib/shoryuken/tracer.rb +49 -0
  293. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +43 -0
  294. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +31 -0
  295. data/lib/ddtrace/contrib/sidekiq/ext.rb +24 -0
  296. data/lib/ddtrace/contrib/sidekiq/integration.rb +38 -0
  297. data/lib/ddtrace/contrib/sidekiq/patcher.rb +41 -0
  298. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +67 -0
  299. data/lib/ddtrace/contrib/sidekiq/tracing.rb +45 -0
  300. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +34 -0
  301. data/lib/ddtrace/contrib/sinatra/env.rb +58 -0
  302. data/lib/ddtrace/contrib/sinatra/ext.rb +24 -0
  303. data/lib/ddtrace/contrib/sinatra/headers.rb +31 -0
  304. data/lib/ddtrace/contrib/sinatra/integration.rb +38 -0
  305. data/lib/ddtrace/contrib/sinatra/patcher.rb +28 -0
  306. data/lib/ddtrace/contrib/sinatra/tracer.rb +150 -0
  307. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +78 -0
  308. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +25 -0
  309. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +26 -0
  310. data/lib/ddtrace/contrib/sucker_punch/ext.rb +18 -0
  311. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +84 -0
  312. data/lib/ddtrace/contrib/sucker_punch/integration.rb +38 -0
  313. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +42 -0
  314. data/lib/ddtrace/correlation.rb +38 -0
  315. data/lib/ddtrace/diagnostics/environment_logger.rb +278 -0
  316. data/lib/ddtrace/diagnostics/health.rb +33 -0
  317. data/lib/ddtrace/distributed_tracing/headers/b3.rb +44 -0
  318. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +56 -0
  319. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +42 -0
  320. data/lib/ddtrace/distributed_tracing/headers/headers.rb +70 -0
  321. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +45 -0
  322. data/lib/ddtrace/encoding.rb +69 -0
  323. data/lib/ddtrace/environment.rb +31 -0
  324. data/lib/ddtrace/error.rb +27 -0
  325. data/lib/ddtrace/event.rb +52 -0
  326. data/lib/ddtrace/ext/analytics.rb +12 -0
  327. data/lib/ddtrace/ext/app_types.rb +11 -0
  328. data/lib/ddtrace/ext/correlation.rb +11 -0
  329. data/lib/ddtrace/ext/diagnostics.rb +35 -0
  330. data/lib/ddtrace/ext/distributed.rb +33 -0
  331. data/lib/ddtrace/ext/environment.rb +16 -0
  332. data/lib/ddtrace/ext/errors.rb +10 -0
  333. data/lib/ddtrace/ext/forced_tracing.rb +25 -0
  334. data/lib/ddtrace/ext/http.rb +46 -0
  335. data/lib/ddtrace/ext/manual_tracing.rb +9 -0
  336. data/lib/ddtrace/ext/metrics.rb +15 -0
  337. data/lib/ddtrace/ext/net.rb +10 -0
  338. data/lib/ddtrace/ext/priority.rb +16 -0
  339. data/lib/ddtrace/ext/runtime.rb +26 -0
  340. data/lib/ddtrace/ext/sampling.rb +16 -0
  341. data/lib/ddtrace/ext/sql.rb +8 -0
  342. data/lib/ddtrace/ext/transport.rb +17 -0
  343. data/lib/ddtrace/forced_tracing.rb +36 -0
  344. data/lib/ddtrace/logger.rb +40 -0
  345. data/lib/ddtrace/metrics.rb +222 -0
  346. data/lib/ddtrace/monkey.rb +58 -0
  347. data/lib/ddtrace/opentelemetry/extensions.rb +13 -0
  348. data/lib/ddtrace/opentelemetry/span.rb +33 -0
  349. data/lib/ddtrace/opentracer.rb +40 -0
  350. data/lib/ddtrace/opentracer/binary_propagator.rb +24 -0
  351. data/lib/ddtrace/opentracer/carrier.rb +6 -0
  352. data/lib/ddtrace/opentracer/distributed_headers.rb +52 -0
  353. data/lib/ddtrace/opentracer/global_tracer.rb +15 -0
  354. data/lib/ddtrace/opentracer/propagator.rb +22 -0
  355. data/lib/ddtrace/opentracer/rack_propagator.rb +60 -0
  356. data/lib/ddtrace/opentracer/scope.rb +15 -0
  357. data/lib/ddtrace/opentracer/scope_manager.rb +6 -0
  358. data/lib/ddtrace/opentracer/span.rb +98 -0
  359. data/lib/ddtrace/opentracer/span_context.rb +14 -0
  360. data/lib/ddtrace/opentracer/span_context_factory.rb +23 -0
  361. data/lib/ddtrace/opentracer/text_map_propagator.rb +75 -0
  362. data/lib/ddtrace/opentracer/thread_local_scope.rb +30 -0
  363. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +40 -0
  364. data/lib/ddtrace/opentracer/tracer.rb +208 -0
  365. data/lib/ddtrace/patcher.rb +47 -0
  366. data/lib/ddtrace/pin.rb +138 -0
  367. data/lib/ddtrace/pipeline.rb +46 -0
  368. data/lib/ddtrace/pipeline/span_filter.rb +38 -0
  369. data/lib/ddtrace/pipeline/span_processor.rb +20 -0
  370. data/lib/ddtrace/propagation/grpc_propagator.rb +61 -0
  371. data/lib/ddtrace/propagation/http_propagator.rb +75 -0
  372. data/lib/ddtrace/quantization/hash.rb +103 -0
  373. data/lib/ddtrace/quantization/http.rb +86 -0
  374. data/lib/ddtrace/runtime/cgroup.rb +44 -0
  375. data/lib/ddtrace/runtime/class_count.rb +17 -0
  376. data/lib/ddtrace/runtime/container.rb +73 -0
  377. data/lib/ddtrace/runtime/gc.rb +16 -0
  378. data/lib/ddtrace/runtime/identity.rb +41 -0
  379. data/lib/ddtrace/runtime/metrics.rb +96 -0
  380. data/lib/ddtrace/runtime/object_space.rb +19 -0
  381. data/lib/ddtrace/runtime/socket.rb +14 -0
  382. data/lib/ddtrace/runtime/thread_count.rb +16 -0
  383. data/lib/ddtrace/sampler.rb +292 -0
  384. data/lib/ddtrace/sampling.rb +2 -0
  385. data/lib/ddtrace/sampling/matcher.rb +57 -0
  386. data/lib/ddtrace/sampling/rate_limiter.rb +127 -0
  387. data/lib/ddtrace/sampling/rule.rb +61 -0
  388. data/lib/ddtrace/sampling/rule_sampler.rb +125 -0
  389. data/lib/ddtrace/span.rb +307 -0
  390. data/lib/ddtrace/sync_writer.rb +67 -0
  391. data/lib/ddtrace/tracer.rb +439 -0
  392. data/lib/ddtrace/transport/http.rb +91 -0
  393. data/lib/ddtrace/transport/http/adapters/net.rb +120 -0
  394. data/lib/ddtrace/transport/http/adapters/registry.rb +24 -0
  395. data/lib/ddtrace/transport/http/adapters/test.rb +81 -0
  396. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +68 -0
  397. data/lib/ddtrace/transport/http/api.rb +46 -0
  398. data/lib/ddtrace/transport/http/api/endpoint.rb +27 -0
  399. data/lib/ddtrace/transport/http/api/fallbacks.rb +22 -0
  400. data/lib/ddtrace/transport/http/api/instance.rb +33 -0
  401. data/lib/ddtrace/transport/http/api/map.rb +14 -0
  402. data/lib/ddtrace/transport/http/api/spec.rb +15 -0
  403. data/lib/ddtrace/transport/http/builder.rb +163 -0
  404. data/lib/ddtrace/transport/http/client.rb +50 -0
  405. data/lib/ddtrace/transport/http/env.rb +48 -0
  406. data/lib/ddtrace/transport/http/response.rb +26 -0
  407. data/lib/ddtrace/transport/http/statistics.rb +30 -0
  408. data/lib/ddtrace/transport/http/traces.rb +143 -0
  409. data/lib/ddtrace/transport/io.rb +26 -0
  410. data/lib/ddtrace/transport/io/client.rb +76 -0
  411. data/lib/ddtrace/transport/io/response.rb +25 -0
  412. data/lib/ddtrace/transport/io/traces.rb +91 -0
  413. data/lib/ddtrace/transport/parcel.rb +13 -0
  414. data/lib/ddtrace/transport/request.rb +13 -0
  415. data/lib/ddtrace/transport/response.rb +60 -0
  416. data/lib/ddtrace/transport/statistics.rb +72 -0
  417. data/lib/ddtrace/transport/traces.rb +183 -0
  418. data/lib/ddtrace/utils.rb +65 -0
  419. data/lib/ddtrace/utils/database.rb +25 -0
  420. data/lib/ddtrace/utils/time.rb +14 -0
  421. data/lib/ddtrace/vendor/active_record/connection_specification.rb +301 -0
  422. data/lib/ddtrace/version.rb +12 -0
  423. data/lib/ddtrace/worker.rb +20 -0
  424. data/lib/ddtrace/workers.rb +117 -0
  425. data/lib/ddtrace/workers/async.rb +165 -0
  426. data/lib/ddtrace/workers/loop.rb +105 -0
  427. data/lib/ddtrace/workers/polling.rb +48 -0
  428. data/lib/ddtrace/workers/queue.rb +39 -0
  429. data/lib/ddtrace/workers/runtime_metrics.rb +47 -0
  430. data/lib/ddtrace/workers/trace_writer.rb +202 -0
  431. data/lib/ddtrace/writer.rb +175 -0
  432. data/tasks/release_gem.rake +28 -0
  433. metadata +815 -0
@@ -0,0 +1,53 @@
1
+ require 'forwardable'
2
+
3
+ require 'ddtrace/configuration/pin_setup'
4
+ require 'ddtrace/configuration/settings'
5
+ require 'ddtrace/configuration/components'
6
+
7
+ module Datadog
8
+ # Configuration provides a unique access point for configurations
9
+ module Configuration
10
+ extend Forwardable
11
+
12
+ attr_writer :configuration
13
+
14
+ def configuration
15
+ @configuration ||= Settings.new
16
+ end
17
+
18
+ def configure(target = configuration, opts = {})
19
+ if target.is_a?(Settings)
20
+ yield(target) if block_given?
21
+
22
+ # Build immutable components from settings
23
+ @components ||= nil
24
+ @components = if @components
25
+ Components.replace!(@components, target)
26
+ else
27
+ Components.new(target)
28
+ end
29
+
30
+ target
31
+ else
32
+ PinSetup.new(target, opts).call
33
+ end
34
+ end
35
+
36
+ def_delegators \
37
+ :components,
38
+ :health_metrics,
39
+ :logger,
40
+ :runtime_metrics,
41
+ :tracer
42
+
43
+ def shutdown!
44
+ components.teardown! if @components
45
+ end
46
+
47
+ protected
48
+
49
+ def components
50
+ @components ||= Components.new(configuration)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,84 @@
1
+ require 'ddtrace/environment'
2
+ require 'ddtrace/configuration/options'
3
+
4
+ module Datadog
5
+ module Configuration
6
+ # Basic configuration behavior
7
+ module Base
8
+ def self.included(base)
9
+ base.send(:extend, Datadog::Environment::Helpers)
10
+ base.send(:include, Datadog::Environment::Helpers)
11
+ base.send(:include, Options)
12
+
13
+ base.send(:extend, ClassMethods)
14
+ base.send(:include, InstanceMethods)
15
+ end
16
+
17
+ # Class methods for configuration
18
+ module ClassMethods
19
+ protected
20
+
21
+ # Allows subgroupings of settings to be defined.
22
+ # e.g. `settings :foo { option :bar }` --> `config.foo.bar`
23
+ def settings(name, &block)
24
+ settings_class = new_settings_class(&block)
25
+
26
+ option(name) do |o|
27
+ o.default { settings_class.new }
28
+ o.lazy
29
+ o.resetter do |value|
30
+ value.reset! if value.respond_to?(:reset!)
31
+ value
32
+ end
33
+ end
34
+ end
35
+
36
+ private
37
+
38
+ def new_settings_class(&block)
39
+ Class.new { include Datadog::Configuration::Base }.tap do |klass|
40
+ klass.instance_eval(&block) if block_given?
41
+ end
42
+ end
43
+ end
44
+
45
+ # Instance methods for configuration
46
+ module InstanceMethods
47
+ def initialize(options = {})
48
+ configure(options) unless options.empty?
49
+ end
50
+
51
+ def configure(opts = {})
52
+ # Sort the options in preference of dependency order first
53
+ ordering = self.class.options.dependency_order
54
+ sorted_opts = opts.sort_by do |name, _value|
55
+ ordering.index(name) || (ordering.length + 1)
56
+ end
57
+
58
+ # Ruby 2.0 doesn't support Array#to_h
59
+ sorted_opts = Hash[*sorted_opts.flatten]
60
+
61
+ # Apply options in sort order
62
+ sorted_opts.each do |name, value|
63
+ if respond_to?("#{name}=")
64
+ send("#{name}=", value)
65
+ elsif option_defined?(name)
66
+ set_option(name, value)
67
+ end
68
+ end
69
+
70
+ # Apply any additional settings from block
71
+ yield(self) if block_given?
72
+ end
73
+
74
+ def to_h
75
+ options_hash
76
+ end
77
+
78
+ def reset!
79
+ reset_options!
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,154 @@
1
+ require 'ddtrace/diagnostics/health'
2
+ require 'ddtrace/logger'
3
+ require 'ddtrace/runtime/metrics'
4
+ require 'ddtrace/tracer'
5
+ require 'ddtrace/workers/runtime_metrics'
6
+
7
+ module Datadog
8
+ module Configuration
9
+ # Global components for the trace library.
10
+ # rubocop:disable Metrics/LineLength
11
+ class Components
12
+ class << self
13
+ def replace!(old, settings)
14
+ replacement = new(settings)
15
+ old.teardown!(replacement)
16
+ replacement
17
+ end
18
+
19
+ def build_health_metrics(settings)
20
+ settings = settings.diagnostics.health_metrics
21
+ options = { enabled: settings.enabled }
22
+ options[:statsd] = settings.statsd unless settings.statsd.nil?
23
+
24
+ Datadog::Diagnostics::Health::Metrics.new(options)
25
+ end
26
+
27
+ def build_logger(settings)
28
+ logger = settings.logger.instance || Datadog::Logger.new(STDOUT)
29
+ logger.level = settings.diagnostics.debug ? ::Logger::DEBUG : settings.logger.level
30
+
31
+ logger
32
+ end
33
+
34
+ def build_runtime_metrics(settings)
35
+ options = { enabled: settings.runtime_metrics.enabled }
36
+ options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
37
+ options[:services] = [settings.service] unless settings.service.nil?
38
+
39
+ Datadog::Runtime::Metrics.new(options)
40
+ end
41
+
42
+ def build_runtime_metrics_worker(settings)
43
+ # NOTE: Should we just ignore building the worker if its not enabled?
44
+ options = settings.runtime_metrics.opts.merge(
45
+ enabled: settings.runtime_metrics.enabled,
46
+ metrics: build_runtime_metrics(settings)
47
+ )
48
+
49
+ Datadog::Workers::RuntimeMetrics.new(options)
50
+ end
51
+
52
+ def build_tracer(settings)
53
+ # If a custom tracer has been provided, use it instead.
54
+ # Ignore all other options (they should already be configured.)
55
+ tracer = settings.tracer.instance
56
+ return tracer unless tracer.nil?
57
+
58
+ tracer = Tracer.new(
59
+ default_service: settings.service,
60
+ enabled: settings.tracer.enabled,
61
+ partial_flush: settings.tracer.partial_flush.enabled,
62
+ tags: build_tracer_tags(settings)
63
+ )
64
+
65
+ # TODO: We reconfigure the tracer here because it has way too many
66
+ # options it allows to mutate, and it's overwhelming to rewrite
67
+ # tracer initialization for now. Just reconfigure using the
68
+ # existing mutable #configure function. Remove when these components
69
+ # are extracted.
70
+ tracer.configure(build_tracer_options(settings))
71
+
72
+ tracer
73
+ end
74
+
75
+ private
76
+
77
+ def build_tracer_tags(settings)
78
+ settings.tags.dup.tap do |tags|
79
+ tags['env'] = settings.env unless settings.env.nil?
80
+ tags['version'] = settings.version unless settings.version.nil?
81
+ end
82
+ end
83
+
84
+ def build_tracer_options(settings)
85
+ settings = settings.tracer
86
+
87
+ {}.tap do |opts|
88
+ opts[:hostname] = settings.hostname unless settings.hostname.nil?
89
+ opts[:min_spans_before_partial_flush] = settings.partial_flush.min_spans_threshold unless settings.partial_flush.min_spans_threshold.nil?
90
+ opts[:partial_flush] = settings.partial_flush.enabled unless settings.partial_flush.enabled.nil?
91
+ opts[:port] = settings.port unless settings.port.nil?
92
+ opts[:priority_sampling] = settings.priority_sampling unless settings.priority_sampling.nil?
93
+ opts[:sampler] = settings.sampler unless settings.sampler.nil?
94
+ opts[:transport_options] = settings.transport_options
95
+ opts[:writer] = settings.writer unless settings.writer.nil?
96
+ opts[:writer_options] = settings.writer_options if settings.writer.nil?
97
+ end
98
+ end
99
+ end
100
+
101
+ attr_reader \
102
+ :health_metrics,
103
+ :logger,
104
+ :runtime_metrics,
105
+ :tracer
106
+
107
+ def initialize(settings)
108
+ # Logger
109
+ @logger = self.class.build_logger(settings)
110
+
111
+ # Tracer
112
+ @tracer = self.class.build_tracer(settings)
113
+
114
+ # Runtime metrics
115
+ @runtime_metrics = self.class.build_runtime_metrics_worker(settings)
116
+
117
+ # Health metrics
118
+ @health_metrics = self.class.build_health_metrics(settings)
119
+ end
120
+
121
+ # Shuts down all the components in use.
122
+ # If it has another instance to compare to, it will compare
123
+ # and avoid tearing down parts still in use.
124
+ def teardown!(replacement = nil)
125
+ # Shutdown the old tracer, unless it's still being used.
126
+ # (e.g. a custom tracer instance passed in.)
127
+ tracer.shutdown! unless replacement && tracer == replacement.tracer
128
+
129
+ # Shutdown workers
130
+ runtime_metrics.enabled = false
131
+ runtime_metrics.stop(true)
132
+
133
+ # Shutdown the old metrics, unless they are still being used.
134
+ # (e.g. custom Statsd instances.)
135
+ old_statsd = [
136
+ runtime_metrics.metrics.statsd,
137
+ health_metrics.statsd
138
+ ].compact.uniq
139
+
140
+ new_statsd = if replacement
141
+ [
142
+ replacement.runtime_metrics.metrics.statsd,
143
+ replacement.health_metrics.statsd
144
+ ].compact.uniq
145
+ else
146
+ []
147
+ end
148
+
149
+ unused_statsd = (old_statsd - (old_statsd & new_statsd))
150
+ unused_statsd.each(&:close)
151
+ end
152
+ end
153
+ end
154
+ end
@@ -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,64 @@
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
+ old_value = @value
17
+ (@value = context_exec(value, old_value, &definition.setter)).tap do |v|
18
+ @is_set = true
19
+ context_exec(v, old_value, &definition.on_set) if definition.on_set
20
+ end
21
+ end
22
+
23
+ def get
24
+ if @is_set
25
+ @value
26
+ elsif definition.delegate_to
27
+ context_eval(&definition.delegate_to)
28
+ else
29
+ set(default_value)
30
+ end
31
+ end
32
+
33
+ def reset
34
+ @value = if definition.resetter
35
+ # Don't change @is_set to false; custom resetters are
36
+ # responsible for changing @value back to a good state.
37
+ # Setting @is_set = false would cause a default to be applied.
38
+ context_exec(@value, &definition.resetter)
39
+ else
40
+ @is_set = false
41
+ nil
42
+ end
43
+ end
44
+
45
+ def default_value
46
+ if definition.lazy
47
+ context_eval(&definition.default)
48
+ else
49
+ definition.default
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ def context_exec(*args, &block)
56
+ @context.instance_exec(*args, &block)
57
+ end
58
+
59
+ def context_eval(&block)
60
+ @context.instance_eval(&block)
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,123 @@
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 = ->(new_value, _old_value) { new_value }
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
+ # Creates a new Option, bound to the context provided.
31
+ def build(context)
32
+ Option.new(self, context)
33
+ end
34
+
35
+ # Acts as DSL for building OptionDefinitions
36
+ class Builder
37
+ attr_reader \
38
+ :helpers
39
+
40
+ def initialize(name, options = {})
41
+ @default = nil
42
+ @delegate_to = nil
43
+ @depends_on = []
44
+ @helpers = {}
45
+ @lazy = false
46
+ @name = name.to_sym
47
+ @on_set = nil
48
+ @resetter = nil
49
+ @setter = OptionDefinition::IDENTITY
50
+
51
+ # If options were supplied, apply them.
52
+ apply_options!(options)
53
+
54
+ # Apply block if given.
55
+ yield(self) if block_given?
56
+ end
57
+
58
+ def depends_on(*values)
59
+ @depends_on = values.flatten
60
+ end
61
+
62
+ def default(value = nil, &block)
63
+ @default = block_given? ? block : value
64
+ end
65
+
66
+ def delegate_to(&block)
67
+ @delegate_to = block
68
+ end
69
+
70
+ def helper(name, *_args, &block)
71
+ @helpers[name] = block
72
+ end
73
+
74
+ # rubocop:disable Style/TrivialAccessors
75
+ # (Rubocop erroneously thinks #lazy == #lazy= )
76
+ def lazy(value = true)
77
+ @lazy = value
78
+ end
79
+
80
+ def on_set(&block)
81
+ @on_set = block
82
+ end
83
+
84
+ def resetter(&block)
85
+ @resetter = block
86
+ end
87
+
88
+ def setter(&block)
89
+ @setter = block
90
+ end
91
+
92
+ # For applying options for OptionDefinition
93
+ def apply_options!(options = {})
94
+ return if options.nil? || options.empty?
95
+
96
+ default(options[:default]) if options.key?(:default)
97
+ delegate_to(&options[:delegate_to]) if options.key?(:delegate_to)
98
+ depends_on(*options[:depends_on]) if options.key?(:depends_on)
99
+ lazy(options[:lazy]) if options.key?(:lazy)
100
+ on_set(&options[:on_set]) if options.key?(:on_set)
101
+ resetter(&options[:resetter]) if options.key?(:resetter)
102
+ setter(&options[:setter]) if options.key?(:setter)
103
+ end
104
+
105
+ def to_definition
106
+ OptionDefinition.new(@name, meta)
107
+ end
108
+
109
+ def meta
110
+ {
111
+ default: @default,
112
+ delegate_to: @delegate_to,
113
+ depends_on: @depends_on,
114
+ lazy: @lazy,
115
+ on_set: @on_set,
116
+ resetter: @resetter,
117
+ setter: @setter
118
+ }
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end