diff --git a/swh/core/api/gunicorn_config.py b/swh/core/api/gunicorn_config.py index ce618e0..0ab91af 100644 --- a/swh/core/api/gunicorn_config.py +++ b/swh/core/api/gunicorn_config.py @@ -1,39 +1,41 @@ # Copyright (C) 2019 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 """Default values for gunicorn's configuration. Other packages may override them by importing `*` from this module and redefining functions and variables they want. May be imported by gunicorn using `--config 'python:swh.core.api.gunicorn_config'`.""" from ..sentry import init_sentry def post_fork( server, worker, *, default_sentry_dsn=None, flask=True, sentry_integrations=None, extra_sentry_kwargs={}, + disable_logging_events=True, ): # Initializes sentry as soon as possible in gunicorn's worker processes. sentry_integrations = sentry_integrations or [] if flask: from sentry_sdk.integrations.flask import FlaskIntegration sentry_integrations.append(FlaskIntegration()) init_sentry( default_sentry_dsn, integrations=sentry_integrations, extra_kwargs=extra_sentry_kwargs, + disable_logging_events=disable_logging_events, ) diff --git a/swh/core/api/tests/test_gunicorn.py b/swh/core/api/tests/test_gunicorn.py index 683a6e8..e55d377 100644 --- a/swh/core/api/tests/test_gunicorn.py +++ b/swh/core/api/tests/test_gunicorn.py @@ -1,121 +1,142 @@ # Copyright (C) 2019 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 import os from unittest.mock import patch import pkg_resources import swh.core.api.gunicorn_config as gunicorn_config def test_post_fork_default(): with patch("sentry_sdk.init") as sentry_sdk_init: gunicorn_config.post_fork(None, None) sentry_sdk_init.assert_not_called() def test_post_fork_with_dsn_env(): flask_integration = object() # unique object to check for equality + logging_integration = object() # unique object to check for equality with patch( "sentry_sdk.integrations.flask.FlaskIntegration", new=lambda: flask_integration + ), patch( + "sentry_sdk.integrations.logging.LoggingIntegration", + new=lambda event_level: logging_integration, + ), patch( + "sentry_sdk.init" + ) as sentry_sdk_init, patch.dict( + os.environ, {"SWH_SENTRY_DSN": "test_dsn"} ): - with patch("sentry_sdk.init") as sentry_sdk_init: - with patch.dict(os.environ, {"SWH_SENTRY_DSN": "test_dsn"}): - gunicorn_config.post_fork(None, None) + gunicorn_config.post_fork(None, None) sentry_sdk_init.assert_called_once_with( dsn="test_dsn", - integrations=[flask_integration], + integrations=[flask_integration, logging_integration], debug=False, release=None, environment=None, ) def test_post_fork_with_package_env(): - flask_integration = object() # unique object to check for equality + flask_integration = object() + logging_integration = object() + with patch( "sentry_sdk.integrations.flask.FlaskIntegration", new=lambda: flask_integration + ), patch( + "sentry_sdk.integrations.logging.LoggingIntegration", + new=lambda event_level: logging_integration, + ), patch( + "sentry_sdk.init" + ) as sentry_sdk_init, patch.dict( + os.environ, + { + "SWH_SENTRY_DSN": "test_dsn", + "SWH_SENTRY_ENVIRONMENT": "tests", + "SWH_MAIN_PACKAGE": "swh.core", + }, ): - with patch("sentry_sdk.init") as sentry_sdk_init: - with patch.dict( - os.environ, - { - "SWH_SENTRY_DSN": "test_dsn", - "SWH_SENTRY_ENVIRONMENT": "tests", - "SWH_MAIN_PACKAGE": "swh.core", - }, - ): - gunicorn_config.post_fork(None, None) + gunicorn_config.post_fork(None, None) version = pkg_resources.get_distribution("swh.core").version sentry_sdk_init.assert_called_once_with( dsn="test_dsn", - integrations=[flask_integration], + integrations=[flask_integration, logging_integration], debug=False, release="swh.core@" + version, environment="tests", ) def test_post_fork_debug(): - flask_integration = object() # unique object to check for equality + flask_integration = object() + logging_integration = object() + with patch( "sentry_sdk.integrations.flask.FlaskIntegration", new=lambda: flask_integration + ), patch( + "sentry_sdk.integrations.logging.LoggingIntegration", + new=lambda event_level: logging_integration, + ), patch( + "sentry_sdk.init" + ) as sentry_sdk_init, patch.dict( + os.environ, {"SWH_SENTRY_DSN": "test_dsn", "SWH_SENTRY_DEBUG": "1"} ): - with patch("sentry_sdk.init") as sentry_sdk_init: - with patch.dict( - os.environ, {"SWH_SENTRY_DSN": "test_dsn", "SWH_SENTRY_DEBUG": "1"} - ): - gunicorn_config.post_fork(None, None) + gunicorn_config.post_fork(None, None) sentry_sdk_init.assert_called_once_with( dsn="test_dsn", - integrations=[flask_integration], + integrations=[flask_integration, logging_integration], debug=True, release=None, environment=None, ) def test_post_fork_no_flask(): - with patch("sentry_sdk.init") as sentry_sdk_init: - with patch.dict(os.environ, {"SWH_SENTRY_DSN": "test_dsn"}): - gunicorn_config.post_fork(None, None, flask=False) + logging_integration = object() + + with patch("sentry_sdk.init") as sentry_sdk_init, patch( + "sentry_sdk.integrations.logging.LoggingIntegration", + new=lambda event_level: logging_integration, + ), patch.dict(os.environ, {"SWH_SENTRY_DSN": "test_dsn"}): + gunicorn_config.post_fork(None, None, flask=False) sentry_sdk_init.assert_called_once_with( dsn="test_dsn", - integrations=[], + integrations=[logging_integration], debug=False, release=None, environment=None, ) def test_post_fork_extras(): flask_integration = object() # unique object to check for equality with patch( "sentry_sdk.integrations.flask.FlaskIntegration", new=lambda: flask_integration ): with patch("sentry_sdk.init") as sentry_sdk_init: with patch.dict(os.environ, {"SWH_SENTRY_DSN": "test_dsn"}): gunicorn_config.post_fork( None, None, sentry_integrations=["foo"], extra_sentry_kwargs={"bar": "baz"}, + disable_logging_events=False, ) sentry_sdk_init.assert_called_once_with( dsn="test_dsn", integrations=["foo", flask_integration], debug=False, bar="baz", release=None, environment=None, )