From 9000303d8df63f8d846b28c67ce1b45f16bb6c8b Mon Sep 17 00:00:00 2001 From: Deepak S Date: Mon, 19 Jun 2017 12:19:41 +0000 Subject: Adding support for multi-dispatcher JIRA: YARDSTICK-684 This patch adds the support to enable multi-dispatcher of result. e.g. [DEFAULT] debug = False dispatcher = file, http Change-Id: Id0e1a1bba14edd899fcf5b275be1f0a091b6db77 Signed-off-by: Deepak S Signed-off-by: Ross Brattain --- etc/yardstick/yardstick.conf.sample | 2 +- tests/unit/benchmark/core/test_task.py | 14 ++++++++++++++ yardstick/benchmark/core/task.py | 16 +++++++++++++--- yardstick/dispatcher/base.py | 6 ++++-- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/etc/yardstick/yardstick.conf.sample b/etc/yardstick/yardstick.conf.sample index 572051186..1157b9d62 100644 --- a/etc/yardstick/yardstick.conf.sample +++ b/etc/yardstick/yardstick.conf.sample @@ -9,7 +9,7 @@ [DEFAULT] debug = False -dispatcher = http +dispatcher = http # setup multiple dipatcher with comma deperted e.g. file,http [dispatcher_http] timeout = 5 diff --git a/tests/unit/benchmark/core/test_task.py b/tests/unit/benchmark/core/test_task.py index 8d6d963c3..7f617537e 100644 --- a/tests/unit/benchmark/core/test_task.py +++ b/tests/unit/benchmark/core/test_task.py @@ -47,6 +47,20 @@ class TaskTestCase(unittest.TestCase): self.assertEqual(context_cfg["host"], server_info) self.assertEqual(context_cfg["target"], server_info) + def test_set_dispatchers(self): + t = task.Task() + output_config = {"DEFAULT": {"dispatcher": "file, http"}} + t._set_dispatchers(output_config) + self.assertEqual(output_config, output_config) + + @mock.patch('yardstick.benchmark.core.task.DispatcherBase') + def test__do_output(self, mock_dispatcher): + t = task.Task() + output_config = {"DEFAULT": {"dispatcher": "file, http"}} + mock_dispatcher.get = mock.MagicMock(return_value=[mock.MagicMock(), + mock.MagicMock()]) + self.assertEqual(None, t._do_output(output_config, {})) + @mock.patch('yardstick.benchmark.core.task.Context') def test_parse_networks_from_nodes(self, mock_context): nodes = { diff --git a/yardstick/benchmark/core/task.py b/yardstick/benchmark/core/task.py index ede14b1c0..b2da7a2ee 100644 --- a/yardstick/benchmark/core/task.py +++ b/yardstick/benchmark/core/task.py @@ -48,6 +48,12 @@ class Task(object): # pragma: no cover self.contexts = [] self.outputs = {} + def _set_dispatchers(self, output_config): + dispatchers = output_config.get('DEFAULT', {}).get('dispatcher', + 'file') + out_types = [s.strip() for s in dispatchers.split(',')] + output_config['DEFAULT']['dispatcher'] = out_types + def start(self, args, **kwargs): """Start a benchmark scenario.""" @@ -68,7 +74,10 @@ class Task(object): # pragma: no cover self._set_output_config(output_config, args.output_file) LOG.debug('Output configuration is: %s', output_config) - if output_config['DEFAULT'].get('dispatcher') == 'file': + self._set_dispatchers(output_config) + + # update dispatcher list + if 'file' in output_config['DEFAULT']['dispatcher']: result = {'status': 0, 'result': {}} utils.write_json_to_file(args.output_file, result) @@ -198,9 +207,10 @@ class Task(object): # pragma: no cover return 'PASS' def _do_output(self, output_config, result): + dispatchers = DispatcherBase.get(output_config) - dispatcher = DispatcherBase.get(output_config) - dispatcher.flush_result_data(result) + for dispatcher in dispatchers: + dispatcher.flush_result_data(result) def _run(self, scenarios, run_in_parallel, output_file): """Deploys context and calls runners""" diff --git a/yardstick/dispatcher/base.py b/yardstick/dispatcher/base.py index e77249c54..1fc0a2f31 100644 --- a/yardstick/dispatcher/base.py +++ b/yardstick/dispatcher/base.py @@ -41,9 +41,11 @@ class Base(object): def get(config): """Returns instance of a dispatcher for dispatcher type. """ - out_type = config['DEFAULT']['dispatcher'] + list_dispatcher = \ + [Base.get_cls(out_type.capitalize())(config) + for out_type in config['DEFAULT']['dispatcher']] - return Base.get_cls(out_type.capitalize())(config) + return list_dispatcher @abc.abstractmethod def flush_result_data(self, data): -- cgit 1.2.3-korg