Class: Beaker::Perf

Inherits:
Object
  • Object
show all
Defined in:
lib/beaker/perf.rb

Overview

The Beaker Perf class. A single instance is created per Beaker run.

Constant Summary collapse

PERF_PACKAGES =
['sysstat']
PERF_SUPPORTED_PLATFORMS =

SLES does not treat sysstat as a service that can be started

/debian|ubuntu|redhat|centos|oracle|scientific|fedora|el|eos|cumulus|sles/
PERF_START_PLATFORMS =
/debian|ubuntu|redhat|centos|oracle|scientific|fedora|el|eos|cumulus/

Instance Method Summary collapse

Constructor Details

#initialize(hosts, options) ⇒ void

Create the Perf instance and runs setup_perf_on_host on all hosts if –collect-perf-data was used as an option on the Baker command line invocation. Instances of this class do not hold state and its methods are helpers for remotely executing tasks for performance data gathering with sysstat/sar



18
19
20
21
22
23
24
# File 'lib/beaker/perf.rb', line 18

def initialize( hosts, options )
  @hosts = hosts
  @options = options
  @logger = options[:logger]
  @perf_timestamp = Time.now
  @hosts.map { |h| setup_perf_on_host(h) }
end

Instance Method Details

#get_perf_data(host, perf_start, perf_end) ⇒ void

This method returns an undefined value.

If host is a supported (ie linux) platform, generate a performance report



66
67
68
69
70
71
72
73
# File 'lib/beaker/perf.rb', line 66

def get_perf_data(host, perf_start, perf_end)
  @logger.perf_output("Getting perf data for host: " + host)
  if host['platform'] =~ PERF_SUPPORTED_PLATFORMS # All flavours of Linux
    host.exec(Command.new("sar -A -s #{perf_start.strftime("%H:%M:%S")} -e #{perf_end.strftime("%H:%M:%S")}"),:acceptable_exit_codes => [0,1,2])
  else
    @logger.perf_output("Perf (sysstat) not supported on host: " + host)
  end
end

This method returns an undefined value.

Iterate over all hosts, calling get_perf_data



56
57
58
59
# File 'lib/beaker/perf.rb', line 56

def print_perf_info()
  @perf_end_timestamp = Time.now
  @hosts.map { |h| get_perf_data(h, @perf_timestamp, @perf_end_timestamp) }
end

#setup_perf_on_host(host) ⇒ void

This method returns an undefined value.

Install sysstat if required and perform any modifications needed to make sysstat work.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/beaker/perf.rb', line 29

def setup_perf_on_host(host)
  @logger.perf_output("Setup perf on host: " + host)
  # Install sysstat if required
  if host['platform'] =~ PERF_SUPPORTED_PLATFORMS
    PERF_PACKAGES.each do |pkg|
      if not host.check_for_package pkg
        host.install_package pkg
      end
    end
  else
    @logger.perf_output("Perf (sysstat) not supported on host: " + host)
  end

  if host['platform'] =~ /debian|ubuntu|cumulus/
    @logger.perf_output("Modify /etc/default/sysstat on Debian and Ubuntu platforms")
    host.exec(Command.new('sed -i s/ENABLED=\"false\"/ENABLED=\"true\"/ /etc/default/sysstat'))
  elsif host['platform'] =~ /sles/
    @logger.perf_output("Creating symlink from /etc/sysstat/sysstat.cron to /etc/cron.d")
    host.exec(Command.new('ln -s /etc/sysstat/sysstat.cron /etc/cron.d'),:acceptable_exit_codes => [0,1])
  end
  if host['platform'] =~ PERF_START_PLATFORMS # SLES doesn't need this step
    host.exec(Command.new('service sysstat start'))
  end
end