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

new() click to toggle source
   # File lib/puppet/util/profiler/around_profiler.rb
 8 def initialize
 9   @profilers = []
10 end

Public Instance Methods

add_profiler(profiler) click to toggle source

@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
clear() click to toggle source

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
current() click to toggle source

Retrieve the current list of profilers

@api private

   # File lib/puppet/util/profiler/around_profiler.rb
22 def current
23   @profilers
24 end
profile(message, metric_id) { || ... } click to toggle source

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
remove_profiler(profiler) click to toggle source

@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