Add SentryGraphQLView from mySkillbox
Improves GraphQL error message logging in Sentry
This commit is contained in:
parent
9f81cb2db3
commit
7a1c2c3863
|
|
@ -10,13 +10,13 @@ from django.urls.converters import IntConverter
|
||||||
from django.views import defaults as default_views
|
from django.views import defaults as default_views
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from django_ratelimit.exceptions import Ratelimited
|
from django_ratelimit.exceptions import Ratelimited
|
||||||
from graphene_django.views import GraphQLView
|
|
||||||
from wagtail import urls as wagtail_urls
|
from wagtail import urls as wagtail_urls
|
||||||
from wagtail.admin import urls as wagtailadmin_urls
|
from wagtail.admin import urls as wagtailadmin_urls
|
||||||
from wagtail.documents import urls as media_library_urls
|
from wagtail.documents import urls as media_library_urls
|
||||||
|
|
||||||
from vbv_lernwelt.api.directory import list_entities
|
from vbv_lernwelt.api.directory import list_entities
|
||||||
from vbv_lernwelt.api.user import get_profile, me_user_view, post_avatar
|
from vbv_lernwelt.api.user import get_profile, me_user_view, post_avatar
|
||||||
|
from vbv_lernwelt.api.views import SentryGraphQLView
|
||||||
from vbv_lernwelt.assignment.views import request_assignment_completion_status
|
from vbv_lernwelt.assignment.views import request_assignment_completion_status
|
||||||
from vbv_lernwelt.core.middleware.auth import django_view_authentication_exempt
|
from vbv_lernwelt.core.middleware.auth import django_view_authentication_exempt
|
||||||
from vbv_lernwelt.core.schema import schema
|
from vbv_lernwelt.core.schema import schema
|
||||||
|
|
@ -237,7 +237,7 @@ urlpatterns = [
|
||||||
),
|
),
|
||||||
|
|
||||||
path("server/graphql/",
|
path("server/graphql/",
|
||||||
csrf_exempt(GraphQLView.as_view(graphiql=True, schema=schema))),
|
csrf_exempt(SentryGraphQLView.as_view(graphiql=True, schema=schema))),
|
||||||
# testing and debug
|
# testing and debug
|
||||||
path('server/raise_error/',
|
path('server/raise_error/',
|
||||||
user_passes_test(lambda u: u.is_superuser, login_url='/login/')(
|
user_passes_test(lambda u: u.is_superuser, login_url='/login/')(
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
from django.http.request import HttpRequest
|
||||||
|
from graphene_django.views import GraphQLView
|
||||||
|
from graphql import get_operation_ast, parse
|
||||||
|
from sentry_sdk.api import start_transaction
|
||||||
|
|
||||||
|
|
||||||
|
# For sentry perfomance monitoring
|
||||||
|
# taken from https://jerrynsh.com/how-to-monitor-python-graphql-api-with-sentry/
|
||||||
|
class SentryGraphQLView(GraphQLView):
|
||||||
|
def execute_graphql_request(
|
||||||
|
self,
|
||||||
|
request: HttpRequest,
|
||||||
|
data,
|
||||||
|
query,
|
||||||
|
variables,
|
||||||
|
operation_name,
|
||||||
|
show_graphiql,
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
adapted to use the new GraphQL 3.0 syntax, still need to get the operation type,
|
||||||
|
but the code to do this changed significantly, so the above link only explains
|
||||||
|
the 'what' and 'why', but no longer the 'how'
|
||||||
|
"""
|
||||||
|
document = parse(query)
|
||||||
|
operation_type = get_operation_ast(document, operation_name).operation
|
||||||
|
with start_transaction(op=str(operation_type), name=operation_name):
|
||||||
|
return super().execute_graphql_request(
|
||||||
|
request, data, query, variables, operation_name, show_graphiql
|
||||||
|
)
|
||||||
Loading…
Reference in New Issue