diff options
Diffstat (limited to 'yardstick/cmd/commands/env.py')
-rw-r--r-- | yardstick/cmd/commands/env.py | 72 |
1 files changed, 58 insertions, 14 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 |