/
request_time
executable file
·53 lines (46 loc) · 1.52 KB
/
request_time
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
#!/usr/bin/env python
import os
from time import time
from urllib2 import urlopen, Request
from munin import MuninPlugin
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()