import logging
from mediagoblin.tools import pluginapi
-from raven import Client
-from raven.contrib.celery import register_signal
_log = logging.getLogger(__name__)
-PLUGIN_DIR = os.path.dirname(__file__)
-
-def setup_plugin():
- config = pluginapi.get_config('mediagoblin.plugins.oauth')
-
- _log.info('Setting up raven for celery...')
+def get_client():
+ from raven import Client
+ config = pluginapi.get_config('mediagoblin.plugins.raven')
sentry_dsn = config.get('sentry_dsn')
+ client = None
+
if sentry_dsn:
_log.info('Setting up raven from plugin config: {0}'.format(
sentry_dsn))
- client = Client(sentry_dsn))
+ client = Client(sentry_dsn)
elif os.environ.get('SENTRY_DSN'):
_log.info('Setting up raven from SENTRY_DSN environment variable: {0}'\
.format(os.environ.get('SENTRY_DSN')))
client = Client() # Implicitly looks for SENTRY_DSN
- if client:
- register_signal(client)
- else:
+ if not client:
_log.error('Could not set up client, missing sentry DSN')
+ return None
+
+ return client
+
+
+def setup_celery():
+ from raven.contrib.celery import register_signal
+
+ client = get_client()
+
+ register_signal(client)
+
+
+def setup_logging():
+ config = pluginapi.get_config('mediagoblin.plugins.raven')
+
+ conf_setup_logging = False
+ if config.get('setup_logging'):
+ conf_setup_logging = bool(int(config.get('setup_logging')))
+
+ if not conf_setup_logging:
+ return
+
+ from raven.handlers.logging import SentryHandler
+ from raven.conf import setup_logging
+
+ client = get_client()
+
+ _log.info('Setting up raven logging handler')
+
+ setup_logging(SentryHandler(client))
+
+
+def wrap_wsgi(app):
+ from raven.middleware import Sentry
+
+ client = get_client()
+
+ _log.info('Attaching raven middleware...')
+
+ return Sentry(app, client)
+
hooks = {
- 'setup': setup_plugin,
+ 'setup': setup_logging,
+ 'wrap_wsgi': wrap_wsgi,
+ 'celery_logging_setup': setup_logging,
+ 'celery_setup': setup_celery,
}