Merge "Add qtip job to pod zte-virtual6"
[releng.git] / utils / test / dashboard / dashboard / elastic2kibana / visualization_assembler.py
1 import json
2
3 import utility
4 from dashboard.common import elastic_access
5
6
7 class VisStateBuilder(object):
8     def __init__(self, vis_p):
9         super(VisStateBuilder, self).__init__()
10         self.vis_p = vis_p
11
12     def build(self):
13         name = self.vis_p.get('name')
14         fields = self.vis_p.get('fields')
15
16         aggs = []
17         index = 1
18         for field in fields:
19             aggs.append({
20                 "id": index,
21                 "field": field.get("field")
22             })
23             index += 1
24
25         template = utility.env.get_template('{}.json'.format(name))
26         vis = template.render(aggs=aggs)
27         return json.loads(vis)
28
29
30 class VisualizationAssembler(object):
31     def __init__(self,
32                  project,
33                  case,
34                  installer,
35                  pod,
36                  scenario,
37                  vis_p,
38                  es_url,
39                  es_creds):
40         super(VisualizationAssembler, self).__init__()
41         self.project = project
42         self.case = case
43         self.installer = installer
44         self.pod = pod
45         self.scenario = scenario
46         self.vis_p = vis_p
47         self.es_url = es_url
48         self.es_creds = es_creds
49         self._assemble()
50         self._publish()
51
52     def _assemble(self):
53         visState = VisStateBuilder(self.vis_p).build()
54         self.vis_state_title = visState['title']
55
56         vis = {
57             "visState": json.dumps(visState),
58             "filters": {
59                 "project_name": self.project,
60                 "case_name": self.case,
61                 "installer": self.installer,
62                 "metric": self.vis_state_title,
63                 "pod_name": self.pod,
64                 "scenario": self.scenario
65             }
66         }
67
68         template = utility.env.get_template('visualization.json')
69
70         self.visualization = json.loads(template.render(vis=vis))
71         utility.dumps(self.visualization,
72                       ['visState', 'description', 'uiStateJSON'])
73         utility.dumps_2depth(self.visualization,
74                              'kibanaSavedObjectMeta',
75                              'searchSourceJSON')
76         title = self.visualization['title']
77         self.id = title.replace(' ', '-').replace('/', '-')
78
79     def _publish(self):
80         elastic_access.publish_kibana(self.es_url,
81                                       self.es_creds,
82                                       'visualization',
83                                       self.id,
84                                       self.visualization)