コード例 #1
0
ファイル: models.py プロジェクト: raffstah/raven
def register_handlers():
    from django.core.signals import got_request_exception

    # HACK: support Sentry's internal communication
    if 'sentry' in django_settings.INSTALLED_APPS:
        from django.db import transaction

        @transaction.commit_on_success
        def wrap_sentry(request, **kwargs):
            if transaction.is_dirty():
                transaction.rollback()
            return sentry_exception_handler(request, **kwargs)

        exception_handler = wrap_sentry
    else:
        exception_handler = sentry_exception_handler

    # Connect to Django's internal signal handler
    got_request_exception.connect(exception_handler)

    # If Celery is installed, register a signal handler
    if 'djcelery' in django_settings.INSTALLED_APPS:
        from raven.contrib.celery import register_signal, register_logger_signal

        try:
            register_signal(client)
        except Exception:
            logger.exception('Failed installing error handling for Celery')

        try:
            register_logger_signal(client)
        except Exception:
            logger.exception('Failed installing logging handler for Celery')
コード例 #2
0
ファイル: extensions.py プロジェクト: mwielgoszewski/doorman
def make_celery(app, celery):
    """ From http://flask.pocoo.org/docs/0.10/patterns/celery/ """
    # Register our custom serializer type before updating the configuration.
    from kombu.serialization import register
    from doorman.celery_serializer import djson_dumps, djson_loads

    register(
        'djson', djson_dumps, djson_loads,
        content_type='application/x-djson',
        content_encoding='utf-8'
    )

    # Actually update the config
    celery.config_from_object(app.config)

    # Register Sentry client
    if 'SENTRY_DSN' in app.config and app.config['SENTRY_DSN']:
        client = Client(app.config['SENTRY_DSN'])
        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)
        # hook into the Celery error handler
        register_signal(client)

    TaskBase = celery.Task

    class ContextTask(TaskBase):

        abstract = True

        def __call__(self, *args, **kwargs):
            with app.app_context():
                return TaskBase.__call__(self, *args, **kwargs)

    celery.Task = ContextTask
    return celery
コード例 #3
0
ファイル: olympia.py プロジェクト: peterkinalex/olympia
def init_celery():
    """
    Initialize Celery, and make our app instance available as `celery_app`
    for use by the `celery` command.
    """
    from django.conf import settings
    from raven import Client
    from raven.contrib.celery import register_signal, register_logger_signal
    from amo import celery

    # I think `manage.py celery` relies on this global? We typically don't run
    # celery like that anymore though.
    global celery_app
    celery_app = celery.app

    # Hook up Sentry in celery.
    client = Client(settings.SENTRY_DSN)

    # register a custom filter to filter out duplicate logs
    register_logger_signal(client)

    # hook into the Celery error handler
    register_signal(client)

    # After upgrading raven we can specify loglevel=logging.INFO to override
    # the default (which is ERROR).
    register_logger_signal(client)
コード例 #4
0
ファイル: celery.py プロジェクト: dekoza/weblate
def configure_error_handling(sender, **kargs):
    """Rollbar and Sentry integration

    Based on
    https://www.mattlayman.com/blog/2017/django-celery-rollbar/
    """
    if not bool(os.environ.get('CELERY_WORKER_RUNNING', False)):
        return

    from django.conf import settings
    if HAS_ROLLBAR and hasattr(settings, 'ROLLBAR'):
        rollbar.init(**settings.ROLLBAR)

        def celery_base_data_hook(request, data):
            data['framework'] = 'celery'

        rollbar.BASE_DATA_HOOK = celery_base_data_hook

        @task_failure.connect
        def handle_task_failure(**kw):
            rollbar.report_exc_info(extra_data=kw)

    if HAS_RAVEN and hasattr(settings, 'RAVEN_CONFIG'):
        client = Client(
            settings.RAVEN_CONFIG['dsn'],
            release=settings.RAVEN_CONFIG.get('release'),
            environment=settings.RAVEN_CONFIG.get('environment'),
        )
        register_signal(client, ignore_expected=True)
        register_logger_signal(client, loglevel=logging.ERROR)
コード例 #5
0
ファイル: __init__.py プロジェクト: clausmith/flash
def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    celery.conf.update(app.config)
    db.init_app(app)
    login_manager.init_app(app)
    mail.init_app(app)

    if not app.config['DEBUG']:
        # https://docs.getsentry.com/hosted/clients/python/integrations/flask/
        sentry.init_app(app, dsn=app.config['SENTRY_DSN'])

        # https://docs.getsentry.com/hosted/clients/python/integrations/celery/
        client = Client(app.config['SENTRY_DSN'])
        register_logger_signal(client)
        register_signal(client)

    from .admin import admin as admin_blueprint
    app.register_blueprint(admin_blueprint, url_prefix='/admin')

    from .api_v1 import api_module as api_blueprint
    app.register_blueprint(api_blueprint, url_prefix='/api/v1')

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix='/auth')

    from .public import public as public_blueprint
    app.register_blueprint(public_blueprint)

    return app
コード例 #6
0
ファイル: __init__.py プロジェクト: stovar04/openedx-webhooks
def create_celery_app(app=None, config="worker"):
    """
    adapted from http://flask.pocoo.org/docs/0.10/patterns/celery/
    (added the wsgi_environ stuff)
    """
    app = app or create_app(config=config)
    celery.main = app.import_name
    celery.conf["BROKER_URL"] = app.config["CELERY_BROKER_URL"]
    celery.conf.update(app.config)
    TaskBase = celery.Task
    class ContextTask(TaskBase):
        abstract = True
        def __call__(self, *args, **kwargs):
            if "wsgi_environ" in kwargs:
                wsgi_environ = kwargs.pop("wsgi_environ")
            else:
                wsgi_environ = None
            with app.app_context():
                if wsgi_environ:
                    with app.request_context(wsgi_environ):
                        return TaskBase.__call__(self, *args, **kwargs)
                else:
                    return TaskBase.__call__(self, *args, **kwargs)

    celery.Task = ContextTask
    register_logger_signal(sentry.client)
    register_signal(sentry.client)
    return celery
コード例 #7
0
ファイル: celery.py プロジェクト: sergeii/swat4stats.com
 def on_configure(self):
     if 'raven.contrib.django.raven_compat' in settings.INSTALLED_APPS:
         client = raven.Client(**settings.RAVEN_CONFIG)
         # register a custom filter to filter out duplicate logs
         register_logger_signal(client)
         # hook into the Celery error handler
         register_signal(client)
コード例 #8
0
def bootstrap_worker(sender, **kwargs):
    request = sender.app.webapp_bootstrap()
    sender.app.request = request

    # Configure Sentry reporting on task failure
    register_signal(request.sentry)
    register_logger_signal(request.sentry, loglevel=logging.ERROR)
コード例 #9
0
ファイル: celery.py プロジェクト: COLABORATI/nodeshot
 def on_configure(self):
     if hasattr(settings, 'RAVEN_CONFIG') and settings.RAVEN_CONFIG['dsn']:
         import raven
         from raven.contrib.celery import (register_signal,
                                           register_logger_signal)
         client = raven.Client(settings.RAVEN_CONFIG['dsn'])
         register_logger_signal(client)
         register_signal(client)
コード例 #10
0
ファイル: sentry.py プロジェクト: nistormihai/superdesk-core
 def __init__(self, app):
     if app.config.get('SENTRY_DSN'):
         app.config.setdefault('SENTRY_NAME', app.config.get('SERVER_NAME'))
         self.sentry = Sentry(app, register_signal=False, wrap_wsgi=False, logging=True, level=logging.WARNING)
         register_logger_signal(self.sentry.client)
         register_signal(self.sentry.client)
     else:
         self.sentry = None
コード例 #11
0
    def on_configure(self):
        client = RavenClient(SETTINGS.get('sentry_dsn'))

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #12
0
ファイル: celery.py プロジェクト: rapidpro/data_api
        def on_configure(self):
            client = raven.Client(settings.RAVEN_URL)

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)
コード例 #13
0
    def init_app(self, app):
        self.app = app
        self.config_from_object(app.config)

        if 'SENTRY_DSN' in app.config and app.config['SENTRY_DSN'] is not None:
            self.sentry = raven.Client(app.config['SENTRY_DSN'])
            register_logger_signal(self.sentry)
            register_signal(self.sentry)
コード例 #14
0
    def on_configure(self):
        client = raven.Client(SENTRY_LINK)

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #15
0
ファイル: celery.py プロジェクト: ricebeans/nodeshot
    def on_configure(self):
        if settings.SENTRY_ENABLED:
            import raven
            from raven.contrib.celery import register_signal, register_logger_signal

            client = raven.Client(settings.RAVEN_CONFIG["dsn"])
            register_logger_signal(client)
            register_signal(client)
コード例 #16
0
ファイル: __init__.py プロジェクト: Viewly/alpha-2
def init_sentry():
    """ Inject Sentry logging into Celery."""
    from raven import Client
    from raven.contrib.celery import register_signal, register_logger_signal
    import logging

    client = Client()
    register_logger_signal(client, loglevel=logging.ERROR)
    register_signal(client, ignore_expected=True)
コード例 #17
0
 def on_configure(self):
     if not getattr(settings, 'CELERY_RAVEN_DSN', None):
         # for no send raven reports from dev server
         return
     client = raven.Client(settings.CELERY_RAVEN_DSN)
     # register a custom filter to filter out duplicate logs
     register_logger_signal(client)
     # hook into the Celery error handler
     register_signal(client)
コード例 #18
0
    def on_configure(self):  # pylint: disable=method-hidden
        if not client:
            return

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #19
0
ファイル: celery.py プロジェクト: spearous0001/SHARE
    def on_configure(self):
        # Import has to be relative. "client" is not actually lazily initialized
        from raven.contrib.django.raven_compat.models import client

        if not client.is_enabled():
            return

        register_signal(client)
        register_logger_signal(client)
コード例 #20
0
    def on_configure(self):
        if settings.SENTRY_DSN:
            client = raven.Client(settings.SENTRY_DSN)

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)
コード例 #21
0
ファイル: tasks.py プロジェクト: Hitoki/livechat
    def on_configure(self):
        client = Client('https://*****:*****@app.getsentry.com/71566')

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #22
0
    def on_configure(self):
        if not client:
            return

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #23
0
    def on_configure(self):
        if hasattr(settings, 'RAVEN_CONFIG') and settings.RAVEN_CONFIG['dsn']:
            import raven
            from raven.contrib.celery import (register_signal,
                                              register_logger_signal)

            client = raven.Client(settings.RAVEN_CONFIG['dsn'])
            register_logger_signal(client)
            register_signal(client)
コード例 #24
0
    def on_configure(self):
        from raven.contrib.django.models import client
        from raven.contrib.celery import register_signal, register_logger_signal

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #25
0
ファイル: celery.py プロジェクト: 280185386/sentry
    def on_configure(self):
        from raven.contrib.django.models import client
        from raven.contrib.celery import register_signal, register_logger_signal

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #26
0
    def on_configure(self):
        if getattr(settings, 'RAVEN_CONFIG', None):
            client = raven.Client(settings.RAVEN_CONFIG['dsn'])

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)
コード例 #27
0
ファイル: celery.py プロジェクト: Samael500/falstart-example
 def on_configure(self):
     if not getattr(settings, 'CELERY_RAVEN_DSN'):
         # for no send raven reports from dev server
         return
     client = raven.Client(settings.CELERY_RAVEN_DSN)
     # register a custom filter to filter out duplicate logs
     register_logger_signal(client)
     # hook into the Celery error handler
     register_signal(client)
コード例 #28
0
ファイル: celery.py プロジェクト: storymode7/django-init
    def on_configure(self):
        client = raven.Client(os.getenv('SENTRY_DSN'), environment=os.getenv('SENTRY_ENVIRONMENT'))

        # Always ensure you import register_logger_signal, register_signal and not their parent modules
        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #29
0
    def on_configure(self):
        if os.environ.get('SENTRY_DSN'):
            client = raven.Client(os.environ.get('SENTRY_DSN'))

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)
コード例 #30
0
ファイル: celery.py プロジェクト: runmosta/product-database
    def on_configure(self):
        if settings.PDB_ENABLE_SENTRY:  # ignore for coverage
            client = raven.Client(settings.PDB_SENTRY_DSN)
            client.release = raven.fetch_git_sha(os.path.dirname(os.pardir))

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)
コード例 #31
0
    def on_configure(self):
        client = raven.Client(
            'https://*****:*****@sentry.trailblazingtech.com/3'
        )

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #32
0
    def on_configure(self):
        dsn = settings.RAVEN_CONFIG.get('dsn')
        if dsn:
            client = raven.Client(dsn)

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)
コード例 #33
0
ファイル: celery.py プロジェクト: ninjadevtrack/medifiner-api
    def on_configure(self):
        client = raven.Client(
            'https://*****:*****@sentry.io/1314513'  # noqa
        )

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #34
0
 def on_configure(self):
     """Update raven client"""
     try:
         client = Client(settings.RAVEN_CONFIG.get('dsn'))
         # register a custom filter to filter out duplicate logs
         register_logger_signal(client)
         # hook into the Celery error handler
         register_signal(client)
     except RecursionError:  # This error happens when pdoc is running
         pass
コード例 #35
0
def configure_sentry(dsn=None):
    dsn = dsn or getenv("SENTRY_DSN")
    if not dsn:
        return

    client = Client(dsn)
    # register a custom filter to filter out duplicate logs
    register_logger_signal(client)
    # hook into the Celery error handler
    register_signal(client)
コード例 #36
0
ファイル: celery.py プロジェクト: hoelsner/product-database
    def on_configure(self):
        if settings.PDB_ENABLE_SENTRY: # ignore for coverage
            client = raven.Client(settings.PDB_SENTRY_DSN)
            client.release = raven.fetch_git_sha(os.path.dirname(os.pardir))

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)
コード例 #37
0
    def on_configure(self):
        client = raven.Client(
            'https://*****:*****@sentry.io/717191'
        )

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #38
0
    def on_configure(self):

        if os.environ.get("RAVEN_DSN") and not os.environ.get("CI_BUILD_REF"):
            client = raven.Client(os.environ["RAVEN_DSN"])

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)
コード例 #39
0
ファイル: celery_utils.py プロジェクト: buendiya/celery_demo
    def on_configure(self):
        if self.sentry_dsn:
            client = Client(self.sentry_dsn)

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)

            add_sentry_handler_to_celery_task_logger(client, self.sentry_handler_log_level)
コード例 #40
0
ファイル: celery.py プロジェクト: mmclark/seed
    def on_configure(self):
        try:
            client = raven.Client(settings.RAVEN_CONFIG['dsn'])

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)
        except AttributeError:
            pass
コード例 #41
0
ファイル: sentry.py プロジェクト: thenewguy/celery-serverless
def init_sentry():
    logger.debug('Initializing Sentry loghandler')
    client = LambdaClient(auto_log_stacks=True)
    loghandler = SentryHandler(client)
    loghandler.setLevel('ERROR')
    setup_logging(loghandler)

    logger.debug('Applying Sentry celery signals and logging hooks')
    register_logger_signal(client, loglevel=logging.INFO)
    register_signal(client, ignore_expected=False)
    return client
コード例 #42
0
    def on_configure(self):
        try:
            client = raven.Client(settings.RAVEN_CONFIG['dsn'])

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)
        except AttributeError:
            pass
コード例 #43
0
ファイル: sentry.py プロジェクト: monaawi/invenio-logging
    def install_handler(self, app):
        """Install log handler."""
        from raven.conf import EXCLUDE_LOGGER_DEFAULTS
        from raven.contrib.celery import register_logger_signal, \
            register_signal
        from raven.contrib.flask import Sentry, make_client
        from raven.handlers.logging import SentryHandler

        # Installs sentry in app.extensions['sentry']
        level = getattr(logging, app.config['LOGGING_SENTRY_LEVEL'])

        logging_exclusions = None
        if not app.config['LOGGING_SENTRY_PYWARNINGS']:
            logging_exclusions = list(EXCLUDE_LOGGER_DEFAULTS)
            logging_exclusions.append('py.warnings')

        # Get the Sentry class.
        cls = app.config['LOGGING_SENTRY_CLASS']
        if cls:
            if isinstance(cls, six.string_types):
                cls = import_string(cls)
        else:
            cls = Sentry

        sentry = cls(
            app,
            logging=True,
            level=level,
            logging_exclusions=logging_exclusions,
        )

        app.logger.addHandler(SentryHandler(client=sentry.client, level=level))

        # Capture warnings from warnings module
        if app.config['LOGGING_SENTRY_PYWARNINGS']:
            self.capture_pywarnings(SentryHandler(sentry.client))

        # Setup Celery logging to Sentry
        if app.config['LOGGING_SENTRY_CELERY']:
            try:
                register_logger_signal(sentry.client, loglevel=level)
            except TypeError:
                # Compatibility mode for Raven<=5.1.0
                register_logger_signal(sentry.client)
            register_signal(sentry.client)

        # Werkzeug only adds a stream handler if there's no other handlers
        # defined, so when Sentry adds a log handler no output is
        # received from Werkzeug unless we install a console handler
        # here on the werkzeug logger.
        if app.debug:
            logger = logging.getLogger('werkzeug')
            logger.setLevel(logging.INFO)
            logger.addHandler(logging.StreamHandler())
コード例 #44
0
    def _configure_sentry(self, raven_config):
        import raven
        from raven.contrib.celery import (register_signal,
                                          register_logger_signal)
        client = raven.Client(**raven_config)

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #45
0
ファイル: celery.py プロジェクト: tkliuxing/bookspider
    def on_configure(self):
        sentry_dsn = getattr(settings, 'SENTRY_DSN', None)
        if sentry_dsn is None:
            return super(MyCelery, self).on_configure()
        client = raven.Client(sentry_dsn)

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #46
0
ファイル: celery.py プロジェクト: ShaonMahmood/Site-Manager
    def on_configure(self):
        if os.environ.get('RAVEN_ENABLED'):
            client = raven.Client(
                'https://*****:*****@sentry.io/1164181'
            )

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)
コード例 #47
0
ファイル: celery.py プロジェクト: PeterAlexandre/push-rtm
    def on_configure(self):
        import raven
        from raven.contrib.celery import register_signal, register_logger_signal

        client = raven.Client()

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #48
0
    def on_configure(self):
        sentry_dsn = getattr(settings, 'SENTRY_DSN', None)
        if sentry_dsn is None:
            return super(MyCelery, self).on_configure()
        client = raven.Client(sentry_dsn)

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #49
0
    def on_configure(self):
        import raven
        from raven.contrib.celery import register_signal, register_logger_signal

        client = raven.Client()

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #50
0
    def on_configure(self):
        if not RAVEN_DSN:
            return

        client = raven.Client(RAVEN_DSN)

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client)

        # hook into the Celery error handler
        register_signal(client)
コード例 #51
0
 def on_configure(self):
     """Set up sentry client."""
     dsn = os.environ.get("SENTRY_DSN")
     client = raven.Client(dsn)
     register_logger_signal(client)
     register_signal(client)
     client.ignore_exceptions = [
         "f8a_worker.errors.NotABugFatalTaskError",
         "f8a_worker.errors.NotABugTaskError",
         "f8a_worker.errors.TaskAlreadyExistsError"
     ]
コード例 #52
0
ファイル: app.py プロジェクト: filatovw/rabbit_experiments
 def on_configure(self):
     client = raven.Client(
         sentry_url,
         auto_log_stacks=True  # add detailed stack_trace
     )
     # register a custom filter to filter out
     # duplicate logs
     register_logger_signal(client)
     # hook into the
     # Celery error
     # handler
     register_signal(client)
コード例 #53
0
    def on_configure(self):  # pylint: disable=method-hidden
        """
        Register Sentry for celery tasks.
        """
        if getattr(settings, 'RAVEN_CONFIG', None):
            client = raven.Client(settings.RAVEN_CONFIG['dsn'])

            # register a custom filter to filter out duplicate logs
            register_logger_signal(client)

            # hook into the Celery error handler
            register_signal(client)
コード例 #54
0
def register_handlers():
    from django.core.signals import got_request_exception, request_started

    def before_request(*args, **kwargs):
        client.context.activate()

    request_started.connect(before_request, weak=False)

    # HACK: support Sentry's internal communication
    if 'sentry' in settings.INSTALLED_APPS:
        from django.db import transaction
        # Django 1.6
        if hasattr(transaction, 'atomic'):
            commit_on_success = transaction.atomic
        else:
            commit_on_success = transaction.commit_on_success

        @commit_on_success
        def wrap_sentry(request, **kwargs):
            if transaction.is_dirty():
                transaction.rollback()
            return sentry_exception_handler(request, **kwargs)

        exception_handler = wrap_sentry
    else:
        exception_handler = sentry_exception_handler

    # Connect to Django's internal signal handler
    got_request_exception.connect(exception_handler, weak=False)

    # If Celery is installed, register a signal handler
    if 'djcelery' in settings.INSTALLED_APPS:
        try:
            # Celery < 2.5? is not supported
            from raven.contrib.celery import (register_signal,
                                              register_logger_signal)
        except ImportError:
            logger.exception('Failed to install Celery error handler')
        else:
            try:
                register_signal(client)
            except Exception:
                logger.exception('Failed to install Celery error handler')

            try:
                ga = lambda x, d=None: getattr(settings, 'SENTRY_%s' % x, d)
                options = getattr(settings, 'RAVEN_CONFIG', {})
                loglevel = options.get('celery_loglevel',
                                       ga('CELERY_LOGLEVEL', logging.ERROR))

                register_logger_signal(client, loglevel=loglevel)
            except Exception:
                logger.exception('Failed to install Celery error handler')
コード例 #55
0
ファイル: models.py プロジェクト: georgexsh/raven-python
def register_handlers():
    from django.core.signals import got_request_exception, request_started

    def before_request(*args, **kwargs):
        client.context.activate()
    request_started.connect(before_request, weak=False)

    # HACK: support Sentry's internal communication
    if 'sentry' in settings.INSTALLED_APPS:
        from django.db import transaction
        # Django 1.6
        if hasattr(transaction, 'atomic'):
            commit_on_success = transaction.atomic
        else:
            commit_on_success = transaction.commit_on_success

        @commit_on_success
        def wrap_sentry(request, **kwargs):
            if transaction.is_dirty():
                transaction.rollback()
            return sentry_exception_handler(request, **kwargs)

        exception_handler = wrap_sentry
    else:
        exception_handler = sentry_exception_handler

    # Connect to Django's internal signal handler
    got_request_exception.connect(exception_handler, weak=False)

    # If Celery is installed, register a signal handler
    if 'djcelery' in settings.INSTALLED_APPS:
        try:
            # Celery < 2.5? is not supported
            from raven.contrib.celery import (
                register_signal, register_logger_signal)
        except ImportError:
            logger.exception('Failed to install Celery error handler')
        else:
            try:
                register_signal(client)
            except Exception:
                logger.exception('Failed to install Celery error handler')

            try:
                ga = lambda x, d=None: getattr(settings, 'SENTRY_%s' % x, d)
                options = getattr(settings, 'RAVEN_CONFIG', {})
                loglevel = options.get('celery_loglevel',
                                       ga('CELERY_LOGLEVEL', logging.ERROR))

                register_logger_signal(client, loglevel=loglevel)
            except Exception:
                logger.exception('Failed to install Celery error handler')
コード例 #56
0
ファイル: config.py プロジェクト: Osso/freight
def configure_sentry(app):
    from flask import session
    from raven.contrib.celery import register_signal, register_logger_signal

    sentry.init_app(app)

    @app.before_request
    def capture_user(*args, **kwargs):
        if "uid" in session:
            sentry.client.user_context({"id": session["uid"], "email": session["email"]})

    register_signal(sentry.client)
    register_logger_signal(sentry.client)
コード例 #57
0
ファイル: celery.py プロジェクト: mmariani/abilian-core
  def flask_app(self):
    if self._flask_app is None:
      self.flask_app_factory = symbol_by_name(self.flask_app_factory)
      app = self._flask_app = self.flask_app_factory()
      self.app_context = app.app_context()

      if 'sentry' in app.extensions:
        from raven.contrib.celery import register_signal, register_logger_signal
        client = app.extensions['sentry'].client
        register_signal(client)
        register_logger_signal(client)

    return self._flask_app
コード例 #58
0
ファイル: logger.py プロジェクト: bkolobara/indico
def init_sentry(app):
    sentry = IndicoSentry(wrap_wsgi=False, register_signal=True, logging=False)
    sentry.init_app(app)
    # setup logging manually and exclude uncaught indico exceptions.
    # these are logged manually in the flask error handler logic so
    # we get the X-Sentry-ID header which is not populated in the
    # logging handlers
    handler = SentryHandler(sentry.client, level=getattr(logging, config.SENTRY_LOGGING_LEVEL))
    handler.addFilter(BlacklistFilter({'indico.flask', 'celery.redirected'}))
    setup_logging(handler)
    # connect to the celery logger
    register_logger_signal(sentry.client)
    register_signal(sentry.client)
コード例 #59
0
ファイル: sentry.py プロジェクト: anukat2015/udata
def init_app(app):
    if 'SENTRY_DSN' in app.config:
        try:
            from raven.contrib.celery import (
                register_signal, register_logger_signal
            )
            from raven.contrib.flask import Sentry
        except:
            log.error('raven[flask] is required to use sentry')
            return

        sentry = Sentry()
        tags = app.config['SENTRY_TAGS'] = app.config.get('SENTRY_TAGS', {})

        app.config.setdefault('SENTRY_USER_ATTRS',
                              ['slug', 'email', 'fullname'])
        app.config.setdefault('SENTRY_LOGGING', 'WARNING')

        log_level_name = app.config.get('SENTRY_LOGGING')
        if log_level_name:
            log_level = getattr(logging, log_level_name.upper())
            if log_level:
                sentry.logging = True
                sentry.level = log_level

        # Do not send HTTPExceptions
        exceptions = app.config.get('RAVEN_IGNORE_EXCEPTIONS', [])
        if HTTPException not in exceptions:
            exceptions.append(HTTPException)
        if PermissionDenied not in exceptions:
            exceptions.append(PermissionDenied)
        app.config['RAVEN_IGNORE_EXCEPTIONS'] = exceptions

        app.config['SENTRY_PUBLIC_DSN'] = public_dsn(app.config['SENTRY_DSN'])

        # Versions Management: uData and plugins versions as tags.
        packages = ['udata']
        packages += ['udata_{0}'.format(p) for p in app.config['PLUGINS']]

        for package in packages:
            version = pkg_resources.get_distribution(package).version
            if version:
                tags[package] = version

        sentry.init_app(app)

        # register a custom filter to filter out duplicate logs
        register_logger_signal(sentry.client, loglevel=sentry.level)

        # hook into the Celery error handler
        register_signal(sentry.client)