Module: Nokogiri::XML

Defined in:
lib/kitchen/patches/nokogiri.rb,
lib/kitchen/patches/nokogiri_profiling.rb

Defined Under Namespace

Classes: Document, Node, XPathContext

Constant Summary collapse

PROFILE_DATA =

rubocop:disable Style/MutableConstant

{}

Class Method Summary collapse

Class Method Details

Patches inside Nokogiri to count, time, and print searches. At end of baking you can puts Nokogiri::XML::PROFILE_DATA to see the totals. The counts hash is defined outside of the if block so that code that prints it doesn't explode if run without the env var. The print_profile_data method is also provided for a nice printout



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/kitchen/patches/nokogiri_profiling.rb', line 21

def self.print_profile_data
  total_duration = 0

  sorted_profile_data = PROFILE_DATA.sort_by { |_, data| data[:time] / data[:count] }.reverse

  puts "\nSearch Profile Data"
  puts '-----------------------------------------------------------------'
  puts "#{'Total Time (ms)'.ljust(17)}#{'Avg Time (ms)'.ljust(15)}#{'Count'.ljust(7)}Query"
  puts '-----------------------------------------------------------------'

  sorted_profile_data.each do |search_path, data|
    total_time = format('%0.4f', (data[:time] * 1000))
    avg_time = format('%0.4f', ((data[:time] / data[:count]) * 1000))
    puts total_time.ljust(17) + avg_time.to_s.ljust(15) + data[:count].to_s.ljust(7) + \
         search_path
    total_duration += data[:time] * 1000
  end

  puts "\nTotal time across all searches (ms): #{total_duration}"
end