Added use_silence parameter to ActiveRecord::Base.benchmark that can be passed...

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
上级 50debfa9
*SVN* *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 * Updated vendor copy of html-scanner to support better xml parsing
* Added :popup option to UrlHelper#link_to #1996 [gabriel.gironda@gmail.com]. Examples: * Added :popup option to UrlHelper#link_to #1996 [gabriel.gironda@gmail.com]. Examples:
......
...@@ -6,13 +6,37 @@ module ActionController #:nodoc: ...@@ -6,13 +6,37 @@ module ActionController #:nodoc:
module Benchmarking #:nodoc: module Benchmarking #:nodoc:
def self.append_features(base) def self.append_features(base)
super super
base.class_eval { base.extend(ClassMethods)
base.class_eval do
alias_method :perform_action_without_benchmark, :perform_action alias_method :perform_action_without_benchmark, :perform_action
alias_method :perform_action, :perform_action_with_benchmark alias_method :perform_action, :perform_action_with_benchmark
alias_method :render_without_benchmark, :render alias_method :render_without_benchmark, :render
alias_method :render, :render_with_benchmark 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 end
def render_with_benchmark(options = nil, deprecated_status = nil) def render_with_benchmark(options = nil, deprecated_status = nil)
......
*SVN* *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 * Make sure the schema_info table is created before querying the current version #1903
* Fixtures ignore table name prefix and suffix #1987 [Jakob S] * Fixtures ignore table name prefix and suffix #1987 [Jakob S]
......
...@@ -714,11 +714,17 @@ def sanitize(object) #:nodoc: ...@@ -714,11 +714,17 @@ def sanitize(object) #:nodoc:
# project.create_manager("name" => "David") # project.create_manager("name" => "David")
# project.milestones << Milestone.find(:all) # project.milestones << Milestone.find(:all)
# end # end
def benchmark(title) #
result = nil # The loggings of the multiple statements is turned off unless <tt>use_silence</tt> is set to false.
seconds = Benchmark.realtime { result = silence { yield } } def benchmark(title, use_silence = true)
logger.info "#{title} (#{sprintf("%f", seconds)})" if logger if logger
return result result = nil
seconds = Benchmark.realtime { result = use_silence ? silence { yield } : yield }
logger.info "#{title} (#{sprintf("%f", seconds)})"
result
else
yield
end
end end
# Silences the logger for the duration of the block. # Silences the logger for the duration of the block.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册