-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrequest_logger.py
51 lines (43 loc) · 1.94 KB
/
request_logger.py
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
from pythreader import LogFile
from request import Request
from pythreader import Primitive
from dns import DNS
class RequestLogger(Primitive):
def __init__(self, logfile, data_logger):
if isinstance(logfile, str):
logfile = LogFile(logfile, flush_interval=1.0)
self.LogFile = logfile
self.DataLogger = data_logger
def log(self, request):
assert isinstance(request, Request)
created = request.CreatedTime
caddr = request.ClientAddress
http_request = request.HTTPRequest
headline = (http_request.headline() if http_request is not None else '') or ''
headline = headline.strip()
port = request.VServerPort
sname = request.ServiceName or '-'
saddr = request.ServerAddress or (None, None)
saddr = (saddr[0] or '-', saddr[1] or '-')
http_status = request.HTTPStatus or "-"
nbytes = request.BytesClientToServer + request.BytesServerToClient
chost = DNS[caddr[0]]
if request.Failed or not request.Started:
line = '%s :%d %s(%s):%s [%s] -> "%s" %s:%s %s %s e:[%s]' % (request.Id, port,
chost, caddr[0], caddr[1], headline or '?', sname, saddr[0], saddr[1],
http_status, nbytes,
request.Error or '')
else:
started = request.TransferStartTime
done = request.TransferEndTime
dtstart = started - created
dtdone = done - started
line = '%s :%d %s(%s):%s [%s] -> "%s" %s:%s %s %s w:%.3f t:%.3f' % \
(request.Id, port,
chost, caddr[0], caddr[1], headline,
sname, saddr[0], saddr[1],
http_status, nbytes,
dtstart, dtdone)
if request.Error: line += f" e:[{request.Error}]"
self.LogFile.log(line)
self.DataLogger.logRequest(request)