blob: c83896c1661d8d993a042cc1f16cb376e44aa19f [file] [log] [blame]
"""top prints out CPU stats"""
import os, subprocess, signal
import logging
from autotest_lib.client.bin import profiler
class top(profiler.profiler):
"""
Starts top on the DUT and polls every 5 seconds. Any processes with a
%cpu of zero will be stripped from the output.
"""
version = 1
SCRIPT = "top -b -c -w 200 -d 5 -o '%CPU' -H | " \
"awk '$1 ~ /[0-9]+/ && $9 == '0.0' {next} {print}'"
def start(self, test):
self._output = open(os.path.join(test.profdir, "top"), "wb")
logging.debug("Starting top")
# Log the start time so a complete datetime can be computed later
subprocess.call(["date", "-Iseconds"], stdout=self._output)
self._process = subprocess.Popen(
self.SCRIPT,
stderr=self._output,
stdout=self._output,
shell=True,
# We need to start a process group so we can kill the script's
# children.
preexec_fn=os.setpgrp,
close_fds=True)
def stop(self, test):
logging.debug("Stopping top")
# Kill the whole process group so top and awk die
os.killpg(self._process.pid, signal.SIGTERM)
self._process.wait()
logging.debug("Stopped top")
self._output.close()
def report(self, test):
pass