fix DeprecationWarnings on 3.10
[relay.git/.git] / relay / http_debug.py
1 import logging
2 import aiohttp
3 import aiohttp.web
4
5 from collections import defaultdict
6
7
8 STATS = {
9     'requests': defaultdict(int),
10     'response_codes': defaultdict(int),
11     'response_codes_per_domain': defaultdict(lambda: defaultdict(int)),
12     'delivery_codes': defaultdict(int),
13     'delivery_codes_per_domain': defaultdict(lambda: defaultdict(int)),
14     'exceptions': defaultdict(int),
15     'exceptions_per_domain': defaultdict(lambda: defaultdict(int)),
16     'delivery_exceptions': defaultdict(int),
17     'delivery_exceptions_per_domain': defaultdict(lambda: defaultdict(int))
18 }
19
20
21 async def on_request_start(session, trace_config_ctx, params):
22     global STATS
23
24     logging.debug("HTTP START [%r], [%r]", session, params)
25
26     STATS['requests'][params.url.host] += 1
27
28
29 async def on_request_end(session, trace_config_ctx, params):
30     global STATS
31
32     logging.debug("HTTP END [%r], [%r]", session, params)
33
34     host = params.url.host
35     status = params.response.status
36
37     STATS['response_codes'][status] += 1
38     STATS['response_codes_per_domain'][host][status] += 1
39
40     if params.method == 'POST':
41         STATS['delivery_codes'][status] += 1
42         STATS['delivery_codes_per_domain'][host][status] += 1
43
44
45 async def on_request_exception(session, trace_config_ctx, params):
46     global STATS
47
48     logging.debug("HTTP EXCEPTION [%r], [%r]", session, params)
49
50     host = params.url.host
51     exception = repr(params.exception)
52
53     STATS['exceptions'][exception] += 1
54     STATS['exceptions_per_domain'][host][exception] += 1
55
56     if params.method == 'POST':
57         STATS['delivery_exceptions'][exception] += 1
58         STATS['delivery_exceptions_per_domain'][host][exception] += 1
59
60
61 def http_debug():
62     trace_config = aiohttp.TraceConfig()
63     trace_config.on_request_start.append(on_request_start)
64     trace_config.on_request_end.append(on_request_end)
65     trace_config.on_request_exception.append(on_request_exception)
66     return trace_config