ddtrace 0.42.0 → 0.54.2

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 (602) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +22 -0
  3. data/.gitignore +7 -1
  4. data/CHANGELOG.md +1645 -370
  5. data/CONTRIBUTING.md +2 -6
  6. data/LICENSE-3rdparty.csv +2 -0
  7. data/README.md +1 -0
  8. data/bin/ddtracerb +15 -0
  9. data/ddtrace.gemspec +21 -39
  10. data/docs/DevelopmentGuide.md +46 -8
  11. data/docs/GettingStarted.md +439 -92
  12. data/docs/ProfilingDevelopment.md +107 -0
  13. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +86 -0
  14. data/ext/ddtrace_profiling_native_extension/clock_id.h +4 -0
  15. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +52 -0
  16. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +14 -0
  17. data/ext/ddtrace_profiling_native_extension/extconf.rb +197 -0
  18. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +35 -0
  19. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +3 -0
  20. data/ext/ddtrace_profiling_native_extension/profiling.c +22 -0
  21. data/lib/datadog/ci/configuration/components.rb +31 -0
  22. data/lib/datadog/ci/configuration/settings.rb +37 -0
  23. data/lib/datadog/ci/context_flush.rb +29 -0
  24. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +31 -0
  25. data/lib/datadog/ci/contrib/cucumber/ext.rb +20 -0
  26. data/lib/datadog/ci/contrib/cucumber/formatter.rb +99 -0
  27. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +27 -0
  28. data/lib/datadog/ci/contrib/cucumber/integration.rb +48 -0
  29. data/lib/datadog/ci/contrib/cucumber/patcher.rb +26 -0
  30. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +31 -0
  31. data/lib/datadog/ci/contrib/rspec/example.rb +75 -0
  32. data/lib/datadog/ci/contrib/rspec/ext.rb +19 -0
  33. data/lib/datadog/ci/contrib/rspec/integration.rb +49 -0
  34. data/lib/datadog/ci/contrib/rspec/patcher.rb +26 -0
  35. data/lib/datadog/ci/ext/app_types.rb +10 -0
  36. data/lib/datadog/ci/ext/environment.rb +485 -0
  37. data/lib/datadog/ci/ext/settings.rb +11 -0
  38. data/lib/datadog/ci/ext/test.rb +36 -0
  39. data/lib/datadog/ci/extensions.rb +18 -0
  40. data/lib/datadog/ci/test.rb +81 -0
  41. data/lib/datadog/ci.rb +17 -0
  42. data/lib/datadog/contrib.rb +71 -0
  43. data/lib/datadog/core/environment/cgroup.rb +52 -0
  44. data/lib/datadog/core/environment/class_count.rb +20 -0
  45. data/lib/datadog/core/environment/container.rb +91 -0
  46. data/lib/datadog/core/environment/ext.rb +27 -0
  47. data/lib/datadog/core/environment/gc.rb +19 -0
  48. data/lib/datadog/core/environment/identity.rb +51 -0
  49. data/lib/datadog/core/environment/socket.rb +17 -0
  50. data/lib/datadog/core/environment/thread_count.rb +19 -0
  51. data/lib/datadog/core/environment/variable_helpers.rb +42 -0
  52. data/lib/datadog/core/environment/vm_cache.rb +46 -0
  53. data/lib/ddtrace/analytics.rb +3 -0
  54. data/lib/ddtrace/auto_instrument.rb +5 -0
  55. data/lib/ddtrace/auto_instrument_base.rb +7 -0
  56. data/lib/ddtrace/buffer.rb +38 -24
  57. data/lib/ddtrace/chunker.rb +1 -0
  58. data/lib/ddtrace/configuration/agent_settings_resolver.rb +309 -0
  59. data/lib/ddtrace/configuration/base.rb +9 -11
  60. data/lib/ddtrace/configuration/components.rb +167 -26
  61. data/lib/ddtrace/configuration/dependency_resolver.rb +1 -0
  62. data/lib/ddtrace/configuration/option.rb +1 -0
  63. data/lib/ddtrace/configuration/option_definition.rb +2 -3
  64. data/lib/ddtrace/configuration/option_definition_set.rb +1 -0
  65. data/lib/ddtrace/configuration/option_set.rb +1 -0
  66. data/lib/ddtrace/configuration/options.rb +7 -9
  67. data/lib/ddtrace/configuration/pin_setup.rb +1 -0
  68. data/lib/ddtrace/configuration/settings.rb +142 -12
  69. data/lib/ddtrace/configuration.rb +132 -24
  70. data/lib/ddtrace/context.rb +51 -22
  71. data/lib/ddtrace/context_flush.rb +15 -2
  72. data/lib/ddtrace/context_provider.rb +13 -2
  73. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +1 -0
  74. data/lib/ddtrace/contrib/action_cable/event.rb +6 -4
  75. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +1 -0
  76. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +1 -0
  77. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +1 -0
  78. data/lib/ddtrace/contrib/action_cable/events.rb +1 -0
  79. data/lib/ddtrace/contrib/action_cable/ext.rb +1 -0
  80. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +47 -0
  81. data/lib/ddtrace/contrib/action_cable/integration.rb +8 -0
  82. data/lib/ddtrace/contrib/action_cable/patcher.rb +2 -0
  83. data/lib/ddtrace/contrib/action_mailer/configuration/settings.rb +32 -0
  84. data/lib/ddtrace/contrib/action_mailer/event.rb +50 -0
  85. data/lib/ddtrace/contrib/action_mailer/events/deliver.rb +54 -0
  86. data/lib/ddtrace/contrib/action_mailer/events/process.rb +41 -0
  87. data/lib/ddtrace/contrib/action_mailer/events.rb +31 -0
  88. data/lib/ddtrace/contrib/action_mailer/ext.rb +32 -0
  89. data/lib/ddtrace/contrib/action_mailer/integration.rb +45 -0
  90. data/lib/ddtrace/contrib/action_mailer/patcher.rb +27 -0
  91. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +22 -13
  92. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +2 -1
  93. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +1 -0
  94. data/lib/ddtrace/contrib/action_pack/ext.rb +1 -0
  95. data/lib/ddtrace/contrib/action_pack/integration.rb +8 -0
  96. data/lib/ddtrace/contrib/action_pack/patcher.rb +1 -0
  97. data/lib/ddtrace/contrib/action_pack/utils.rb +2 -1
  98. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +1 -0
  99. data/lib/ddtrace/contrib/action_view/event.rb +4 -7
  100. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +2 -0
  101. data/lib/ddtrace/contrib/action_view/events/render_template.rb +2 -0
  102. data/lib/ddtrace/contrib/action_view/events.rb +1 -0
  103. data/lib/ddtrace/contrib/action_view/ext.rb +1 -0
  104. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +1 -0
  105. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +1 -0
  106. data/lib/ddtrace/contrib/action_view/integration.rb +8 -0
  107. data/lib/ddtrace/contrib/action_view/patcher.rb +5 -4
  108. data/lib/ddtrace/contrib/action_view/utils.rb +2 -1
  109. data/lib/ddtrace/contrib/active_job/configuration/settings.rb +33 -0
  110. data/lib/ddtrace/contrib/active_job/event.rb +54 -0
  111. data/lib/ddtrace/contrib/active_job/events/discard.rb +46 -0
  112. data/lib/ddtrace/contrib/active_job/events/enqueue.rb +45 -0
  113. data/lib/ddtrace/contrib/active_job/events/enqueue_at.rb +45 -0
  114. data/lib/ddtrace/contrib/active_job/events/enqueue_retry.rb +47 -0
  115. data/lib/ddtrace/contrib/active_job/events/perform.rb +45 -0
  116. data/lib/ddtrace/contrib/active_job/events/retry_stopped.rb +46 -0
  117. data/lib/ddtrace/contrib/active_job/events.rb +39 -0
  118. data/lib/ddtrace/contrib/active_job/ext.rb +32 -0
  119. data/lib/ddtrace/contrib/active_job/integration.rb +46 -0
  120. data/lib/ddtrace/contrib/active_job/log_injection.rb +21 -0
  121. data/lib/ddtrace/contrib/active_job/patcher.rb +33 -0
  122. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +1 -0
  123. data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -2
  124. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +1 -0
  125. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +1 -0
  126. data/lib/ddtrace/contrib/active_model_serializers/events.rb +1 -0
  127. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +1 -0
  128. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +1 -0
  129. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +1 -0
  130. data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +31 -0
  131. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +108 -18
  132. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +1 -0
  133. data/lib/ddtrace/contrib/active_record/event.rb +3 -2
  134. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +1 -0
  135. data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -0
  136. data/lib/ddtrace/contrib/active_record/events.rb +1 -0
  137. data/lib/ddtrace/contrib/active_record/ext.rb +1 -0
  138. data/lib/ddtrace/contrib/active_record/integration.rb +8 -0
  139. data/lib/ddtrace/contrib/active_record/patcher.rb +1 -0
  140. data/lib/ddtrace/contrib/active_record/utils.rb +69 -21
  141. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +105 -3
  142. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +26 -4
  143. data/lib/ddtrace/contrib/active_support/cache/redis.rb +2 -5
  144. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +1 -0
  145. data/lib/ddtrace/contrib/active_support/ext.rb +4 -0
  146. data/lib/ddtrace/contrib/active_support/integration.rb +8 -1
  147. data/lib/ddtrace/contrib/active_support/notifications/event.rb +15 -3
  148. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +3 -1
  149. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +10 -5
  150. data/lib/ddtrace/contrib/active_support/patcher.rb +1 -0
  151. data/lib/ddtrace/contrib/analytics.rb +1 -0
  152. data/lib/ddtrace/contrib/auto_instrument.rb +48 -0
  153. data/lib/ddtrace/contrib/aws/configuration/settings.rb +1 -0
  154. data/lib/ddtrace/contrib/aws/ext.rb +1 -0
  155. data/lib/ddtrace/contrib/aws/instrumentation.rb +32 -1
  156. data/lib/ddtrace/contrib/aws/integration.rb +1 -0
  157. data/lib/ddtrace/contrib/aws/parsed_context.rb +1 -0
  158. data/lib/ddtrace/contrib/aws/patcher.rb +6 -1
  159. data/lib/ddtrace/contrib/aws/services.rb +4 -0
  160. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +1 -0
  161. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -0
  162. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
  163. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +1 -0
  164. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +1 -0
  165. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +3 -1
  166. data/lib/ddtrace/contrib/configurable.rb +65 -38
  167. data/lib/ddtrace/contrib/configuration/resolver.rb +71 -5
  168. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +21 -20
  169. data/lib/ddtrace/contrib/configuration/settings.rb +8 -6
  170. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +1 -0
  171. data/lib/ddtrace/contrib/dalli/ext.rb +1 -0
  172. data/lib/ddtrace/contrib/dalli/instrumentation.rb +2 -1
  173. data/lib/ddtrace/contrib/dalli/integration.rb +1 -0
  174. data/lib/ddtrace/contrib/dalli/patcher.rb +2 -39
  175. data/lib/ddtrace/contrib/dalli/quantize.rb +1 -0
  176. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +2 -0
  177. data/lib/ddtrace/contrib/delayed_job/ext.rb +1 -0
  178. data/lib/ddtrace/contrib/delayed_job/integration.rb +1 -0
  179. data/lib/ddtrace/contrib/delayed_job/patcher.rb +1 -0
  180. data/lib/ddtrace/contrib/delayed_job/plugin.rb +5 -3
  181. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +1 -0
  182. data/lib/ddtrace/contrib/elasticsearch/ext.rb +1 -0
  183. data/lib/ddtrace/contrib/elasticsearch/integration.rb +1 -0
  184. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +2 -0
  185. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +6 -2
  186. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +1 -0
  187. data/lib/ddtrace/contrib/ethon/easy_patch.rb +13 -11
  188. data/lib/ddtrace/contrib/ethon/ext.rb +2 -0
  189. data/lib/ddtrace/contrib/ethon/integration.rb +1 -0
  190. data/lib/ddtrace/contrib/ethon/multi_patch.rb +2 -1
  191. data/lib/ddtrace/contrib/ethon/patcher.rb +4 -2
  192. data/lib/ddtrace/contrib/excon/configuration/settings.rb +1 -0
  193. data/lib/ddtrace/contrib/excon/ext.rb +1 -0
  194. data/lib/ddtrace/contrib/excon/integration.rb +1 -0
  195. data/lib/ddtrace/contrib/excon/middleware.rb +10 -7
  196. data/lib/ddtrace/contrib/excon/patcher.rb +1 -0
  197. data/lib/ddtrace/contrib/extensions.rb +90 -14
  198. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +1 -0
  199. data/lib/ddtrace/contrib/faraday/connection.rb +1 -0
  200. data/lib/ddtrace/contrib/faraday/ext.rb +1 -0
  201. data/lib/ddtrace/contrib/faraday/integration.rb +1 -0
  202. data/lib/ddtrace/contrib/faraday/middleware.rb +2 -3
  203. data/lib/ddtrace/contrib/faraday/patcher.rb +3 -38
  204. data/lib/ddtrace/contrib/faraday/rack_builder.rb +1 -0
  205. data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -0
  206. data/lib/ddtrace/contrib/grape/endpoint.rb +68 -32
  207. data/lib/ddtrace/contrib/grape/ext.rb +2 -0
  208. data/lib/ddtrace/contrib/grape/instrumentation.rb +4 -3
  209. data/lib/ddtrace/contrib/grape/integration.rb +1 -0
  210. data/lib/ddtrace/contrib/grape/patcher.rb +2 -43
  211. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +1 -0
  212. data/lib/ddtrace/contrib/graphql/ext.rb +1 -0
  213. data/lib/ddtrace/contrib/graphql/integration.rb +1 -0
  214. data/lib/ddtrace/contrib/graphql/patcher.rb +1 -0
  215. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +2 -0
  216. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -0
  217. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -4
  218. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +13 -8
  219. data/lib/ddtrace/contrib/grpc/ext.rb +1 -0
  220. data/lib/ddtrace/contrib/grpc/integration.rb +1 -0
  221. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +1 -0
  222. data/lib/ddtrace/contrib/grpc/patcher.rb +3 -37
  223. data/lib/ddtrace/contrib/http/circuit_breaker.rb +2 -3
  224. data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
  225. data/lib/ddtrace/contrib/http/ext.rb +1 -0
  226. data/lib/ddtrace/contrib/http/instrumentation.rb +9 -8
  227. data/lib/ddtrace/contrib/http/integration.rb +1 -0
  228. data/lib/ddtrace/contrib/http/patcher.rb +2 -1
  229. data/lib/ddtrace/contrib/http_annotation_helper.rb +1 -0
  230. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +33 -0
  231. data/lib/ddtrace/contrib/httpclient/ext.rb +18 -0
  232. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +148 -0
  233. data/lib/ddtrace/contrib/httpclient/integration.rb +44 -0
  234. data/lib/ddtrace/contrib/httpclient/patcher.rb +39 -0
  235. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +1 -0
  236. data/lib/ddtrace/contrib/httprb/ext.rb +1 -0
  237. data/lib/ddtrace/contrib/httprb/instrumentation.rb +17 -22
  238. data/lib/ddtrace/contrib/httprb/integration.rb +1 -0
  239. data/lib/ddtrace/contrib/httprb/patcher.rb +8 -4
  240. data/lib/ddtrace/contrib/integration.rb +4 -3
  241. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +1 -0
  242. data/lib/ddtrace/contrib/kafka/consumer_event.rb +1 -0
  243. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +1 -0
  244. data/lib/ddtrace/contrib/kafka/event.rb +4 -3
  245. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +1 -0
  246. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +1 -0
  247. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +1 -0
  248. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +1 -0
  249. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +1 -0
  250. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +1 -0
  251. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +1 -0
  252. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
  253. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +1 -0
  254. data/lib/ddtrace/contrib/kafka/events.rb +1 -0
  255. data/lib/ddtrace/contrib/kafka/ext.rb +1 -0
  256. data/lib/ddtrace/contrib/kafka/integration.rb +1 -0
  257. data/lib/ddtrace/contrib/kafka/patcher.rb +1 -0
  258. data/lib/ddtrace/contrib/lograge/configuration/settings.rb +19 -0
  259. data/lib/ddtrace/contrib/lograge/ext.rb +11 -0
  260. data/lib/ddtrace/contrib/lograge/instrumentation.rb +39 -0
  261. data/lib/ddtrace/contrib/lograge/integration.rb +46 -0
  262. data/lib/ddtrace/contrib/lograge/patcher.rb +26 -0
  263. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +1 -0
  264. data/lib/ddtrace/contrib/mongodb/ext.rb +1 -0
  265. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +6 -3
  266. data/lib/ddtrace/contrib/mongodb/integration.rb +6 -0
  267. data/lib/ddtrace/contrib/mongodb/parsers.rb +1 -0
  268. data/lib/ddtrace/contrib/mongodb/patcher.rb +3 -2
  269. data/lib/ddtrace/contrib/mongodb/subscribers.rb +3 -3
  270. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +1 -0
  271. data/lib/ddtrace/contrib/mysql2/ext.rb +1 -0
  272. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +2 -1
  273. data/lib/ddtrace/contrib/mysql2/integration.rb +1 -0
  274. data/lib/ddtrace/contrib/mysql2/patcher.rb +2 -1
  275. data/lib/ddtrace/contrib/patchable.rb +21 -9
  276. data/lib/ddtrace/contrib/patcher.rb +12 -8
  277. data/lib/ddtrace/contrib/presto/configuration/settings.rb +1 -0
  278. data/lib/ddtrace/contrib/presto/ext.rb +1 -0
  279. data/lib/ddtrace/contrib/presto/instrumentation.rb +2 -1
  280. data/lib/ddtrace/contrib/presto/integration.rb +1 -0
  281. data/lib/ddtrace/contrib/presto/patcher.rb +7 -3
  282. data/lib/ddtrace/contrib/qless/configuration/settings.rb +36 -0
  283. data/lib/ddtrace/contrib/qless/ext.rb +21 -0
  284. data/lib/ddtrace/contrib/qless/integration.rb +39 -0
  285. data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
  286. data/lib/ddtrace/contrib/qless/qless_job.rb +74 -0
  287. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +34 -0
  288. data/lib/ddtrace/contrib/que/configuration/settings.rb +2 -0
  289. data/lib/ddtrace/contrib/que/ext.rb +20 -19
  290. data/lib/ddtrace/contrib/que/integration.rb +1 -0
  291. data/lib/ddtrace/contrib/que/patcher.rb +1 -0
  292. data/lib/ddtrace/contrib/que/tracer.rb +4 -2
  293. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -0
  294. data/lib/ddtrace/contrib/racecar/event.rb +4 -2
  295. data/lib/ddtrace/contrib/racecar/events/batch.rb +1 -0
  296. data/lib/ddtrace/contrib/racecar/events/consume.rb +1 -0
  297. data/lib/ddtrace/contrib/racecar/events/message.rb +1 -0
  298. data/lib/ddtrace/contrib/racecar/events.rb +1 -0
  299. data/lib/ddtrace/contrib/racecar/ext.rb +1 -0
  300. data/lib/ddtrace/contrib/racecar/integration.rb +1 -0
  301. data/lib/ddtrace/contrib/racecar/patcher.rb +1 -0
  302. data/lib/ddtrace/contrib/rack/configuration/settings.rb +4 -3
  303. data/lib/ddtrace/contrib/rack/ext.rb +1 -0
  304. data/lib/ddtrace/contrib/rack/integration.rb +8 -0
  305. data/lib/ddtrace/contrib/rack/middlewares.rb +8 -12
  306. data/lib/ddtrace/contrib/rack/patcher.rb +2 -3
  307. data/lib/ddtrace/contrib/rack/request_queue.rb +7 -1
  308. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
  309. data/lib/ddtrace/contrib/rails/configuration/settings.rb +8 -0
  310. data/lib/ddtrace/contrib/rails/ext.rb +1 -0
  311. data/lib/ddtrace/contrib/rails/framework.rb +50 -2
  312. data/lib/ddtrace/contrib/rails/integration.rb +1 -0
  313. data/lib/ddtrace/contrib/rails/log_injection.rb +1 -40
  314. data/lib/ddtrace/contrib/rails/middlewares.rb +1 -0
  315. data/lib/ddtrace/contrib/rails/patcher.rb +40 -21
  316. data/lib/ddtrace/contrib/rails/railtie.rb +1 -0
  317. data/lib/ddtrace/contrib/rails/utils.rb +5 -0
  318. data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -0
  319. data/lib/ddtrace/contrib/rake/ext.rb +1 -0
  320. data/lib/ddtrace/contrib/rake/instrumentation.rb +6 -3
  321. data/lib/ddtrace/contrib/rake/integration.rb +2 -1
  322. data/lib/ddtrace/contrib/rake/patcher.rb +2 -1
  323. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +15 -5
  324. data/lib/ddtrace/contrib/redis/configuration/settings.rb +6 -0
  325. data/lib/ddtrace/contrib/redis/ext.rb +2 -0
  326. data/lib/ddtrace/contrib/redis/instrumentation.rb +90 -0
  327. data/lib/ddtrace/contrib/redis/integration.rb +1 -0
  328. data/lib/ddtrace/contrib/redis/patcher.rb +3 -67
  329. data/lib/ddtrace/contrib/redis/quantize.rb +29 -0
  330. data/lib/ddtrace/contrib/redis/tags.rb +6 -1
  331. data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
  332. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +7 -7
  333. data/lib/ddtrace/contrib/registerable.rb +4 -4
  334. data/lib/ddtrace/contrib/registry.rb +3 -2
  335. data/lib/ddtrace/contrib/resque/configuration/settings.rb +19 -1
  336. data/lib/ddtrace/contrib/resque/ext.rb +1 -0
  337. data/lib/ddtrace/contrib/resque/integration.rb +2 -5
  338. data/lib/ddtrace/contrib/resque/patcher.rb +5 -4
  339. data/lib/ddtrace/contrib/resque/resque_job.rb +26 -2
  340. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +1 -0
  341. data/lib/ddtrace/contrib/rest_client/ext.rb +1 -0
  342. data/lib/ddtrace/contrib/rest_client/integration.rb +1 -0
  343. data/lib/ddtrace/contrib/rest_client/patcher.rb +3 -1
  344. data/lib/ddtrace/contrib/rest_client/request_patch.rb +3 -4
  345. data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +19 -0
  346. data/lib/ddtrace/contrib/semantic_logger/ext.rb +11 -0
  347. data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +43 -0
  348. data/lib/ddtrace/contrib/semantic_logger/integration.rb +48 -0
  349. data/lib/ddtrace/contrib/semantic_logger/patcher.rb +26 -0
  350. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +1 -0
  351. data/lib/ddtrace/contrib/sequel/database.rb +2 -1
  352. data/lib/ddtrace/contrib/sequel/dataset.rb +2 -1
  353. data/lib/ddtrace/contrib/sequel/ext.rb +1 -0
  354. data/lib/ddtrace/contrib/sequel/integration.rb +1 -0
  355. data/lib/ddtrace/contrib/sequel/patcher.rb +3 -2
  356. data/lib/ddtrace/contrib/sequel/utils.rb +6 -6
  357. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +3 -0
  358. data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -0
  359. data/lib/ddtrace/contrib/shoryuken/integration.rb +1 -0
  360. data/lib/ddtrace/contrib/shoryuken/patcher.rb +1 -0
  361. data/lib/ddtrace/contrib/shoryuken/tracer.rb +9 -2
  362. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +1 -0
  363. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +2 -0
  364. data/lib/ddtrace/contrib/sidekiq/ext.rb +4 -0
  365. data/lib/ddtrace/contrib/sidekiq/integration.rb +11 -0
  366. data/lib/ddtrace/contrib/sidekiq/patcher.rb +27 -0
  367. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/heartbeat.rb +30 -0
  368. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/job_fetch.rb +30 -0
  369. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +29 -0
  370. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +6 -7
  371. data/lib/ddtrace/contrib/sidekiq/tracing.rb +1 -1
  372. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +1 -0
  373. data/lib/ddtrace/contrib/sinatra/env.rb +4 -4
  374. data/lib/ddtrace/contrib/sinatra/ext.rb +1 -0
  375. data/lib/ddtrace/contrib/sinatra/headers.rb +2 -3
  376. data/lib/ddtrace/contrib/sinatra/integration.rb +1 -0
  377. data/lib/ddtrace/contrib/sinatra/patcher.rb +3 -1
  378. data/lib/ddtrace/contrib/sinatra/tracer.rb +28 -7
  379. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +13 -6
  380. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +2 -0
  381. data/lib/ddtrace/contrib/sneakers/ext.rb +12 -11
  382. data/lib/ddtrace/contrib/sneakers/integration.rb +1 -0
  383. data/lib/ddtrace/contrib/sneakers/patcher.rb +1 -0
  384. data/lib/ddtrace/contrib/sneakers/tracer.rb +17 -21
  385. data/lib/ddtrace/contrib/status_code_matcher.rb +70 -0
  386. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -0
  387. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +5 -6
  388. data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -0
  389. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +5 -0
  390. data/lib/ddtrace/contrib/sucker_punch/integration.rb +1 -0
  391. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +2 -0
  392. data/lib/ddtrace/correlation.rb +3 -1
  393. data/lib/ddtrace/diagnostics/environment_logger.rb +9 -7
  394. data/lib/ddtrace/diagnostics/health.rb +1 -0
  395. data/lib/ddtrace/distributed_tracing/headers/b3.rb +1 -0
  396. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +1 -0
  397. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +1 -0
  398. data/lib/ddtrace/distributed_tracing/headers/headers.rb +2 -0
  399. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +2 -3
  400. data/lib/ddtrace/encoding.rb +3 -0
  401. data/lib/ddtrace/error.rb +78 -8
  402. data/lib/ddtrace/event.rb +1 -0
  403. data/lib/ddtrace/ext/analytics.rb +1 -0
  404. data/lib/ddtrace/ext/app_types.rb +1 -0
  405. data/lib/ddtrace/ext/correlation.rb +1 -0
  406. data/lib/ddtrace/ext/diagnostics.rb +1 -0
  407. data/lib/ddtrace/ext/distributed.rb +9 -2
  408. data/lib/ddtrace/ext/environment.rb +8 -0
  409. data/lib/ddtrace/ext/errors.rb +1 -0
  410. data/lib/ddtrace/ext/forced_tracing.rb +1 -0
  411. data/lib/ddtrace/ext/git.rb +32 -0
  412. data/lib/ddtrace/ext/http.rb +2 -1
  413. data/lib/ddtrace/ext/integration.rb +1 -0
  414. data/lib/ddtrace/ext/manual_tracing.rb +1 -0
  415. data/lib/ddtrace/ext/metrics.rb +1 -0
  416. data/lib/ddtrace/ext/net.rb +1 -0
  417. data/lib/ddtrace/ext/priority.rb +7 -4
  418. data/lib/ddtrace/ext/profiling.rb +53 -0
  419. data/lib/ddtrace/ext/runtime.rb +5 -7
  420. data/lib/ddtrace/ext/sampling.rb +1 -0
  421. data/lib/ddtrace/ext/sql.rb +1 -0
  422. data/lib/ddtrace/ext/test.rb +9 -0
  423. data/lib/ddtrace/ext/transport.rb +14 -0
  424. data/lib/ddtrace/forced_tracing.rb +3 -0
  425. data/lib/ddtrace/logger.rb +2 -1
  426. data/lib/ddtrace/metrics.rb +84 -24
  427. data/lib/ddtrace/opentelemetry/extensions.rb +2 -1
  428. data/lib/ddtrace/opentelemetry/span.rb +1 -0
  429. data/lib/ddtrace/opentracer/binary_propagator.rb +1 -0
  430. data/lib/ddtrace/opentracer/carrier.rb +1 -0
  431. data/lib/ddtrace/opentracer/distributed_headers.rb +4 -0
  432. data/lib/ddtrace/opentracer/global_tracer.rb +1 -0
  433. data/lib/ddtrace/opentracer/propagator.rb +1 -0
  434. data/lib/ddtrace/opentracer/rack_propagator.rb +1 -0
  435. data/lib/ddtrace/opentracer/scope.rb +1 -0
  436. data/lib/ddtrace/opentracer/scope_manager.rb +1 -0
  437. data/lib/ddtrace/opentracer/span.rb +3 -6
  438. data/lib/ddtrace/opentracer/span_context.rb +1 -0
  439. data/lib/ddtrace/opentracer/span_context_factory.rb +1 -0
  440. data/lib/ddtrace/opentracer/text_map_propagator.rb +1 -0
  441. data/lib/ddtrace/opentracer/thread_local_scope.rb +2 -0
  442. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +1 -0
  443. data/lib/ddtrace/opentracer/tracer.rb +1 -0
  444. data/lib/ddtrace/opentracer.rb +21 -39
  445. data/lib/ddtrace/patcher.rb +28 -6
  446. data/lib/ddtrace/pin.rb +9 -61
  447. data/lib/ddtrace/pipeline/span_filter.rb +2 -1
  448. data/lib/ddtrace/pipeline/span_processor.rb +1 -0
  449. data/lib/ddtrace/pipeline.rb +1 -0
  450. data/lib/ddtrace/profiling/backtrace_location.rb +33 -0
  451. data/lib/ddtrace/profiling/buffer.rb +42 -0
  452. data/lib/ddtrace/profiling/collectors/stack.rb +297 -0
  453. data/lib/ddtrace/profiling/encoding/profile.rb +46 -0
  454. data/lib/ddtrace/profiling/event.rb +14 -0
  455. data/lib/ddtrace/profiling/events/stack.rb +81 -0
  456. data/lib/ddtrace/profiling/exporter.rb +24 -0
  457. data/lib/ddtrace/profiling/ext/forking.rb +98 -0
  458. data/lib/ddtrace/profiling/flush.rb +44 -0
  459. data/lib/ddtrace/profiling/native_extension.rb +40 -0
  460. data/lib/ddtrace/profiling/pprof/builder.rb +126 -0
  461. data/lib/ddtrace/profiling/pprof/converter.rb +103 -0
  462. data/lib/ddtrace/profiling/pprof/message_set.rb +15 -0
  463. data/lib/ddtrace/profiling/pprof/payload.rb +19 -0
  464. data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
  465. data/lib/ddtrace/profiling/pprof/pprof_pb.rb +82 -0
  466. data/lib/ddtrace/profiling/pprof/stack_sample.rb +140 -0
  467. data/lib/ddtrace/profiling/pprof/string_table.rb +11 -0
  468. data/lib/ddtrace/profiling/pprof/template.rb +119 -0
  469. data/lib/ddtrace/profiling/preload.rb +4 -0
  470. data/lib/ddtrace/profiling/profiler.rb +31 -0
  471. data/lib/ddtrace/profiling/recorder.rb +96 -0
  472. data/lib/ddtrace/profiling/scheduler.rb +150 -0
  473. data/lib/ddtrace/profiling/tasks/setup.rb +90 -0
  474. data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +42 -0
  475. data/lib/ddtrace/profiling/trace_identifiers/helper.rb +46 -0
  476. data/lib/ddtrace/profiling/transport/client.rb +15 -0
  477. data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +94 -0
  478. data/lib/ddtrace/profiling/transport/http/api/instance.rb +37 -0
  479. data/lib/ddtrace/profiling/transport/http/api/spec.rb +41 -0
  480. data/lib/ddtrace/profiling/transport/http/api.rb +44 -0
  481. data/lib/ddtrace/profiling/transport/http/builder.rb +29 -0
  482. data/lib/ddtrace/profiling/transport/http/client.rb +34 -0
  483. data/lib/ddtrace/profiling/transport/http/response.rb +22 -0
  484. data/lib/ddtrace/profiling/transport/http.rb +111 -0
  485. data/lib/ddtrace/profiling/transport/io/client.rb +28 -0
  486. data/lib/ddtrace/profiling/transport/io/response.rb +17 -0
  487. data/lib/ddtrace/profiling/transport/io.rb +31 -0
  488. data/lib/ddtrace/profiling/transport/parcel.rb +18 -0
  489. data/lib/ddtrace/profiling/transport/request.rb +16 -0
  490. data/lib/ddtrace/profiling/transport/response.rb +9 -0
  491. data/lib/ddtrace/profiling.rb +149 -0
  492. data/lib/ddtrace/propagation/grpc_propagator.rb +2 -0
  493. data/lib/ddtrace/propagation/http_propagator.rb +18 -2
  494. data/lib/ddtrace/quantization/hash.rb +1 -0
  495. data/lib/ddtrace/quantization/http.rb +4 -0
  496. data/lib/ddtrace/runtime/metrics.rb +35 -14
  497. data/lib/ddtrace/sampler.rb +20 -9
  498. data/lib/ddtrace/sampling/matcher.rb +1 -0
  499. data/lib/ddtrace/sampling/rate_limiter.rb +66 -16
  500. data/lib/ddtrace/sampling/rule.rb +2 -1
  501. data/lib/ddtrace/sampling/rule_sampler.rb +19 -11
  502. data/lib/ddtrace/sampling.rb +1 -0
  503. data/lib/ddtrace/span.rb +27 -14
  504. data/lib/ddtrace/sync_writer.rb +17 -15
  505. data/lib/ddtrace/tasks/exec.rb +47 -0
  506. data/lib/ddtrace/tasks/help.rb +15 -0
  507. data/lib/ddtrace/tracer.rb +61 -50
  508. data/lib/ddtrace/transport/http/adapters/net.rb +41 -11
  509. data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
  510. data/lib/ddtrace/transport/http/adapters/test.rb +5 -2
  511. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +26 -16
  512. data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
  513. data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
  514. data/lib/ddtrace/transport/http/api/instance.rb +1 -0
  515. data/lib/ddtrace/transport/http/api/map.rb +1 -0
  516. data/lib/ddtrace/transport/http/api/spec.rb +1 -0
  517. data/lib/ddtrace/transport/http/api.rb +1 -0
  518. data/lib/ddtrace/transport/http/builder.rb +21 -7
  519. data/lib/ddtrace/transport/http/client.rb +3 -1
  520. data/lib/ddtrace/transport/http/env.rb +9 -0
  521. data/lib/ddtrace/transport/http/response.rb +1 -0
  522. data/lib/ddtrace/transport/http/statistics.rb +3 -2
  523. data/lib/ddtrace/transport/http/traces.rb +6 -6
  524. data/lib/ddtrace/transport/http.rb +48 -41
  525. data/lib/ddtrace/transport/io/client.rb +17 -9
  526. data/lib/ddtrace/transport/io/response.rb +2 -3
  527. data/lib/ddtrace/transport/io/traces.rb +10 -1
  528. data/lib/ddtrace/transport/io.rb +2 -1
  529. data/lib/ddtrace/transport/parcel.rb +7 -0
  530. data/lib/ddtrace/transport/request.rb +1 -0
  531. data/lib/ddtrace/transport/response.rb +1 -0
  532. data/lib/ddtrace/transport/statistics.rb +1 -0
  533. data/lib/ddtrace/transport/traces.rb +21 -3
  534. data/lib/ddtrace/utils/compression.rb +28 -0
  535. data/lib/ddtrace/utils/database.rb +1 -0
  536. data/lib/ddtrace/utils/forking.rb +53 -0
  537. data/lib/ddtrace/utils/object_set.rb +40 -0
  538. data/lib/ddtrace/utils/only_once.rb +41 -0
  539. data/lib/ddtrace/utils/sequence.rb +18 -0
  540. data/lib/ddtrace/utils/string_table.rb +46 -0
  541. data/lib/ddtrace/utils/time.rb +40 -3
  542. data/lib/ddtrace/utils.rb +23 -12
  543. data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
  544. data/lib/ddtrace/vendor/active_record/connection_specification.rb +1 -0
  545. data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
  546. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +117 -0
  547. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +58 -0
  548. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +136 -0
  549. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +10 -0
  550. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +9 -0
  551. data/lib/ddtrace/vendor/multipart-post/multipart.rb +13 -0
  552. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +33 -0
  553. data/lib/ddtrace/version.rb +16 -3
  554. data/lib/ddtrace/worker.rb +1 -0
  555. data/lib/ddtrace/workers/async.rb +15 -5
  556. data/lib/ddtrace/workers/{loop.rb → interval_loop.rb} +23 -12
  557. data/lib/ddtrace/workers/polling.rb +14 -6
  558. data/lib/ddtrace/workers/queue.rb +3 -1
  559. data/lib/ddtrace/workers/runtime_metrics.rb +22 -4
  560. data/lib/ddtrace/workers/trace_writer.rb +14 -16
  561. data/lib/ddtrace/workers.rb +8 -2
  562. data/lib/ddtrace/writer.rb +33 -8
  563. data/lib/ddtrace.rb +22 -48
  564. metadata +182 -405
  565. data/.circleci/config.yml +0 -548
  566. data/.circleci/images/primary/Dockerfile-2.0.0 +0 -73
  567. data/.circleci/images/primary/Dockerfile-2.1.10 +0 -73
  568. data/.circleci/images/primary/Dockerfile-2.2.10 +0 -73
  569. data/.circleci/images/primary/Dockerfile-2.3.8 +0 -75
  570. data/.circleci/images/primary/Dockerfile-2.4.6 +0 -73
  571. data/.circleci/images/primary/Dockerfile-2.5.6 +0 -73
  572. data/.circleci/images/primary/Dockerfile-2.6.4 +0 -73
  573. data/.circleci/images/primary/Dockerfile-2.7.0 +0 -73
  574. data/.circleci/images/primary/Dockerfile-jruby-9.2 +0 -77
  575. data/.dockerignore +0 -1
  576. data/.env +0 -26
  577. data/.github/CODEOWNERS +0 -1
  578. data/.gitlab-ci.yml +0 -27
  579. data/.rspec +0 -1
  580. data/.rubocop.yml +0 -85
  581. data/.simplecov +0 -38
  582. data/Appraisals +0 -1121
  583. data/Gemfile +0 -7
  584. data/Rakefile +0 -788
  585. data/benchmarks/postgres_database.yml +0 -9
  586. data/benchmarks/sidekiq_test.rb +0 -154
  587. data/docker-compose.yml +0 -370
  588. data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
  589. data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
  590. data/lib/ddtrace/augmentation/shim.rb +0 -102
  591. data/lib/ddtrace/augmentation.rb +0 -13
  592. data/lib/ddtrace/environment.rb +0 -41
  593. data/lib/ddtrace/monkey.rb +0 -58
  594. data/lib/ddtrace/runtime/cgroup.rb +0 -44
  595. data/lib/ddtrace/runtime/class_count.rb +0 -17
  596. data/lib/ddtrace/runtime/container.rb +0 -73
  597. data/lib/ddtrace/runtime/gc.rb +0 -16
  598. data/lib/ddtrace/runtime/identity.rb +0 -41
  599. data/lib/ddtrace/runtime/object_space.rb +0 -19
  600. data/lib/ddtrace/runtime/socket.rb +0 -14
  601. data/lib/ddtrace/runtime/thread_count.rb +0 -16
  602. data/tasks/release_gem.rake +0 -28
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/contrib/analytics'
2
3
 
3
4
  module Datadog
@@ -8,10 +9,16 @@ module Datadog
8
9
  def initialize(options = {})
9
10
  @tracer = options[:tracer] || configuration[:tracer]
10
11
  @shoryuken_service = options[:service_name] || configuration[:service_name]
12
+ @error_handler = options[:error_handler] || configuration[:error_handler]
11
13
  end
12
14
 
13
15
  def call(worker_instance, queue, sqs_msg, body)
14
- @tracer.trace(Ext::SPAN_JOB, service: @shoryuken_service, span_type: Datadog::Ext::AppTypes::WORKER) do |span|
16
+ @tracer.trace(
17
+ Ext::SPAN_JOB,
18
+ service: @shoryuken_service,
19
+ span_type: Datadog::Ext::AppTypes::WORKER,
20
+ on_error: @error_handler
21
+ ) do |span|
15
22
  # Set analytics sample rate
16
23
  if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
17
24
  Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
@@ -24,7 +31,7 @@ module Datadog
24
31
  span.set_tag(Ext::TAG_JOB_ID, sqs_msg.message_id)
25
32
  span.set_tag(Ext::TAG_JOB_QUEUE, queue)
26
33
  span.set_tag(Ext::TAG_JOB_ATTRIBUTES, sqs_msg.attributes) if sqs_msg.respond_to?(:attributes)
27
- span.set_tag(Ext::TAG_JOB_BODY, body)
34
+ span.set_tag(Ext::TAG_JOB_BODY, body) if configuration[:tag_body]
28
35
 
29
36
  yield
30
37
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/contrib/sidekiq/tracing'
2
3
  require 'ddtrace/contrib/analytics'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/configuration/settings'
2
3
  require 'ddtrace/contrib/sidekiq/ext'
3
4
 
@@ -29,6 +30,7 @@ module Datadog
29
30
 
30
31
  option :service_name, default: Ext::SERVICE_NAME
31
32
  option :client_service_name, default: Ext::CLIENT_SERVICE_NAME
33
+ option :error_handler, default: Datadog::Tracer::DEFAULT_ON_ERROR
32
34
  end
33
35
  end
34
36
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module Sidekiq
@@ -14,6 +15,9 @@ module Datadog
14
15
  SERVICE_NAME = 'sidekiq'.freeze
15
16
  SPAN_PUSH = 'sidekiq.push'.freeze
16
17
  SPAN_JOB = 'sidekiq.job'.freeze
18
+ SPAN_JOB_FETCH = 'sidekiq.job_fetch'.freeze
19
+ SPAN_HEARTBEAT = 'sidekiq.heartbeat'.freeze
20
+ SPAN_SCHEDULED_PUSH = 'sidekiq.scheduled_push'.freeze
17
21
  TAG_JOB_DELAY = 'sidekiq.job.delay'.freeze
18
22
  TAG_JOB_ID = 'sidekiq.job.id'.freeze
19
23
  TAG_JOB_QUEUE = 'sidekiq.job.queue'.freeze
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/integration'
2
3
  require 'ddtrace/contrib/sidekiq/configuration/settings'
3
4
  require 'ddtrace/contrib/sidekiq/patcher'
@@ -10,6 +11,7 @@ module Datadog
10
11
  include Contrib::Integration
11
12
 
12
13
  MINIMUM_VERSION = Gem::Version.new('3.5.4')
14
+ MINIMUM_SERVER_INTERNAL_TRACING_VERSION = Gem::Version.new('5.2.4')
13
15
 
14
16
  register_as :sidekiq
15
17
 
@@ -25,6 +27,15 @@ module Datadog
25
27
  super && version >= MINIMUM_VERSION
26
28
  end
27
29
 
30
+ # Only patch server internals on v5.2.4+ because that's when loading of
31
+ # `Sidekiq::Launcher` stabilized. Sidekiq 4+ technically can support our
32
+ # patches (with minor adjustments), but in order to avoid explicitly
33
+ # requiring `sidekiq/launcher` ourselves (which could affect gem
34
+ # initialization order), we are limiting this tracing to v5.2.4+.
35
+ def self.compatible_with_server_internal_tracing?
36
+ version >= MINIMUM_SERVER_INTERNAL_TRACING_VERSION
37
+ end
38
+
28
39
  def default_configuration
29
40
  Configuration::Settings.new
30
41
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/patcher'
2
3
 
3
4
  module Datadog
@@ -33,8 +34,34 @@ module Datadog
33
34
  config.server_middleware do |chain|
34
35
  chain.add(Sidekiq::ServerTracer)
35
36
  end
37
+
38
+ patch_server_internals if Integration.compatible_with_server_internal_tracing?
36
39
  end
37
40
  end
41
+
42
+ def patch_server_internals
43
+ patch_server_heartbeat
44
+ patch_server_job_fetch
45
+ patch_server_scheduled_push
46
+ end
47
+
48
+ def patch_server_heartbeat
49
+ require 'ddtrace/contrib/sidekiq/server_internal_tracer/heartbeat'
50
+
51
+ ::Sidekiq::Launcher.prepend(ServerInternalTracer::Heartbeat)
52
+ end
53
+
54
+ def patch_server_job_fetch
55
+ require 'ddtrace/contrib/sidekiq/server_internal_tracer/job_fetch'
56
+
57
+ ::Sidekiq::Processor.prepend(ServerInternalTracer::JobFetch)
58
+ end
59
+
60
+ def patch_server_scheduled_push
61
+ require 'ddtrace/contrib/sidekiq/server_internal_tracer/scheduled_push'
62
+
63
+ ::Sidekiq::Scheduled::Poller.prepend(ServerInternalTracer::ScheduledPush)
64
+ end
38
65
  end
39
66
  end
40
67
  end
@@ -0,0 +1,30 @@
1
+ # typed: true
2
+
3
+ module Datadog
4
+ module Contrib
5
+ module Sidekiq
6
+ module ServerInternalTracer
7
+ # Trace when a Sidekiq process has a heartbeat
8
+ module Heartbeat
9
+ private
10
+
11
+ def ❤ # rubocop:disable Naming/AsciiIdentifiers, Naming/MethodName
12
+ configuration = Datadog.configuration[:sidekiq]
13
+
14
+ configuration[:tracer].trace(Ext::SPAN_HEARTBEAT) do |span|
15
+ span.service = configuration[:service_name]
16
+ span.span_type = Datadog::Ext::AppTypes::WORKER
17
+
18
+ # Set analytics sample rate
19
+ if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
20
+ Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
21
+ end
22
+
23
+ super
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ # typed: true
2
+
3
+ module Datadog
4
+ module Contrib
5
+ module Sidekiq
6
+ module ServerInternalTracer
7
+ # Trace when Sidekiq looks for another job to work
8
+ module JobFetch
9
+ private
10
+
11
+ def fetch
12
+ configuration = Datadog.configuration[:sidekiq]
13
+
14
+ configuration[:tracer].trace(Ext::SPAN_JOB_FETCH) do |span|
15
+ span.service = configuration[:service_name]
16
+ span.span_type = Datadog::Ext::AppTypes::WORKER
17
+
18
+ # Set analytics sample rate
19
+ if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
20
+ Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
21
+ end
22
+
23
+ super
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,29 @@
1
+ # typed: true
2
+
3
+ module Datadog
4
+ module Contrib
5
+ module Sidekiq
6
+ module ServerInternalTracer
7
+ # Trace when Sidekiq checks to see if there are scheduled jobs that need to be worked
8
+ # https://github.com/mperham/sidekiq/wiki/Scheduled-Jobs
9
+ module ScheduledPush
10
+ def enqueue
11
+ configuration = Datadog.configuration[:sidekiq]
12
+
13
+ configuration[:tracer].trace(Ext::SPAN_SCHEDULED_PUSH) do |span|
14
+ span.service = configuration[:service_name]
15
+ span.span_type = Datadog::Ext::AppTypes::WORKER
16
+
17
+ # Set analytics sample rate
18
+ if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
19
+ Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
20
+ end
21
+
22
+ super
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/contrib/sidekiq/tracing'
2
3
  require 'ddtrace/contrib/analytics'
3
4
 
@@ -11,6 +12,7 @@ module Datadog
11
12
  def initialize(options = {})
12
13
  super
13
14
  @sidekiq_service = options[:service_name] || configuration[:service_name]
15
+ @error_handler = options[:error_handler] || configuration[:error_handler]
14
16
  end
15
17
 
16
18
  def call(worker, job, queue)
@@ -19,7 +21,8 @@ module Datadog
19
21
  service = worker_config(resource, :service_name) || @sidekiq_service
20
22
  tag_args = worker_config(resource, :tag_args) || configuration[:tag_args]
21
23
 
22
- @tracer.trace(Ext::SPAN_JOB, service: service, span_type: Datadog::Ext::AppTypes::WORKER) do |span|
24
+ @tracer.trace(Ext::SPAN_JOB, service: service, span_type: Datadog::Ext::AppTypes::WORKER,
25
+ on_error: @error_handler) do |span|
23
26
  span.resource = resource
24
27
  # Set analytics sample rate
25
28
  if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
@@ -35,9 +38,7 @@ module Datadog
35
38
  span.set_tag(Ext::TAG_JOB_QUEUE, job['queue'])
36
39
  span.set_tag(Ext::TAG_JOB_WRAPPER, job['class']) if job['wrapped']
37
40
  span.set_tag(Ext::TAG_JOB_DELAY, 1000.0 * (Time.now.utc.to_f - job['enqueued_at'].to_f))
38
- if tag_args && !job['args'].nil? && !job['args'].empty?
39
- span.set_tag(Ext::TAG_JOB_ARGS, job['args'])
40
- end
41
+ span.set_tag(Ext::TAG_JOB_ARGS, job['args']) if tag_args && !job['args'].nil? && !job['args'].empty?
41
42
 
42
43
  yield
43
44
  end
@@ -57,9 +58,7 @@ module Datadog
57
58
  nil
58
59
  end
59
60
 
60
- if worker_klass.respond_to?(:datadog_tracer_config)
61
- worker_klass.datadog_tracer_config[key]
62
- end
61
+ worker_klass.datadog_tracer_config[key] if worker_klass.respond_to?(:datadog_tracer_config)
63
62
  end
64
63
  end
65
64
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/ext/app_types'
2
3
  require 'ddtrace/contrib/sidekiq/ext'
3
4
 
@@ -31,7 +32,6 @@ module Datadog
31
32
  job['class'].to_s
32
33
  end
33
34
 
34
- #
35
35
  def delay_extension_class(job)
36
36
  clazz, method = YAML.parse(job['args'].first).children.first.children
37
37
 
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/configuration/settings'
2
3
  require 'ddtrace/ext/app_types'
3
4
  require 'ddtrace/contrib/sinatra/ext'
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/ext/http'
2
3
  require 'ddtrace/contrib/sinatra/ext'
3
4
 
@@ -9,7 +10,8 @@ module Datadog
9
10
  module_function
10
11
 
11
12
  def datadog_span(env, app)
12
- env[Ext::RACK_ENV_REQUEST_SPAN][app]
13
+ request_span = env[Ext::RACK_ENV_REQUEST_SPAN]
14
+ request_span && request_span[app]
13
15
  end
14
16
 
15
17
  def set_datadog_span(env, app, span)
@@ -23,9 +25,7 @@ module Datadog
23
25
  {}.tap do |result|
24
26
  headers.each do |header|
25
27
  rack_header = header_to_rack_header(header)
26
- if env.key?(rack_header)
27
- result[Datadog::Ext::HTTP::RequestHeaders.to_tag(header)] = env[rack_header]
28
- end
28
+ result[Datadog::Ext::HTTP::RequestHeaders.to_tag(header)] = env[rack_header] if env.key?(rack_header)
29
29
  end
30
30
  end
31
31
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module Sinatra
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/ext/http'
2
3
 
3
4
  module Datadog
@@ -18,9 +19,7 @@ module Datadog
18
19
  # Try a case-insensitive lookup
19
20
  uppercased_header = header.to_s.upcase
20
21
  matching_header = headers.keys.find { |h| h.upcase == uppercased_header }
21
- if matching_header
22
- result[Datadog::Ext::HTTP::ResponseHeaders.to_tag(header)] = headers[matching_header]
23
- end
22
+ result[Datadog::Ext::HTTP::ResponseHeaders.to_tag(header)] = headers[matching_header] if matching_header
24
23
  end
25
24
  end
26
25
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/integration'
2
3
  require 'ddtrace/contrib/sinatra/configuration/settings'
3
4
  require 'ddtrace/contrib/sinatra/patcher'
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/contrib/patcher'
2
3
 
3
4
  module Datadog
@@ -5,6 +6,7 @@ module Datadog
5
6
  module Sinatra
6
7
  # Patcher enables patching of 'sinatra' module.
7
8
  module Patcher
9
+ include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
8
10
  include Contrib::Patcher
9
11
 
10
12
  module_function
@@ -20,7 +22,7 @@ module Datadog
20
22
 
21
23
  def register_tracer
22
24
  ::Sinatra.send(:register, Datadog::Contrib::Sinatra::Tracer)
23
- ::Sinatra::Base.send(:prepend, Sinatra::Tracer::Base)
25
+ ::Sinatra::Base.prepend(Sinatra::Tracer::Base)
24
26
  end
25
27
  end
26
28
  end
@@ -1,10 +1,11 @@
1
+ # typed: false
1
2
  require 'sinatra/base'
2
3
 
3
4
  require 'ddtrace/ext/app_types'
4
5
  require 'ddtrace/ext/errors'
5
6
  require 'ddtrace/ext/http'
6
7
  require 'ddtrace/propagation/http_propagator'
7
-
8
+ require 'ddtrace/utils/only_once'
8
9
  require 'ddtrace/contrib/sinatra/ext'
9
10
  require 'ddtrace/contrib/sinatra/tracer_middleware'
10
11
  require 'ddtrace/contrib/sinatra/env'
@@ -76,6 +77,9 @@ module Datadog
76
77
 
77
78
  # Method overrides for Sinatra::Base
78
79
  module Base
80
+ MISSING_REQUEST_SPAN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
81
+ private_constant :MISSING_REQUEST_SPAN_ONLY_ONCE
82
+
79
83
  def render(engine, data, *)
80
84
  tracer = Datadog.configuration[:sinatra][:tracer]
81
85
  return super unless tracer.enabled
@@ -104,19 +108,36 @@ module Datadog
104
108
  tracer.trace(
105
109
  Ext::SPAN_ROUTE,
106
110
  service: configuration[:service_name],
107
- span_type: Datadog::Ext::HTTP::TYPE_INBOUND
111
+ span_type: Datadog::Ext::HTTP::TYPE_INBOUND,
112
+ resource: "#{request.request_method} #{@datadog_route}",
108
113
  ) do |span|
109
- span.resource = "#{request.request_method} #{@datadog_route}"
110
-
111
114
  span.set_tag(Ext::TAG_APP_NAME, settings.name || settings.superclass.name)
112
115
  span.set_tag(Ext::TAG_ROUTE_PATH, @datadog_route)
113
- if request.script_name && !request.script_name.empty?
114
- span.set_tag(Ext::TAG_SCRIPT_NAME, request.script_name)
115
- end
116
+ span.set_tag(Ext::TAG_SCRIPT_NAME, request.script_name) if request.script_name && !request.script_name.empty?
116
117
 
117
118
  rack_request_span = env[Datadog::Contrib::Rack::TraceMiddleware::RACK_REQUEST_SPAN]
118
119
  rack_request_span.resource = span.resource if rack_request_span
119
120
 
121
+ sinatra_request_span =
122
+ if self.class <= ::Sinatra::Application # Classic style (top-level) application
123
+ Sinatra::Env.datadog_span(env, ::Sinatra::Application)
124
+ else
125
+ Sinatra::Env.datadog_span(env, self.class)
126
+ end
127
+ if sinatra_request_span
128
+ sinatra_request_span.resource = span.resource
129
+ else
130
+ MISSING_REQUEST_SPAN_ONLY_ONCE.run do
131
+ Datadog.logger.warn do
132
+ 'Sinatra integration is misconfigured, reported traces will be missing request metadata ' \
133
+ 'such as path and HTTP status code. ' \
134
+ 'Did you forget to add `register Datadog::Contrib::Sinatra::Tracer` to your ' \
135
+ '`Sinatra::Base` subclass? ' \
136
+ 'See <https://docs.datadoghq.com/tracing/setup_overview/setup/ruby/#sinatra> for more details.'
137
+ end
138
+ end
139
+ end
140
+
120
141
  Contrib::Analytics.set_measured(span)
121
142
 
122
143
  super
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/analytics'
2
3
  require 'ddtrace/contrib/sinatra/ext'
3
4
  require 'ddtrace/contrib/sinatra/env'
@@ -8,13 +9,15 @@ module Datadog
8
9
  module Sinatra
9
10
  # Middleware used for automatically tagging configured headers and handle request span
10
11
  class TracerMiddleware
11
- def initialize(app, app_instance: nil)
12
+ def initialize(app, opt = {})
12
13
  @app = app
13
- @app_instance = app_instance
14
+ @app_instance = opt[:app_instance]
14
15
  end
15
16
 
16
17
  # rubocop:disable Metrics/AbcSize
17
18
  # rubocop:disable Metrics/MethodLength
19
+ # rubocop:disable Metrics/CyclomaticComplexity
20
+ # rubocop:disable Metrics/PerceivedComplexity
18
21
  def call(env)
19
22
  # Set the trace context (e.g. distributed tracing)
20
23
  if configuration[:distributed_tracing] && tracer.provider.context.trace_id.nil?
@@ -26,7 +29,9 @@ module Datadog
26
29
  Ext::SPAN_REQUEST,
27
30
  service: configuration[:service_name],
28
31
  span_type: Datadog::Ext::HTTP::TYPE_INBOUND,
29
- resource: env['REQUEST_METHOD']
32
+ # this is kept nil until we set a correct one (either in the route or with a fallback in the ensure below)
33
+ # the nil signals that there's no good one yet and is also seen by profiler, when sampling the resource
34
+ resource: nil,
30
35
  ) do |span|
31
36
  begin
32
37
  Sinatra::Env.set_datadog_span(env, @app_instance, span)
@@ -40,12 +45,14 @@ module Datadog
40
45
  request = ::Sinatra::Request.new(env)
41
46
  span.set_tag(Datadog::Ext::HTTP::URL, request.path)
42
47
  span.set_tag(Datadog::Ext::HTTP::METHOD, request.request_method)
43
- if request.script_name && !request.script_name.empty?
44
- span.set_tag(Ext::TAG_SCRIPT_NAME, request.script_name)
45
- end
48
+ span.set_tag(Ext::TAG_SCRIPT_NAME, request.script_name) if request.script_name && !request.script_name.empty?
46
49
 
47
50
  span.set_tag(Ext::TAG_APP_NAME, @app_instance.settings.name)
48
51
 
52
+ # If this app handled the request, then Contrib::Sinatra::Tracer OR Contrib::Sinatra::Base set the
53
+ # resource; if no resource was set, let's use a fallback
54
+ span.resource = env['REQUEST_METHOD'] if span.resource.nil?
55
+
49
56
  # TODO: This backfills the non-matching Sinatra app with a "#{method} #{path}"
50
57
  # TODO: resource name. This shouldn't be the case, as that app has never handled
51
58
  # TODO: the response with that resource.
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require 'ddtrace/contrib/configuration/settings'
@@ -24,6 +25,7 @@ module Datadog
24
25
  end
25
26
 
26
27
  option :service_name, default: Ext::SERVICE_NAME
28
+ option :error_handler, default: Datadog::Tracer::DEFAULT_ON_ERROR
27
29
  option :tag_body, default: false
28
30
  end
29
31
  end
@@ -1,3 +1,4 @@
1
+ # typed: strict
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Datadog
@@ -5,17 +6,17 @@ module Datadog
5
6
  module Sneakers
6
7
  # Sneakers integration constants
7
8
  module Ext
8
- APP = 'sneakers'.freeze
9
- ENV_ENABLED = 'DD_TRACE_SNEAKERS_ENABLED'.freeze
10
- ENV_ANALYTICS_ENABLED = 'DD_TRACE_SNEAKERS_ANALYTICS_ENABLED'.freeze
11
- ENV_ANALYTICS_ENABLED_OLD = 'DD_SNEAKERS_ANALYTICS_ENABLED'.freeze
12
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SNEAKERS_ANALYTICS_SAMPLE_RATE'.freeze
13
- ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_SNEAKERS_ANALYTICS_SAMPLE_RATE'.freeze
14
- SERVICE_NAME = 'sneakers'.freeze
15
- SPAN_JOB = 'sneakers.job'.freeze
16
- TAG_JOB_ROUTING_KEY = 'sneakers.routing_key'.freeze
17
- TAG_JOB_QUEUE = 'sneakers.queue'.freeze
18
- TAG_JOB_BODY = 'sneakers.body'.freeze
9
+ APP = 'sneakers'
10
+ ENV_ENABLED = 'DD_TRACE_SNEAKERS_ENABLED'
11
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_SNEAKERS_ANALYTICS_ENABLED'
12
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_SNEAKERS_ANALYTICS_ENABLED'
13
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SNEAKERS_ANALYTICS_SAMPLE_RATE'
14
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_SNEAKERS_ANALYTICS_SAMPLE_RATE'
15
+ SERVICE_NAME = 'sneakers'
16
+ SPAN_JOB = 'sneakers.job'
17
+ TAG_JOB_ROUTING_KEY = 'sneakers.routing_key'
18
+ TAG_JOB_QUEUE = 'sneakers.queue'
19
+ TAG_JOB_BODY = 'sneakers.body'
19
20
  end
20
21
  end
21
22
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require 'ddtrace/contrib/integration'
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require 'ddtrace/contrib/sneakers/tracer'
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require 'ddtrace/contrib/analytics'
@@ -14,33 +15,28 @@ module Datadog
14
15
 
15
16
  def call(deserialized_msg, delivery_info, metadata, handler)
16
17
  trace_options = {
17
- service: configuration[:service_name],
18
- span_type: Datadog::Ext::AppTypes::WORKER
18
+ service: configuration[:service_name],
19
+ span_type: Datadog::Ext::AppTypes::WORKER,
20
+ on_error: configuration[:error_handler]
19
21
  }
20
- request_span = tracer.trace(Ext::SPAN_JOB, trace_options)
21
22
 
22
- # Set analytics sample rate
23
- if Datadog::Contrib::Analytics.enabled?(configuration[:analytics_enabled])
24
- Datadog::Contrib::Analytics.set_sample_rate(request_span, configuration[:analytics_sample_rate])
25
- end
23
+ tracer.trace(Ext::SPAN_JOB, trace_options) do |request_span|
24
+ # Set analytics sample rate
25
+ if Datadog::Contrib::Analytics.enabled?(configuration[:analytics_enabled])
26
+ Datadog::Contrib::Analytics.set_sample_rate(request_span, configuration[:analytics_sample_rate])
27
+ end
26
28
 
27
- # Measure service stats
28
- Contrib::Analytics.set_measured(request_span)
29
+ # Measure service stats
30
+ Contrib::Analytics.set_measured(request_span)
29
31
 
30
- request_span.resource = @app.to_proc.binding.eval('self.class').to_s
31
- request_span.set_tag(Ext::TAG_JOB_ROUTING_KEY, delivery_info.routing_key)
32
- request_span.set_tag(Ext::TAG_JOB_QUEUE, delivery_info.consumer.queue.name)
32
+ request_span.resource = @app.to_proc.binding.eval('self.class').to_s
33
+ request_span.set_tag(Ext::TAG_JOB_ROUTING_KEY, delivery_info.routing_key)
34
+ request_span.set_tag(Ext::TAG_JOB_QUEUE, delivery_info.consumer.queue.name)
33
35
 
34
- if configuration[:tag_body]
35
- request_span.set_tag(Ext::TAG_JOB_BODY, deserialized_msg)
36
- end
36
+ request_span.set_tag(Ext::TAG_JOB_BODY, deserialized_msg) if configuration[:tag_body]
37
37
 
38
- @app.call(deserialized_msg, delivery_info, metadata, handler)
39
- rescue StandardError => e
40
- request_span.set_error(e) unless request_span.nil?
41
- raise e
42
- ensure
43
- request_span.finish if request_span
38
+ @app.call(deserialized_msg, delivery_info, metadata, handler)
39
+ end
44
40
  end
45
41
 
46
42
  private