ddtrace 0.45.0 → 0.47.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 (302) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +131 -12
  3. data/.circleci/images/primary/{Dockerfile-jruby-9.2 → Dockerfile-jruby-9.2-latest} +2 -1
  4. data/.circleci/images/primary/Dockerfile-jruby-9.2.0.0 +73 -0
  5. data/.circleci/images/primary/Dockerfile-truffleruby-21.0.0 +73 -0
  6. data/.github/workflows/create-next-milestone.yml +2 -2
  7. data/.rubocop.yml +250 -7
  8. data/.rubocop_todo.yml +397 -0
  9. data/.simplecov +6 -0
  10. data/Appraisals +16 -1
  11. data/CHANGELOG.md +150 -1
  12. data/Gemfile +53 -3
  13. data/LICENSE-3rdparty.csv +2 -0
  14. data/Rakefile +5 -23
  15. data/ddtrace.gemspec +6 -36
  16. data/docker-compose.yml +75 -7
  17. data/docs/DevelopmentGuide.md +28 -0
  18. data/docs/GettingStarted.md +69 -17
  19. data/integration/README.md +68 -0
  20. data/integration/apps/rack/.dockerignore +1 -0
  21. data/integration/apps/rack/.envrc.sample +1 -0
  22. data/integration/apps/rack/.gitignore +4 -0
  23. data/integration/apps/rack/.rspec +1 -0
  24. data/integration/apps/rack/Dockerfile +25 -0
  25. data/integration/apps/rack/Dockerfile-ci +11 -0
  26. data/integration/apps/rack/Gemfile +24 -0
  27. data/integration/apps/rack/README.md +93 -0
  28. data/integration/apps/rack/app/acme.rb +80 -0
  29. data/integration/apps/rack/app/datadog.rb +17 -0
  30. data/integration/apps/rack/bin/run +22 -0
  31. data/integration/apps/rack/bin/setup +17 -0
  32. data/integration/apps/rack/bin/test +24 -0
  33. data/integration/apps/rack/config.ru +6 -0
  34. data/integration/apps/rack/config/puma.rb +14 -0
  35. data/integration/apps/rack/config/unicorn.rb +23 -0
  36. data/integration/apps/rack/docker-compose.ci.yml +62 -0
  37. data/integration/apps/rack/docker-compose.yml +78 -0
  38. data/integration/apps/rack/script/build-images +38 -0
  39. data/integration/apps/rack/script/ci +50 -0
  40. data/integration/apps/rack/spec/integration/basic_spec.rb +10 -0
  41. data/integration/apps/rack/spec/spec_helper.rb +16 -0
  42. data/integration/apps/rack/spec/support/integration_helper.rb +22 -0
  43. data/integration/apps/rails-five/.dockerignore +1 -0
  44. data/integration/apps/rails-five/.env +3 -0
  45. data/integration/apps/rails-five/.envrc.sample +1 -0
  46. data/integration/apps/rails-five/.gitignore +30 -0
  47. data/integration/apps/rails-five/Dockerfile +25 -0
  48. data/integration/apps/rails-five/Dockerfile-ci +11 -0
  49. data/integration/apps/rails-five/Gemfile +104 -0
  50. data/integration/apps/rails-five/README.md +94 -0
  51. data/integration/apps/rails-five/Rakefile +6 -0
  52. data/integration/apps/rails-five/app/channels/application_cable/channel.rb +4 -0
  53. data/integration/apps/rails-five/app/channels/application_cable/connection.rb +4 -0
  54. data/integration/apps/rails-five/app/controllers/application_controller.rb +2 -0
  55. data/integration/apps/rails-five/app/controllers/basic_controller.rb +36 -0
  56. data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
  57. data/integration/apps/rails-five/app/controllers/health_controller.rb +9 -0
  58. data/integration/apps/rails-five/app/controllers/jobs_controller.rb +12 -0
  59. data/integration/apps/rails-five/app/jobs/application_job.rb +2 -0
  60. data/integration/apps/rails-five/app/jobs/test_job.rb +12 -0
  61. data/integration/apps/rails-five/app/mailers/application_mailer.rb +4 -0
  62. data/integration/apps/rails-five/app/models/application_record.rb +3 -0
  63. data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
  64. data/integration/apps/rails-five/app/models/test.rb +2 -0
  65. data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +13 -0
  66. data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +1 -0
  67. data/integration/apps/rails-five/bin/bundle +3 -0
  68. data/integration/apps/rails-five/bin/rails +9 -0
  69. data/integration/apps/rails-five/bin/rake +9 -0
  70. data/integration/apps/rails-five/bin/run +24 -0
  71. data/integration/apps/rails-five/bin/setup +27 -0
  72. data/integration/apps/rails-five/bin/spring +17 -0
  73. data/integration/apps/rails-five/bin/test +21 -0
  74. data/integration/apps/rails-five/bin/update +28 -0
  75. data/integration/apps/rails-five/config.ru +5 -0
  76. data/integration/apps/rails-five/config/application.rb +97 -0
  77. data/integration/apps/rails-five/config/boot.rb +4 -0
  78. data/integration/apps/rails-five/config/cable.yml +10 -0
  79. data/integration/apps/rails-five/config/credentials.yml.enc +1 -0
  80. data/integration/apps/rails-five/config/database.yml +28 -0
  81. data/integration/apps/rails-five/config/environment.rb +5 -0
  82. data/integration/apps/rails-five/config/environments/development.rb +51 -0
  83. data/integration/apps/rails-five/config/environments/production.rb +82 -0
  84. data/integration/apps/rails-five/config/environments/test.rb +43 -0
  85. data/integration/apps/rails-five/config/initializers/datadog.rb +18 -0
  86. data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +4 -0
  87. data/integration/apps/rails-five/config/initializers/resque.rb +4 -0
  88. data/integration/apps/rails-five/config/initializers/rollbar.rb +5 -0
  89. data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +14 -0
  90. data/integration/apps/rails-five/config/locales/en.yml +33 -0
  91. data/integration/apps/rails-five/config/puma.rb +24 -0
  92. data/integration/apps/rails-five/config/routes.rb +11 -0
  93. data/integration/apps/rails-five/config/spring.rb +6 -0
  94. data/integration/apps/rails-five/config/unicorn.rb +29 -0
  95. data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +11 -0
  96. data/integration/apps/rails-five/db/schema.rb +23 -0
  97. data/integration/apps/rails-five/db/seeds.rb +7 -0
  98. data/integration/apps/rails-five/docker-compose.ci.yml +98 -0
  99. data/integration/apps/rails-five/docker-compose.yml +100 -0
  100. data/integration/apps/rails-five/lib/tasks/.keep +0 -0
  101. data/integration/apps/rails-five/log/.keep +0 -0
  102. data/integration/apps/rails-five/public/robots.txt +1 -0
  103. data/integration/apps/rails-five/script/build-images +35 -0
  104. data/integration/apps/rails-five/script/ci +50 -0
  105. data/integration/apps/rails-five/spec/integration/basic_spec.rb +10 -0
  106. data/integration/apps/rails-five/spec/spec_helper.rb +16 -0
  107. data/integration/apps/rails-five/spec/support/integration_helper.rb +22 -0
  108. data/integration/apps/rails-five/storage/.keep +0 -0
  109. data/integration/apps/rails-five/tmp/.keep +0 -0
  110. data/integration/apps/rails-five/vendor/.keep +0 -0
  111. data/integration/apps/ruby/.dockerignore +1 -0
  112. data/integration/apps/ruby/.envrc.sample +1 -0
  113. data/integration/apps/ruby/.gitignore +2 -0
  114. data/integration/apps/ruby/Dockerfile +25 -0
  115. data/integration/apps/ruby/Dockerfile-ci +11 -0
  116. data/integration/apps/ruby/Gemfile +11 -0
  117. data/integration/apps/ruby/README.md +70 -0
  118. data/integration/apps/ruby/agent.yaml +3 -0
  119. data/integration/apps/ruby/app/datadog.rb +13 -0
  120. data/integration/apps/ruby/app/fibonacci.rb +58 -0
  121. data/integration/apps/ruby/bin/run +20 -0
  122. data/integration/apps/ruby/bin/setup +17 -0
  123. data/integration/apps/ruby/bin/test +21 -0
  124. data/integration/apps/ruby/docker-compose.ci.yml +51 -0
  125. data/integration/apps/ruby/docker-compose.yml +63 -0
  126. data/integration/apps/ruby/script/build-images +38 -0
  127. data/integration/apps/ruby/script/ci +50 -0
  128. data/integration/images/agent/Dockerfile +2 -0
  129. data/integration/images/agent/agent.yaml +3 -0
  130. data/integration/images/include/datadog/analyzer.rb +71 -0
  131. data/integration/images/include/datadog/demo_env.rb +101 -0
  132. data/integration/images/include/http-health-check +33 -0
  133. data/integration/images/ruby/2.0/Dockerfile +54 -0
  134. data/integration/images/ruby/2.1/Dockerfile +54 -0
  135. data/integration/images/ruby/2.2/Dockerfile +54 -0
  136. data/integration/images/ruby/2.3/Dockerfile +70 -0
  137. data/integration/images/ruby/2.4/Dockerfile +54 -0
  138. data/integration/images/ruby/2.5/Dockerfile +54 -0
  139. data/integration/images/ruby/2.6/Dockerfile +54 -0
  140. data/integration/images/ruby/2.7/Dockerfile +54 -0
  141. data/integration/images/ruby/3.0/Dockerfile +54 -0
  142. data/integration/images/wrk/Dockerfile +33 -0
  143. data/integration/images/wrk/scripts/entrypoint.sh +17 -0
  144. data/integration/images/wrk/scripts/scenarios/basic/default.lua +1 -0
  145. data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +1 -0
  146. data/integration/script/build-images +43 -0
  147. data/lib/ddtrace.rb +0 -5
  148. data/lib/ddtrace/analytics.rb +2 -0
  149. data/lib/ddtrace/buffer.rb +4 -4
  150. data/lib/ddtrace/configuration.rb +92 -23
  151. data/lib/ddtrace/configuration/base.rb +1 -1
  152. data/lib/ddtrace/configuration/components.rb +2 -2
  153. data/lib/ddtrace/configuration/option_definition.rb +1 -3
  154. data/lib/ddtrace/configuration/options.rb +4 -7
  155. data/lib/ddtrace/configuration/settings.rb +17 -3
  156. data/lib/ddtrace/context.rb +5 -6
  157. data/lib/ddtrace/context_provider.rb +0 -1
  158. data/lib/ddtrace/contrib/action_cable/event.rb +1 -0
  159. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +1 -3
  160. data/lib/ddtrace/contrib/action_view/event.rb +1 -1
  161. data/lib/ddtrace/contrib/action_view/utils.rb +1 -1
  162. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +101 -18
  163. data/lib/ddtrace/contrib/active_record/utils.rb +1 -0
  164. data/lib/ddtrace/contrib/active_support/notifications/event.rb +2 -1
  165. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +1 -0
  166. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +9 -5
  167. data/lib/ddtrace/contrib/auto_instrument.rb +1 -0
  168. data/lib/ddtrace/contrib/aws/patcher.rb +1 -0
  169. data/lib/ddtrace/contrib/aws/services.rb +2 -0
  170. data/lib/ddtrace/contrib/configurable.rb +63 -39
  171. data/lib/ddtrace/contrib/configuration/resolver.rb +70 -5
  172. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +19 -20
  173. data/lib/ddtrace/contrib/configuration/settings.rb +7 -6
  174. data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +0 -10
  175. data/lib/ddtrace/contrib/cucumber/ext.rb +0 -2
  176. data/lib/ddtrace/contrib/cucumber/formatter.rb +5 -11
  177. data/lib/ddtrace/contrib/dalli/patcher.rb +0 -38
  178. data/lib/ddtrace/contrib/delayed_job/plugin.rb +0 -1
  179. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -0
  180. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -2
  181. data/lib/ddtrace/contrib/ethon/easy_patch.rb +5 -5
  182. data/lib/ddtrace/contrib/excon/middleware.rb +2 -6
  183. data/lib/ddtrace/contrib/extensions.rb +27 -3
  184. data/lib/ddtrace/contrib/faraday/middleware.rb +1 -3
  185. data/lib/ddtrace/contrib/faraday/patcher.rb +0 -36
  186. data/lib/ddtrace/contrib/grape/endpoint.rb +8 -15
  187. data/lib/ddtrace/contrib/grape/patcher.rb +0 -42
  188. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +8 -8
  189. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +1 -0
  190. data/lib/ddtrace/contrib/grpc/patcher.rb +0 -36
  191. data/lib/ddtrace/contrib/http/circuit_breaker.rb +1 -3
  192. data/lib/ddtrace/contrib/http/instrumentation.rb +5 -5
  193. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +14 -19
  194. data/lib/ddtrace/contrib/httpclient/patcher.rb +5 -2
  195. data/lib/ddtrace/contrib/httprb/instrumentation.rb +14 -20
  196. data/lib/ddtrace/contrib/httprb/patcher.rb +5 -2
  197. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +2 -0
  198. data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -3
  199. data/lib/ddtrace/contrib/patcher.rb +9 -6
  200. data/lib/ddtrace/contrib/presto/patcher.rb +5 -2
  201. data/lib/ddtrace/contrib/qless/qless_job.rb +1 -0
  202. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +1 -0
  203. data/lib/ddtrace/contrib/que/ext.rb +19 -19
  204. data/lib/ddtrace/contrib/que/tracer.rb +1 -1
  205. data/lib/ddtrace/contrib/racecar/event.rb +1 -0
  206. data/lib/ddtrace/contrib/rack/configuration/settings.rb +3 -3
  207. data/lib/ddtrace/contrib/rack/middlewares.rb +5 -10
  208. data/lib/ddtrace/contrib/rack/patcher.rb +1 -3
  209. data/lib/ddtrace/contrib/rails/patcher.rb +6 -2
  210. data/lib/ddtrace/contrib/rake/instrumentation.rb +4 -2
  211. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +11 -4
  212. data/lib/ddtrace/contrib/redis/quantize.rb +1 -0
  213. data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
  214. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +6 -7
  215. data/lib/ddtrace/contrib/registry.rb +2 -2
  216. data/lib/ddtrace/contrib/resque/integration.rb +1 -1
  217. data/lib/ddtrace/contrib/resque/resque_job.rb +2 -0
  218. data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -3
  219. data/lib/ddtrace/contrib/rspec/configuration/settings.rb +0 -10
  220. data/lib/ddtrace/contrib/rspec/example.rb +24 -10
  221. data/lib/ddtrace/contrib/rspec/ext.rb +0 -3
  222. data/lib/ddtrace/contrib/rspec/integration.rb +1 -1
  223. data/lib/ddtrace/contrib/rspec/patcher.rb +0 -2
  224. data/lib/ddtrace/contrib/sequel/utils.rb +5 -6
  225. data/lib/ddtrace/contrib/shoryuken/tracer.rb +0 -1
  226. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +2 -7
  227. data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -1
  228. data/lib/ddtrace/contrib/sinatra/env.rb +1 -3
  229. data/lib/ddtrace/contrib/sinatra/headers.rb +1 -3
  230. data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -3
  231. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +3 -3
  232. data/lib/ddtrace/contrib/sneakers/ext.rb +11 -11
  233. data/lib/ddtrace/contrib/sneakers/tracer.rb +2 -4
  234. data/lib/ddtrace/contrib/status_code_matcher.rb +5 -3
  235. data/lib/ddtrace/correlation.rb +1 -0
  236. data/lib/ddtrace/diagnostics/environment_logger.rb +2 -1
  237. data/lib/ddtrace/distributed_tracing/headers/headers.rb +1 -0
  238. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +1 -3
  239. data/lib/ddtrace/ext/ci.rb +2 -2
  240. data/lib/ddtrace/ext/distributed.rb +1 -1
  241. data/lib/ddtrace/ext/http.rb +1 -1
  242. data/lib/ddtrace/ext/runtime.rb +3 -1
  243. data/lib/ddtrace/forced_tracing.rb +2 -0
  244. data/lib/ddtrace/logger.rb +1 -1
  245. data/lib/ddtrace/metrics.rb +10 -6
  246. data/lib/ddtrace/opentracer/distributed_headers.rb +3 -0
  247. data/lib/ddtrace/opentracer/span.rb +2 -6
  248. data/lib/ddtrace/opentracer/thread_local_scope.rb +1 -0
  249. data/lib/ddtrace/patcher.rb +25 -4
  250. data/lib/ddtrace/pin.rb +8 -61
  251. data/lib/ddtrace/pipeline/span_filter.rb +1 -1
  252. data/lib/ddtrace/propagation/grpc_propagator.rb +1 -0
  253. data/lib/ddtrace/quantization/http.rb +1 -0
  254. data/lib/ddtrace/runtime/cgroup.rb +2 -2
  255. data/lib/ddtrace/runtime/container.rb +27 -29
  256. data/lib/ddtrace/runtime/identity.rb +8 -0
  257. data/lib/ddtrace/sampler.rb +1 -1
  258. data/lib/ddtrace/sampling/rule_sampler.rb +1 -0
  259. data/lib/ddtrace/span.rb +7 -7
  260. data/lib/ddtrace/sync_writer.rb +12 -12
  261. data/lib/ddtrace/tracer.rb +7 -5
  262. data/lib/ddtrace/transport/http.rb +15 -8
  263. data/lib/ddtrace/transport/http/adapters/net.rb +27 -8
  264. data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
  265. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
  266. data/lib/ddtrace/transport/http/builder.rb +7 -1
  267. data/lib/ddtrace/transport/http/env.rb +8 -0
  268. data/lib/ddtrace/transport/http/traces.rb +2 -3
  269. data/lib/ddtrace/transport/io.rb +1 -1
  270. data/lib/ddtrace/transport/io/response.rb +1 -3
  271. data/lib/ddtrace/transport/io/traces.rb +6 -0
  272. data/lib/ddtrace/transport/traces.rb +18 -1
  273. data/lib/ddtrace/utils/compression.rb +27 -0
  274. data/lib/ddtrace/utils/object_set.rb +41 -0
  275. data/lib/ddtrace/utils/only_once.rb +40 -0
  276. data/lib/ddtrace/utils/sequence.rb +17 -0
  277. data/lib/ddtrace/utils/string_table.rb +45 -0
  278. data/lib/ddtrace/utils/time.rb +32 -1
  279. data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
  280. data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
  281. data/lib/ddtrace/vendor/multipart-post/multipart.rb +12 -0
  282. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +8 -0
  283. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +116 -0
  284. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +57 -0
  285. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +135 -0
  286. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +9 -0
  287. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +32 -0
  288. data/lib/ddtrace/version.rb +1 -1
  289. data/lib/ddtrace/workers.rb +5 -0
  290. data/lib/ddtrace/workers/async.rb +11 -3
  291. data/lib/ddtrace/workers/loop.rb +17 -3
  292. data/lib/ddtrace/workers/polling.rb +1 -0
  293. data/lib/ddtrace/workers/queue.rb +1 -0
  294. data/lib/ddtrace/workers/trace_writer.rb +10 -10
  295. data/lib/ddtrace/writer.rb +7 -4
  296. metadata +152 -402
  297. data/lib/ddtrace/augmentation.rb +0 -13
  298. data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
  299. data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
  300. data/lib/ddtrace/augmentation/shim.rb +0 -102
  301. data/lib/ddtrace/contrib/rspec/example_group.rb +0 -61
  302. data/lib/ddtrace/monkey.rb +0 -58
@@ -51,6 +51,7 @@ module Datadog
51
51
 
52
52
  def endpoint_run(name, start, finish, id, payload)
53
53
  return unless Thread.current[KEY_RUN]
54
+
54
55
  Thread.current[KEY_RUN] = false
55
56
 
56
57
  return unless enabled?
@@ -76,18 +77,14 @@ module Datadog
76
77
  end
77
78
 
78
79
  # Set analytics sample rate
79
- if analytics_enabled?
80
- Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
81
- end
80
+ Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
82
81
 
83
82
  # Measure service stats
84
83
  Contrib::Analytics.set_measured(span)
85
84
 
86
85
  # catch thrown exceptions
87
86
 
88
- if exception_is_error?(payload[:exception_object])
89
- span.set_error(payload[:exception_object])
90
- end
87
+ span.set_error(payload[:exception_object]) if exception_is_error?(payload[:exception_object])
91
88
 
92
89
  # override the current span with this notification values
93
90
  span.set_tag(Ext::TAG_ROUTE_ENDPOINT, api_view) unless api_view.nil?
@@ -122,6 +119,7 @@ module Datadog
122
119
 
123
120
  def endpoint_render(name, start, finish, id, payload)
124
121
  return unless Thread.current[KEY_RENDER]
122
+
125
123
  Thread.current[KEY_RENDER] = false
126
124
 
127
125
  return unless enabled?
@@ -134,9 +132,7 @@ module Datadog
134
132
  # Measure service stats
135
133
  Contrib::Analytics.set_measured(span)
136
134
 
137
- if exception_is_error?(payload[:exception_object])
138
- span.set_error(payload[:exception_object])
139
- end
135
+ span.set_error(payload[:exception_object]) if exception_is_error?(payload[:exception_object])
140
136
  ensure
141
137
  span.start(start)
142
138
  span.finish(finish)
@@ -163,17 +159,13 @@ module Datadog
163
159
 
164
160
  begin
165
161
  # Set analytics sample rate
166
- if analytics_enabled?
167
- Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
168
- end
162
+ Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
169
163
 
170
164
  # Measure service stats
171
165
  Contrib::Analytics.set_measured(span)
172
166
 
173
167
  # catch thrown exceptions
174
- if exception_is_error?(payload[:exception_object])
175
- span.set_error(payload[:exception_object])
176
- end
168
+ span.set_error(payload[:exception_object]) if exception_is_error?(payload[:exception_object])
177
169
 
178
170
  span.set_tag(Ext::TAG_FILTER_TYPE, type.to_s)
179
171
  ensure
@@ -226,6 +218,7 @@ module Datadog
226
218
  return false unless exception
227
219
  return true unless matcher
228
220
  return true unless exception.respond_to?('status')
221
+
229
222
  matcher.include?(exception.status)
230
223
  end
231
224
 
@@ -22,51 +22,9 @@ module Datadog
22
22
  # Patch endpoints
23
23
  ::Grape::Endpoint.send(:include, Instrumentation)
24
24
 
25
- add_pin!
26
-
27
25
  # Subscribe to ActiveSupport events
28
26
  Datadog::Contrib::Grape::Endpoint.subscribe
29
27
  end
30
-
31
- def add_pin!
32
- # Attach a Pin object globally and set the service once
33
- pin = DeprecatedPin.new(
34
- get_option(:service_name),
35
- app: Ext::APP,
36
- app_type: Datadog::Ext::AppTypes::WEB,
37
- tracer: -> { get_option(:tracer) }
38
- )
39
- pin.onto(::Grape)
40
- end
41
-
42
- def get_option(option)
43
- Datadog.configuration[:grape].get_option(option)
44
- end
45
-
46
- # Implementation of deprecated Pin, which raises warnings when accessed.
47
- # To be removed when support for Datadog::Pin with Grape is removed.
48
- class DeprecatedPin < Datadog::Pin
49
- include Datadog::DeprecatedPin
50
-
51
- DEPRECATION_WARNING = %(
52
- Use of Datadog::Pin with Grape is DEPRECATED.
53
- Upgrade to the configuration API using the migration guide here:
54
- https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
55
-
56
- def tracer=(tracer)
57
- Datadog.configuration[:grape][:tracer] = tracer
58
- end
59
-
60
- def service_name=(service_name)
61
- Datadog.configuration[:grape][:service_name] = service_name
62
- end
63
-
64
- def log_deprecation_warning(method_name)
65
- do_once(method_name) do
66
- Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
67
- end
68
- end
69
- end
70
28
  end
71
29
  end
72
30
  end
@@ -15,20 +15,20 @@ module Datadog
15
15
  add_datadog_pin! { |c| yield(c) if block_given? }
16
16
  end
17
17
 
18
- def request_response(**keywords)
19
- trace(keywords) { yield }
18
+ def request_response(**keywords, &block)
19
+ trace(keywords, &block)
20
20
  end
21
21
 
22
- def client_streamer(**keywords)
23
- trace(keywords) { yield }
22
+ def client_streamer(**keywords, &block)
23
+ trace(keywords, &block)
24
24
  end
25
25
 
26
- def server_streamer(**keywords)
27
- trace(keywords) { yield }
26
+ def server_streamer(**keywords, &block)
27
+ trace(keywords, &block)
28
28
  end
29
29
 
30
- def bidi_streamer(**keywords)
31
- trace(keywords) { yield }
30
+ def bidi_streamer(**keywords, &block)
31
+ trace(keywords, &block)
32
32
  end
33
33
 
34
34
  private
@@ -44,6 +44,7 @@ module Datadog
44
44
  def annotate!(span, metadata)
45
45
  metadata.each do |header, value|
46
46
  next if reserved_headers.include?(header)
47
+
47
48
  span.set_tag(header, value)
48
49
  end
49
50
 
@@ -19,49 +19,13 @@ module Datadog
19
19
  require 'ddtrace/contrib/grpc/datadog_interceptor'
20
20
  require 'ddtrace/contrib/grpc/intercept_with_datadog'
21
21
 
22
- add_pin!
23
-
24
22
  prepend_interceptor
25
23
  end
26
24
 
27
- def add_pin!
28
- DeprecatedPin.new(
29
- get_option(:service_name),
30
- app: Ext::APP,
31
- app_type: Datadog::Ext::AppTypes::WEB,
32
- tracer: -> { get_option(:tracer) }
33
- ).onto(::GRPC)
34
- end
35
-
36
25
  def prepend_interceptor
37
26
  ::GRPC::InterceptionContext
38
27
  .send(:prepend, Datadog::Contrib::GRPC::InterceptWithDatadog)
39
28
  end
40
-
41
- def get_option(option)
42
- Datadog.configuration[:grpc].get_option(option)
43
- end
44
-
45
- # Implementation of deprecated Pin, which raises warnings when accessed.
46
- # To be removed when support for Datadog::Pin with GRPC is removed.
47
- class DeprecatedPin < Datadog::Pin
48
- include Datadog::DeprecatedPin
49
-
50
- DEPRECATION_WARNING = %(
51
- Use of Datadog::Pin with GRPC is DEPRECATED.
52
- Upgrade to the configuration API using the migration guide here:
53
- https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
54
-
55
- def service_name=(service_name)
56
- Datadog.configuration[:grpc][:service_name] = service_name
57
- end
58
-
59
- def log_deprecation_warning(method_name)
60
- do_once(method_name) do
61
- Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
62
- end
63
- end
64
- end
65
29
  end
66
30
  end
67
31
  end
@@ -27,9 +27,7 @@ module Datadog
27
27
  end
28
28
 
29
29
  def should_skip_distributed_tracing?(pin)
30
- if pin.config && pin.config.key?(:distributed_tracing)
31
- return !pin.config[:distributed_tracing]
32
- end
30
+ return !pin.config[:distributed_tracing] if pin.config && pin.config.key?(:distributed_tracing)
33
31
 
34
32
  !Datadog.configuration[:http][:distributed_tracing]
35
33
  end
@@ -19,7 +19,7 @@ module Datadog
19
19
 
20
20
  # Span hook invoked after request is completed.
21
21
  def self.after_request(&block)
22
- if block_given?
22
+ if block
23
23
  # Set hook
24
24
  @after_request = block
25
25
  else
@@ -32,15 +32,14 @@ module Datadog
32
32
  module InstanceMethods
33
33
  include Datadog::Contrib::HttpAnnotationHelper
34
34
 
35
- def request(req, body = nil, &block) # :yield: +response+
35
+ # :yield: +response+
36
+ def request(req, body = nil, &block)
36
37
  host, = host_and_port(req)
37
38
  request_options = datadog_configuration(host)
38
39
  pin = datadog_pin(request_options)
39
40
  return super(req, body, &block) unless pin && pin.tracer
40
41
 
41
- if Datadog::Contrib::HTTP.should_skip_tracing?(req, pin.tracer)
42
- return super(req, body, &block)
43
- end
42
+ return super(req, body, &block) if Datadog::Contrib::HTTP.should_skip_tracing?(req, pin.tracer)
44
43
 
45
44
  pin.tracer.trace(Ext::SPAN_REQUEST, on_error: method(:annotate_span_with_error!)) do |span|
46
45
  begin
@@ -108,6 +107,7 @@ module Datadog
108
107
 
109
108
  def set_analytics_sample_rate(span, request_options)
110
109
  return unless analytics_enabled?(request_options)
110
+
111
111
  Contrib::Analytics.set_sample_rate(span, analytics_sample_rate(request_options))
112
112
  end
113
113
 
@@ -88,14 +88,12 @@ module Datadog
88
88
  service = config[:service_name]
89
89
  tracer = config[:tracer]
90
90
 
91
- @datadog_pin ||= begin
92
- Datadog::Pin.new(
93
- service,
94
- app: Ext::APP,
95
- app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
96
- tracer: -> { config[:tracer] }
97
- )
98
- end
91
+ @datadog_pin ||= Datadog::Pin.new(
92
+ service,
93
+ app: Ext::APP,
94
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
95
+ tracer: -> { config[:tracer] }
96
+ )
99
97
 
100
98
  if @datadog_pin.service_name == default_datadog_pin.service_name && @datadog_pin.service_name != service
101
99
  @datadog_pin.service = service
@@ -111,14 +109,12 @@ module Datadog
111
109
  config = Datadog.configuration[:httpclient]
112
110
  service = config[:service_name]
113
111
 
114
- @default_datadog_pin ||= begin
115
- Datadog::Pin.new(
116
- service,
117
- app: Ext::APP,
118
- app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
119
- tracer: -> { config[:tracer] }
120
- )
121
- end
112
+ @default_datadog_pin ||= Datadog::Pin.new(
113
+ service,
114
+ app: Ext::APP,
115
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
116
+ tracer: -> { config[:tracer] }
117
+ )
122
118
  end
123
119
 
124
120
  def datadog_configuration(host = :default)
@@ -134,15 +130,14 @@ module Datadog
134
130
  end
135
131
 
136
132
  def should_skip_distributed_tracing?(pin)
137
- if pin.config && pin.config.key?(:distributed_tracing)
138
- return !pin.config[:distributed_tracing]
139
- end
133
+ return !pin.config[:distributed_tracing] if pin.config && pin.config.key?(:distributed_tracing)
140
134
 
141
135
  !Datadog.configuration[:httpclient][:distributed_tracing]
142
136
  end
143
137
 
144
138
  def set_analytics_sample_rate(span, request_options)
145
139
  return unless analytics_enabled?(request_options)
140
+
146
141
  Contrib::Analytics.set_sample_rate(span, request_options[:analytics_sample_rate])
147
142
  end
148
143
  end
@@ -1,5 +1,6 @@
1
1
  require 'ddtrace/contrib/patcher'
2
2
  require 'ddtrace/contrib/httpclient/instrumentation'
3
+ require 'ddtrace/utils/only_once'
3
4
 
4
5
  module Datadog
5
6
  module Contrib
@@ -9,10 +10,12 @@ module Datadog
9
10
  module Patcher
10
11
  include Contrib::Patcher
11
12
 
13
+ PATCH_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
14
+
12
15
  module_function
13
16
 
14
17
  def patched?
15
- done?(:httpclient)
18
+ PATCH_ONLY_ONCE.ran?
16
19
  end
17
20
 
18
21
  def target_version
@@ -21,7 +24,7 @@ module Datadog
21
24
 
22
25
  # patch applies our patch
23
26
  def patch
24
- do_once(:httpclient) do
27
+ PATCH_ONLY_ONCE.run do
25
28
  begin
26
29
  ::HTTPClient.send(:include, Instrumentation)
27
30
  rescue StandardError => e
@@ -16,7 +16,6 @@ module Datadog
16
16
  end
17
17
 
18
18
  # Instance methods for configuration
19
- # rubocop:disable Metrics/ModuleLength
20
19
  module InstanceMethods
21
20
  include Datadog::Contrib::HttpAnnotationHelper
22
21
 
@@ -99,14 +98,12 @@ module Datadog
99
98
  service = config[:service_name]
100
99
  tracer = config[:tracer]
101
100
 
102
- @datadog_pin ||= begin
103
- Datadog::Pin.new(
104
- service,
105
- app: Ext::APP,
106
- app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
107
- tracer: -> { config[:tracer] }
108
- )
109
- end
101
+ @datadog_pin ||= Datadog::Pin.new(
102
+ service,
103
+ app: Ext::APP,
104
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
105
+ tracer: -> { config[:tracer] }
106
+ )
110
107
 
111
108
  if @datadog_pin.service_name == default_datadog_pin.service_name && @datadog_pin.service_name != service
112
109
  @datadog_pin.service = service
@@ -122,14 +119,12 @@ module Datadog
122
119
  config = Datadog.configuration[:httprb]
123
120
  service = config[:service_name]
124
121
 
125
- @default_datadog_pin ||= begin
126
- Datadog::Pin.new(
127
- service,
128
- app: Ext::APP,
129
- app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
130
- tracer: -> { config[:tracer] }
131
- )
132
- end
122
+ @default_datadog_pin ||= Datadog::Pin.new(
123
+ service,
124
+ app: Ext::APP,
125
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
126
+ tracer: -> { config[:tracer] }
127
+ )
133
128
  end
134
129
 
135
130
  def datadog_configuration(host = :default)
@@ -145,15 +140,14 @@ module Datadog
145
140
  end
146
141
 
147
142
  def should_skip_distributed_tracing?(pin)
148
- if pin.config && pin.config.key?(:distributed_tracing)
149
- return !pin.config[:distributed_tracing]
150
- end
143
+ return !pin.config[:distributed_tracing] if pin.config && pin.config.key?(:distributed_tracing)
151
144
 
152
145
  !Datadog.configuration[:httprb][:distributed_tracing]
153
146
  end
154
147
 
155
148
  def set_analytics_sample_rate(span, request_options)
156
149
  return unless analytics_enabled?(request_options)
150
+
157
151
  Contrib::Analytics.set_sample_rate(span, request_options[:analytics_sample_rate])
158
152
  end
159
153
  end
@@ -1,5 +1,6 @@
1
1
  require 'ddtrace/contrib/patcher'
2
2
  require 'ddtrace/contrib/httprb/instrumentation'
3
+ require 'ddtrace/utils/only_once'
3
4
 
4
5
  module Datadog
5
6
  module Contrib
@@ -9,10 +10,12 @@ module Datadog
9
10
  module Patcher
10
11
  include Contrib::Patcher
11
12
 
13
+ PATCH_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
14
+
12
15
  module_function
13
16
 
14
17
  def patched?
15
- done?(:httprb)
18
+ PATCH_ONLY_ONCE.ran?
16
19
  end
17
20
 
18
21
  def target_version
@@ -21,7 +24,7 @@ module Datadog
21
24
 
22
25
  # patch applies our patch
23
26
  def patch
24
- do_once(:httprb) do
27
+ PATCH_ONLY_ONCE.run do
25
28
  begin
26
29
  ::HTTP::Client.send(:include, Instrumentation)
27
30
  rescue StandardError => e