Class: Beaker::Perf
- Inherits:
-
Object
- Object
- Beaker::Perf
- 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
-
#get_perf_data(host, perf_start, perf_end) ⇒ void
If host is a supported (ie linux) platform, generate a performance report.
-
#initialize(hosts, options) ⇒ void
constructor
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.
-
#print_perf_info ⇒ void
Iterate over all hosts, calling get_perf_data.
-
#setup_perf_on_host(host) ⇒ void
Install sysstat if required and perform any modifications needed to make sysstat work.
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, ) @hosts = hosts @options = @logger = [: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 |
#print_perf_info ⇒ void
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 |