X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=yardstick%2Fcmd%2Fcli.py;h=0bc7c1617763a5e4658eb73f9a0e659ebc30044f;hb=78939bfbd95b7047f00e234b03e478255ed6ece5;hp=1f058a5a1b66e5995be92cd7dea0a8247f405233;hpb=15e8300a8e85d5907c5ea90da505929b8ca85ca0;p=yardstick.git diff --git a/yardstick/cmd/cli.py b/yardstick/cmd/cli.py index 1f058a5a1..0bc7c1617 100644 --- a/yardstick/cmd/cli.py +++ b/yardstick/cmd/cli.py @@ -7,10 +7,11 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -''' +""" Command-line interface to yardstick -''' +""" +from __future__ import absolute_import import logging import os import sys @@ -19,20 +20,23 @@ from pkg_resources import get_distribution from argparse import RawDescriptionHelpFormatter from oslo_config import cfg +from yardstick import _init_logging, _LOG_STREAM_HDLR from yardstick.cmd.commands import task from yardstick.cmd.commands import runner from yardstick.cmd.commands import scenario +from yardstick.cmd.commands import testcase +from yardstick.cmd.commands import plugin +from yardstick.cmd.commands import env +from yardstick.cmd.commands import report +from yardstick.common import import_tools + CONF = cfg.CONF cli_opts = [ cfg.BoolOpt('debug', short='d', default=False, - help='increase output verbosity to debug'), - cfg.BoolOpt('verbose', - short='v', - default=False, - help='increase output verbosity to info') + help='increase output verbosity to debug') ] CONF.register_cli_opts(cli_opts) @@ -51,22 +55,28 @@ def find_config_files(path_list): return None -class YardstickCLI(): - '''Command-line interface to yardstick''' +@import_tools.decorator_banned_modules +class YardstickCLI(object): # pragma: no cover + """Command-line interface to yardstick""" # Command categories categories = { 'task': task.TaskCommands, 'runner': runner.RunnerCommands, - 'scenario': scenario.ScenarioCommands + 'scenario': scenario.ScenarioCommands, + 'testcase': testcase.TestcaseCommands, + 'plugin': plugin.PluginCommands, + 'env': env.EnvCommand, + 'report': report.ReportCommands } def __init__(self): + self.opts = [] self._version = 'yardstick version %s ' % \ get_distribution('yardstick').version def _find_actions(self, subparsers, actions_module): - '''find action methods''' + """find action methods""" # Find action methods inside actions_module and # add them to the command parser. # The 'actions_module' argument may be a class @@ -85,7 +95,7 @@ class YardstickCLI(): subparser.set_defaults(func=callback) def _add_command_parsers(self, categories, subparsers): - '''add commands to command-line parser''' + """add commands to command-line parser""" for category in categories: command_object = categories[category]() desc = command_object.__doc__ or '' @@ -97,32 +107,74 @@ class YardstickCLI(): cmd_subparsers = subparser.add_subparsers(title='subcommands') self._find_actions(cmd_subparsers, command_object) - def main(self, argv): - '''run the command line interface''' + def _register_cli_opt(self): # register subcommands to parse additional command line arguments - parser = lambda subparsers: self._add_command_parsers( - YardstickCLI.categories, subparsers) + def parser(subparsers): + self._add_command_parsers(self.categories, subparsers) + category_opt = cfg.SubCommandOpt("category", title="Command categories", help="Available categories", handler=parser) - CONF.register_cli_opt(category_opt) + self._register_opt(category_opt) + + def _register_opt(self, opt): + + CONF.register_cli_opt(opt) + self.opts.append(opt) + + def _load_cli_config(self, argv): # load CLI args and config files CONF(argv, project="yardstick", version=self._version, default_config_files=find_config_files(CONFIG_SEARCH_PATHS)) - # handle global opts - logger = logging.getLogger('yardstick') - logger.setLevel(logging.WARNING) - - if CONF.verbose: - logger.setLevel(logging.INFO) + def _handle_global_opts(self): + _init_logging() if CONF.debug: - logger.setLevel(logging.DEBUG) + _LOG_STREAM_HDLR.setLevel(logging.DEBUG) + + def _dispatch_func_notask(self): # dispatch to category parser func = CONF.category.func func(CONF.category) + + def _dispatch_func_task(self, task_id): + + # dispatch to category parser + func = CONF.category.func + func(CONF.category, task_id=task_id) + + def _clear_config_opts(self): + + CONF.clear() + CONF.unregister_opts(self.opts) + + def main(self, argv): # pragma: no cover + """run the command line interface""" + try: + self._register_cli_opt() + + self._load_cli_config(argv) + + self._handle_global_opts() + + self._dispatch_func_notask() + finally: + self._clear_config_opts() + + def api(self, argv, task_id): # pragma: no cover + """run the api interface""" + try: + self._register_cli_opt() + + self._load_cli_config(argv) + + self._handle_global_opts() + + self._dispatch_func_task(task_id) + finally: + self._clear_config_opts()