Replaced Bugsnag with Sentry - requires config changes!
Note that pillar/bugsnag_extra.py still exists; I'm keeping it around for a while until we know what info we miss in Sentry, can port it, and then remove/refactor it.
This commit is contained in:
parent
6c4dd8ae02
commit
fc25ca9c03
@ -21,6 +21,7 @@ from flask_babel import Babel, gettext as _
|
|||||||
from flask.templating import TemplateNotFound
|
from flask.templating import TemplateNotFound
|
||||||
import pymongo.collection
|
import pymongo.collection
|
||||||
import pymongo.database
|
import pymongo.database
|
||||||
|
from raven.contrib.flask import Sentry
|
||||||
from werkzeug.local import LocalProxy
|
from werkzeug.local import LocalProxy
|
||||||
|
|
||||||
|
|
||||||
@ -59,7 +60,17 @@ class ConfigurationMissingError(SystemExit):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class PillarServer(Eve):
|
class BlinkerCompatibleEve(Eve):
|
||||||
|
"""Workaround for https://github.com/pyeve/eve/issues/1087"""
|
||||||
|
|
||||||
|
def __getattr__(self, name):
|
||||||
|
if name in {"im_self", "im_func"}:
|
||||||
|
raise AttributeError("type object '%s' has no attribute '%s'" %
|
||||||
|
(self.__class__.__name__, name))
|
||||||
|
return super().__getattr__(name)
|
||||||
|
|
||||||
|
|
||||||
|
class PillarServer(BlinkerCompatibleEve):
|
||||||
def __init__(self, app_root, **kwargs):
|
def __init__(self, app_root, **kwargs):
|
||||||
from .extension import PillarExtension
|
from .extension import PillarExtension
|
||||||
from celery import Celery
|
from celery import Celery
|
||||||
@ -94,7 +105,9 @@ class PillarServer(Eve):
|
|||||||
self._config_auth_token_hmac_key()
|
self._config_auth_token_hmac_key()
|
||||||
self._config_tempdirs()
|
self._config_tempdirs()
|
||||||
self._config_git()
|
self._config_git()
|
||||||
self._config_bugsnag()
|
|
||||||
|
self.sentry: typing.Optional[Sentry] = None
|
||||||
|
self._config_sentry()
|
||||||
self._config_google_cloud_storage()
|
self._config_google_cloud_storage()
|
||||||
|
|
||||||
self.algolia_index_users = None
|
self.algolia_index_users = None
|
||||||
@ -187,39 +200,19 @@ class PillarServer(Eve):
|
|||||||
self.config['GIT_REVISION'] = 'unknown'
|
self.config['GIT_REVISION'] = 'unknown'
|
||||||
self.log.info('Git revision %r', self.config['GIT_REVISION'])
|
self.log.info('Git revision %r', self.config['GIT_REVISION'])
|
||||||
|
|
||||||
def _config_bugsnag(self):
|
def _config_sentry(self):
|
||||||
bugsnag_api_key = self.config.get('BUGSNAG_API_KEY')
|
sentry_dsn = self.config.get('SENTRY_CONFIG', {}).get('dsn')
|
||||||
if self.config.get('TESTING') or not bugsnag_api_key:
|
if self.config.get('TESTING') or sentry_dsn in {'', '-set-in-config-local-'}:
|
||||||
self.log.info('Bugsnag NOT configured.')
|
self.log.warning('Sentry NOT configured.')
|
||||||
|
self.sentry = None
|
||||||
return
|
return
|
||||||
|
|
||||||
import bugsnag
|
self.sentry = Sentry(self, logging=True, level=logging.WARNING,
|
||||||
from bugsnag.handlers import BugsnagHandler
|
logging_exclusions=('werkzeug',))
|
||||||
|
|
||||||
release_stage = self.config.get('BUGSNAG_RELEASE_STAGE', 'unconfigured')
|
# bugsnag.before_notify(bugsnag_extra.add_pillar_request_to_notification)
|
||||||
if self.config.get('DEBUG'):
|
# got_request_exception.connect(self.__notify_bugsnag)
|
||||||
release_stage += '-debug'
|
self.log.info('Sentry setup complete')
|
||||||
|
|
||||||
bugsnag.configure(
|
|
||||||
api_key=bugsnag_api_key,
|
|
||||||
project_root="/data/git/pillar/pillar",
|
|
||||||
release_stage=release_stage
|
|
||||||
)
|
|
||||||
|
|
||||||
bs_handler = BugsnagHandler()
|
|
||||||
bs_handler.setLevel(logging.ERROR)
|
|
||||||
self.log.addHandler(bs_handler)
|
|
||||||
|
|
||||||
# This is what bugsnag.flask.handle_exceptions also tries to do,
|
|
||||||
# but it passes the app to the connect() call, which causes an
|
|
||||||
# error. Since we only have one app, we can do without.
|
|
||||||
from flask import got_request_exception
|
|
||||||
from . import bugsnag_extra
|
|
||||||
|
|
||||||
bugsnag.before_notify(bugsnag_extra.add_pillar_request_to_notification)
|
|
||||||
got_request_exception.connect(self.__notify_bugsnag)
|
|
||||||
|
|
||||||
self.log.info('Bugsnag setup complete')
|
|
||||||
|
|
||||||
def __notify_bugsnag(self, sender, exception, **extra):
|
def __notify_bugsnag(self, sender, exception, **extra):
|
||||||
import bugsnag
|
import bugsnag
|
||||||
|
@ -65,8 +65,13 @@ GOOGLE_SITE_VERIFICATION = ''
|
|||||||
|
|
||||||
ADMIN_USER_GROUP = '5596e975ea893b269af85c0e'
|
ADMIN_USER_GROUP = '5596e975ea893b269af85c0e'
|
||||||
SUBSCRIBER_USER_GROUP = '5596e975ea893b269af85c0f'
|
SUBSCRIBER_USER_GROUP = '5596e975ea893b269af85c0f'
|
||||||
BUGSNAG_API_KEY = ''
|
|
||||||
BUGSNAG_RELEASE_STAGE = 'development'
|
SENTRY_CONFIG = {
|
||||||
|
'dsn': '-set-in-config-local-',
|
||||||
|
# 'release': raven.fetch_git_sha(os.path.dirname(__file__)),
|
||||||
|
}
|
||||||
|
# See https://docs.sentry.io/clients/python/integrations/flask/#settings
|
||||||
|
SENTRY_USER_ATTRS = ['username', 'full_name', 'email', 'objectid']
|
||||||
|
|
||||||
ALGOLIA_USER = '-SECRET-'
|
ALGOLIA_USER = '-SECRET-'
|
||||||
ALGOLIA_API_KEY = '-SECRET-'
|
ALGOLIA_API_KEY = '-SECRET-'
|
||||||
|
@ -5,7 +5,6 @@ attrs==16.2.0
|
|||||||
algoliasearch==1.12.0
|
algoliasearch==1.12.0
|
||||||
bcrypt==3.1.3
|
bcrypt==3.1.3
|
||||||
blinker==1.4
|
blinker==1.4
|
||||||
bugsnag[flask]==3.1.1
|
|
||||||
bleach==1.4.3
|
bleach==1.4.3
|
||||||
celery[redis]==4.0.2
|
celery[redis]==4.0.2
|
||||||
CommonMark==0.7.2
|
CommonMark==0.7.2
|
||||||
@ -24,6 +23,7 @@ ndg-httpsclient==0.4.0
|
|||||||
Pillow==4.1.1
|
Pillow==4.1.1
|
||||||
python-dateutil==2.5.3
|
python-dateutil==2.5.3
|
||||||
rauth==0.7.3
|
rauth==0.7.3
|
||||||
|
raven[flask]==6.3.0
|
||||||
redis==2.10.5
|
redis==2.10.5
|
||||||
WebOb==1.5.0
|
WebOb==1.5.0
|
||||||
wheel==0.29.0
|
wheel==0.29.0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user