aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/benchmarking.rb
diff options
context:
space:
mode:
authorPratik Naik <pratiknaik@gmail.com>2008-11-20 04:50:34 +0530
committerPratik Naik <pratiknaik@gmail.com>2008-11-20 04:50:34 +0530
commitdbbaccbcda7475766919723dda53c0f92afddc4b (patch)
tree0e676f7752a4817b6e936628161e03e35b0c2b29 /actionpack/lib/action_controller/benchmarking.rb
parent3be9134d1cb882f4be3be8d57b2f8bde5ecde887 (diff)
downloadrails-dbbaccbcda7475766919723dda53c0f92afddc4b.tar.gz
rails-dbbaccbcda7475766919723dda53c0f92afddc4b.tar.bz2
rails-dbbaccbcda7475766919723dda53c0f92afddc4b.zip
Revert "Simplify benchmarking and rescue". Need a different approach.
This reverts commit 3be9134d1cb882f4be3be8d57b2f8bde5ecde887.
Diffstat (limited to 'actionpack/lib/action_controller/benchmarking.rb')
-rw-r--r--actionpack/lib/action_controller/benchmarking.rb105
1 files changed, 57 insertions, 48 deletions
diff --git a/actionpack/lib/action_controller/benchmarking.rb b/actionpack/lib/action_controller/benchmarking.rb
index e0a52c14f3..fa572ebf3d 100644
--- a/actionpack/lib/action_controller/benchmarking.rb
+++ b/actionpack/lib/action_controller/benchmarking.rb
@@ -6,6 +6,11 @@ module ActionController #:nodoc:
module Benchmarking #:nodoc:
def self.included(base)
base.extend(ClassMethods)
+
+ base.class_eval do
+ alias_method_chain :perform_action, :benchmark
+ alias_method_chain :render, :benchmark
+ end
end
module ClassMethods
@@ -35,64 +40,68 @@ module ActionController #:nodoc:
end
end
- private
-
- def log_benchmarks
- return unless logger
-
- seconds = [ @_runtime[:perform_action], 0.0001 ].max
- logging_view = @_runtime.has_key?(:render)
- logging_active_record = Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected?
+ protected
+ def render_with_benchmark(options = nil, extra_options = {}, &block)
+ if logger
+ if Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected?
+ db_runtime = ActiveRecord::Base.connection.reset_runtime
+ end
- log_message = "Completed in #{sprintf("%.0f", seconds * 1000)}ms"
+ render_output = nil
+ @view_runtime = Benchmark::realtime { render_output = render_without_benchmark(options, extra_options, &block) }
- if logging_view || logging_active_record
- log_message << " ("
- log_message << view_runtime if logging_view
+ if Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected?
+ @db_rt_before_render = db_runtime
+ @db_rt_after_render = ActiveRecord::Base.connection.reset_runtime
+ @view_runtime -= @db_rt_after_render
+ end
- if logging_active_record
- log_message << ", " if logging_view
- log_message << active_record_runtime + ")"
+ render_output
else
- ")"
+ render_without_benchmark(options, extra_options, &block)
end
- end
-
- log_message << " | #{headers["Status"]}"
- log_message << " [#{complete_request_uri rescue "unknown"}]"
-
- logger.info(log_message)
- response.headers["X-Runtime"] = "#{sprintf("%.0f", seconds * 1000)}ms"
- end
-
- def view_runtime
- "View: %.0f" % (@_runtime[:render] * 1000)
- end
-
- def active_record_runtime
- db_runtime = ActiveRecord::Base.connection.reset_runtime
+ end
- if @_runtime[:db_before_render]
- db_runtime += @_runtime[:db_before_render]
- db_runtime += @_runtime[:db_after_render]
+ private
+ def perform_action_with_benchmark
+ if logger
+ seconds = [ Benchmark::measure{ perform_action_without_benchmark }.real, 0.0001 ].max
+ logging_view = defined?(@view_runtime)
+ logging_active_record = Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected?
+
+ log_message = "Completed in #{sprintf("%.0f", seconds * 1000)}ms"
+
+ if logging_view || logging_active_record
+ log_message << " ("
+ log_message << view_runtime if logging_view
+
+ if logging_active_record
+ log_message << ", " if logging_view
+ log_message << active_record_runtime + ")"
+ else
+ ")"
+ end
+ end
+
+ log_message << " | #{headers["Status"]}"
+ log_message << " [#{complete_request_uri rescue "unknown"}]"
+
+ logger.info(log_message)
+ response.headers["X-Runtime"] = "#{sprintf("%.0f", seconds * 1000)}ms"
+ else
+ perform_action_without_benchmark
+ end
end
- "DB: %.0f" % (db_runtime * 1000)
- end
-
- def log_render_benchmark
- return unless logger
-
- if @_runtime.has_key?(:db_before_render)
- @_runtime[:db_after_render] = ActiveRecord::Base.connection.reset_runtime
- @_runtime[:render] -= @_runtime[:db_after_render]
+ def view_runtime
+ "View: %.0f" % (@view_runtime * 1000)
end
- end
- def reset_db_runtime
- if logger && Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected?
- @_runtime[:db_before_render] = ActiveRecord::Base.connection.reset_runtime
+ def active_record_runtime
+ db_runtime = ActiveRecord::Base.connection.reset_runtime
+ db_runtime += @db_rt_before_render if @db_rt_before_render
+ db_runtime += @db_rt_after_render if @db_rt_after_render
+ "DB: %.0f" % (db_runtime * 1000)
end
- end
end
end