Merge "dovetail: add dovetail tool into daily job"
[releng.git] / utils / test / dashboard / dashboard / elastic2kibana / dashboard_assembler.py
1 import json
2
3 import utility
4 from common import elastic_access
5
6
7 class DashboardAssembler(object):
8     def __init__(self,
9                  project,
10                  case,
11                  family,
12                  installer,
13                  pod,
14                  visAssemblers,
15                  es_url,
16                  es_creds):
17         super(DashboardAssembler, self).__init__()
18         self.project = project
19         self.case = case
20         self.test_family = family
21         self.installer = installer
22         self.pod = pod
23         self.visAssemblers = visAssemblers
24         self.es_url = es_url
25         self.es_creds = es_creds
26         self._assemble()
27         self._publish()
28
29     def _assemble(self):
30         db = {
31             "query": {
32                 "project_name": self.project,
33                 "case_name": self.case,
34                 "installer": self.installer,
35                 "metric": self.visAssemblers[0].vis_state_title,
36                 "pod": self.pod
37             },
38             "test_family": self.test_family,
39             "ids": [visualization.id for visualization in self.visAssemblers]
40         }
41         template = utility.env.get_template('dashboard.json')
42         self.dashboard = json.loads(template.render(db=db))
43         utility.dumps(self.dashboard,
44                       ['description',
45                        'uiStateJSON',
46                        'panelsJSON',
47                        'optionsJSON'])
48         utility.dumps_2depth(self.dashboard,
49                              'kibanaSavedObjectMeta',
50                              'searchSourceJSON')
51         self.id = self.dashboard['title'].replace(' ', '-').replace('/', '-')
52         return self
53
54     def _publish(self):
55         elastic_access.publish_kibana(self.es_url,
56                                       self.es_creds,
57                                       'dashboard',
58                                       self.id,
59                                       self.dashboard)