From 3fbba1af82c3eb312ef5f89a7d8974f2faed061c Mon Sep 17 00:00:00 2001 From: Joar Wandborg Date: Fri, 22 Feb 2013 23:42:29 +0100 Subject: Added raven plugin --- mediagoblin/plugins/raven/README.rst | 16 +++++++++++ mediagoblin/plugins/raven/__init__.py | 52 +++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 mediagoblin/plugins/raven/README.rst create mode 100644 mediagoblin/plugins/raven/__init__.py (limited to 'mediagoblin/plugins/raven') diff --git a/mediagoblin/plugins/raven/README.rst b/mediagoblin/plugins/raven/README.rst new file mode 100644 index 00000000..06510a96 --- /dev/null +++ b/mediagoblin/plugins/raven/README.rst @@ -0,0 +1,16 @@ +============== + 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. + + +Set up the raven plugin +======================= + +1. Add the following to your MediaGoblin .ini file in the ``[plugins]`` section:: + + [[mediagoblin.plugins.raven]] + sentry_dsn = diff --git a/mediagoblin/plugins/raven/__init__.py b/mediagoblin/plugins/raven/__init__.py new file mode 100644 index 00000000..d6308d3b --- /dev/null +++ b/mediagoblin/plugins/raven/__init__.py @@ -0,0 +1,52 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +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(): + config = pluginapi.get_config('mediagoblin.plugins.oauth') + + _log.info('Setting up raven for celery...') + + sentry_dsn = config.get('sentry_dsn') + + if sentry_dsn: + _log.info('Setting up raven from plugin config: {0}'.format( + 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: + _log.error('Could not set up client, missing sentry DSN') + +hooks = { + 'setup': setup_plugin, + } -- cgit v1.2.3 From b9c5c97238e59791828d1689ac4f942861883eba Mon Sep 17 00:00:00 2001 From: Joar Wandborg Date: Fri, 22 Feb 2013 23:44:17 +0100 Subject: Refactored raven plugin --- mediagoblin/plugins/raven/__init__.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'mediagoblin/plugins/raven') diff --git a/mediagoblin/plugins/raven/__init__.py b/mediagoblin/plugins/raven/__init__.py index d6308d3b..624a615e 100644 --- a/mediagoblin/plugins/raven/__init__.py +++ b/mediagoblin/plugins/raven/__init__.py @@ -41,11 +41,12 @@ 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 - - if client: - register_signal(client) else: _log.error('Could not set up client, missing sentry DSN') + return + + register_signal(client) + hooks = { 'setup': setup_plugin, -- cgit v1.2.3 From 0c1ae3518e4d9442069ee8128e61ccda972c1401 Mon Sep 17 00:00:00 2001 From: Joar Wandborg Date: Fri, 22 Feb 2013 23:46:36 +0100 Subject: Don't look for the oauth config in raven plugin --- mediagoblin/plugins/raven/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mediagoblin/plugins/raven') diff --git a/mediagoblin/plugins/raven/__init__.py b/mediagoblin/plugins/raven/__init__.py index 624a615e..f4546f85 100644 --- a/mediagoblin/plugins/raven/__init__.py +++ b/mediagoblin/plugins/raven/__init__.py @@ -27,7 +27,7 @@ PLUGIN_DIR = os.path.dirname(__file__) def setup_plugin(): - config = pluginapi.get_config('mediagoblin.plugins.oauth') + config = pluginapi.get_config('mediagoblin.plugins.raven') _log.info('Setting up raven for celery...') -- cgit v1.2.3 From dee408291a245dc64cdaf73dcb8c4a37833e7ba1 Mon Sep 17 00:00:00 2001 From: Joar Wandborg Date: Fri, 22 Feb 2013 23:47:55 +0100 Subject: Removed PLUGIN_DIR from raven --- mediagoblin/plugins/raven/__init__.py | 2 -- 1 file changed, 2 deletions(-) (limited to 'mediagoblin/plugins/raven') diff --git a/mediagoblin/plugins/raven/__init__.py b/mediagoblin/plugins/raven/__init__.py index f4546f85..39eb41d3 100644 --- a/mediagoblin/plugins/raven/__init__.py +++ b/mediagoblin/plugins/raven/__init__.py @@ -23,8 +23,6 @@ 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.raven') -- cgit v1.2.3 From 32174bedc1e6d9a9842330b986c20b8e9dc3fd67 Mon Sep 17 00:00:00 2001 From: Joar Wandborg Date: Sat, 23 Feb 2013 00:02:39 +0100 Subject: Removed stray ) --- mediagoblin/plugins/raven/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mediagoblin/plugins/raven') diff --git a/mediagoblin/plugins/raven/__init__.py b/mediagoblin/plugins/raven/__init__.py index 39eb41d3..a0e83c0a 100644 --- a/mediagoblin/plugins/raven/__init__.py +++ b/mediagoblin/plugins/raven/__init__.py @@ -34,7 +34,7 @@ def setup_plugin(): 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'))) -- cgit v1.2.3 From 40ef3f5e05f5db071566a5caf55a7b1264ae083d Mon Sep 17 00:00:00 2001 From: Joar Wandborg Date: Sun, 24 Feb 2013 00:23:05 +0100 Subject: plugin/raven: Fix paster's celery config issue Check for CELERY_CONFIG_MODULE before we import raven.contrib.celery. It seems that the import otherwise sets up the celery client before we get to pass it our mediagoblin-specific settings. --- mediagoblin/plugins/raven/__init__.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'mediagoblin/plugins/raven') diff --git a/mediagoblin/plugins/raven/__init__.py b/mediagoblin/plugins/raven/__init__.py index a0e83c0a..16b3b94b 100644 --- a/mediagoblin/plugins/raven/__init__.py +++ b/mediagoblin/plugins/raven/__init__.py @@ -18,13 +18,17 @@ import os import logging from mediagoblin.tools import pluginapi -from raven import Client -from raven.contrib.celery import register_signal _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 + + 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...') -- cgit v1.2.3 From f3f530286ff576a3120e29f734aff0b7b7fe882c Mon Sep 17 00:00:00 2001 From: Joar Wandborg Date: Sun, 3 Mar 2013 02:32:03 +0100 Subject: Updated raven plugin - Added wrap_wsgi, celery_setup, celery_logging_setup hooks - Updated raven plugin docs - Updated production considerations docs - Added raven logging setup --- mediagoblin/plugins/raven/README.rst | 7 ++--- mediagoblin/plugins/raven/__init__.py | 59 ++++++++++++++++++++++++++++------- 2 files changed, 51 insertions(+), 15 deletions(-) (limited to 'mediagoblin/plugins/raven') 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 = + # 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, } -- cgit v1.2.3 From 6c6e9911f5556bcd1f287afa39d4cc6d14d9c6c1 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Fri, 29 Mar 2013 08:09:26 -0500 Subject: Warning that raven plugin is somewhat experimental! --- mediagoblin/plugins/raven/README.rst | 2 ++ 1 file changed, 2 insertions(+) (limited to 'mediagoblin/plugins/raven') diff --git a/mediagoblin/plugins/raven/README.rst b/mediagoblin/plugins/raven/README.rst index de5fd20d..4006060d 100644 --- a/mediagoblin/plugins/raven/README.rst +++ b/mediagoblin/plugins/raven/README.rst @@ -4,6 +4,8 @@ .. _raven-setup: +Warning: this plugin is somewhat experimental. + Set up the raven plugin ======================= -- cgit v1.2.3