# -*- coding: utf-8 -*-
"""
scap.monitor
~~~~~~~~~~~~
This module provides classes and utilities used by scap to monitor
services, logs or metrics for anomalous events.
"""
import urllib, json
class Monitor(object):
def __init__(self):
pass
class HttpMonitor(Monitor):
def get(self, url, params = ""):
if isinstance(params, dict):
params = urllib.urlencode(params)
f = urllib.urlopen("%s?%s" % (url, params))
data = f.read()
f.close()
return data
class ErrorRateMetric(HttpMonitor):
def __init__(self,metric):
self.metric = metric
def check(self):
params = {
"from": "-30minutes",
"target": self.metric,
"format": "json"
}
data = self.get("http://graphite.wikimedia.org/render/", params)
data = json.loads(data)
maxVal = 0
sumVal = 0
data = data[0].get("datapoints")
for i in data:
maxVal = max(maxVal, i[0])
sumVal += i[0]
lastVal = i[0]
avgVal = sumVal / len(data)
print ("max: %s / average: %s last: %s" % (maxVal, avgVal, lastVal))
return data
def main():
mon = ErrorRateMetric("transformNull(restbase.v1_page_html_-title-_-revision--_tid-.GET.5xx.sample_rate,0)")
data = mon.check()
print data
if __name__ == '__main__':
main()