Merge "add bottlenecks to test dashboard"
[releng.git] / utils / test / result_collection_api / dashboard / dashboard_utils.py
1 #!/usr/bin/python
2 #
3 # Copyright (c) 2015 Orange
4 # morgan.richomme@orange.com
5 #
6 # This program and the accompanying materials
7 # are made available under the terms of the Apache License, Version 2.0
8 # which accompanies this distribution, and is available at
9 #
10 # http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # This script is used to retieve data from test DB
13 # and format them into a json format adapted for a dashboard
14 #
15 # v0.1: basic example
16 #
17 import os
18 import re
19 from functest2Dashboard import format_functest_for_dashboard, \
20     check_functest_case_exist
21 from yardstick2Dashboard import format_yardstick_for_dashboard, \
22     check_yardstick_case_exist
23 from vsperf2Dashboard import format_vsperf_for_dashboard, \
24     check_vsperf_case_exist
25 from bottlenecks2Dashboard import format_bottlenecks_for_dashboard, \
26     check_bottlenecks_case_exist
27
28 # any project test project wishing to provide dashboard ready values
29 # must include at least 2 methods
30 # - format_<Project>_for_dashboard
31 # - check_<Project>_case_exist
32
33
34 def check_dashboard_ready_project(test_project, path):
35     # Check that the first param corresponds to a project
36     # for whoch dashboard processing is available
37     subdirectories = os.listdir(path)
38     for testfile in subdirectories:
39         m = re.search('^(.*)(2Dashboard.py)$', testfile)
40         if m:
41             if (m.group(1) == test_project):
42                 return True
43     return False
44
45
46 def check_dashboard_ready_case(project, case):
47     cmd = "check_" + project + "_case_exist(case)"
48     return eval(cmd)
49
50
51 def get_dashboard_cases(path):
52     # Retrieve all the test cases that could provide
53     # Dashboard ready graphs
54     # look in the releng repo
55     # search all the project2Dashboard.py files
56     # we assume that dashboard processing of project <Project>
57     # is performed in the <Project>2Dashboard.py file
58     dashboard_test_cases = []
59     subdirectories = os.listdir(path)
60     for testfile in subdirectories:
61         m = re.search('^(.*)(2Dashboard.py)$', testfile)
62         if m:
63             dashboard_test_cases.append(m.group(1))
64
65     return dashboard_test_cases
66
67
68 def get_dashboard_result(project, case, results):
69     # get the dashboard ready results
70     # paramters are:
71     # project: project name
72     # results: array of raw results pre-filterded
73     # according to the parameters of the request
74     cmd = "format_" + project + "_for_dashboard(case,results)"
75     res = eval(cmd)
76     return res