aboutsummaryrefslogtreecommitdiffstats
path: root/functest/api/resources/v1/tasks.py
diff options
context:
space:
mode:
authorLinda Wang <wangwulin@huawei.com>2017-08-22 04:01:38 +0000
committerLinda Wang <wangwulin@huawei.com>2017-08-25 01:16:21 +0000
commitdc73f1b7cb3afffcace97e3ede9dd25639def6e2 (patch)
treee60584f50b24af707b0981deb8bd1b058b98b863 /functest/api/resources/v1/tasks.py
parentad44bfd97555a7372269db539857fd53fffb0460 (diff)
Create API to get log for each task
API: /api/v1/functest/tasks/<task_id>/log METHOD: GET JIRA: FUNCTEST-867 Change-Id: I987cbf662e4da349bf7583e48da5d981a2f1e0fd Signed-off-by: Linda Wang <wangwulin@huawei.com>
Diffstat (limited to 'functest/api/resources/v1/tasks.py')
-rw-r--r--functest/api/resources/v1/tasks.py43
1 files changed, 40 insertions, 3 deletions
diff --git a/functest/api/resources/v1/tasks.py b/functest/api/resources/v1/tasks.py
index 7086e7075..e05db51be 100644
--- a/functest/api/resources/v1/tasks.py
+++ b/functest/api/resources/v1/tasks.py
@@ -11,9 +11,10 @@
Resources to retrieve the task results
"""
-
+import errno
import json
import logging
+import os
import uuid
from flask import jsonify
@@ -21,13 +22,14 @@ from flask import jsonify
from functest.api.base import ApiResource
from functest.api.common import api_utils
from functest.api.database.v1.handlers import TasksHandler
+from functest.utils.constants import CONST
LOGGER = logging.getLogger(__name__)
-class V1Tasks(ApiResource):
- """ V1Tasks Resource class"""
+class V1Task(ApiResource):
+ """ V1Task Resource class"""
def get(self, task_id): # pylint: disable=no-self-use
""" GET the result of the task id """
@@ -56,3 +58,38 @@ class V1Tasks(ApiResource):
result = {'status': status, 'result': json.loads(task.result)}
return jsonify(result)
+
+
+class V1TaskLog(ApiResource):
+ """ V1TaskLog Resource class"""
+
+ def get(self, task_id): # pylint: disable=no-self-use
+ """ GET the log of the task id """
+ try:
+ uuid.UUID(task_id)
+ except ValueError:
+ return api_utils.result_handler(status=1, data='Invalid task id')
+
+ task_handler = TasksHandler()
+ try:
+ task = task_handler.get_task_by_taskid(task_id)
+ except ValueError:
+ return api_utils.result_handler(status=1, data='No such task id')
+
+ task_log_dir = CONST.__getattribute__('dir_results')
+
+ try:
+ with open(os.path.join(task_log_dir,
+ '{}.log'.format(task_id)), 'r') as log_file:
+ data = log_file.readlines()
+ except OSError as err:
+ if err.errno == errno.ENOENT:
+ return api_utils.result_handler(
+ status=1, data='Log file does not exist')
+
+ return api_utils.result_handler(
+ status=1, data='Error with log file')
+
+ return_data = {'data': data}
+
+ return api_utils.result_handler(status=task.status, data=return_data)