summaryrefslogtreecommitdiffstats
path: root/utils/test/result_collection_api/opnfv_testapi/dashboard/dashboard_utils.py
blob: 42c6358463ac521f1d0097b8637f78cd72caafbe (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
#!/usr/bin/python
#
# Copyright (c) 2015 Orange
# morgan.richomme@orange.com
#
# This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# This script is used to retieve data from test DB
# and format them into a json format adapted for a dashboard
#
# v0.1: basic example
#
import re
import sys
from functest2Dashboard import format_functest_for_dashboard, \
    check_functest_case_exist
from yardstick2Dashboard import format_yardstick_for_dashboard, \
    check_yardstick_case_exist
from vsperf2Dashboard import format_vsperf_for_dashboard, \
    check_vsperf_case_exist
from bottlenecks2Dashboard import format_bottlenecks_for_dashboard, \
    check_bottlenecks_case_exist
from qtip2Dashboard import format_qtip_for_dashboard, \
    check_qtip_case_exist
from promise2Dashboard import format_promise_for_dashboard, \
    check_promise_case_exist
from doctor2Dashboard import format_doctor_for_dashboard, \
    check_doctor_case_exist

# any project test project wishing to provide dashboard ready values
# must include at least 2 methods
# - format_<Project>_for_dashboard
# - check_<Project>_case_exist


def check_dashboard_ready_project(test_project):
    # Check that the first param corresponds to a project
    # for whoch dashboard processing is available
    # print("test_project: %s" % test_project)
    project_module = 'opnfv_testapi.dashboard.'+test_project + '2Dashboard'
    return True if project_module in sys.modules else False


def check_dashboard_ready_case(project, case):
    cmd = "check_" + project + "_case_exist"
    return globals()[cmd](case)


def get_dashboard_projects():
    # Retrieve all the projects that could provide
    # Dashboard ready graphs
    # look in the releng repo
    # search all the project2Dashboard.py files
    # we assume that dashboard processing of project <Project>
    # is performed in the <Project>2Dashboard.py file
    projects = []
    cp = re.compile('opnfv_testapi\.dashboard\.(.+?)2Dashboard')
    for module in sys.modules:
        project = re.findall(cp, module)
        if project:
            projects.extend(project)
    return projects


def get_dashboard_result(project, case, results=None):
    # get the dashboard ready results
    # paramters are:
    # project: project name
    # results: array of raw results pre-filterded
    # according to the parameters of the request
    cmd = "format_" + project + "_for_dashboard"
    return globals()[cmd](case, results)