class Beaker::DSL::BeakerBenchmark::Helpers::PerformanceResult

Example output:

Action: measure_perf_on_puppetserver_start_start_pe-puppetserver, Duration: 37.463595
Avg CPU: 72%, Avg MEM: 1634829, Avg DSK read: 0, Avg DSK Write: 45

Additional output if include_processes:

Process pid: 14067, command: '/opt/puppetlabs/server/apps/postgresql/bin/postgres -D /opt/puppetlabs/server/data/postgresql/9.6/data -c log_directory=/var/log/puppetlabs/postgresql'
    Avg CPU: '1', Avg MEM: 48888, Avg DSK Write: 20

Attributes

action_name[RW]
avg_cpu[RW]
avg_disk_read[RW]
avg_disk_write[RW]
avg_mem[RW]
duration[RW]
hostname[RW]
processes[RW]

Public Class Methods

new(args) click to toggle source
# File lib/beaker-benchmark/helpers.rb, line 188
def initialize(args)
  @avg_cpu = args[:cpu].empty? ? 0 : args[:cpu].inject{ |sum, el| sum + el } / args[:cpu].size
  @avg_mem = args[:mem].empty? ? 0 : args[:mem].inject{ |sum, el| sum + el } / args[:mem].size
  @avg_disk_read = args[:disk_read].empty? ? 0 : args[:disk_read].inject{ |sum, el| sum + el } / args[:disk_read].size
  @avg_disk_write = args[:disk_write].empty? ? 0 : args[:disk_write].inject{ |sum, el| sum + el } / args[:disk_write].size
  @action_name = args[:action]
  @duration = args[:duration]
  @processes = args[:processes]
  @logger = args[:logger]
  @hostname = args[:hostname] || ''


  @processes.keys.each do |key|
    @processes[key][:avg_cpu] = @processes[key][:cpu_usage].inject{ |sum, el| sum + el } / @processes[key][:cpu_usage].size unless @processes[key][:cpu_usage].empty?
    @processes[key][:avg_mem] = @processes[key][:mem_usage].inject{ |sum, el| sum + el } / @processes[key][:mem_usage].size unless @processes[key][:mem_usage].empty?
    @processes[key][:avg_disk_read] = @processes[key][:disk_read].inject{ |sum, el| sum + el } / @processes[key][:disk_read].size unless @processes[key][:disk_read].empty?
    @processes[key][:avg_disk_write] = @processes[key][:disk_write].inject{ |sum, el| sum + el } / @processes[key][:disk_write].size unless @processes[key][:disk_write].empty?
  end if @processes
  # TODO: At this point, we need to push these results into bigquery or elasticsearch
  # so we can normalize results over time and report on increases in trends
end

Public Instance Methods

log_csv(file_path=nil) click to toggle source
# File lib/beaker-benchmark/helpers.rb, line 219
def log_csv file_path=nil
  file_path = file_path || "#{TMP_DIR}/#{@hostname}/atop_log_#{action_name.downcase.gsub(/[^a-z0-9]/i, '_')}.csv"
  FileUtils.mkdir_p "#{TMP_DIR}/#{@hostname}/" unless Dir.exist?("#{TMP_DIR}/#{@hostname}/")
  file = File.open file_path, 'w'
  file.write "Action,Duration,Avg CPU,Avg MEM,Avg DSK read,Avg DSK Write\n"
  file.write "#{@action_name},#{@duration},#{@avg_cpu},#{@avg_mem},#{@avg_disk_read},#{@avg_disk_write}\n\n"
  file.write "Process pid,command,Avg CPU,Avg MEM,Avg DSK read,Avg DSK Write\n"
  @processes.keys.each do |key|
    file.write "#{key},'#{@processes[key][:cmd]}',#{@processes[key][:avg_cpu]},#{@processes[key][:avg_mem]},#{@processes[key][:avg_disk_read]},#{@processes[key][:avg_disk_write]}\n"
  end
  file.close
  file.path
end
log_summary() click to toggle source
# File lib/beaker-benchmark/helpers.rb, line 210
def log_summary
  @logger.info "Action: #{@action_name}, Duration: #{@duration}"
  @logger.info "Avg CPU: #{@avg_cpu}%, Avg MEM: #{@avg_mem}, Avg DSK read: #{@avg_disk_read}, Avg DSK Write: #{@avg_disk_write}"
  @processes.keys.each do |key|
    @logger.info "Process pid: #{key}, command: '#{@processes[key][:cmd]}'"
    @logger.info "   Avg CPU: '#{@processes[key][:avg_cpu]}%', Avg MEM: #{@processes[key][:avg_mem]}, Avg DSK read: #{@processes[key][:avg_disk_read]}, Avg DSK Write: #{@processes[key][:avg_disk_write]}"
  end
end