blob: b496dba9cdd68d7b005ddef2bb34c89d14dba57b [file] [log] [blame]
Srikanth Vavilapallif6eda8f2016-09-09 13:43:51 -04001import plotly.plotly as py
2import plotly.graph_objs as go
3import time
4import requests
5#import ceilometerapi
6import ast
7
8PLOTLY_USERNAME = 'myusername'
9PLOTLY_API_KEY = 'myapikey'
10XOS_IP = '1.2.3.4'
11XOS_PORT = '9999'
12
13class LAGPlot():
14 def __init__(self):
15 # use my personal account, need an API key
16 py.sign_in(PLOTLY_USERNAME, PLOTLY_API_KEY)
17 self.data = {} # all the metrics we read
18 self.ceilometer_url = 'http://%s:%s/api/tenant/monitoring/dashboard/metersamples/' % (XOS_IP, XOS_PORT)
19
20 def getDataFromCeilometer(self):
21 '''
22 keep track of how many times a lag member resolves
23 read new metrics from ceilometer (use timestamps to read
24 a range so we get new
25 data since last read)
26 '''
27 url = "%s?%s" % (self.ceilometer_url,"no_hyperlinks=1&meter=broadview.pt.packet-trace-lag-resolution")
28 try:
29 response = requests.get(url, auth=('padmin@vicci.org','letmein'))
30 except requests.exceptions.RequestException as e:
31 raise e
32 samples = response.json()
33 #print samples
34 for lagresolution in samples:
35 for lagmember in ast.literal_eval(lagresolution['metadata']['lag-members']):
36 # here we add any new lagmembers to the hash
37 if not lagmember in self.data:
38 self.data[lagmember] = 0
39 lagresolve = lagresolution['metadata']['dst-lag-member']
40 self.data[lagresolve] = self.data[lagresolve] + 1
41
42 # now that we have added any new ceilometer data update the
43 # pie chart and write it out
44 print self.data
45
46 data = []
47 tmp = {}
48 tmp["labels"] = []
49 tmp["values"] = []
50 tmp["type"] = "pie"
51 for key, val in self.data.iteritems():
52 tmp["labels"].append(key) # the lag member ID
53 tmp["values"].append(val) # count
54 data.append(tmp)
55 fig = {}
56 fig["data"] = data
57 fig["layout"] = {}
58 # put whatever metadata that makes sense, if any
59 fig["layout"]["title"] = 'BroadView LAG Resolution'
60 print fig
61 return fig
62
63 def plotPieToFile(self, data, filename="pie.png"):
64 # takes data in the following format and writes it to file
65 if not data:
66 data = {
67 'data': [{'labels': ['LAG001', 'LAG002', 'LAG003'],
68 'values': [19, 26, 55],
69 'type': 'pie'}],
70 'layout': {'title': 'BroadView LAG Resolution metadata...'}
71 }
72
73 py.image.save_as(data, filename=filename)
74
75if __name__ == "__main__":
76 x = LAGPlot()
77 while True:
78 print "Plotting data"
79 data = x.getDataFromCeilometer()
80 x.plotPieToFile(data)
81 time.sleep(30)