diff options
author | 2017-01-10 09:11:54 +0000 | |
---|---|---|
committer | 2017-01-10 09:11:54 +0000 | |
commit | 9667f5d35df9caf9a3a8f851c2ce3612fa2ba437 (patch) | |
tree | e42240c9d2209aa37d54da44a1c89b00ac8cd1cd /yardstick | |
parent | ceebb672c85c5dbce6df17f0c263375d17adcc05 (diff) | |
parent | 63e75aad3b01de4fc20468d5dd9cdb9b15c5e11e (diff) |
Merge "Add API to get the status of async task"
Diffstat (limited to 'yardstick')
-rw-r--r-- | yardstick/cmd/commands/env.py | 72 | ||||
-rw-r--r-- | yardstick/common/constants.py | 4 | ||||
-rw-r--r-- | yardstick/common/httpClient.py | 4 |
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() |