Class: Beaker::DSL::BeakerBenchmark::Helpers::PerformanceResult

Inherits:
Object
  • Object
show all
Defined in:
lib/beaker-benchmark/helpers.rb

Overview

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ PerformanceResult

Returns a new instance of PerformanceResult.



174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# File 'lib/beaker-benchmark/helpers.rb', line 174

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

Instance Attribute Details

#action_nameObject

Returns the value of attribute action_name.



173
174
175
# File 'lib/beaker-benchmark/helpers.rb', line 173

def action_name
  @action_name
end

#avg_cpuObject

Returns the value of attribute avg_cpu.



173
174
175
# File 'lib/beaker-benchmark/helpers.rb', line 173

def avg_cpu
  @avg_cpu
end

#avg_disk_readObject

Returns the value of attribute avg_disk_read.



173
174
175
# File 'lib/beaker-benchmark/helpers.rb', line 173

def avg_disk_read
  @avg_disk_read
end

#avg_disk_writeObject

Returns the value of attribute avg_disk_write.



173
174
175
# File 'lib/beaker-benchmark/helpers.rb', line 173

def avg_disk_write
  @avg_disk_write
end

#avg_memObject

Returns the value of attribute avg_mem.



173
174
175
# File 'lib/beaker-benchmark/helpers.rb', line 173

def avg_mem
  @avg_mem
end

#durationObject

Returns the value of attribute duration.



173
174
175
# File 'lib/beaker-benchmark/helpers.rb', line 173

def duration
  @duration
end

#hostnameObject

Returns the value of attribute hostname.



173
174
175
# File 'lib/beaker-benchmark/helpers.rb', line 173

def hostname
  @hostname
end

#processesObject

Returns the value of attribute processes.



173
174
175
# File 'lib/beaker-benchmark/helpers.rb', line 173

def processes
  @processes
end

Instance Method Details

#log_csv(file_path = nil) ⇒ Object



205
206
207
208
209
210
211
212
213
214
215
216
217
# File 'lib/beaker-benchmark/helpers.rb', line 205

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_summaryObject



196
197
198
199
200
201
202
203
# File 'lib/beaker-benchmark/helpers.rb', line 196

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