diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/opnfvdashboard/__init__.py | 18 | ||||
-rw-r--r-- | tools/opnfvdashboard/opnfvdashboard.py | 106 |
2 files changed, 124 insertions, 0 deletions
diff --git a/tools/opnfvdashboard/__init__.py b/tools/opnfvdashboard/__init__.py new file mode 100644 index 00000000..6cb0e6b3 --- /dev/null +++ b/tools/opnfvdashboard/__init__.py @@ -0,0 +1,18 @@ +# Copyright 2015 Intel Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""results to opnfvdashboardpackage. + +Contains generator json format of results for opnfv dashboard +""" diff --git a/tools/opnfvdashboard/opnfvdashboard.py b/tools/opnfvdashboard/opnfvdashboard.py new file mode 100644 index 00000000..8aecfef2 --- /dev/null +++ b/tools/opnfvdashboard/opnfvdashboard.py @@ -0,0 +1,106 @@ +""" +vsperf2dashboard +""" +# Copyright 2015 Intel Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import os +import csv +import requests +import json +import logging + +def results2opnfv_dashboard(results_path, int_data): + """ + the method open the csv file with results and calls json encoder + """ + testcases = os.listdir(results_path) + for test in testcases: + if not ".csv" in test: + continue + resfile = results_path + '/' + test + with open(resfile, 'r') as in_file: + reader = csv.DictReader(in_file) + _push_results(reader, int_data) + +def _push_results(reader, int_data): + """ + the method encodes results and sends them into opnfv dashboard + """ + db_url = "http://213.77.62.197" + url = db_url + "/results" + casename = "" + allowed_pkt = ["64", "128", "512", "1024", "1518"] + details = {"64": '', "128": '', "512": '', "1024": '', "1518": ''} + + for row_reader in reader: + if allowed_pkt.count(row_reader['packet_size']) == 0: + logging.error("The framesize is not supported in opnfv dashboard") + continue + + casename = _generate_test_name(row_reader['id'], int_data) + if "back2back" in row_reader['id']: + details[row_reader['packet_size']] = row_reader['b2b_frames'] + else: + details[row_reader['packet_size']] = row_reader['throughput_rx_fps'] + + # Build body + body = {"project_name": "vsperf", + "case_name": casename, + "pod_name": int_data['pod'], + "installer": int_data['installer'], + "version": "OVS 2.4", + "details": details} + + myData = requests.post(url, json=body) + logging.info("Results for %s sent to opnfv, http response: %s", casename, myData) + logging.debug("the body sent to opnfv") + logging.debug(body) + +def _generate_test_name(testcase, int_data): + """ + the method generates testcase name for releng + """ + cuse = int_data['cuse'] + vanilla = int_data['vanilla'] + res_name = "" + + names = {'phy2phy_tput': ["tput_ovsdpdk", "tput_ovsdpdk", "tput_ovs"], + 'back2back': ["b2b_ovsdpdk", "b2b_ovsdpdk", "b2b_ovs"], + 'phy2phy_tput_mod_vlan': ["tput_mod_vlan_ovsdpdk", "tput_mod_vlan_ovsdpdk", "tput_mod_vlan_ovs"], + 'phy2phy_cont': ["cont_ovsdpdk", "cont_ovsdpdk", "cont_ovs"], + 'pvp_cont': ["pvp_cont_ovsdpdkuser", "pvp_cont_ovsdpdkcuse", "pvp_cont_ovsvirtio"], + 'pvvp_cont': ["pvvp_cont_ovsdpdkuser", "pvvp_cont_ovsdpdkcuse", "pvvp_cont_ovsvirtio"], + 'phy2phy_scalability': ["scalability_ovsdpdk", "scalability_ovsdpdk", "scalability_ovs"], + 'pvp_tput': ["pvp_tput_ovsdpdkuser", "pvp_tput_ovsdpdkcuse", "pvp_tput_ovsvirtio"], + 'pvp_back2back': ["pvp_b2b_ovsdpdkuser", "pvp_b2b_ovsdpdkcuse", "pvp_b2b_ovsvirtio"], + 'pvvp_tput': ["pvvp_tput_ovsdpdkuser", "pvvp_tput_ovsdpdkcuse", "pvvp_tput_ovsvirtio"], + 'pvvp_back2back': ["pvvp_b2b_ovsdpdkuser", "pvvp_b2b_ovsdpdkcuse", "pvvp_b2b_ovsvirtio"], + 'phy2phy_cpu_load': ["cpu_load_ovsdpdk", "cpu_load_ovsdpdk", "cpu_load_ovs"], + 'phy2phy_mem_load': ["mem_load_ovsdpdk", "mem_load_ovsdpdk", "mem_load_ovs"]} + + for name, name_list in names.items(): + if name != testcase: + continue + if vanilla == True: + res_name = name_list[2] + else: + if cuse == True: + res_name = name_list[1] + else: + res_name = name_list[0] + break + + return res_name |