aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin
diff options
context:
space:
mode:
Diffstat (limited to 'mediagoblin')
-rw-r--r--mediagoblin/app.py3
-rw-r--r--mediagoblin/init/celery/__init__.py4
-rw-r--r--mediagoblin/init/celery/from_celery.py5
-rw-r--r--mediagoblin/media_types/video/processing.py1
-rw-r--r--mediagoblin/plugins/raven/README.rst7
-rw-r--r--mediagoblin/plugins/raven/__init__.py59
6 files changed, 64 insertions, 15 deletions
diff --git a/mediagoblin/app.py b/mediagoblin/app.py
index 607d599b..bb6be4d4 100644
--- a/mediagoblin/app.py
+++ b/mediagoblin/app.py
@@ -253,4 +253,7 @@ def paste_app_factory(global_config, **app_config):
mgoblin_app = MediaGoblinApp(mediagoblin_config)
+ for callable_hook in PluginManager().get_hook_callables('wrap_wsgi'):
+ mgoblin_app = callable_hook(mgoblin_app)
+
return mgoblin_app
diff --git a/mediagoblin/init/celery/__init__.py b/mediagoblin/init/celery/__init__.py
index fc595ea7..8d7a41bd 100644
--- a/mediagoblin/init/celery/__init__.py
+++ b/mediagoblin/init/celery/__init__.py
@@ -18,6 +18,7 @@ import os
import sys
from celery import Celery
+from mediagoblin.tools.pluginapi import PluginManager
MANDATORY_CELERY_IMPORTS = ['mediagoblin.processing.task']
@@ -65,6 +66,9 @@ def setup_celery_app(app_config, global_config,
celery_app = Celery()
celery_app.config_from_object(celery_settings)
+ for callable_hook in PluginManager().get_hook_callables('celery_setup'):
+ callable_hook(celery_app)
+
def setup_celery_from_config(app_config, global_config,
settings_module=DEFAULT_SETTINGS_MODULE,
diff --git a/mediagoblin/init/celery/from_celery.py b/mediagoblin/init/celery/from_celery.py
index 5c99ddff..8a794abb 100644
--- a/mediagoblin/init/celery/from_celery.py
+++ b/mediagoblin/init/celery/from_celery.py
@@ -22,6 +22,7 @@ from celery.signals import setup_logging
from mediagoblin import app, mg_globals
from mediagoblin.init.celery import setup_celery_from_config
+from mediagoblin.tools.pluginapi import PluginManager
OUR_MODULENAME = __name__
@@ -46,6 +47,10 @@ def setup_logging_from_paste_ini(loglevel, **kw):
logging.config.fileConfig(logging_conf_file)
+ for callable_hook in \
+ PluginManager().get_hook_callables('celery_logging_setup'):
+ callable_hook()
+
setup_logging.connect(setup_logging_from_paste_ini)
diff --git a/mediagoblin/media_types/video/processing.py b/mediagoblin/media_types/video/processing.py
index 5b9be242..3a2dc481 100644
--- a/mediagoblin/media_types/video/processing.py
+++ b/mediagoblin/media_types/video/processing.py
@@ -60,6 +60,7 @@ def process_video(proc_state):
A Workbench() represents a local tempory dir. It is automatically
cleaned up when this function exits.
"""
+ raise Exception('Testing celery and raven')
entry = proc_state.entry
workbench = proc_state.workbench
video_config = mgg.global_config['media_type:mediagoblin.media_types.video']
diff --git a/mediagoblin/plugins/raven/README.rst b/mediagoblin/plugins/raven/README.rst
index 06510a96..de5fd20d 100644
--- a/mediagoblin/plugins/raven/README.rst
+++ b/mediagoblin/plugins/raven/README.rst
@@ -2,10 +2,7 @@
raven plugin
==============
-.. warning::
- The raven plugin only sets up raven for celery. To enable raven for paster,
- see the deployment docs section on setting up exception monitoring.
-
+.. _raven-setup:
Set up the raven plugin
=======================
@@ -14,3 +11,5 @@ Set up the raven plugin
[[mediagoblin.plugins.raven]]
sentry_dsn = <YOUR SENTRY DSN>
+ # Logging is very high-volume, set to 0 if you want to turn off logging
+ setup_logging = 1
diff --git a/mediagoblin/plugins/raven/__init__.py b/mediagoblin/plugins/raven/__init__.py
index 16b3b94b..8cfaed0a 100644
--- a/mediagoblin/plugins/raven/__init__.py
+++ b/mediagoblin/plugins/raven/__init__.py
@@ -22,19 +22,14 @@ from mediagoblin.tools import pluginapi
_log = logging.getLogger(__name__)
-def setup_plugin():
- if not os.environ.get('CELERY_CONFIG_MODULE'):
- # Exit early if we're (seemingly) not called from the celery process
- return
-
+def get_client():
from raven import Client
- from raven.contrib.celery import register_signal
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))
@@ -43,13 +38,55 @@ def setup_plugin():
_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,
}