Srikanth Vavilapalli | f6eda8f | 2016-09-09 13:43:51 -0400 | [diff] [blame] | 1 | import plotly.plotly as py |
| 2 | import plotly.graph_objs as go |
| 3 | import time |
| 4 | import requests |
| 5 | #import ceilometerapi |
| 6 | import ast |
| 7 | |
| 8 | PLOTLY_USERNAME = 'myusername' |
| 9 | PLOTLY_API_KEY = 'myapikey' |
| 10 | XOS_IP = '1.2.3.4' |
| 11 | XOS_PORT = '9999' |
| 12 | |
| 13 | class 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 | |
| 75 | if __name__ == "__main__": |
| 76 | x = LAGPlot() |
| 77 | while True: |
| 78 | print "Plotting data" |
| 79 | data = x.getDataFromCeilometer() |
| 80 | x.plotPieToFile(data) |
| 81 | time.sleep(30) |