diff --git a/runbot_merge/__init__.py b/runbot_merge/__init__.py index 76a74f98..71babc13 100644 --- a/runbot_merge/__init__.py +++ b/runbot_merge/__init__.py @@ -1 +1,35 @@ +import logging +from os import environ + +import sentry_sdk +from sentry_sdk.integrations.logging import LoggingIntegration +from sentry_sdk.integrations.wsgi import SentryWsgiMiddleware + +from odoo import http from . import models, controllers + + +def enable_sentry(): + logger = logging.getLogger('runbot_merge') + + dsn = environ.get('SENTRY_DSN') + if not dsn: + logger.info("No DSN found, skipping sentry...") + return + + try: + sentry_sdk.init( + dsn, + integrations=[ + # note: if the colorformatter is enabled, sentry gets lost + # and classifies everything as errors because it fails to + # properly classify levels as the colorformatter injects + # the ANSI color codes right into LogRecord.levelname + LoggingIntegration(level=logging.INFO, event_level=logging.WARNING), + ] + ) + http.root = SentryWsgiMiddleware(http.root) + except Exception: + logger.exception("DSN found, failed to enable sentry...") + else: + logger.info("DSN found, sentry enabled...") diff --git a/runbot_merge/__manifest__.py b/runbot_merge/__manifest__.py index 0f81d5df..14d9e961 100644 --- a/runbot_merge/__manifest__.py +++ b/runbot_merge/__manifest__.py @@ -9,5 +9,6 @@ 'views/res_partner.xml', 'views/mergebot.xml', 'views/templates.xml', - ] + ], + 'post_load': 'enable_sentry', }