summaryrefslogtreecommitdiffstats
path: root/qtip/loader/plan.py
diff options
context:
space:
mode:
Diffstat (limited to 'qtip/loader/plan.py')
-rw-r--r--qtip/loader/plan.py35
1 files changed, 30 insertions, 5 deletions
diff --git a/qtip/loader/plan.py b/qtip/loader/plan.py
index 6f1764e2..e15651a3 100644
--- a/qtip/loader/plan.py
+++ b/qtip/loader/plan.py
@@ -8,12 +8,21 @@
##############################################################################
-from qtip.base.constant import PlanProp
+from qtip.base.constant import BaseProp
+from qtip.collector import CollectorProp as CProp
from qtip.collector.logfile import LogfileCollector
from qtip.loader.yaml_file import YamlFileLoader
from qtip.loader.qpi import QPISpec
+# TODO(yujunz) more elegant way to load module dynamically
+def load_collector(type_name):
+ if type_name == LogfileCollector.TYPE:
+ return LogfileCollector
+ else:
+ raise Exception("Invalid collector type: {}".format(type_name))
+
+
class Plan(YamlFileLoader):
"""
a benchmark plan is consist of configuration and a QPI list
@@ -24,10 +33,26 @@ class Plan(YamlFileLoader):
def __init__(self, name, paths=None):
super(Plan, self).__init__(name, paths)
+ _config = self.content[PlanProp.CONFIG]
+
+ self.collectors = [load_collector(c[CProp.TYPE])(c, self)
+ for c in _config[PlanProp.COLLECTORS]]
+
self.qpis = [QPISpec(qpi, paths=paths)
for qpi in self.content[PlanProp.QPIS]]
- self.info = self.content[PlanProp.INFO]
- _config = self.content[PlanProp.CONFIG]
- # TODO(yujunz) create collector by name
- self.collector = LogfileCollector(_config[PlanProp.COLLECTOR], paths)
+
+class PlanProp(BaseProp):
+ # plan
+ INFO = 'info'
+
+ FACILITY = 'facility'
+ ENGINEER = 'engineer'
+
+ CONFIG = 'config'
+
+ DRIVER = 'driver'
+ COLLECTORS = 'collectors'
+ REPORTER = 'reporter'
+
+ QPIS = 'QPIs'