summaryrefslogtreecommitdiffstats
path: root/storperf/main.py
diff options
context:
space:
mode:
authormbeierl <mark.beierl@emc.com>2015-11-23 08:23:47 -0800
committermbeierl <mark.beierl@emc.com>2015-11-23 20:15:59 -0800
commit002920e29d7fa4a28abec96773b470c90bafe55d (patch)
tree893f45209a84f197ef6ec3848ed83fc9df3eab8f /storperf/main.py
parentd480e8746512caf8821c42582e7ab75d25b3127b (diff)
Adding workload modules
Adding the ablity to define workloads in modules which can be referenced from the API. Breaking out the test execution into its own class so it will be easier to support ReST or other interfaces. Added flake8 and code coverage reports where possible to merge and verify jobs Change-Id: Ieb51e4e7e1e989288a6f81f4757709669914a196 JIRA: STORPERF-21 Signed-off-by: mbeierl <mark.beierl@emc.com>
Diffstat (limited to 'storperf/main.py')
-rw-r--r--storperf/main.py75
1 files changed, 45 insertions, 30 deletions
diff --git a/storperf/main.py b/storperf/main.py
index a40d656..2423b99 100644
--- a/storperf/main.py
+++ b/storperf/main.py
@@ -8,32 +8,24 @@
##############################################################################
import getopt
import json
-import logging
import logging.config
import os
-import socket
import sys
-from fio.fio_invoker import FIOInvoker
-from carbon.emitter import CarbonMetricTransmitter
-from carbon.converter import JSONToCarbon
+from test_executor import TestExecutor, UnknownWorkload
"""
"""
+
class Usage(Exception):
+
def __init__(self, msg):
self.msg = msg
-def event(metric):
- metrics_converter = JSONToCarbon()
- metrics_emitter = CarbonMetricTransmitter()
- prefix = socket.getfqdn()
- carbon_metrics = metrics_converter.convert_to_dictionary(metric, prefix)
- metrics_emitter.transmit_metrics(carbon_metrics)
def setup_logging(
- default_path='logging.json',
+ default_path='storperf/logging.json',
default_level=logging.INFO,
env_key='LOG_CFG'
):
@@ -51,39 +43,62 @@ def setup_logging(
else:
logging.basicConfig(level=default_level)
-def main(argv=None):
+def event(event_string):
+ logging.getLogger(__name__).info(event_string)
+
+
+def main(argv=None):
setup_logging()
+ test_executor = TestExecutor()
+ verbose = False
+ workloads = None
if argv is None:
argv = sys.argv
try:
try:
- opts = getopt.getopt(argv[1:], "h", ["help"])
+ opts, args = getopt.getopt(argv[1:], "t:w:scvh",
+ ["target=",
+ "workload=",
+ "nossd",
+ "nowarm",
+ "verbose",
+ "help",
+ ])
except getopt.error, msg:
raise Usage(msg)
+ for o, a in opts:
+ if o in ("-h", "--help"):
+ print __doc__
+ return 0
+ elif o in ("-t", "--target"):
+ test_executor.filename = a
+ elif o in ("-v", "--verbose"):
+ verbose = True
+ elif o in ("-s", "--nossd"):
+ test_executor.precondition = False
+ elif o in ("-c", "--nowarm"):
+ test_executor.warm = False
+ elif o in ("-w", "--workload"):
+ workloads = a.split(",")
+
+ test_executor.register_workloads(workloads)
+
except Usage, err:
print >> sys.stderr, err.msg
print >> sys.stderr, "for help use --help"
return 2
+ except UnknownWorkload, err:
+ print >> sys.stderr, err.msg
+ print >> sys.stderr, "for help use --help"
+ return 2
+
+ if (verbose):
+ test_executor.register(event)
- 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=60',
- '--time_based', '--runtime=6000']
-
- invoker = FIOInvoker()
- invoker.register(event)
- invoker.execute(simple_args)
+ test_executor.execute()
if __name__ == "__main__":
sys.exit(main())