From acc757fc7cf9db54d97d4563cd294efafc3f7747 Mon Sep 17 00:00:00 2001 From: chenjiankun Date: Wed, 24 May 2017 07:22:51 +0000 Subject: Yardstick output format unified JIRA: YARDSTICK-658 Currently the yardstick have three dispatcher: file, influxdb, mongodb. (influxdb using API to get result and mongodb using testAPI to get result) But their output format is different. It is hard to use. In this patch, make all dispatchers using the same data source. And make the output format of file and influxdb unified. As for mongodb, since it is related to testAPI, so I make it push data every test case. The unified output format is: http://paste.openstack.org/show/610125/ Change-Id: I854ac4f03e6f904469b07b0c924c7d850545ae5b Signed-off-by: chenjiankun --- api/resources/results.py | 63 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 4 deletions(-) (limited to 'api/resources') diff --git a/api/resources/results.py b/api/resources/results.py index 86fc25193..a0527ed8c 100644 --- a/api/resources/results.py +++ b/api/resources/results.py @@ -28,12 +28,12 @@ def getResult(args): uuid.UUID(task_id) except KeyError: message = 'task_id must be provided' - return common_utils.error_handler(message) + return common_utils.result_handler(2, message) task = TasksHandler().get_task_by_taskid(task_id) def _unfinished(): - return common_utils.result_handler(0, []) + return common_utils.result_handler(0, {}) def _finished(): testcases = task.details.split(',') @@ -44,7 +44,7 @@ def getResult(args): data = common_utils.translate_to_str(influx_utils.query(query_sql)) return data - result = {k: get_data(k) for k in testcases} + result = _format_data({k: get_data(k) for k in testcases}) return common_utils.result_handler(1, result) @@ -61,4 +61,59 @@ def getResult(args): } return switcher.get(status, lambda: 'nothing')() except IndexError: - return common_utils.error_handler('no such task') + return common_utils.result_handler(2, 'no such task') + + +def _format_data(data): + try: + first_value = data.values()[0][0] + except IndexError: + return {'criteria': 'FAIL', 'testcases': {}} + else: + info = { + 'deploy_scenario': first_value.get('deploy_scenario'), + 'installer': first_value.get('installer'), + 'pod_name': first_value.get('pod_name'), + 'version': first_value.get('version') + } + task_id = first_value.get('task_id') + criteria = first_value.get('criteria') + testcases = {k: _get_case_data(v) for k, v in data.items()} + + result = { + 'criteria': criteria, + 'info': info, + 'task_id': task_id, + 'testcases': testcases + } + return result + + +def _get_case_data(data): + try: + scenario = data[0] + except IndexError: + return {'tc_data': [], 'criteria': 'FAIL'} + else: + tc_data = [_get_scenario_data(s) for s in data] + criteria = scenario.get('criteria') + return {'tc_data': tc_data, 'criteria': criteria} + + +def _get_scenario_data(data): + result = { + 'data': {}, + 'timestamp': '' + } + + blacklist = {'criteria', 'deploy_scenario', 'host', 'installer', + 'pod_name', 'runner_id', 'scenarios', 'target', + 'task_id', 'time', 'version'} + + keys = set(data.keys()) - set(blacklist) + for k in keys: + result['data'][k] = data[k] + + result['timestamp'] = data.get('time') + + return result -- cgit 1.2.3-korg