relay: track statistics
This commit is contained in:
parent
379ba26478
commit
ccd0e12b0a
|
@ -28,3 +28,4 @@ from . import actor
|
||||||
from . import webfinger
|
from . import webfinger
|
||||||
from . import default
|
from . import default
|
||||||
from . import nodeinfo
|
from . import nodeinfo
|
||||||
|
from . import http_stats
|
||||||
|
|
|
@ -1,12 +1,66 @@
|
||||||
import logging
|
import logging
|
||||||
import aiohttp
|
import aiohttp
|
||||||
|
import aiohttp.web
|
||||||
|
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
|
||||||
|
STATS = {
|
||||||
|
'requests': defaultdict(int),
|
||||||
|
'response_codes': defaultdict(int),
|
||||||
|
'response_codes_per_domain': defaultdict(lambda: defaultdict(int)),
|
||||||
|
'delivery_codes': defaultdict(int),
|
||||||
|
'delivery_codes_per_domain': defaultdict(lambda: defaultdict(int)),
|
||||||
|
'exceptions': defaultdict(int),
|
||||||
|
'exceptions_per_domain': defaultdict(lambda: defaultdict(int)),
|
||||||
|
'delivery_exceptions': defaultdict(int),
|
||||||
|
'delivery_exceptions_per_domain': defaultdict(lambda: defaultdict(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async def on_request_start(session, trace_config_ctx, params):
|
async def on_request_start(session, trace_config_ctx, params):
|
||||||
|
global STATS
|
||||||
|
|
||||||
logging.debug("HTTP START [%r], [%r]", session, params)
|
logging.debug("HTTP START [%r], [%r]", session, params)
|
||||||
|
|
||||||
|
STATS['requests'][params.url.host] += 1
|
||||||
|
|
||||||
|
|
||||||
|
async def on_request_end(session, trace_config_ctx, params):
|
||||||
|
global STATS
|
||||||
|
|
||||||
|
logging.debug("HTTP END [%r], [%r]", session, params)
|
||||||
|
|
||||||
|
host = params.url.host
|
||||||
|
status = params.response.status
|
||||||
|
|
||||||
|
STATS['response_codes'][status] += 1
|
||||||
|
STATS['response_codes_per_domain'][host][status] += 1
|
||||||
|
|
||||||
|
if params.method == 'POST':
|
||||||
|
STATS['delivery_codes'][status] += 1
|
||||||
|
STATS['delivery_codes_per_domain'][host][status] += 1
|
||||||
|
|
||||||
|
|
||||||
|
async def on_request_exception(session, trace_config_ctx, params):
|
||||||
|
global STATS
|
||||||
|
|
||||||
|
logging.debug("HTTP EXCEPTION [%r], [%r]", session, params)
|
||||||
|
|
||||||
|
host = params.url.host
|
||||||
|
exception = repr(params.exception)
|
||||||
|
|
||||||
|
STATS['exceptions'][exception] += 1
|
||||||
|
STATS['exceptions_per_domain'][host][exception] += 1
|
||||||
|
|
||||||
|
if params.method == 'POST':
|
||||||
|
STATS['delivery_exceptions'][exception] += 1
|
||||||
|
STATS['delivery_exceptions_per_domain'][host][exception] += 1
|
||||||
|
|
||||||
|
|
||||||
def http_debug():
|
def http_debug():
|
||||||
trace_config = aiohttp.TraceConfig()
|
trace_config = aiohttp.TraceConfig()
|
||||||
trace_config.on_request_start.append(on_request_start)
|
trace_config.on_request_start.append(on_request_start)
|
||||||
|
trace_config.on_request_end.append(on_request_end)
|
||||||
|
trace_config.on_request_exception.append(on_request_exception)
|
||||||
return trace_config
|
return trace_config
|
||||||
|
|
11
relay/http_stats.py
Normal file
11
relay/http_stats.py
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
import aiohttp.web
|
||||||
|
|
||||||
|
from . import app
|
||||||
|
from .http_debug import STATS
|
||||||
|
|
||||||
|
|
||||||
|
async def stats(request):
|
||||||
|
return aiohttp.web.json_response(STATS)
|
||||||
|
|
||||||
|
|
||||||
|
app.router.add_get('/stats', stats)
|
Loading…
Reference in a new issue