aboutsummaryrefslogtreecommitdiffstats
path: root/tools/opnfvdashboard
diff options
context:
space:
mode:
authorRadek Zetik <radekx.zetik@intel.com>2015-11-12 20:07:40 +0000
committerMaryam Tahhan <maryam.tahhan@intel.com>2015-12-08 10:30:03 +0000
commitde65a5105f62c56371249d9128e7b9a28759b40f (patch)
treeba7bb8f1f9c5b24a779b90bd1aa6e647165f3192 /tools/opnfvdashboard
parent1c4d17533029cac0b3ec4770ab1d9c3817b646e7 (diff)
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 <pod_name> or --opnfvpod=<pod_name> 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 <radekx.zetik@intel.com> Reviewed-by: Maryam Tahhan <maryam.tahhan@intel.com> Reviewed-by: Brian Castelli <brian.castelli@spirent.com>
Diffstat (limited to 'tools/opnfvdashboard')
-rw-r--r--tools/opnfvdashboard/__init__.py18
-rw-r--r--tools/opnfvdashboard/opnfvdashboard.py106
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