summaryrefslogtreecommitdiffstats
path: root/api/resources/results.py
diff options
context:
space:
mode:
authorchenjiankun <chenjiankun1@huawei.com>2016-12-21 01:07:26 +0000
committerchenjiankun <chenjiankun1@huawei.com>2016-12-22 11:11:37 +0000
commit70d25b87c167bc13e883da2963980cce56410f98 (patch)
treea9ecd80e6ed440001f9f7b5a595f0e9ddc0c05cf /api/resources/results.py
parentad37cb3cc16f8979caf7dc836e4fda8fe7955d5c (diff)
Yardstick API refactor
JIRA: YARDSTICK-503 Now in api/views.py there are many redundant code. So I do some refactoring and make it to be a lightweight framework. Change-Id: Id7cecc95e60f5403b2d26239a3ef41d01bbb542a Signed-off-by: chenjiankun <chenjiankun1@huawei.com>
Diffstat (limited to 'api/resources/results.py')
-rw-r--r--api/resources/results.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/api/resources/results.py b/api/resources/results.py
new file mode 100644
index 000000000..3de09fdc9
--- /dev/null
+++ b/api/resources/results.py
@@ -0,0 +1,67 @@
+##############################################################################
+# Copyright (c) 2016 Huawei Technologies Co.,Ltd 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
+##############################################################################
+import logging
+import uuid
+import re
+
+from api.utils import influx as influx_utils
+from api.utils import common as common_utils
+from api import conf
+
+logger = logging.getLogger(__name__)
+
+
+def default(args):
+ return getResult(args)
+
+
+def getResult(args):
+ try:
+ measurement = args['measurement']
+ task_id = args['task_id']
+
+ if re.search("[^a-zA-Z0-9_-]", measurement):
+ raise ValueError('invalid measurement parameter')
+
+ uuid.UUID(task_id)
+ except KeyError:
+ message = 'measurement and task_id must be provided'
+ return common_utils.error_handler(message)
+
+ query_template = "select * from %s where task_id='%s'"
+ query_sql = query_template % ('tasklist', task_id)
+ data = common_utils.translate_to_str(influx_utils.query(query_sql))
+
+ def _unfinished():
+ return common_utils.result_handler(0, [])
+
+ def _finished():
+ query_sql = query_template % (conf.TEST_CASE_PRE + measurement,
+ task_id)
+ data = common_utils.translate_to_str(influx_utils.query(query_sql))
+ if not data:
+ query_sql = query_template % (measurement, task_id)
+ data = common_utils.translate_to_str(influx_utils.query(query_sql))
+
+ return common_utils.result_handler(1, data)
+
+ def _error():
+ return common_utils.result_handler(2, data[0]['error'])
+
+ try:
+ status = data[0]['status']
+
+ switcher = {
+ 0: _unfinished,
+ 1: _finished,
+ 2: _error
+ }
+ return switcher.get(status, lambda: 'nothing')()
+ except IndexError:
+ return common_utils.error_handler('no such task')