"""
Run iostat with a default interval of 1 second.
"""
import os
import subprocess
import time

from autotest.client import profiler
from autotest.client.shared import utils, error


class iostat(profiler.profiler):
    version = 2

    def initialize(self, interval=1, options='', **dargs):
        # Usage: iostat [ options... ] [ <interval> [ <count> ] ]
        # e.g, iostat -tmx 2
        self.interval = interval
        self.options = options

    def start(self, test):
        cmd = "/usr/bin/iostat %s %d" % (self.options, self.interval)
        filename = "iostat." + time.strftime("%Y-%m-%d-%H-%M-%S")
        logfile = open(os.path.join(test.profdir, filename), 'w')
        p = subprocess.Popen(cmd, shell=True, stdout=logfile,
                             stderr=subprocess.STDOUT)
        self.pid = p.pid

    def stop(self, test):
        try:
            term_profiler = "kill -15 %d" % self.pid
            # send SIGTERM to iostat and give it a 5-sec timeout
            utils.system(term_profiler, timeout=5)
        except error.CmdError:  # probably times out
            pass
        # do a ps again to see if iostat is still there
        ps_cmd = "ps -p %d | grep iostat" % self.pid
        out = utils.system_output(ps_cmd, ignore_status=True)
        if out != '':
            kill_profiler = 'kill -9 %d' % self.pid
            utils.system(kill_profiler, ignore_status=True)

    def report(self, test):
        return None
