Merge remote-tracking branch 'refs/remotes/tryggvib/532-exif-creation-date'
[mediagoblin.git] / mediagoblin / plugins / raven / __init__.py
index f4546f85375ee8c2bcdb0695a50e5fd8936af298..8cfaed0aa8cb24f4698ad2f91b9b4dfee2ab8a5d 100644 (file)
@@ -18,36 +18,75 @@ import os
 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():
+def get_client():
+    from raven import Client
     config = pluginapi.get_config('mediagoblin.plugins.raven')
 
-    _log.info('Setting up raven for celery...')
-
     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
-    else:
+
+    if not client:
         _log.error('Could not set up client, missing sentry DSN')
-        return
+        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,
     }