sentry-python icon indicating copy to clipboard operation
sentry-python copied to clipboard

Add a span around Django rest framework authentication

Open angusholder opened this issue 1 year ago • 1 comments

Problem Statement

In Sentry Performance, when I look at the queries list in a performance event of an API view, the view.render event always begins with a few of the same queries, for looking up the auth token, and are rarely relevant. It would be better if those auth queries were in a separate span, to reduce visual noise.

Solution Brainstorm

I currently subclass the authentication class and add a span myself, like this:

class TracedTokenAuthentication(rest_framework.authentication.TokenAuthentication):
    def authenticate(self, request):
        with sentry_sdk.start_span(op='authenticate'):
            return super().authenticate(request)

The disadvantage of this is you can use multiple authentications, and each would need modifying. A better place for the span is probably rest_framework.request.Request._authenticate, which loops over all configured authentications.

angusholder avatar Apr 23 '24 16:04 angusholder

@angusholder makes sense, feel free to PR and add a simliar patch here https://github.com/getsentry/sentry-python/blob/411c9f31be419aa04a6fc5643716802453770bbb/sentry_sdk/integrations/django/init.py#L301-L317 if you want it quicker, otherwise I'll put it on our backlog

sl0thentr0py avatar Apr 24 '24 10:04 sl0thentr0py