-
Notifications
You must be signed in to change notification settings - Fork 10
/
workflow.py
68 lines (52 loc) · 1.93 KB
/
workflow.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import os
from config import WLRUNNER, LBAGENERATOR, LBAMULTIPROC
from commons import *
from utilities.utils import *
import wiscsim
from wiscsim.simulator import create_simulator
import workrunner
def run_workflow(conf):
wf = Workflow(conf)
wf.run()
class Workflow(object):
def __init__(self, conf):
self.conf = conf
def run(self):
self._save_conf()
event_iter = self._run_workload()
self._run_simulator(event_iter)
def run_simulator(self, event_iter):
self._save_conf()
return self._run_simulator(event_iter)
def run_workload(self):
self._save_conf()
return self._run_workload()
def _save_conf(self):
confpath = os.path.join(self.conf['result_dir'], 'config.json')
prepare_dir_for_path(confpath)
self.conf.dump_to_file(confpath)
def _run_workload(self):
workload_src = self.conf['workload_src']
if workload_src == WLRUNNER:
runner = workrunner.wlrunner.WorkloadRunner(self.conf)
event_iter = runner.run()
elif workload_src == LBAGENERATOR:
classname = self.conf['lba_workload_class']
cls = eval("workrunner.lbaworkloadgenerator.{}".format(classname))
lbagen = cls(self.conf)
event_iter = lbagen
elif workload_src == LBAMULTIPROC:
classname = self.conf['lba_workload_class']
cls = "workrunner.lbaworkloadgenerator.{}".format(classname)
lbagen = cls(self.conf)
event_iter = lbagen.get_iter_list()
else:
raise RuntimeError("{} is not a valid workload source"\
.format(workload_src))
return event_iter
def _run_simulator(self, event_iter):
if self.conf['enable_simulation'] is not True:
return
simulator = create_simulator(self.conf['simulator_class'], self.conf,
event_iter )
simulator.run()