562e918fa2f00e717b7270e4a7f5c789fa448d05
[bottlenecks.git] / utils / infra_setup / runner / yardstick.py
1 #!/usr/bin/env python
2 ##############################################################################
3 # Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
4 #
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
10 '''This file contain all function about yardstick API.
11 At present, This file contain the following function:
12 1.Ask Yardstick to run testcase and get a task id.
13 2.use task id to ask yardstick for data.
14 3.Ask yardstick for InfluxDB create
15 4.how the process of task.'''
16
17 import sys
18 import os
19 import time
20 import requests
21 import json
22 import urllib
23 import utils.logger as logger
24 from utils.parser import Parser as config
25 import utils.env_prepare.stack_prepare as env
26
27 headers = {"Content-Type": "application/json"}
28 LOG = logger.Logger(__name__).getLogger()
29
30
31 def yardstick_image_prepare():
32     if not os.path.exists(config.bottlenecks_config["yardstick_image_dir"]):
33         urllib.urlretrieve(config.bottlenecks_config["image_url"],
34                            config.bottlenecks_config["yardstick_image_dir"])
35     env.prepare_image(config.bottlenecks_config["yardstick_image_name"],
36                       config.bottlenecks_config["yardstick_image_dir"])
37
38
39 def yardstick_command_parser(debug, cidr, outfile, parameter):
40     cmd = "yardstick"
41     if debug:
42         cmd += " -d"
43     cmd += " task start "
44     cmd += str(cidr)
45     cmd += " --output-file " + outfile
46     image_name = config.bottlenecks_config["yardstick_image_name"]
47     parameter["image_name"] = image_name
48     DEPLOY_SCENARIO = os.getenv("DEPLOY_SCENARIO")
49     if DEPLOY_SCENARIO:
50         if "ovs" in DEPLOY_SCENARIO:
51             parameter["dpdk_enabled"] = True
52     LOG.info(parameter)
53     if parameter is not None:
54         cmd += " --task-args " + '"' + str(parameter) + '"'
55     return cmd
56
57
58 def Get_Reply(test_config, task_id, time_test=1):
59     reply_url = ("http://%s/yardstick/results?task_id=%s"
60                  % (test_config['yardstick_test_ip'], task_id))
61     reply_response = requests.get(reply_url)
62     reply_data = json.loads(reply_response.text)
63     LOG.info("return data is %s" % (reply_data))
64     if reply_data["status"] == 1:
65         return(reply_data["result"])
66     if reply_data["status"] == 0:
67         if time_test == 100:
68             LOG.info("yardstick time out")
69             sys.exit()
70         time.sleep(10)
71         reply_result_data = Get_Reply(
72             test_config, task_id, time_test=time_test + 1)
73         return(reply_result_data)
74     if reply_data["status"] == 2:
75         LOG.error("yardstick error exit")
76         sys.exit()
77
78
79 def Send_Data(test_dict, test_config):
80     base_url = ("http://%s/yardstick/testcases/%s/action"
81                 % (test_config['yardstick_test_ip'],
82                    test_config['yardstick_test_dir']))
83     LOG.info("test ip addr is %s" % (base_url))
84     reponse = requests.post(
85         base_url, data=json.dumps(test_dict), headers=headers)
86     ask_data = json.loads(reponse.text)
87     task_id = ask_data["result"]
88     LOG.info("yardstick task id is: %s" % (task_id))
89     return task_id
90
91
92 def Create_Incluxdb(con_dic):
93     base_url = ("http://%s/yardstick/env/action"
94                 % (con_dic['yardstick_test_ip']))
95     test_dict = {
96         "action": "createInfluxDBContainer",
97     }
98     responce = requests.post(
99         base_url, data=json.dumps(test_dict), headers=headers)
100     ask_data = json.loads(responce.text)
101     task_id = ask_data["result"]["task_id"]
102     LOG.info("waiting for creating InfluxDB")
103     time.sleep(30)
104     return task_id
105
106
107 def yardstick_env_prepare(con_dic):
108     base_url = ("http://%s/yardstick/env/action"
109                 % (con_dic['yardstick_test_ip']))
110     test_dict = {
111         "action": "prepareYardstickEnv",
112     }
113     LOG.info("waiting for yardstick environment prepare")
114     reponse = requests.post(
115         base_url, data=json.dumps(test_dict), headers=headers)
116     ask_data = json.loads(reponse.text)
117     task_id = ask_data["result"]["task_id"]
118     LOG.info("Done, yardstick environment prepare complete!")
119     return task_id
120
121
122 def find_condition(con_dic):
123     base_url = ("http://%s/yardstick/asynctask?%s"
124                 % (con_dic['yardstick_test_ip'].id))
125     requests.post(
126         base_url, headers=headers)
127     LOG.info("check for creating InfluxDB")