diff options
author | chenjiankun <chenjiankun1@huawei.com> | 2016-12-02 00:30:58 +0000 |
---|---|---|
committer | chenjiankun <chenjiankun1@huawei.com> | 2016-12-02 12:40:40 +0000 |
commit | 78d6cbd462fc7db9dcdab4d2478f6c27437d4c88 (patch) | |
tree | 9bc3cab415a49e37ed89bff9736082dc4286d2c4 /api/actions | |
parent | dfe01b8db0d51bcaaa6c5ddc67eaf250458c6409 (diff) |
Add API to create Grafana container
JIRA: YARDSTICK-441
Change-Id: Ia848c4af072915ef252e8e03100dd7a4e4a6c3c2
Signed-off-by: chenjiankun <chenjiankun1@huawei.com>
Diffstat (limited to 'api/actions')
-rw-r--r-- | api/actions/env.py | 101 |
1 files changed, 89 insertions, 12 deletions
diff --git a/api/actions/env.py b/api/actions/env.py index 321649940..40d81c648 100644 --- a/api/actions/env.py +++ b/api/actions/env.py @@ -9,48 +9,125 @@ import logging import threading import time +import json 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 from api import conf as api_conf -from api.utils import common as common_utils from api.utils import influx logger = logging.getLogger(__name__) +def createGrafanaContainer(args): + thread = threading.Thread(target=_create_grafana) + thread.start() + + +def _create_grafana(): + client = Client(base_url=config.DOCKER_URL) + + try: + if not _check_image_exist(client, '%s:%s' % (config.GRAFANA_IMAGE, + config.GRAFANA_TAGS)): + client.pull(config.GRAFANA_IMAGE, config.GRAFANA_TAGS) + + _create_grafana_container(client) + + time.sleep(5) + + _create_data_source() + + _create_dashboard() + except Exception as e: + logger.debug('Error: %s', e) + + +def _create_dashboard(): + url = 'http://admin:admin@%s:3000/api/dashboards/db' % api_conf.GATEWAY_IP + data = json.load(file('../dashboard/ping_dashboard.json')) + HttpClient().post(url, data) + + +def _create_data_source(): + url = 'http://admin:admin@%s:3000/api/datasources' % api_conf.GATEWAY_IP + data = { + "name": "yardstick", + "type": "influxdb", + "access": "proxy", + "url": "http://%s:8086" % api_conf.GATEWAY_IP, + "password": "root", + "user": "root", + "database": "yardstick", + "basicAuth": True, + "basicAuthUser": "admin", + "basicAuthPassword": "admin", + "isDefault": False, + } + HttpClient().post(url, data) + + +def _create_grafana_container(client): + ports = [3000] + port_bindings = {k: k for k in ports} + host_config = client.create_host_config(port_bindings=port_bindings) + + container = client.create_container(image='%s:%s' % (config.GRAFANA_IMAGE, + config.GRAFANA_TAGS), + ports=ports, + detach=True, + tty=True, + host_config=host_config) + client.start(container) + + +def _check_image_exist(client, t): + return any(t in a['RepoTags'][0] for a in client.images() if a['RepoTags']) + + def createInfluxDBContainer(args): + thread = threading.Thread(target=_create_influxdb) + thread.start() + + +def _create_influxdb(): + client = Client(base_url=config.DOCKER_URL) + try: - container = _create_influxdb_container() _config_output_file() - thread = threading.Thread(target=_config_influxdb) - thread.start() - return common_utils.result_handler('success', container) + + if not _check_image_exist(client, '%s:%s' % (config.INFLUXDB_IMAGE, + config.INFLUXDB_TAG)): + client.pull(config.INFLUXDB_IMAGE, tag=config.INFLUXDB_TAG) + + _create_influxdb_container(client) + + time.sleep(5) + + _config_influxdb() except Exception as e: - message = 'Failed to create influxdb container: %s' % e - return common_utils.error_handler(message) + logger.debug('Error: %s', e) -def _create_influxdb_container(): - client = Client(base_url=config.DOCKER_URL) +def _create_influxdb_container(client): ports = [8083, 8086] port_bindings = {k: k for k in ports} host_config = client.create_host_config(port_bindings=port_bindings) - container = client.create_container(image='tutum/influxdb', + container = client.create_container(image='%s:%s' % (config.INFLUXDB_IMAGE, + config.INFLUXDB_TAG), ports=ports, detach=True, tty=True, host_config=host_config) client.start(container) - return container def _config_influxdb(): - time.sleep(20) try: client = influx.get_data_db_client() client.create_user(config.USER, config.PASSWORD, config.DATABASE) |