aboutsummaryrefslogtreecommitdiffstats
path: root/tools/opnfvdashboard/opnfvdashboard.py
blob: 3f465c04e1ba592d419af50139135b08fcbf41c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
"""
vsperf2dashboard
"""
# Copyright 2015-2017 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 logging
import requests

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 = int_data['db_url']
    url = db_url + "/results"
    casename = ""
    version_ovs = ""
    version_dpdk = ""
    version = ""
    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']

    # Create version field
    with open(int_data['pkg_list'], 'r') as pkg_file:
        for line in pkg_file:
            if "OVS_TAG" in line:
                version_ovs = line.replace(' ', '')
                version_ovs = version_ovs.replace('OVS_TAG?=', '')
            if "DPDK_TAG" in line:
                if int_data['vanilla'] is False:
                    version_dpdk = line.replace(' ', '')
                    version_dpdk = version_dpdk.replace('DPDK_TAG?=', '')
                else:
                    version_dpdk = "not used"
    version = "OVS " + version_ovs.replace('\n', '') + " DPDK " + version_dpdk.replace('\n', '')

    # Build body
    body = {"project_name": "vsperf",
            "case_name": casename,
            "pod_name": int_data['pod'],
            "installer": int_data['installer'],
            "version": version,
            "details": details}

    my_data = requests.post(url, json=body)
    logging.info("Results for %s sent to opnfv, http response: %s", casename, my_data)
    logging.debug("opnfv url: %s", db_url)
    logging.debug("the body sent to opnfv")
    logging.debug(body)

def _generate_test_name(testcase, int_data):
    """
    the method generates testcase name for releng
    """
    vanilla = int_data['vanilla']
    res_name = ""

    names = {'phy2phy_tput': ["tput_ovsdpdk", "tput_ovs"],
             'back2back': ["b2b_ovsdpdk", "b2b_ovs"],
             'phy2phy_tput_mod_vlan': ["tput_mod_vlan_ovsdpdk", "tput_mod_vlan_ovs"],
             'phy2phy_cont': ["cont_ovsdpdk", "cont_ovs"],
             'pvp_cont': ["pvp_cont_ovsdpdkuser", "pvp_cont_ovsvirtio"],
             'pvvp_cont': ["pvvp_cont_ovsdpdkuser", "pvvp_cont_ovsvirtio"],
             'phy2phy_scalability': ["scalability_ovsdpdk", "scalability_ovs"],
             'pvp_tput': ["pvp_tput_ovsdpdkuser", "pvp_tput_ovsvirtio"],
             'pvp_back2back': ["pvp_b2b_ovsdpdkuser", "pvp_b2b_ovsvirtio"],
             'pvvp_tput': ["pvvp_tput_ovsdpdkuser", "pvvp_tput_ovsvirtio"],
             'pvvp_back2back': ["pvvp_b2b_ovsdpdkuser", "pvvp_b2b_ovsvirtio"],
             'phy2phy_cpu_load': ["cpu_load_ovsdpdk", "cpu_load_ovs"],
             'phy2phy_mem_load': ["mem_load_ovsdpdk", "mem_load_ovs"]}

    for name, name_list in names.items():
        if name != testcase:
            continue
        if vanilla is True:
            res_name = name_list[1]
        else:
            res_name = name_list[0]
        break

    return res_name