diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py index 80d00ddc2dc23af32e0cc57f11940f4eff5bcc3f..2b4c5a4aa72da1f55e12d24071a7080c0c72fd9a 100644 --- a/aleksis/core/settings.py +++ b/aleksis/core/settings.py @@ -855,22 +855,31 @@ else: SASS_PROCESSOR_STORAGE = DEFAULT_FILE_STORAGE -if _settings.get("health.sentry.enabled", False): +SENTRY_ENABLED = _settings.get("health.sentry.enabled", False) +if SENTRY_ENABLED: import sentry_sdk from sentry_sdk.integrations.django import DjangoIntegration from aleksis.core import __version__ + SENTRY_SETTINGS = { + "dsn": _settings.get("health.sentry.dsn"), + "environment": _settings.get("health.sentry.environment"), + "traces_sample_rate": _settings.get("health.sentry.traces_sample_rate", 1.0), + "send_default_pii": _settings.get("health.sentry.send_default_pii", False), + "release": f"aleksis-core@{__version__}", + "in_app_include": "aleksis", + } sentry_sdk.init( - dsn=_settings.get("health.sentry.dsn"), - environment=_settings.get("health.sentry.environment"), integrations=[DjangoIntegration( transaction_style="function_name", )], - traces_sample_rate=_settings.get("health.sentry.traces_sample_rate", 1.0), - send_default_pii=_settings.get("health.sentry.send_default_pii", False), - release=f"aleksis-core@{__version__}", - in_app_include="aleksis", + **SENTRY_SETTINGS ) + YARN_INSTALLED_APPS += [ + "@sentry/tracing", + ] + ANY_JS["Sentry"] = {"js_url": JS_URL + "/@sentry/tracing/build/bundle.tracing.js"} + # Add django-cleanup after all apps to ensure that it gets all signals as last app INSTALLED_APPS.append("django_cleanup.apps.CleanupConfig") diff --git a/aleksis/core/templates/core/base.html b/aleksis/core/templates/core/base.html index 23f4060e5d3f5735023b9f5b7a307bb665582907..76825b16c5bbec33c1a4a6dc54944bed5bdea0ff 100644 --- a/aleksis/core/templates/core/base.html +++ b/aleksis/core/templates/core/base.html @@ -35,6 +35,18 @@ <script src="{% url "calendarweek_i18n_js" %}?first_day=6&locale={{ LANGUAGE_CODE }}" type="text/javascript"></script> + {% if SENTRY_ENABLED %} + {% include_js "Sentry" %} + <script type="text/javascript"> + Sentry.init({ + dsn: '{{ SENTRY_SETTINGS.dsn }}', + environment: '{{ SENTRY_SETTINGS.environment }}', + tracesSampleRate: {{ SENTRY_SETTINGS.traces_sample_rate }}, + integrations: [new Sentry.Integrations.BrowserTracing()] + }); + </script> + {% endif %} + {# Include jQuery early to provide $(document).ready #} {% include_js "jQuery" %} diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py index 2c40caf51d41045685a74b67800cc9575d3cf2de..72b4f90a2b642490f1e2123dcb24a9b1d41182d7 100644 --- a/aleksis/core/util/core_helpers.py +++ b/aleksis/core/util/core_helpers.py @@ -208,12 +208,17 @@ def custom_information_processor(request: HttpRequest) -> dict: regrouped_pwa_icons.setdefault(pwa_icon.rel, {}) regrouped_pwa_icons[pwa_icon.rel][pwa_icon.size] = pwa_icon - return { + context = { "FOOTER_MENU": CustomMenu.get_default("footer"), "ADMINS": settings.ADMINS, "PWA_ICONS": regrouped_pwa_icons, + "SENTRY_ENABLED": settings.SENTRY_ENABLED, } + if settings.SENTRY_ENABLED: + context["SENTRY_SETTINGS"] = settings.SENTRY_SETTINGS + + return context def now_tomorrow() -> datetime: """Return current time tomorrow."""