class Chef::Handler::SlowReport

Attributes

amount[RW]

Public Class Methods

new(amount) click to toggle source
# File lib/chef/handler/slow_report.rb, line 26
def initialize(amount)
  @amount = Integer(amount) rescue nil
  @amount ||= 10
end

Public Instance Methods

all_records() click to toggle source
# File lib/chef/handler/slow_report.rb, line 51
def all_records
  @all_records ||= action_collection&.filtered_collection(unprocessed: false) || []
end
count() click to toggle source
# File lib/chef/handler/slow_report.rb, line 55
def count
  num = all_resources.count
  num > amount ? amount : num
end
report() click to toggle source
# File lib/chef/handler/slow_report.rb, line 31
def report
  if count == 0
    puts "\nNo resources to profile\n\n"
    return
  end

  top = all_records.sort_by(&:elapsed_time).last(amount).reverse
  data = top.map { |r| [ r.new_resource.to_s, r.elapsed_time, r.action, r.new_resource.cookbook_name, r.new_resource.recipe_name, stripped_source_line(r.new_resource) ] }
  puts "\nTop #{count} slowest #{count == 1 ? "resource" : "resources"}:\n\n"
  table = TTY::Table.new(%w{resource elapsed_time action cookbook recipe source}, data)
  rendered = table.render do |renderer|
    renderer.border do
      mid          "-"
      mid_mid      " "
    end
  end
  puts rendered
  puts "\n"
end
stripped_source_line(resource) click to toggle source
# File lib/chef/handler/slow_report.rb, line 60
def stripped_source_line(resource)
  # strip the leading path off of the source line
  resource.source_line&.gsub(%r{.*/cookbooks/}, "")&.gsub(%r{.*/chef-[0-9\.]+/}, "")
end