in skywalking/plugins/sw_sanic.py [0:0]
def _gen_sw_handle_request(_handle_request):
from inspect import isawaitable
def params_tostring(params):
return '\n'.join([f"{k}=[{','.join(params.getlist(k))}]" for k, _ in params.items()])
async def _sw_handle_request(self, request, write_callback, stream_callback):
req = request
carrier = Carrier()
method = req.method
for item in carrier:
if item.key.capitalize() in req.headers:
item.val = req.headers[item.key.capitalize()]
span = NoopSpan(NoopContext()) if config.ignore_http_method_check(method) \
else get_context().new_entry_span(op=req.path, carrier=carrier)
with span:
span.layer = Layer.Http
span.component = Component.Sanic
span.peer = f'{req.remote_addr or req.ip}:{req.port}'
span.tag(TagHttpMethod(method))
span.tag(TagHttpURL(req.url.split('?')[0]))
if config.plugin_sanic_collect_http_params and req.args:
span.tag(TagHttpParams(params_tostring(req.args)[0:config.plugin_http_http_params_length_threshold]))
resp = _handle_request(self, request, write_callback, stream_callback)
if isawaitable(resp):
result = await resp
return result
return _sw_handle_request