diff options
author | liyin <liyin11@huawei.com> | 2017-02-14 10:42:07 +0800 |
---|---|---|
committer | liyin <liyin11@huawei.com> | 2017-02-14 10:49:54 +0800 |
commit | be6453bb485c720278c5f6a45a5194391e454ce4 (patch) | |
tree | 2cec6d1d42c07de5cefc258399150557f1dcb8d7 | |
parent | 9c22cd768a161ec0eab4da24f40a4c626275c746 (diff) |
Dashboard and output file code reconstruction
JIRA:BOTTLENECK-134
Those code will change the way to create dashboard.
And dashboard as a spare function to show data.
And we add log system to dashboard creation.
The output file is created anyway.
Change-Id: Ia3c4d5a8ada27005702e3eed08757f61610da22f
Signed-off-by: liyin <liyin11@huawei.com>
-rwxr-xr-x | testsuites/posca/run_posca.py | 4 | ||||
-rwxr-xr-x | testsuites/posca/testcase_cfg/posca_factor_system_bandwidth.yaml | 2 | ||||
-rwxr-xr-x | testsuites/posca/testcase_dashboard/system_bandwidth.py | 204 | ||||
-rw-r--r-- | testsuites/posca/testcase_script/posca_factor_system_bandwidth.py | 41 | ||||
-rw-r--r-- | utils/parser.py | 15 |
5 files changed, 158 insertions, 108 deletions
diff --git a/testsuites/posca/run_posca.py b/testsuites/posca/run_posca.py index a687e00e..72a0d4c2 100755 --- a/testsuites/posca/run_posca.py +++ b/testsuites/posca/run_posca.py @@ -22,7 +22,7 @@ INTERPRETER = "/usr/bin/python" LOG = log.Logger(__name__).getLogger() # ------------------------------------------------------ -# run posca testcase +# run testcase in posca # ------------------------------------------------------ @@ -40,6 +40,8 @@ def posca_run(test_level, test_name): config = conf_parser.Parser.story_read("posca", test_name) for testcase in config: LOG.info("Begin to run %s testcase in POSCA testsuite", testcase) + config[testcase]['out_file'] =\ + conf_parser.Parser.testcase_out_dir(testcase) posca_testcase_run(testcase, config[testcase]) LOG.info("End of %s testcase in POSCA testsuite", testcase) diff --git a/testsuites/posca/testcase_cfg/posca_factor_system_bandwidth.yaml b/testsuites/posca/testcase_cfg/posca_factor_system_bandwidth.yaml index e7238d2c..dcea7275 100755 --- a/testsuites/posca/testcase_cfg/posca_factor_system_bandwidth.yaml +++ b/testsuites/posca/testcase_cfg/posca_factor_system_bandwidth.yaml @@ -7,7 +7,7 @@ test_config: cpu_load: 0.9 latency: 100000 runner_config: - dashboard: y + dashboard: "y" dashboard_ip: stack_create: yardstick yardstick_test_ip: diff --git a/testsuites/posca/testcase_dashboard/system_bandwidth.py b/testsuites/posca/testcase_dashboard/system_bandwidth.py index 63671273..e95ff214 100755 --- a/testsuites/posca/testcase_dashboard/system_bandwidth.py +++ b/testsuites/posca/testcase_dashboard/system_bandwidth.py @@ -9,115 +9,121 @@ ############################################################################## import ConfigParser from elasticsearch import Elasticsearch -from pyroute2 import IPDB import json +import os +import utils.logger as log +from utils.parser import Parser as conf_parser +LOG = log.Logger(__name__).getLogger() config = ConfigParser.ConfigParser() +es = Elasticsearch() +dashboard_dir = os.path.join(conf_parser.test_dir, + "posca", + "testcase_dashboard") -dashboard_dir = "/home/opnfv/bottlenecks/testsuites/posca\ -/testcase_dashboard/" -file_str = "/home/opnfv/bottlenecks/testsuites/posca/\ -testcase_cfg/posca_factor_system_bandwidth.yaml" -with open(file_str, "rd") as cfgfile: - config.readfp(cfgfile) - ES_ip_a = config.get("config", "ES_ip") +def dashboard_send_data(runner_config, test_data): + global es + es_ip = runner_config['dashboard_ip'].split(':') + es = Elasticsearch([{'host': es_ip[0]}]) + res = es.index(index="bottlenecks", + doc_type=test_data["testcase"], + body=test_data["data_body"]) + if res['created'] == "False": + LOG.error("date send to kibana have errors ", test_data["data_body"]) -with IPDB() as ip: - GATEWAY_IP = ip.routes['default'].gateway - if ES_ip_a is "": - ES_ip_a = "{}:9200".format(GATEWAY_IP) - print("ES_ip is null get local ip is {}".format(ES_ip_a)) -es_ip = ES_ip_a.split(':') -es = Elasticsearch([{'host': es_ip[0]}]) +def dashboard_system_bandwidth(runner_config): + global es + es_ip = runner_config['dashboard_ip'].split(':') + es = Elasticsearch([{'host': es_ip[0]}]) + # Create bottlenecks index + with open(dashboard_dir + 'posca_system_bandwidth_index_pattern.json')\ + as index_pattern: + doc = json.load(index_pattern) + res = es.index( + index=".kibana", + doc_type="index-pattern", + id="bottlenecks", + body=doc) + if res['created'] == "True": + LOG.info("bottlenecks index-pattern has created") + else: + LOG.info("bottlenecks index-pattern has existed") -# Create bottlenecks index -with open(dashboard_dir + 'posca_system_bandwidth\ -_index_pattern.json') as index_pattern: - doc = json.load(index_pattern) -res = es.index( - index=".kibana", - doc_type="index-pattern", - id="bottlenecks", - body=doc) -if res['created'] == "True": - print("bottlenecks index-pattern has created") -else: - print("bottlenecks index-pattern has existed") + with open(dashboard_dir + 'posca_system_bandwidth_config.json')\ + as index_config: + doc = json.load(index_config) + res = es.index(index=".kibana", doc_type="config", id="4.6.1", body=doc) + if res['created'] == "True": + LOG.info("bottlenecks config has created") + else: + LOG.info("bottlenecks config has existed") -with open(dashboard_dir + 'posca_system_bandwidth\ -_config.json') as index_config: - doc = json.load(index_config) -res = es.index(index=".kibana", doc_type="config", id="4.6.1", body=doc) -if res['created'] == "True": - print("bottlenecks config has created") -else: - print("bottlenecks config has existed") + # Configure discover panel + with open(dashboard_dir + 'posca_system_bandwidth_discover.json')\ + as index_discover: + doc = json.load(index_discover) + res = es.index( + index=".kibana", + doc_type="search", + id="system_bandwidth", + body=doc) + if res['created'] == "True": + LOG.info("system_bandwidth search has created") + else: + LOG.info("system_bandwidth search has existed") -# Configure discover panel -with open(dashboard_dir + 'posca_system_bandwidth\ -_discover.json') as index_discover: - doc = json.load(index_discover) -res = es.index( - index=".kibana", - doc_type="search", - id="system_bandwidth", - body=doc) -if res['created'] == "True": - print("system_bandwidth search has created") -else: - print("system_bandwidth search has existed") + # Create testing data in line graph + # Create testing data in line graph + with open(dashboard_dir + 'posca_system_bandwidth_line_data.json')\ + as line_data: + doc = json.load(line_data) + res = es.index( + index=".kibana", + doc_type="visualization", + id="system_bandwidth_line-date", + body=doc) + if res['created'] == "True": + LOG.info("system_bandwidth_line-date visualization has created") + else: + LOG.info("system_bandwidth_line-date visualization has existed") -# Create testing data in line graph -with open(dashboard_dir + 'posca_system_bandwidth\ -_line_data.json') as line_data: - doc = json.load(line_data) -res = es.index( - index=".kibana", - doc_type="visualization", - id="system_bandwidth_line-date", - body=doc) -if res['created'] == "True": - print("system_bandwidth_line-date visualization has created") -else: - print("system_bandwidth_line-date visualization has existed") + # Create comparison results in line chart + with open(dashboard_dir + 'posca_system_bandwidth_line_char.json')\ + as line_char: + doc = json.load(line_char) + res = es.index( + index=".kibana", + doc_type="visualization", + id="system_bandwidth_line-char", + body=doc) + if res['created'] == "True": + LOG.info("system_bandwidth_line-char visualization has created") + else: + LOG.info("system_bandwidth_line-char visualization has existed") -# Create comparison results in line chart -with open(dashboard_dir + 'posca_system_bandwidth\ -_line_char.json') as line_char: - doc = json.load(line_char) -res = es.index( - index=".kibana", - doc_type="visualization", - id="system_bandwidth_line-char", - body=doc) -if res['created'] == "True": - print("system_bandwidth_line-char visualization has created") -else: - print("system_bandwidth_line-char visualization has existed") + # Create monitoring data in table + with open(dashboard_dir + 'posca_system_bandwidth_terms_data.json')\ + as terms_char: + doc = json.load(terms_char) + res = es.index(index=".kibana", doc_type="visualization", + id="system_bandwidth_terms_data", body=doc) + if res['created'] == "True": + LOG.info("system_bandwidth_terms_data visualization has created") + else: + LOG.info("system_bandwidth_terms_data visualization has existed") -# Create monitoring data in table -with open(dashboard_dir + 'posca_system_bandwidth\ -_terms_data.json') as terms_char: - doc = json.load(terms_char) -res = es.index(index=".kibana", doc_type="visualization", - id="system_bandwidth_terms_data", body=doc) -if res['created'] == "True": - print("system_bandwidth_terms_data visualization has created") -else: - print("system_bandwidth_terms_data visualization has existed") - -# Create dashboard -with open(dashboard_dir + 'posca_system_bandwidth\ -_dashboard.json') as dashboard: - doc = json.load(dashboard) -res = es.index( - index=".kibana", - doc_type="dashboard", - id="system_bandwidth_dashboard", - body=doc) -if res['created'] == "True": - print("system_bandwidth dashboard has created") -else: - print("system_bandwidth dashboard has existed") + # Create dashboard + with open(dashboard_dir + 'posca_system_bandwidth_dashboard.json')\ + as dashboard: + doc = json.load(dashboard) + res = es.index( + index=".kibana", + doc_type="dashboard", + id="system_bandwidth_dashboard", + body=doc) + if res['created'] == "True": + LOG.info("system_bandwidth dashboard has created") + else: + LOG.info("system_bandwidth dashboard has existed") diff --git a/testsuites/posca/testcase_script/posca_factor_system_bandwidth.py b/testsuites/posca/testcase_script/posca_factor_system_bandwidth.py index 4819fb45..01c5dab5 100644 --- a/testsuites/posca/testcase_script/posca_factor_system_bandwidth.py +++ b/testsuites/posca/testcase_script/posca_factor_system_bandwidth.py @@ -17,6 +17,7 @@ import time import utils.logger as log import utils.infra_setup.runner.yardstick as Runner from utils.parser import Parser as conf_parser +import testsuites.posca.testcase_dashboard.system_bandwidth as DashBoard # -------------------------------------------------- # logging configuration # -------------------------------------------------- @@ -31,12 +32,23 @@ test_dict = { "testcase": "netperf_bottlenecks" } } +testfile = os.path.basename(__file__) +testcase, file_format = os.path.splitext(testfile) def env_pre(con_dic): Runner.Create_Incluxdb(con_dic['runner_config']) +def config_to_result(test_config, test_result): + testdata = {} + test_result["throughput"] = float(test_result["throughput"]) + test_result.update(test_config) + testdata["data_body"] = test_result + testdata["testcase"] = testcase + return testdata + + def do_test(test_config, con_dic): test_dict['args']['opts']['task-args'] = test_config Task_id = Runner.Send_Data(test_dict, con_dic['runner_config']) @@ -47,7 +59,12 @@ def do_test(test_config, con_dic): Data_Reply[con_dic['runner_config']['yardstick_testcase']][0] except IndexError: test_date = do_test(test_config, con_dic) - return test_date + + save_data = config_to_result(test_config, test_date) + if con_dic['runner_config']['dashboard'] == 'y': + DashBoard.dashboard_send_data(con_dic['runner_config'], save_data) + + return save_data["data_body"] def run(con_dic): @@ -58,17 +75,26 @@ def run(con_dic): data["tx_pkt_sizes"] = tx_pkt_a con_dic["result_file"] = os.path.dirname( os.path.abspath(__file__)) + "/test_case/result" - date_id = 0 cur_role_result = 1 pre_role_result = 1 pre_reply = {} data_return = {} data_max = {} data_return["throughput"] = 1 + if con_dic["runner_config"]["yardstick_test_ip"] is None: con_dic["runner_config"]["yardstick_test_ip"] =\ conf_parser.ip_parser("yardstick_test_ip") + env_pre(con_dic) + + if con_dic["runner_config"]["dashboard"] == 'y': + if con_dic["runner_config"]["dashboard_ip"] is None: + con_dic["runner_config"]["dashboard_ip"] =\ + conf_parser.ip_parser("dashboard") + LOG.info("Create Dashboard data") + DashBoard.dashboard_system_bandwidth(con_dic["runner_config"]) + for test_x in data["tx_pkt_sizes"]: data_max["throughput"] = 1 bandwidth_tmp = 1 @@ -78,22 +104,23 @@ def run(con_dic): "rx_msg_size": float(test_y), "test_time": con_dic['test_config']['test_time'] } - date_id = date_id + 1 data_reply = do_test(test_config, con_dic) - bandwidth = float(data_reply["throughput"]) + conf_parser.result_to_file(data_reply, con_dic["out_file"]) + bandwidth = data_reply["throughput"] if (data_max["throughput"] < bandwidth): data_max = data_reply if (abs(bandwidth_tmp - bandwidth) / bandwidth_tmp < 0.025): - print(pre_reply) + LOG.info("this group of data has reached top output") break else: pre_reply = data_reply bandwidth_tmp = bandwidth cur_role_result = float(pre_reply["throughput"]) if (abs(pre_role_result - cur_role_result) / pre_role_result < 0.025): - print("date_id is %d,package return at line 111\n" % date_id) + LOG.info("The performance increases slowly") if data_return["throughput"] < data_max["throughput"]: data_return = data_max pre_role_result = cur_role_result - print("date_id is %d,id return success\n" % date_id) + LOG.info("Find bottlenecks of this config") + LOG.info("The max data is %d", data_return["throughput"]) return data_return diff --git a/utils/parser.py b/utils/parser.py index a9098a98..b5f29679 100644 --- a/utils/parser.py +++ b/utils/parser.py @@ -14,6 +14,8 @@ Second is reading config file.''' import os import yaml +import json +import time from pyroute2 import IPDB @@ -76,6 +78,13 @@ class Parser(): if not os.path.exists(dirname): os.makedirs(dirname) + @classmethod + def testcase_out_dir(cls, testcase): + file_time = time.strftime('%H_%M', time.localtime(time.time())) + out_name = cls.bottlenecks_config["log_dir"] + testcase + file_time + outfile_name = out_name + ".out" + return outfile_name + @staticmethod def config_parser(testcase_cfg, parameters): test_cfg = testcase_cfg['test_config'] @@ -93,6 +102,12 @@ class Parser(): TEST_IP = GATEWAY_IP + ":8888" return TEST_IP + @staticmethod + def result_to_file(data, file_name): + with open(file_name, "a") as f: + f.write(json.dumps(data, f)) + f.write("\n") + class HeatTemplate_Parser(): """parser a Heat template and a method to deploy template to a stack""" |