aboutsummaryrefslogtreecommitdiffstats
path: root/yardstick/cmd/commands/env.py
diff options
context:
space:
mode:
Diffstat (limited to 'yardstick/cmd/commands/env.py')
-rw-r--r--yardstick/cmd/commands/env.py72
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