class Puppet::Util::Profiler::AroundProfiler
A Profiler that can be used to wrap around blocks of code. It is configured with other profilers and controls them to start before the block is executed and finish after the block is executed.
@api private
Public Class Methods
# File lib/puppet/util/profiler/around_profiler.rb 8 def initialize 9 @profilers = [] 10 end
Public Instance Methods
@param profiler [#profile] A profiler for the current thread @api private
# File lib/puppet/util/profiler/around_profiler.rb 28 def add_profiler(profiler) 29 @profilers << profiler 30 profiler 31 end
Reset the profiling system to the original state
@api private
# File lib/puppet/util/profiler/around_profiler.rb 15 def clear 16 @profilers = [] 17 end
Retrieve the current list of profilers
@api private
# File lib/puppet/util/profiler/around_profiler.rb 22 def current 23 @profilers 24 end
Profile a block of code and log the time it took to execute.
This outputs logs entries to the Puppet
masters logging destination providing the time it took, a message describing the profiled code and a leaf location marking where the profile method was called in the profiled hierarchy.
@param message [String] A description of the profiled event @param metric_id [Array] A list of strings making up the ID of a metric to profile @param block [Block] The segment of code to profile @api private
# File lib/puppet/util/profiler/around_profiler.rb 50 def profile(message, metric_id) 51 retval = nil 52 contexts = {} 53 @profilers.each do |profiler| 54 contexts[profiler] = profiler.start(message, metric_id) 55 end 56 57 begin 58 retval = yield 59 ensure 60 @profilers.each do |profiler| 61 profiler.finish(contexts[profiler], message, metric_id) 62 end 63 end 64 65 retval 66 end
@param profiler [#profile] A profiler to remove from the current thread @api private
# File lib/puppet/util/profiler/around_profiler.rb 35 def remove_profiler(profiler) 36 @profilers.delete(profiler) 37 end