From decad5f7fdb212c4f78fc31f00e591eaba104450 Mon Sep 17 00:00:00 2001 From: Yujun Zhang Date: Tue, 27 Dec 2016 16:57:28 +0800 Subject: Add module skeletons - Remove `suite` and `case` which seems redundant at the moment - Rename `qtip.spec` to `qtip.loader` since the class loads spec - Add driver `sample` which will generate random performance data - Add collector `logfile` which will collect result from log files - Add reporter `console` which will print report to console - Add exception classes See updated class diagram in https://wiki.opnfv.org/display/qtip/Design JIRA: QTIP-148 JIRA: QTIP-193 Change-Id: Idf751d33428176a26224e4443100a142feda6f32 Signed-off-by: Yujun Zhang --- qtip/runner/base.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ qtip/runner/case.py | 17 ----------------- qtip/runner/plan.py | 21 ++++++++++----------- qtip/runner/suite.py | 22 ---------------------- 4 files changed, 55 insertions(+), 50 deletions(-) create mode 100644 qtip/runner/base.py delete mode 100644 qtip/runner/case.py delete mode 100644 qtip/runner/suite.py (limited to 'qtip/runner') diff --git a/qtip/runner/base.py b/qtip/runner/base.py new file mode 100644 index 00000000..07fba104 --- /dev/null +++ b/qtip/runner/base.py @@ -0,0 +1,45 @@ +############################################################################## +# Copyright (c) 2016 ZTE Corp and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +from qtip.base.constant import PkgName, PropName +from qtip.base.error import NotFound +from qtip.collector.logfile import LogfileCollector +from qtip.driver.sample import SampleDriver +from qtip.loader.base import BaseLoader +from qtip.reporter.console import ConsoleReporter + + +class BaseRunner(BaseLoader): + def __init__(self, name, paths=None, config=None): + super(BaseRunner, self).__init__(name, paths=paths) + if config is None: + config = self.content[PropName.CONFIG] + + driver_name = config[PropName.DRIVER] + collector_name = config[PropName.COLLECTOR] + reporter_name = config[PropName.REPORTER] + + # TODO(yujunz) dynamically load modules by name + + if driver_name == 'sample': + self.driver = SampleDriver() + else: + raise NotFound(driver_name, package=PkgName.DRIVER) + + if collector_name == 'logfile': + self.collector = LogfileCollector() + else: + raise NotFound(collector_name, + package=PkgName.COLLECTOR) + + if reporter_name == 'console': + self.reporter = ConsoleReporter() + else: + raise NotFound(reporter_name, + package=PkgName.REPORTER) diff --git a/qtip/runner/case.py b/qtip/runner/case.py deleted file mode 100644 index eb3febc2..00000000 --- a/qtip/runner/case.py +++ /dev/null @@ -1,17 +0,0 @@ -############################################################################## -# Copyright (c) 2016 ZTE Corp and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - -from qtip.base.benchmark import Property -from qtip.spec.metric import MetricSpec - - -class Case(object): - def __init__(self, spec, paths=None): - self.metric_spec = MetricSpec(spec[Property.METRIC_SPEC], paths=paths) - self.config = spec[Property.CONFIG] diff --git a/qtip/runner/plan.py b/qtip/runner/plan.py index 265ad8d7..f6c1c3bb 100644 --- a/qtip/runner/plan.py +++ b/qtip/runner/plan.py @@ -7,20 +7,19 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -from qtip.base.benchmark import Benchmark, Property -from qtip.runner.suite import Suite +from qtip.base.constant import PropName +from qtip.runner.base import BaseRunner +from qtip.loader.qpi import QPISpec -class Plan(Benchmark): +class Plan(BaseRunner): + """ + a benchmark plan is consist of configuration and a QPI list """ - a benchmark plan is consist of basic information and several suites""" - DEFAULT_DIR = 'plans' + DEFAULT_DIR = 'plan' def __init__(self, name, paths=None): - super(Plan, self).__init__(name, paths=paths) - content = self.content() - - self.info = content[Property.INFO] - self.suites = [Suite(suite, paths=paths) - for suite in content[Property.SUITES]] + super(Plan, self).__init__(name, paths) + self.qpis = [QPISpec(qpi, paths=paths) + for qpi in self.content[PropName.QPIS]] diff --git a/qtip/runner/suite.py b/qtip/runner/suite.py deleted file mode 100644 index 55033d2b..00000000 --- a/qtip/runner/suite.py +++ /dev/null @@ -1,22 +0,0 @@ -############################################################################## -# Copyright (c) 2016 ZTE Corp and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - -from qtip.base.benchmark import Property -from qtip.spec.qpi import QPISpec -from qtip.runner.case import Case - - -class Suite(object): - """a suite of benchmark cases under specified condition""" - def __init__(self, spec, paths=None): - self._paths = paths - self.qpi_spec = QPISpec(spec[Property.QPI_SPEC], paths=paths) - self.condition = spec.get(Property.CONDITION, {}) - self.cases = [Case(case_spec, paths) - for case_spec in spec.get(Property.CASES, [])] -- cgit 1.2.3-korg