aboutsummaryrefslogtreecommitdiffstats
path: root/api/actions
diff options
context:
space:
mode:
authorchenjiankun <chenjiankun1@huawei.com>2016-12-02 00:30:58 +0000
committerchenjiankun <chenjiankun1@huawei.com>2016-12-02 12:40:40 +0000
commit78d6cbd462fc7db9dcdab4d2478f6c27437d4c88 (patch)
tree9bc3cab415a49e37ed89bff9736082dc4286d2c4 /api/actions
parentdfe01b8db0d51bcaaa6c5ddc67eaf250458c6409 (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.py101
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)