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