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,10 @@
1
+ module Datadog
2
+ module Ext
3
+ module Errors
4
+ STATUS = 1
5
+ MSG = 'error.msg'.freeze
6
+ TYPE = 'error.type'.freeze
7
+ STACK = 'error.stack'.freeze
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,25 @@
1
+ require 'ddtrace/ext/manual_tracing'
2
+ require 'ddtrace/tracer'
3
+
4
+ module Datadog
5
+ module Ext
6
+ # Defines constants for forced tracing
7
+ module ForcedTracing
8
+ @deprecation_warning_shown = false
9
+
10
+ def self.const_missing(name)
11
+ super unless Ext::ManualTracing.const_defined?(name)
12
+
13
+ # Only log each deprecation warning once (safeguard against log spam)
14
+ unless @deprecation_warning_shown
15
+ Datadog::Tracer.log.warn(
16
+ 'forced tracing: Datadog::Ext::ForcedTracing has been renamed to Datadog::Ext::ManualTracing'
17
+ )
18
+ @deprecation_warning_shown = true
19
+ end
20
+
21
+ Ext::ManualTracing.const_get(name)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,46 @@
1
+ module Datadog
2
+ module Ext
3
+ module HTTP
4
+ BASE_URL = 'http.base_url'.freeze
5
+ ERROR_RANGE = 500...600
6
+ METHOD = 'http.method'.freeze
7
+ STATUS_CODE = 'http.status_code'.freeze
8
+ TEMPLATE = 'template'.freeze
9
+ TYPE_INBOUND = 'web'.freeze
10
+ TYPE_OUTBOUND = 'http'.freeze
11
+ TYPE_PROXY = 'proxy'.freeze
12
+ URL = 'http.url'.freeze
13
+
14
+ # General header functionality
15
+ module Headers
16
+ module_function
17
+
18
+ def to_tag(name)
19
+ name.to_s.downcase.gsub(/[-\s]/, '_')
20
+ end
21
+ end
22
+
23
+ # Request headers
24
+ module RequestHeaders
25
+ PREFIX = 'http.request.headers'.freeze
26
+
27
+ module_function
28
+
29
+ def to_tag(name)
30
+ "#{PREFIX}.#{Headers.to_tag(name)}"
31
+ end
32
+ end
33
+
34
+ # Response headers
35
+ module ResponseHeaders
36
+ PREFIX = 'http.response.headers'.freeze
37
+
38
+ module_function
39
+
40
+ def to_tag(name)
41
+ "#{PREFIX}.#{Headers.to_tag(name)}"
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,9 @@
1
+ module Datadog
2
+ module Ext
3
+ # Defines constants for manual tracing
4
+ module ManualTracing
5
+ TAG_KEEP = 'manual.keep'.freeze
6
+ TAG_DROP = 'manual.drop'.freeze
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ module Datadog
2
+ module Ext
3
+ module Metrics
4
+ DEFAULT_HOST = '127.0.0.1'.freeze
5
+ DEFAULT_PORT = 8125
6
+ ENV_DEFAULT_HOST = 'DD_AGENT_HOST'.freeze
7
+ ENV_DEFAULT_PORT = 'DD_METRIC_AGENT_PORT'.freeze
8
+
9
+ TAG_LANG = 'language'.freeze
10
+ TAG_LANG_INTERPRETER = 'language-interpreter'.freeze
11
+ TAG_LANG_VERSION = 'language-version'.freeze
12
+ TAG_TRACER_VERSION = 'tracer-version'.freeze
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ module Datadog
2
+ module Ext
3
+ module NET
4
+ ENV_REPORT_HOSTNAME = 'DD_TRACE_REPORT_HOSTNAME'.freeze
5
+ TAG_HOSTNAME = '_dd.hostname'.freeze
6
+ TARGET_HOST = 'out.host'.freeze
7
+ TARGET_PORT = 'out.port'.freeze
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,16 @@
1
+ module Datadog
2
+ module Ext
3
+ # Priority is a hint given to the backend so that it knows which traces to reject or kept.
4
+ # In a distributed context, it should be set before any context propagation (fork, RPC calls) to be effective.
5
+ module Priority
6
+ # Use this to explicitely inform the backend that a trace should be rejected and not stored.
7
+ USER_REJECT = -1
8
+ # Used by the builtin sampler to inform the backend that a trace should be rejected and not stored.
9
+ AUTO_REJECT = 0
10
+ # Used by the builtin sampler to inform the backend that a trace should be kept and stored.
11
+ AUTO_KEEP = 1
12
+ # Use this to explicitely inform the backend that a trace should be kept and stored.
13
+ USER_KEEP = 2
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,26 @@
1
+ require 'ddtrace/version'
2
+
3
+ module Datadog
4
+ module Ext
5
+ module Runtime
6
+ # Identity
7
+ LANG = 'ruby'.freeze
8
+ LANG_INTERPRETER = (RUBY_ENGINE + '-' + RUBY_PLATFORM).freeze
9
+ LANG_VERSION = RUBY_VERSION
10
+ TRACER_VERSION = Datadog::VERSION::STRING
11
+
12
+ TAG_LANG = 'language'.freeze
13
+
14
+ # Metrics
15
+ module Metrics
16
+ ENV_ENABLED = 'DD_RUNTIME_METRICS_ENABLED'.freeze
17
+
18
+ METRIC_CLASS_COUNT = 'runtime.ruby.class_count'.freeze
19
+ METRIC_GC_PREFIX = 'runtime.ruby.gc'.freeze
20
+ METRIC_THREAD_COUNT = 'runtime.ruby.thread_count'.freeze
21
+
22
+ TAG_SERVICE = 'service'.freeze
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,8 @@
1
+ module Datadog
2
+ module Ext
3
+ module SQL
4
+ TYPE = 'sql'.freeze
5
+ QUERY = 'sql.query'.freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,17 @@
1
+ module Datadog
2
+ module Ext
3
+ module Transport
4
+ module HTTP
5
+ DEFAULT_HOST = '127.0.0.1'.freeze
6
+ DEFAULT_PORT = 8126
7
+ ENV_DEFAULT_HOST = 'DD_AGENT_HOST'.freeze
8
+ ENV_DEFAULT_PORT = 'DD_TRACE_AGENT_PORT'.freeze
9
+ HEADER_CONTAINER_ID = 'Datadog-Container-ID'.freeze
10
+ HEADER_META_LANG = 'Datadog-Meta-Lang'.freeze
11
+ HEADER_META_LANG_VERSION = 'Datadog-Meta-Lang-Version'.freeze
12
+ HEADER_META_LANG_INTERPRETER = 'Datadog-Meta-Lang-Interpreter'.freeze
13
+ HEADER_META_TRACER_VERSION = 'Datadog-Meta-Tracer-Version'.freeze
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ require 'ddtrace/ext/manual_tracing'
2
+ require 'ddtrace/ext/priority'
3
+
4
+ module Datadog
5
+ # Defines analytics behavior
6
+ module ForcedTracing
7
+ class << self
8
+ def keep(span)
9
+ return if span.nil? || span.context.nil?
10
+ span.context.sampling_priority = Datadog::Ext::Priority::USER_KEEP
11
+ end
12
+
13
+ def drop(span)
14
+ return if span.nil? || span.context.nil?
15
+ span.context.sampling_priority = Datadog::Ext::Priority::USER_REJECT
16
+ end
17
+ end
18
+
19
+ # Extension for Datadog::Span
20
+ module Span
21
+ def set_tag(key, value)
22
+ # Configure sampling priority if they give us a forced tracing tag
23
+ # DEV: Do not set if the value they give us is explicitly "false"
24
+ case key
25
+ when Ext::ManualTracing::TAG_KEEP
26
+ ForcedTracing.keep(self) unless value == false
27
+ when Ext::ManualTracing::TAG_DROP
28
+ ForcedTracing.drop(self) unless value == false
29
+ else
30
+ # Otherwise, set the tag normally.
31
+ super if defined?(super)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,39 @@
1
+ require 'logger'
2
+
3
+ module Datadog
4
+ LOG_PREFIX = 'ddtrace'.freeze
5
+
6
+ # A custom logger with minor enhancements:
7
+ # - progname defaults to ddtrace to clearly identify Datadog dd-trace-rb related messages
8
+ # - adds last caller stack-trace info to know where the message comes from
9
+ class Logger < ::Logger
10
+ def initialize(*args, &block)
11
+ super
12
+ self.progname = LOG_PREFIX
13
+ end
14
+
15
+ def add(severity, message = nil, progname = nil, &block)
16
+ where = ''
17
+
18
+ # We are in debug mode, or this is an error, add stack trace to help debugging
19
+ if debug? || severity >= ::Logger::ERROR
20
+ c = caller
21
+ where = "(#{c[1]}) " if c.length > 1
22
+ end
23
+
24
+ if message.nil?
25
+ if block_given?
26
+ super(severity, message, progname) do
27
+ "[#{self.progname}] #{where}#{yield}"
28
+ end
29
+ else
30
+ super(severity, message, "[#{self.progname}] #{where}#{progname}")
31
+ end
32
+ else
33
+ super(severity, "[#{self.progname}] #{where}#{message}")
34
+ end
35
+ end
36
+
37
+ alias log add
38
+ end
39
+ end
@@ -0,0 +1,215 @@
1
+ require 'ddtrace/ext/metrics'
2
+
3
+ require 'set'
4
+ require 'logger'
5
+ require 'ddtrace/utils/time'
6
+ require 'ddtrace/runtime/identity'
7
+
8
+ module Datadog
9
+ # Acts as client for sending metrics (via Statsd)
10
+ # Wraps a Statsd client with default tags and additional configuration.
11
+ class Metrics
12
+ attr_reader :statsd
13
+
14
+ def initialize(options = {})
15
+ @statsd = options.fetch(:statsd) { default_statsd_client if supported? }
16
+ @enabled = options.fetch(:enabled, true)
17
+ end
18
+
19
+ def supported?
20
+ version = Gem.loaded_specs['dogstatsd-ruby'] \
21
+ && Gem.loaded_specs['dogstatsd-ruby'].version
22
+
23
+ !version.nil? && (version >= Gem::Version.new('3.3.0'))
24
+ end
25
+
26
+ def enabled?
27
+ @enabled
28
+ end
29
+
30
+ def enabled=(enabled)
31
+ @enabled = (enabled == true)
32
+ end
33
+
34
+ def default_hostname
35
+ ENV.fetch(Datadog::Ext::Metrics::ENV_DEFAULT_HOST, Datadog::Ext::Metrics::DEFAULT_HOST)
36
+ end
37
+
38
+ def default_port
39
+ ENV.fetch(Datadog::Ext::Metrics::ENV_DEFAULT_PORT, Datadog::Ext::Metrics::DEFAULT_PORT).to_i
40
+ end
41
+
42
+ def default_statsd_client
43
+ require 'datadog/statsd' unless defined?(::Datadog::Statsd)
44
+
45
+ # Create a StatsD client that points to the agent.
46
+ Datadog::Statsd.new(default_hostname, default_port)
47
+ end
48
+
49
+ def configure(options = {})
50
+ @statsd = options[:statsd] if options.key?(:statsd)
51
+ self.enabled = options[:enabled] if options.key?(:enabled)
52
+ end
53
+
54
+ def send_stats?
55
+ enabled? && !statsd.nil?
56
+ end
57
+
58
+ def count(stat, value = nil, options = nil, &block)
59
+ return unless send_stats? && statsd.respond_to?(:count)
60
+ value, options = yield if block_given?
61
+ raise ArgumentError if value.nil?
62
+
63
+ statsd.count(stat, value, metric_options(options))
64
+ rescue StandardError => e
65
+ Datadog::Tracer.log.error("Failed to send count stat. Cause: #{e.message} Source: #{e.backtrace.first}")
66
+ end
67
+
68
+ def distribution(stat, value = nil, options = nil, &block)
69
+ return unless send_stats? && statsd.respond_to?(:distribution)
70
+ value, options = yield if block_given?
71
+ raise ArgumentError if value.nil?
72
+
73
+ statsd.distribution(stat, value, metric_options(options))
74
+ rescue StandardError => e
75
+ Datadog::Tracer.log.error("Failed to send distribution stat. Cause: #{e.message} Source: #{e.backtrace.first}")
76
+ end
77
+
78
+ def increment(stat, options = nil)
79
+ return unless send_stats? && statsd.respond_to?(:increment)
80
+ options = yield if block_given?
81
+
82
+ statsd.increment(stat, metric_options(options))
83
+ rescue StandardError => e
84
+ Datadog::Tracer.log.error("Failed to send increment stat. Cause: #{e.message} Source: #{e.backtrace.first}")
85
+ end
86
+
87
+ def gauge(stat, value = nil, options = nil, &block)
88
+ return unless send_stats? && statsd.respond_to?(:gauge)
89
+ value, options = yield if block_given?
90
+ raise ArgumentError if value.nil?
91
+
92
+ statsd.gauge(stat, value, metric_options(options))
93
+ rescue StandardError => e
94
+ Datadog::Tracer.log.error("Failed to send gauge stat. Cause: #{e.message} Source: #{e.backtrace.first}")
95
+ end
96
+
97
+ def time(stat, options = nil)
98
+ return yield unless send_stats?
99
+
100
+ # Calculate time, send it as a distribution.
101
+ start = Utils::Time.get_time
102
+ return yield
103
+ ensure
104
+ begin
105
+ if send_stats? && !start.nil?
106
+ finished = Utils::Time.get_time
107
+ distribution(stat, ((finished - start) * 1000), options)
108
+ end
109
+ rescue StandardError => e
110
+ Datadog::Tracer.log.error("Failed to send time stat. Cause: #{e.message} Source: #{e.backtrace.first}")
111
+ end
112
+ end
113
+
114
+ def send_metrics(metrics)
115
+ metrics.each { |m| send(m.type, *[m.name, m.value, m.options].compact) }
116
+ end
117
+
118
+ Metric = Struct.new(:type, :name, :value, :options) do
119
+ def initialize(*args)
120
+ super
121
+ self.options = options || {}
122
+ end
123
+ end
124
+
125
+ # For defining and adding default options to metrics
126
+ module Options
127
+ DEFAULT = {
128
+ tags: DEFAULT_TAGS = [
129
+ "#{Ext::Metrics::TAG_LANG}:#{Runtime::Identity.lang}".freeze,
130
+ "#{Ext::Metrics::TAG_LANG_INTERPRETER}:#{Runtime::Identity.lang_interpreter}".freeze,
131
+ "#{Ext::Metrics::TAG_LANG_VERSION}:#{Runtime::Identity.lang_version}".freeze,
132
+ "#{Ext::Metrics::TAG_TRACER_VERSION}:#{Runtime::Identity.tracer_version}".freeze
133
+ ].freeze
134
+ }.freeze
135
+
136
+ def metric_options(options = nil)
137
+ return default_metric_options if options.nil?
138
+
139
+ default_metric_options.merge(options) do |key, old_value, new_value|
140
+ case key
141
+ when :tags
142
+ old_value.dup.concat(new_value).uniq
143
+ else
144
+ new_value
145
+ end
146
+ end
147
+ end
148
+
149
+ def default_metric_options
150
+ # Return dupes, so that the constant isn't modified,
151
+ # and defaults are unfrozen for mutation in Statsd.
152
+ DEFAULT.dup.tap do |options|
153
+ options[:tags] = options[:tags].dup
154
+ end
155
+ end
156
+ end
157
+
158
+ # For defining and adding helpers to metrics
159
+ module Helpers
160
+ [
161
+ :count,
162
+ :distribution,
163
+ :increment,
164
+ :gauge,
165
+ :time
166
+ ].each do |metric_type|
167
+ define_method(metric_type) do |name, stat|
168
+ name = name.to_sym
169
+ define_method(name) do |*args, &block|
170
+ send(metric_type, stat, *args, &block)
171
+ end
172
+ end
173
+ end
174
+ end
175
+
176
+ module Logging
177
+ # Surrogate for Datadog::Statsd to log elsewhere
178
+ class Adapter
179
+ attr_accessor :logger
180
+
181
+ def initialize(logger = nil)
182
+ @logger = logger || Logger.new(STDOUT).tap do |l|
183
+ l.level = Logger::INFO
184
+ l.progname = nil
185
+ l.formatter = proc do |_severity, datetime, _progname, msg|
186
+ stat = JSON.parse(msg[3..-1]) # Trim off leading progname...
187
+ "#{JSON.dump(timestamp: datetime.to_i, message: 'Metric sent.', metric: stat)}\n"
188
+ end
189
+ end
190
+ end
191
+
192
+ def count(stat, value, options = nil)
193
+ logger.info({ stat: stat, type: :count, value: value, options: options }.to_json)
194
+ end
195
+
196
+ def distribution(stat, value, options = nil)
197
+ logger.info({ stat: stat, type: :distribution, value: value, options: options }.to_json)
198
+ end
199
+
200
+ def increment(stat, options = nil)
201
+ logger.info({ stat: stat, type: :increment, options: options }.to_json)
202
+ end
203
+
204
+ def gauge(stat, value, options = nil)
205
+ logger.info({ stat: stat, type: :gauge, value: value, options: options }.to_json)
206
+ end
207
+ end
208
+ end
209
+
210
+ # Make available on for both class and instance.
211
+ include Options
212
+ extend Options
213
+ extend Helpers
214
+ end
215
+ end