Module: ActionController::Benchmarking

Defined in:
lib/action_controller/benchmarking.rb

Overview

The benchmarking module times the performance of actions and reports to the logger. If the Active Record package has been included, a separate timing section for database calls will be added as well.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.append_features(base) ⇒ Object

:nodoc:



7
8
9
10
11
12
13
14
15
16
# File 'lib/action_controller/benchmarking.rb', line 7

def self.append_features(base)
  super
  base.class_eval {
    alias_method :perform_action_without_benchmark, :perform_action
    alias_method :perform_action, :perform_action_with_benchmark

    alias_method :render_without_benchmark, :render
    alias_method :render, :render_with_benchmark
  }
end

Instance Method Details

#perform_action_with_benchmarkObject



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/action_controller/benchmarking.rb', line 26

def perform_action_with_benchmark
  if logger.nil?
    perform_action_without_benchmark
  else
    runtime = [Benchmark::measure{ perform_action_without_benchmark }.real, 0.0001].max
    log_message  = "Completed in #{sprintf("%4f", runtime)} (#{(1 / runtime).floor} reqs/sec)"
    log_message << rendering_runtime(runtime) if @rendering_runtime
    log_message << active_record_runtime(runtime) if Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected?
    logger.info(log_message)
  end
end

#render_with_benchmark(template_name = default_template_name, status = "200 OK") ⇒ Object



18
19
20
21
22
23
24
# File 'lib/action_controller/benchmarking.rb', line 18

def render_with_benchmark(template_name = default_template_name, status = "200 OK")
  if logger.nil?
    render_without_benchmark(template_name, status)
  else
    @rendering_runtime = Benchmark::measure{ render_without_benchmark(template_name, status) }.real
  end
end