module Datadog::Tracing::Contrib::ActionPack::ActionController::Instrumentation::Metal
def process_action(*args)
def process_action(*args) # mutable payload with a tracing context that is used in two different # signals; it propagates the request span so that it can be finished # no matter what payload = { controller: self.class, action: action_name, env: request.env, headers: { # The exception this controller was given in the request, # which is typical if the controller is configured to handle exceptions. request_exception: request.headers['action_dispatch.exception'] }, tracing_context: {} } begin # process and catch request exceptions Instrumentation.start_processing(payload) result = super(*args) status = datadog_response_status payload[:status] = status unless status.nil? result # rubocop:disable Lint/RescueException rescue Exception => e payload[:exception] = [e.class.name, e.message] payload[:exception_object] = e raise e end # rubocop:enable Lint/RescueException ensure Instrumentation.finish_processing(payload) end