python: Support PDM in ashd-wsgi.
[ashd.git] / python / ashd / perf.py
CommitLineData
d5ee5cde
FT
1try:
2 import pdm.perf
3except:
4 pdm = None
5
6reqstat = {}
7
8if pdm:
9 statistics = pdm.perf.staticdir()
10 statistics["req"] = pdm.perf.valueattr(reqstat)
11 requests = pdm.perf.eventobj()
12
13 class reqstart(pdm.perf.startevent):
14 def __init__(self, env):
15 super(reqstart, self).__init__()
16 self.method = env.get("REQUEST_METHOD")
17 self.uri = env.get("REQUEST_URI")
18 self.host = env.get("HTTP_HOST")
19
20 class reqfinish(pdm.perf.finishevent):
21 def __init__(self, start, aborted, status):
22 super(reqfinish, self).__init__(start, aborted)
23 self.status = status
24
25class request(object):
26 def __init__(self, env):
27 self.resp = None
28 if pdm:
29 self.startev = reqstart(env)
30 requests.notify(self.startev)
31
32 def response(self, resp):
33 self.resp = resp
34
35 def finish(self, aborted):
36 key = None
37 status = None
38 try:
39 if len(self.resp) > 0:
40 status = self.resp[0]
41 p = status.find(" ")
42 if p < 0:
43 key = status
44 else:
45 key = status[:p]
46 except:
47 pass
48 reqstat[key] = reqstat.setdefault(key, 0) + 1
49 if pdm:
50 requests.notify(reqfinish(self.startev, aborted, status))
51
52 def __enter__(self):
53 return self
54
55 def __exit__(self, *excinfo):
56 self.finish(bool(excinfo[0]))
57 return False