summaryrefslogtreecommitdiffstats
path: root/yardstick
diff options
context:
space:
mode:
authorchenjiankun <chenjiankun1@huawei.com>2017-01-04 17:41:18 +0000
committerchenjiankun <chenjiankun1@huawei.com>2017-01-10 10:03:24 +0000
commit63e75aad3b01de4fc20468d5dd9cdb9b15c5e11e (patch)
tree9f3600cb443029e0fbcec03c349d1b452dc2f938 /yardstick
parent57011bd0769f54a98b90d489df0f38751ca76c0e (diff)
Add API to get the status of async task
JIRA: YARDSTICK-526 Currently there are many API run a task using sub thread. But we don't know the status of this task. So we need to offer a API to query the status of this task. Change-Id: I8d2cc558750bf9270aed4a7abb8bf35d17894d83 Signed-off-by: chenjiankun <chenjiankun1@huawei.com>
Diffstat (limited to 'yardstick')
-rw-r--r--yardstick/cmd/commands/env.py72
-rw-r--r--yardstick/common/constants.py4
-rw-r--r--yardstick/common/httpClient.py4
3 files changed, 65 insertions, 15 deletions
diff --git a/yardstick/cmd/commands/env.py b/yardstick/cmd/commands/env.py
index 098379ae1..d0fc75dd3 100644
--- a/yardstick/cmd/commands/env.py
+++ b/yardstick/cmd/commands/env.py
@@ -6,13 +6,13 @@
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-import logging
+from __future__ import print_function
+import time
+import os
+import sys
from yardstick.common.httpClient import HttpClient
-from yardstick.common import constants
-
-logger = logging.getLogger(__name__)
-logger.setLevel(logging.DEBUG)
+from yardstick.common import constants as consts
class EnvCommand(object):
@@ -21,19 +21,63 @@ class EnvCommand(object):
Set of commands to prepare environment
'''
def do_influxdb(self, args):
- url = constants.YARDSTICK_ENV_ACTION_API
data = {'action': 'createInfluxDBContainer'}
- HttpClient().post(url, data)
- logger.debug('Now creating and configing influxdb')
+ task_id = self._start_async_task(data)
+
+ start = '* creating influxDB'
+ self._check_status(task_id, start)
def do_grafana(self, args):
- url = constants.YARDSTICK_ENV_ACTION_API
data = {'action': 'createGrafanaContainer'}
- HttpClient().post(url, data)
- logger.debug('Now creating and configing grafana')
+ task_id = self._start_async_task(data)
+
+ start = '* creating grafana'
+ self._check_status(task_id, start)
def do_prepare(self, args):
- url = constants.YARDSTICK_ENV_ACTION_API
data = {'action': 'prepareYardstickEnv'}
- HttpClient().post(url, data)
- logger.debug('Now preparing environment')
+ task_id = self._start_async_task(data)
+
+ start = '* preparing yardstick environment'
+ self._check_status(task_id, start)
+
+ def _start_async_task(self, data):
+ url = consts.ENV_ACTION_API
+ return HttpClient().post(url, data)['result']['task_id']
+
+ def _check_status(self, task_id, start):
+ self._print_status(start, '[]\r')
+ url = '{}?task_id={}'.format(consts.ASYNC_TASK_API, task_id)
+
+ CHECK_STATUS_RETRY = 20
+ CHECK_STATUS_DELAY = 5
+
+ for retry in xrange(CHECK_STATUS_RETRY):
+ response = HttpClient().get(url)
+ status = response['status']
+
+ if status:
+ break
+
+ # wait until the async task finished
+ time.sleep(CHECK_STATUS_DELAY * (retry + 1))
+
+ switcher = {
+ 0: 'Timeout',
+ 1: 'Finished',
+ 2: 'Error'
+ }
+ self._print_status(start, '[{}]'.format(switcher[status]))
+ if status == 2:
+ print(response['result'])
+ sys.stdout.flush()
+ return status
+
+ def _print_status(self, s, e):
+ try:
+ columns = int(os.popen('stty size', 'r').read().split()[1])
+ word = '{}{}{}'.format(s, ' ' * (columns - len(s) - len(e)), e)
+ sys.stdout.write(word)
+ sys.stdout.flush()
+ except IndexError:
+ pass
diff --git a/yardstick/common/constants.py b/yardstick/common/constants.py
index 705e1ad87..174d39bfe 100644
--- a/yardstick/common/constants.py
+++ b/yardstick/common/constants.py
@@ -51,4 +51,6 @@ LOAD_IMAGES_SCRIPT = 'tests/ci/load_images.sh'
OPENSTACK_RC_FILE = join(YARDSTICK_CONFIG_DIR, 'openstack.creds')
-YARDSTICK_ENV_ACTION_API = 'http://localhost:5000/yardstick/env/action'
+BASE_URL = 'http://localhost:5000'
+ENV_ACTION_API = BASE_URL + '/yardstick/env/action'
+ASYNC_TASK_API = BASE_URL + '/yardstick/asynctask'
diff --git a/yardstick/common/httpClient.py b/yardstick/common/httpClient.py
index ab2e9a379..6acd0303d 100644
--- a/yardstick/common/httpClient.py
+++ b/yardstick/common/httpClient.py
@@ -28,3 +28,7 @@ class HttpClient(object):
except Exception as e:
logger.debug('Failed: %s', e)
raise
+
+ def get(self, url):
+ response = requests.get(url)
+ return response.json()