module Datadog::Contrib::ActionPack::ActionController::Instrumentation::Metal
Instrumentation
for ActionController::Metal
Public Instance Methods
datadog_response_status()
click to toggle source
# File lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb, line 142 def datadog_response_status case response when ::ActionDispatch::Response response.status when Array # Likely a Rack response array: first element is the status. status = response.first status.class <= Integer ? status : nil end end
process_action(*args)
click to toggle source
Calls superclass method
# File lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb, line 106 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 payload[:exception_controller?] = Instrumentation.exception_controller?(payload) # 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