5 from collections import defaultdict
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))
21 async def on_request_start(session, trace_config_ctx, params):
24 logging.debug("HTTP START [%r], [%r]", session, params)
26 STATS['requests'][params.url.host] += 1
29 async def on_request_end(session, trace_config_ctx, params):
32 logging.debug("HTTP END [%r], [%r]", session, params)
34 host = params.url.host
35 status = params.response.status
37 STATS['response_codes'][status] += 1
38 STATS['response_codes_per_domain'][host][status] += 1
40 if params.method == 'POST':
41 STATS['delivery_codes'][status] += 1
42 STATS['delivery_codes_per_domain'][host][status] += 1
45 async def on_request_exception(session, trace_config_ctx, params):
48 logging.debug("HTTP EXCEPTION [%r], [%r]", session, params)
50 host = params.url.host
51 exception = repr(params.exception)
53 STATS['exceptions'][exception] += 1
54 STATS['exceptions_per_domain'][host][exception] += 1
56 if params.method == 'POST':
57 STATS['delivery_exceptions'][exception] += 1
58 STATS['delivery_exceptions_per_domain'][host][exception] += 1
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)