aboutsummaryrefslogtreecommitdiffstats
path: root/api/resources/env_action.py
diff options
context:
space:
mode:
Diffstat (limited to 'api/resources/env_action.py')
-rw-r--r--api/resources/env_action.py113
1 files changed, 84 insertions, 29 deletions
diff --git a/api/resources/env_action.py b/api/resources/env_action.py
index 59a1692a1..8955f3cb6 100644
--- a/api/resources/env_action.py
+++ b/api/resources/env_action.py
@@ -6,34 +6,44 @@
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+from __future__ import absolute_import
+
+import errno
+import json
import logging
-import threading
+import os
import subprocess
+import threading
import time
-import json
-import os
-import errno
-import ConfigParser
+import uuid
-from docker import Client
+from six.moves import configparser
-from yardstick.common import constants as config
-from yardstick.common import utils as yardstick_utils
-from yardstick.common.httpClient import HttpClient
from api import conf as api_conf
+from api.database.handler import AsyncTaskHandler
from api.utils import influx
from api.utils.common import result_handler
+from docker import Client
+from yardstick.common import constants as config
+from yardstick.common import utils as yardstick_utils
+from yardstick.common.httpClient import HttpClient
logger = logging.getLogger(__name__)
+logger.setLevel(logging.DEBUG)
def createGrafanaContainer(args):
- thread = threading.Thread(target=_create_grafana)
+ task_id = str(uuid.uuid4())
+
+ thread = threading.Thread(target=_create_grafana, args=(task_id,))
thread.start()
- return result_handler('success', [])
+ return result_handler('success', {'task_id': task_id})
+
+
+def _create_grafana(task_id):
+ _create_task(task_id)
-def _create_grafana():
client = Client(base_url=config.DOCKER_URL)
try:
@@ -48,7 +58,10 @@ def _create_grafana():
_create_data_source()
_create_dashboard()
+
+ _update_task_status(task_id)
except Exception as e:
+ _update_task_error(task_id, str(e))
logger.debug('Error: %s', e)
@@ -96,12 +109,17 @@ def _check_image_exist(client, t):
def createInfluxDBContainer(args):
- thread = threading.Thread(target=_create_influxdb)
+ task_id = str(uuid.uuid4())
+
+ thread = threading.Thread(target=_create_influxdb, args=(task_id,))
thread.start()
- return result_handler('success', [])
+
+ return result_handler('success', {'task_id': task_id})
-def _create_influxdb():
+def _create_influxdb(task_id):
+ _create_task(task_id)
+
client = Client(base_url=config.DOCKER_URL)
try:
@@ -116,7 +134,10 @@ def _create_influxdb():
time.sleep(5)
_config_influxdb()
+
+ _update_task_status(task_id)
except Exception as e:
+ _update_task_error(task_id, str(e))
logger.debug('Error: %s', e)
@@ -148,7 +169,7 @@ def _config_influxdb():
def _change_output_to_influxdb():
yardstick_utils.makedirs(config.YARDSTICK_CONFIG_DIR)
- parser = ConfigParser.ConfigParser()
+ parser = configparser.ConfigParser()
parser.read(config.YARDSTICK_CONFIG_SAMPLE_FILE)
parser.set('DEFAULT', 'dispatcher', 'influxdb')
@@ -160,34 +181,44 @@ def _change_output_to_influxdb():
def prepareYardstickEnv(args):
- thread = threading.Thread(target=_prepare_env_daemon)
+ task_id = str(uuid.uuid4())
+
+ thread = threading.Thread(target=_prepare_env_daemon, args=(task_id,))
thread.start()
- return result_handler('success', [])
+
+ return result_handler('success', {'task_id': task_id})
-def _prepare_env_daemon():
+def _prepare_env_daemon(task_id):
+ _create_task(task_id)
installer_ip = os.environ.get('INSTALLER_IP', 'undefined')
installer_type = os.environ.get('INSTALLER_TYPE', 'undefined')
- _check_variables(installer_ip, installer_type)
+ try:
+ _check_variables(installer_ip, installer_type)
- _create_directories()
+ _create_directories()
- rc_file = config.OPENSTACK_RC_FILE
+ rc_file = config.OPENSTACK_RC_FILE
- _get_remote_rc_file(rc_file, installer_ip, installer_type)
+ _get_remote_rc_file(rc_file, installer_ip, installer_type)
- _source_file(rc_file)
+ _source_file(rc_file)
- _append_external_network(rc_file)
+ _append_external_network(rc_file)
- # update the external_network
- _source_file(rc_file)
+ # update the external_network
+ _source_file(rc_file)
- _clean_images()
+ _clean_images()
- _load_images()
+ _load_images()
+
+ _update_task_status(task_id)
+ except Exception as e:
+ _update_task_error(task_id, str(e))
+ logger.debug('Error: %s', e)
def _check_variables(installer_ip, installer_type):
@@ -257,3 +288,27 @@ def _load_images():
cwd=config.YARDSTICK_REPOS_DIR)
output = p.communicate()[0]
logger.debug('The result is: %s', output)
+
+
+def _create_task(task_id):
+ async_handler = AsyncTaskHandler()
+ task_dict = {
+ 'task_id': task_id,
+ 'status': 0
+ }
+ async_handler.insert(task_dict)
+
+
+def _update_task_status(task_id):
+ async_handler = AsyncTaskHandler()
+
+ task = async_handler.get_task_by_taskid(task_id)
+ async_handler.update_status(task, 1)
+
+
+def _update_task_error(task_id, error):
+ async_handler = AsyncTaskHandler()
+
+ task = async_handler.get_task_by_taskid(task_id)
+ async_handler.update_status(task, 2)
+ async_handler.update_error(task, error)