2020-12-03 14:05:32 -05:00
|
|
|
#!/srv/newsblur/venv/newsblur3/bin/python
|
2011-12-02 16:22:38 -08:00
|
|
|
|
|
|
|
import os
|
|
|
|
from time import time
|
|
|
|
from urllib2 import urlopen, Request
|
|
|
|
|
2016-11-11 11:06:33 -08:00
|
|
|
from vendor.munin import MuninPlugin
|
2011-12-02 16:22:38 -08:00
|
|
|
|
|
|
|
class MuninRequestTimePlugin(MuninPlugin):
|
|
|
|
title = "Request Time"
|
|
|
|
args = "--base 1000"
|
|
|
|
vlabel = "seconds"
|
|
|
|
info = "Time for a request to complete"
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
super(MuninRequestTimePlugin, self).__init__()
|
|
|
|
self.bound_time = float(os.environ['RT_BOUND_TIME']) if 'RT_BOUND_TIME' in os.environ else None
|
|
|
|
self.urls = []
|
|
|
|
for k, v in os.environ.iteritems():
|
|
|
|
if k.startswith('RT_URL'):
|
|
|
|
name, url = tuple(v.split('=', 1))
|
|
|
|
url = url.split('|')
|
|
|
|
headers = {}
|
|
|
|
if len(url) > 1:
|
|
|
|
headers = dict(x.split('=') for x in url[1:])
|
|
|
|
url = url[0]
|
|
|
|
self.urls.append((name, url, headers))
|
|
|
|
self.urls.sort()
|
|
|
|
|
|
|
|
@property
|
|
|
|
def fields(self):
|
|
|
|
return [
|
|
|
|
(name, dict(
|
|
|
|
label = name,
|
|
|
|
type = "GAUGE",
|
|
|
|
min = "0",
|
|
|
|
)) for name, url, headers in self.urls
|
|
|
|
]
|
|
|
|
|
|
|
|
def execute(self):
|
|
|
|
values = {}
|
|
|
|
for name, url, headers in self.urls:
|
|
|
|
t = time()
|
|
|
|
req = Request(url, headers=headers)
|
|
|
|
urlopen(req).read()
|
|
|
|
dt = time() - t
|
|
|
|
if self.bound_time:
|
|
|
|
dt = min(dt, self.bound_time)
|
|
|
|
values[name] = "%.2f" % dt
|
|
|
|
return values
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
MuninRequestTimePlugin().run()
|