0
@@ -24,7 +24,7 @@ module ActionController #:nodoc:
0
if logger && logger.level == log_level
0
seconds = Benchmark.realtime { result = use_silence ? silence { yield } : yield }
0
- logger.add(log_level, "#{title} (#{
'%.5f' % seconds})")
0
+ logger.add(log_level, "#{title} (#{
('%.2f' % (seconds * 1000))}ms)")
0
@@ -42,53 +42,65 @@ module ActionController #:nodoc:
0
def render_with_benchmark(options = nil, extra_options = {}, &block)
0
- render_without_benchmark(options, extra_options, &block)
0
- db_runtime = ActiveRecord::Base.connection.reset_runtime if Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected?
0
+ if Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected?
0
+ db_runtime = ActiveRecord::Base.connection.reset_runtime
0
- @
rendering_runtime = Benchmark::realtime{ render_output = render_without_benchmark(options, extra_options, &block) }
0
+ @
view_runtime = Benchmark::realtime { render_output = render_without_benchmark(options, extra_options, &block) }
0
if Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected?
0
@db_rt_before_render = db_runtime
0
@db_rt_after_render = ActiveRecord::Base.connection.reset_runtime
0
- @
rendering_runtime -= @db_rt_after_render
0
+ @
view_runtime -= @db_rt_after_render
0
+ render_without_benchmark(options, extra_options, &block)
0
def perform_action_with_benchmark
0
- perform_action_without_benchmark
0
- runtime = [ Benchmark::measure{ perform_action_without_benchmark }.real, 0.0001 ].max
0
+ seconds = [ Benchmark::measure{ perform_action_without_benchmark }.real, 0.0001 ].max
0
+ logging_view = defined?(@view_runtime)
0
+ logging_active_record = Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected?
0
+ log_message = "Completed in #{sprintf("%.2f", seconds * 1000)}ms"
0
+ if logging_view || logging_active_record
0
+ log_message << view_runtime if logging_view
0
+ if logging_active_record
0
+ log_message << ", " + active_record_runtime + ")"
0
- log_message = "Completed in #{sprintf("%.5f", runtime)} (#{(1 / runtime).floor} reqs/sec)"
0
- log_message << rendering_runtime(runtime) if defined?(@rendering_runtime)
0
- log_message << active_record_runtime(runtime) if Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected?
0
log_message << " | #{headers["Status"]}"
0
log_message << " [#{complete_request_uri rescue "unknown"}]"
0
logger.info(log_message)
0
- response.headers["X-Runtime"] = sprintf("%.5f", runtime)
0
+ response.headers["X-Runtime"] = "#{sprintf("%.2f", seconds * 1000)}ms"
0
+ perform_action_without_benchmark
0
- def rendering_runtime(runtime)
0
- percentage = @rendering_runtime * 100 / runtime
0
- " | Rendering: %.5f (%d%%)" % [@rendering_runtime, percentage.to_i]
0
+ "View: %.2f" % (@view_runtime * 1000)
0
- def active_record_runtime(runtime)
0
- db_runtime = ActiveRecord::Base.connection.reset_runtime
0
- db_runtime += @db_rt_before_render if @db_rt_before_render
0
- db_runtime += @db_rt_after_render if @db_rt_after_render
0
- db_percentage = db_runtime * 100 / runtime
0
- " | DB: %.5f (%d%%)" % [db_runtime, db_percentage.to_i]
0
+ def active_record_runtime
0
+ db_runtime = ActiveRecord::Base.connection.reset_runtime
0
+ db_runtime += @db_rt_before_render if @db_rt_before_render
0
+ db_runtime += @db_rt_after_render if @db_rt_after_render
0
+ "DB: %.2f" % (db_runtime * 1000)
Comments
this is definitely a step up since the 4 req/sec was misleading and inaccurate [the true req/sec is slightly less, since this doesn’t accomodate for some overhead related to reading the request and writing it back out]—ex: on my machine rails says 200 req/s, ab always says 100. Ab being right.
If anyone’s interested, I forked rawk (log analyzer) to play well with the new benchmarks—http://github.com/whatcould/rawk/tree/master