Sha256: 39d79a70a66aca8d512db9408caae406703b72c7546a4b02f3f39b93888a682d

Contents?: true

Size: 1.89 KB

Versions: 12

Compression:

Stored size: 1.89 KB

Contents

require 'benchmark'

module ActionController #:nodoc:
  # 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.
  module Benchmarking #:nodoc:
    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

    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    

    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
    
    private
      def rendering_runtime(runtime)
        " | Rendering: #{sprintf("%f", @rendering_runtime)} (#{sprintf("%d", (@rendering_runtime / runtime) * 100)}%)"
      end

      def active_record_runtime(runtime)
        db_runtime    = ActiveRecord::Base.connection.reset_runtime
        db_percentage = (db_runtime / runtime) * 100
        " | DB: #{sprintf("%f", db_runtime)} (#{sprintf("%d", db_percentage)}%)"
      end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
devise_sociable-0.1.0 vendor/bundle/gems/actionpack-1.4.0/lib/action_controller/benchmarking.rb
actionpack-1.1.0 lib/action_controller/benchmarking.rb
actionpack-1.0.0 lib/action_controller/benchmarking.rb
actionpack-1.0.1 lib/action_controller/benchmarking.rb
actionpack-1.3.0 lib/action_controller/benchmarking.rb
actionpack-1.2.0 lib/action_controller/benchmarking.rb
actionpack-1.5.0 lib/action_controller/benchmarking.rb
actionpack-1.3.1 lib/action_controller/benchmarking.rb
actionpack-1.4.0 lib/action_controller/benchmarking.rb
actionpack-1.5.1 lib/action_controller/benchmarking.rb
actionpack-1.6.0 lib/action_controller/benchmarking.rb
actionpack-1.7.0 lib/action_controller/benchmarking.rb