diff options
author | mbeierl <mark.beierl@emc.com> | 2015-10-15 10:48:58 -0400 |
---|---|---|
committer | Mark Beierl <mark.beierl@emc.com> | 2015-10-15 19:08:24 +0000 |
commit | e708f56598414929091524ce68a56da602d082e7 (patch) | |
tree | 26867be9b46ce0e47af1dd236d9ba186e3e29291 /storperf/fio | |
parent | b0f94dcb1f28161d4ab2fb186e4867b2ba473a32 (diff) |
Logging and timestamp
Added logging and fixed issue if fio does not produce the current timestamp
in its output
JIRA: STORPERF-4
Change-Id: Ifd0dbc4e17d984907e63089ebfae1d0e9e749dcc
Signed-off-by: mbeierl <mark.beierl@emc.com>
Diffstat (limited to 'storperf/fio')
-rw-r--r-- | storperf/fio/fio_invoker.py | 76 |
1 files changed, 22 insertions, 54 deletions
diff --git a/storperf/fio/fio_invoker.py b/storperf/fio/fio_invoker.py index 91ef6e8..722b051 100644 --- a/storperf/fio/fio_invoker.py +++ b/storperf/fio/fio_invoker.py @@ -13,34 +13,41 @@ import subprocess import json from threading import Thread +import logging + class Usage(Exception): def __init__(self, msg): self.msg = msg - + class FIOInvoker(object): def __init__(self): + self.logger = logging.getLogger(__name__) self.event_listeners = set() - + def register(self, event_listener): self.event_listeners.add(event_listener) def unregister(self, event_listener): self.event_listeners.discard(event_listener) - + def stdout_handler(self): self.json_body = "" for line in iter(self.fio_process.stdout.readline, b''): + if line.startswith("fio"): + line = "" + continue self.json_body += line try: - json_metric = json.loads(self.json_body) - self.json_body = "" - - for event_listener in self.event_listeners: - event_listener(json_metric) - - except: - if self.json_body.startswith("fio"): + if line == "}\n": + self.logger.debug("Have a json snippet: %s", self.json_body) + json_metric = json.loads(self.json_body) self.json_body = "" + + for event_listener in self.event_listeners: + event_listener(json_metric) + + except Exception, e: + self.logger.error("Error parsing JSON: %s", e) pass self.fio_process.stdout.close() @@ -50,56 +57,17 @@ class FIOInvoker(object): print line self.fio_process.stderr.close() - - def execute(self, args=[]): + + def execute(self, args=[]): self.fio_process = subprocess.Popen(['fio']+args, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE); - + t = Thread(target=self.stdout_handler, args=()) t.daemon = False t.start() - + t = Thread(target=self.stderr_handler, args=()) t.daemon = False t.start() - # fio --rw=randread --size=32m --directory=/tmp/fio-testing/data --ioengine=libaio --iodepth=2 --direct=1 --invalidate=1 --numjobs=4 --name=random-read - -def event(json_metric): - print json_metric - - -def main(argv=None): - if argv is None: - argv = sys.argv - try: - try: - opts = getopt.getopt(argv[1:], "h", ["help"]) - except getopt.error, msg: - raise Usage(msg) - - except Usage, err: - print >> sys.stderr, err.msg - print >> sys.stderr, "for help use --help" - return 2 - - for o in opts: - if o in ("-h", "--help"): - print __doc__ - return 0 - - simple_args = ['--rw=randread', '--size=32m', - '--directory=.', - '--iodepth=2', - '--direct=1', '--invalidate=1', '--numjobs=4', - '--name=random-read', '--output-format=json', - '--status-interval=3', - '--time_based', '--runtime=6'] - - invoker = FIOInvoker() - invoker.register(event) - invoker.execute(simple_args) - -if __name__ == "__main__": - sys.exit(main()) |