123456789_123456789_123456789_123456789_123456789_

Module: ActionController::Instrumentation

Relationships & Source Files
Namespace Children
Modules:
Extension / Inclusion / Inheritance Descendants
Included In:
API, Base, ::ActionView::TestCase::TestController, Rails::ApplicationController, Rails::InfoController, Rails::MailersController, Rails::WelcomeController
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Defined in: actionpack/lib/action_controller/metal/instrumentation.rb

Overview

Adds instrumentation to several ends in Base. It also provides some hooks related with process_action. This allows an ORM like Active Record and/or DataMapper to plug in ::ActionController and show related information.

Check ::ActiveRecord::Railties::ControllerRuntime for an example.

::AbstractController::Logger - Attributes & Methods

Class Method Summary

::ActiveSupport::Concern - Extended

class_methods

Define class methods from given block.

included

Evaluate given block in context of base class, so that you can write class macros here.

prepended

Evaluate given block in context of base class, so that you can write class macros here.

Instance Attribute Summary

Instance Method Summary

::ActiveSupport::Benchmarkable - self

#benchmark

Allows you to measure the execution time of a block in a template and records the result to the log.

Class Attribute Details

.logger (rw)

[ GitHub ]

  
# File 'actionpack/lib/abstract_controller/logger.rb', line 10

config_accessor :logger

Instance Attribute Details

#logger (rw)

[ GitHub ]

  
# File 'actionpack/lib/abstract_controller/logger.rb', line 10

config_accessor :logger

#view_runtime (rw)

[ GitHub ]

  
# File 'actionpack/lib/action_controller/metal/instrumentation.rb', line 17

attr_internal :view_runtime

Instance Method Details

#append_info_to_payload(payload) (private)

Every time after an action is processed, this method is invoked with the payload, so you can add more information.

[ GitHub ]

  
# File 'actionpack/lib/action_controller/metal/instrumentation.rb', line 91

def append_info_to_payload(payload) # :doc:
  payload[:view_runtime] = view_runtime
end

#cleanup_view_runtime (private)

A hook which allows you to clean up any time, wrongly taken into account in views, like database querying time.

def cleanup_view_runtime
  super - time_taken_in_something_expensive
end
[ GitHub ]

  
# File 'actionpack/lib/action_controller/metal/instrumentation.rb', line 85

def cleanup_view_runtime # :doc:
  yield
end

#process_action

[ GitHub ]

  
# File 'actionpack/lib/action_controller/metal/instrumentation.rb', line 19

def process_action(*)
  raw_payload = {
    controller: self.class.name,
    action: action_name,
    request: request,
    params: request.filtered_parameters,
    headers: request.headers,
    format: request.format.ref,
    method: request.request_method,
    path: request.fullpath
  }

  ActiveSupport::Notifications.instrument("start_processing.action_controller", raw_payload)

  ActiveSupport::Notifications.instrument("process_action.action_controller", raw_payload) do |payload|
    result = super
    payload[:response] = response
    payload[:status]   = response.status
    result
  ensure
    append_info_to_payload(payload)
  end
end

#redirect_to

[ GitHub ]

  
# File 'actionpack/lib/action_controller/metal/instrumentation.rb', line 64

def redirect_to(*)
  ActiveSupport::Notifications.instrument("redirect_to.action_controller", request: request) do |payload|
    result = super
    payload[:status]   = response.status
    payload[:location] = response.filtered_location
    result
  end
end

#render

[ GitHub ]

  
# File 'actionpack/lib/action_controller/metal/instrumentation.rb', line 43

def render(*)
  render_output = nil
  self.view_runtime = cleanup_view_runtime do
    Benchmark.ms { render_output = super }
  end
  render_output
end

#send_data(data, options = {})

[ GitHub ]

  
# File 'actionpack/lib/action_controller/metal/instrumentation.rb', line 58

def send_data(data, options = {})
  ActiveSupport::Notifications.instrument("send_data.action_controller", options) do
    super
  end
end

#send_file(path, options = {})

[ GitHub ]

  
# File 'actionpack/lib/action_controller/metal/instrumentation.rb', line 51

def send_file(path, options = {})
  ActiveSupport::Notifications.instrument("send_file.action_controller",
    options.merge(path: path)) do
    super
  end
end