diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py b/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py index c4a54088d..36749deb3 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py @@ -1,6 +1,7 @@ """__init__.""" import faulthandler import os +import sys from typing import Any import connexion # type: ignore @@ -207,25 +208,31 @@ def configure_sentry(app: flask.app.Flask) -> None: "SPIFFWORKFLOW_BACKEND_SENTRY_TRACES_SAMPLE_RATE is not set somehow" ) - # profiling doesn't work on windows, because of an issue like https://github.com/nvdv/vprof/issues/62 - # but also we commented out profiling because it was causing segfaults (i guess it is marked experimental) - # profiles_sample_rate = 0 if sys.platform.startswith("win") else 1 - - sentry_sdk.init( - dsn=app.config.get("SPIFFWORKFLOW_BACKEND_SENTRY_DSN"), - integrations=[ + sentry_configs = { + "dsn": app.config.get("SPIFFWORKFLOW_BACKEND_SENTRY_DSN"), + "integrations": [ FlaskIntegration(), ], - environment=app.config["ENV_IDENTIFIER"], + "environment": app.config["ENV_IDENTIFIER"], # sample_rate is the errors sample rate. we usually set it to 1 (100%) # so we get all errors in sentry. - sample_rate=float(sentry_errors_sample_rate), + "sample_rate": float(sentry_errors_sample_rate), # Set traces_sample_rate to capture a certain percentage # of transactions for performance monitoring. # We recommend adjusting this value to less than 1(00%) in production. - traces_sample_rate=float(sentry_traces_sample_rate), - traces_sampler=traces_sampler, + "traces_sample_rate": float(sentry_traces_sample_rate), + "traces_sampler": traces_sampler, # The profiles_sample_rate setting is relative to the traces_sample_rate setting. - # _experiments={"profiles_sample_rate": profiles_sample_rate}, - before_send=before_send, - ) + "before_send": before_send, + } + + if app.config.get("SPIFFWORKFLOW_BACKEND_SENTRY_PROFILING_ENABLED"): + # profiling doesn't work on windows, because of an issue like https://github.com/nvdv/vprof/issues/62 + # but also we commented out profiling because it was causing segfaults (i guess it is marked experimental) + profiles_sample_rate = 0 if sys.platform.startswith("win") else 1 + if profiles_sample_rate > 0: + sentry_configs["_experiments"] = { + "profiles_sample_rate": profiles_sample_rate + } + + sentry_sdk.init(**sentry_configs) diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/config/default.py b/spiffworkflow-backend/src/spiffworkflow_backend/config/default.py index 8bb0c1919..fa9ad7a0b 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/config/default.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/config/default.py @@ -79,6 +79,10 @@ SPIFFWORKFLOW_BACKEND_SENTRY_ORGANIZATION_SLUG = environ.get( SPIFFWORKFLOW_BACKEND_SENTRY_PROJECT_SLUG = environ.get( "SPIFFWORKFLOW_BACKEND_SENTRY_PROJECT_SLUG", default=None ) +SPIFFWORKFLOW_BACKEND_SENTRY_PROFILING_ENABLED = ( + environ.get("SPIFFWORKFLOW_BACKEND_SENTRY_PROFILING_ENABLED", default="false") + == "true" +) SPIFFWORKFLOW_BACKEND_LOG_LEVEL = environ.get( "SPIFFWORKFLOW_BACKEND_LOG_LEVEL", default="info"