mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Added use_silence parameter to ActiveRecord::Base.benchmark that can be passed false to include all logging statements during the benchmark block. Added ActionController::Base.benchmark and ActionController::Base.silence to allow for easy benchmarking and turning off the log
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2140 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
50debfa96c
commit
5e8e8d6564
4 changed files with 41 additions and 7 deletions
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Added ActionController::Base.benchmark and ActionController::Base.silence to allow for easy benchmarking and turning off the log
|
||||
|
||||
* Updated vendor copy of html-scanner to support better xml parsing
|
||||
|
||||
* Added :popup option to UrlHelper#link_to #1996 [gabriel.gironda@gmail.com]. Examples:
|
||||
|
|
|
@ -6,13 +6,37 @@ module ActionController #:nodoc:
|
|||
module Benchmarking #:nodoc:
|
||||
def self.append_features(base)
|
||||
super
|
||||
base.class_eval {
|
||||
base.extend(ClassMethods)
|
||||
base.class_eval do
|
||||
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
|
||||
end
|
||||
|
||||
module ClassMethods
|
||||
# Log and benchmark the workings of a single block and silence whatever logging that may have happened inside it
|
||||
# (unless <tt>use_silence</tt> is set to false).
|
||||
def benchmark(title, use_silence = true)
|
||||
if logger
|
||||
result = nil
|
||||
seconds = Benchmark.realtime { result = use_silence ? silence { yield } : yield }
|
||||
logger.info "#{title} (#{sprintf("%f", seconds)})"
|
||||
result
|
||||
else
|
||||
yield
|
||||
end
|
||||
end
|
||||
|
||||
# Silences the logger for the duration of the block.
|
||||
def silence
|
||||
old_logger_level, logger.level = logger.level, Logger::ERROR if logger
|
||||
yield
|
||||
ensure
|
||||
logger.level = old_logger_level if logger
|
||||
end
|
||||
end
|
||||
|
||||
def render_with_benchmark(options = nil, deprecated_status = nil)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Added use_silence parameter to ActiveRecord::Base.benchmark that can be passed false to include all logging statements during the benchmark block
|
||||
|
||||
* Make sure the schema_info table is created before querying the current version #1903
|
||||
|
||||
* Fixtures ignore table name prefix and suffix #1987 [Jakob S]
|
||||
|
|
|
@ -714,11 +714,17 @@ module ActiveRecord #:nodoc:
|
|||
# project.create_manager("name" => "David")
|
||||
# project.milestones << Milestone.find(:all)
|
||||
# end
|
||||
def benchmark(title)
|
||||
result = nil
|
||||
seconds = Benchmark.realtime { result = silence { yield } }
|
||||
logger.info "#{title} (#{sprintf("%f", seconds)})" if logger
|
||||
return result
|
||||
#
|
||||
# The loggings of the multiple statements is turned off unless <tt>use_silence</tt> is set to false.
|
||||
def benchmark(title, use_silence = true)
|
||||
if logger
|
||||
result = nil
|
||||
seconds = Benchmark.realtime { result = use_silence ? silence { yield } : yield }
|
||||
logger.info "#{title} (#{sprintf("%f", seconds)})"
|
||||
result
|
||||
else
|
||||
yield
|
||||
end
|
||||
end
|
||||
|
||||
# Silences the logger for the duration of the block.
|
||||
|
|
Loading…
Reference in a new issue