diff options
Diffstat (limited to 'api/resources/env_action.py')
-rw-r--r-- | api/resources/env_action.py | 129 |
1 files changed, 91 insertions, 38 deletions
diff --git a/api/resources/env_action.py b/api/resources/env_action.py index fa0f95d90..7e2487158 100644 --- a/api/resources/env_action.py +++ b/api/resources/env_action.py @@ -10,9 +10,11 @@ import logging import threading import subprocess import time +import uuid import json import os import errno +import ConfigParser from docker import Client @@ -22,17 +24,24 @@ from yardstick.common.httpClient import HttpClient from api import conf as api_conf from api.utils import influx from api.utils.common import result_handler +from api.database.handler import AsyncTaskHandler 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(): +def _create_grafana(task_id): + _create_task(task_id) + client = Client(base_url=config.DOCKER_URL) try: @@ -47,7 +56,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) @@ -95,16 +107,21 @@ 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: - _config_output_file() + _change_output_to_influxdb() if not _check_image_exist(client, '%s:%s' % (config.INFLUXDB_IMAGE, config.INFLUXDB_TAG)): @@ -115,7 +132,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) @@ -144,58 +164,59 @@ def _config_influxdb(): logger.debug('Failed to config influxDB: %s', e) -def _config_output_file(): +def _change_output_to_influxdb(): yardstick_utils.makedirs(config.YARDSTICK_CONFIG_DIR) - with open(config.YARDSTICK_CONFIG_FILE, 'w') as f: - f.write("""\ -[DEFAULT] -debug = False -dispatcher = influxdb -[dispatcher_file] -file_path = /tmp/yardstick.out + parser = ConfigParser.ConfigParser() + parser.read(config.YARDSTICK_CONFIG_SAMPLE_FILE) -[dispatcher_http] -timeout = 5 -# target = http://127.0.0.1:8000/results + parser.set('DEFAULT', 'dispatcher', 'influxdb') + parser.set('dispatcher_influxdb', 'target', + 'http://%s:8086' % api_conf.GATEWAY_IP) -[dispatcher_influxdb] -timeout = 5 -target = http://%s:8086 -db_name = yardstick -username = root -password = root -""" - % api_conf.GATEWAY_IP) + with open(config.YARDSTICK_CONFIG_FILE, 'w') as f: + parser.write(f) 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() - _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): @@ -251,9 +272,41 @@ def _append_external_network(rc_file): raise +def _clean_images(): + cmd = [config.CLEAN_IMAGES_SCRIPT] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + cwd=config.YARDSTICK_REPOS_DIR) + output = p.communicate()[0] + logger.debug('The result is: %s', output) + + def _load_images(): cmd = [config.LOAD_IMAGES_SCRIPT] p = subprocess.Popen(cmd, stdout=subprocess.PIPE, 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) |