Sha256: 792f97422d37f1c180b37cf65ab65d059a8203b4b41bca3c61e3f4cd873cd043

Contents?: true

Size: 1.68 KB

Versions: 96

Compression:

Stored size: 1.68 KB

Contents

require 'puppet/util/profiler'
require 'puppet/util/profiler/wall_clock'

class Puppet::Util::Profiler::Aggregate < Puppet::Util::Profiler::WallClock
  def initialize(logger, identifier)
    super(logger, identifier)
    @metrics_hash = Metric.new
  end

  def shutdown()
    super
    @logger.call("AGGREGATE PROFILING RESULTS:")
    @logger.call("----------------------------")
    print_metrics(@metrics_hash, "")
    @logger.call("----------------------------")
  end

  def do_start(description, metric_id)
    super(description, metric_id)
  end

  def do_finish(context, description, metric_id)
    result = super(context, description, metric_id)
    update_metric(@metrics_hash, metric_id, result[:time])
    result
  end

  def update_metric(metrics_hash, metric_id, time)
    first, *rest = *metric_id
    if first
      m = metrics_hash[first]
      m.increment
      m.add_time(time)
      if rest.count > 0
        update_metric(m, rest, time)
      end
    end
  end

  def values
    @metrics_hash
  end

  def print_metrics(metrics_hash, prefix)
    metrics_hash.sort_by {|k,v| v.time }.reverse.each do |k,v|
      @logger.call("#{prefix}#{k}: #{v.time} s (#{v.count} calls)")
      print_metrics(metrics_hash[k], "#{prefix}#{k} -> ")
    end
  end

  class Metric < Hash
    def initialize
      super
      @count = 0
      @time = 0
    end
    attr_reader :count, :time

    def [](key)
      if !has_key?(key)
        self[key] = Metric.new
      end
      super(key)
    end

    def increment
      @count += 1
    end

    def add_time(time)
      @time += time
    end
  end

  class Timer
    def initialize
      @start = Time.now
    end

    def stop
      Time.now - @start
    end
  end
end

Version data entries

96 entries across 96 versions & 2 rubygems

Version Path
puppet-retrospec-1.5.0 vendor/gems/puppet-4.5.2/lib/puppet/util/profiler/aggregate.rb
puppet-retrospec-1.4.1 vendor/gems/puppet-4.5.2/lib/puppet/util/profiler/aggregate.rb
puppet-retrospec-1.4.0 vendor/gems/puppet-4.5.2/lib/puppet/util/profiler/aggregate.rb
puppet-retrospec-1.3.2 vendor/gems/puppet-4.5.2/lib/puppet/util/profiler/aggregate.rb
puppet-retrospec-1.3.1 vendor/gems/puppet-4.5.2/lib/puppet/util/profiler/aggregate.rb
puppet-retrospec-1.3.0 vendor/gems/puppet-4.5.2/lib/puppet/util/profiler/aggregate.rb
puppet-4.8.2 lib/puppet/util/profiler/aggregate.rb
puppet-4.8.2-x86-mingw32 lib/puppet/util/profiler/aggregate.rb
puppet-4.8.2-x64-mingw32 lib/puppet/util/profiler/aggregate.rb
puppet-4.8.2-universal-darwin lib/puppet/util/profiler/aggregate.rb
puppet-4.7.1 lib/puppet/util/profiler/aggregate.rb
puppet-4.7.1-x86-mingw32 lib/puppet/util/profiler/aggregate.rb
puppet-4.7.1-x64-mingw32 lib/puppet/util/profiler/aggregate.rb
puppet-4.7.1-universal-darwin lib/puppet/util/profiler/aggregate.rb
puppet-4.8.1 lib/puppet/util/profiler/aggregate.rb
puppet-4.8.1-x86-mingw32 lib/puppet/util/profiler/aggregate.rb
puppet-4.8.1-x64-mingw32 lib/puppet/util/profiler/aggregate.rb
puppet-4.8.1-universal-darwin lib/puppet/util/profiler/aggregate.rb
puppet-4.8.0 lib/puppet/util/profiler/aggregate.rb
puppet-4.8.0-x86-mingw32 lib/puppet/util/profiler/aggregate.rb