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