lib/sentry/rails/controller_transaction.rb in sentry-rails-5.7.0 vs lib/sentry/rails/controller_transaction.rb in sentry-rails-5.8.0

- old
+ new

@@ -1,12 +1,36 @@ module Sentry module Rails module ControllerTransaction def self.included(base) - base.prepend_before_action do |controller| - if Sentry.initialized? - Sentry.get_current_scope.set_transaction_name("#{controller.class}##{controller.action_name}", source: :view) + base.prepend_around_action(:sentry_around_action) + end + + private + + def sentry_around_action + if Sentry.initialized? + transaction_name = "#{self.class}##{action_name}" + Sentry.get_current_scope.set_transaction_name(transaction_name, source: :view) + Sentry.with_child_span(op: "view.process_action.action_controller", description: transaction_name) do |child_span| + if child_span + begin + result = yield + ensure + child_span.set_http_status(response.status) + child_span.set_data(:format, request.format) + child_span.set_data(:method, request.method) + child_span.set_data(:path, request.path) + child_span.set_data(:params, request.params) + end + + result + else + yield + end end + else + yield end end end end end