From de65a5105f62c56371249d9128e7b9a28759b40f Mon Sep 17 00:00:00 2001 From: Radek Zetik Date: Thu, 12 Nov 2015 20:07:40 +0000 Subject: Results: Integrate with opnfv_test_dashboard All the test projects generate results in different format. The goal of a testing dashboard is to provide a consistent view of the different tests from the different projects. We need to enable the data collection for VSPERF, in other words VSPERF pushes data using a REST API. The feature is enabled by --opnfvpod parameter on vsperf command line. The value of the parameter sets POD name. Example: --opnfvpod or --opnfvpod= You need to specify installer name. It can be set in conf-file default value: OPNFV_INSTALLER = "Fuel" JIRA: VSPERF-112 Change-Id: I37255414eebcc2ff0c12109c508dcd984663a830 Signed-off-by: Radek Zetik Reviewed-by: Maryam Tahhan Reviewed-by: Brian Castelli --- tools/opnfvdashboard/__init__.py | 18 ++++++ tools/opnfvdashboard/opnfvdashboard.py | 106 +++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 tools/opnfvdashboard/__init__.py create mode 100644 tools/opnfvdashboard/opnfvdashboard.py (limited to 'tools/opnfvdashboard') 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 -- cgit 1.2.3-korg