Source code for swh.graphql.gunicorn_config
# Copyright (C) 2023 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
from graphql import GraphQLError, GraphQLSyntaxError
from sentry_sdk.integrations.ariadne import AriadneIntegration
from swh.core.sentry import init_sentry
from swh.graphql.errors import InvalidInputError, ObjectNotFoundError, PaginationError
[docs]
def skip_expected_errors(event, hint):
if "exc_info" in hint:
_, exc_value, _ = hint["exc_info"]
expected_errors = (
ObjectNotFoundError,
PaginationError,
InvalidInputError,
GraphQLError,
)
# GraphQLError is included to avoid an ariadne bug that
# raises two errors for a scalar validation
if isinstance(exc_value, GraphQLError) and isinstance(
exc_value.original_error, expected_errors
):
return None
expected_base_errors = (
GraphQLSyntaxError,
GraphQLError,
) # A query syntax or a validation error
if (
isinstance(exc_value, expected_base_errors)
and exc_value.original_error is None
):
return None
# a crash, send to sentry as unhandled
return event
[docs]
def post_fork(server, worker):
init_sentry(
sentry_dsn=None, # set through SWH_SENTRY_DSN environment variable
integrations=[AriadneIntegration()],
extra_kwargs={
# required to include GraphQL requests and responses data in sentry reports
"send_default_pii": True,
"before_send": skip_expected_errors,
},
)