-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsagrafana.py
105 lines (93 loc) · 4.09 KB
/
sagrafana.py
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
import os
import re
from datetime import datetime
from errbot import arg_botcmd, botcmd, BotPlugin
from grafanahelper import GrafanaHelper
def get_ts():
now = datetime.now()
return '%s.%d' % (now.strftime('%Y%m%d-%H%M%S'), now.microsecond)
class SaGrafana(BotPlugin):
def get_configuration_template(self):
return {'server_address': 'https://host/grafana',
'token': 'eyJrIjoicmNveFpac0tBZm81YzFrMDRNdWVQelRaN3VEOG5tblMiLCJuIjoiZS1ncmFmYW5hIiwiaWQiOjF9'}
@botcmd(template='grafana_dashboards_list')
def grafana_dashboards_list(self, mess, args):
"""List of dashboards"""
helper = GrafanaHelper(
grafana_server_address=self.config['server_address'],
grafana_token=self.config['token'])
result = helper.get_dashboards()
return {'dashboards': result}
@arg_botcmd('tag', type=str, template='grafana_dashboards_list') # bytag
def grafana_dashboards_bytag(self, mess, tag):
"""List of dashboards by tag"""
helper = GrafanaHelper(
grafana_server_address=self.config['server_address'],
grafana_token=self.config['token'])
self.log.info("sagrafana: Getting dashboards for tag %s" % tag)
result = helper.get_dashboards(tag=tag)
return {'dashboards': result}
@arg_botcmd('query', type=str, template='grafana_dashboards_list') # bytag
def grafana_dashboards_query(self, mess, query):
"""Fuzzy find dashboard by string"""
helper = GrafanaHelper(
grafana_server_address=self.config['server_address'],
grafana_token=self.config['token'])
result = helper.search_dashboards(query=query)
return {'dashboards': result}
@arg_botcmd('slug', type=str,
template='grafana_dashboard_details') # byslug
def grafana_dashboard(self, mess, slug):
"""Dashboard details"""
helper = GrafanaHelper(
grafana_server_address=self.config['server_address'],
grafana_token=self.config['token'])
self.log.info("Getting %s dashboard details" % slug)
result = helper.get_dashboard_details(slug)
return {
'dashboard': result,
'slug': slug
}
@arg_botcmd('parameters', type=str, default="")
@arg_botcmd('panel', type=str)
@arg_botcmd('dashboard', type=str)
@arg_botcmd('--from', dest='start', type=str)
@arg_botcmd('--to', dest='finish', type=str,
template="grafana_render_panel", unpack_args=False)
def grafana_render(self, mess, args):
"""Renders panel to slack"""
self.log.info("args %s" % args)
helper = GrafanaHelper(
grafana_server_address=self.config['server_address'],
grafana_token=self.config['token'])
if args.parameters == "-":
parameters = ""
else:
parameters = args.parameters
self.log.info(
"render(slug=%s, tuning_params='%s', period_from=%s, period_to=%s)" % (
"{0}:{1}".format(args.dashboard, args.panel),
parameters, args.start, args.finish))
graphic = helper.render(
slug="{0}:{1}".format(args.dashboard, args.panel),
tuning_params=parameters,
period_from=args.start,
period_to=args.finish
)
image_pack = helper.get_grafana_image(graphic["imageUrl"])
self.send_stream_request(mess.frm, open(image_pack["path"], 'rb'),
name='render.png', stream_type='image/png')
os.remove(image_pack["path"])
return graphic
@botcmd
def grafana_status(self, mess, args):
"""Check aliveness of solution"""
helper = GrafanaHelper(
grafana_server_address=self.config['server_address'],
grafana_token=self.config['token'])
try:
result = helper.get_dashboards()
return "Seems alive - {0} dashboards found {1}".format(len(result),
result)
except Exception as err:
return "Oops: {0}".format(err)