Built-in support for sentry

This commit is contained in:
Raphael Michel
2017-01-04 21:04:47 +01:00
parent b6e42d64da
commit 67de7150e5
7 changed files with 44 additions and 7 deletions

View File

@@ -218,7 +218,7 @@ def _add_items_to_cart(event: Event, items: List[dict], cart_id: str=None) -> No
raise CartError(err)
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1)
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1, throws=(CartError,))
def add_items_to_cart(self, event: int, items: List[dict], cart_id: str=None) -> None:
"""
Adds a list of items to a user's cart.
@@ -259,7 +259,7 @@ def _remove_items_from_cart(event: Event, items: List[dict], cart_id: str) -> No
cp.delete()
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1)
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1, throws=(CartError,))
def remove_items_from_cart(self, event: int, items: List[dict], cart_id: str=None) -> None:
"""
Removes a list of items from a user's cart.

View File

@@ -602,7 +602,7 @@ class OrderChangeManager:
raise OrderError(error_messages['internal'])
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1)
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1, throws=(OrderError,))
def perform_order(self, event: str, payment_provider: str, positions: List[str],
email: str=None, locale: str=None, address: int=None, meta_info: dict=None):
try:
@@ -614,7 +614,7 @@ def perform_order(self, event: str, payment_provider: str, positions: List[str],
return OrderError(error_messages['busy'])
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1)
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1, throws=(OrderError,))
def cancel_order(self, order: int, user: int=None):
try:
try:

View File

@@ -9,3 +9,10 @@ from django.conf import settings
app = Celery('pretix')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
if hasattr(settings, 'RAVEN_CONFIG'):
# Celery signal registration
from raven.contrib.celery import register_signal
from raven.contrib.django.models import client
register_signal(client, ignore_expected=True)

View File

@@ -30,9 +30,11 @@ class PermissionMiddleware(MiddlewareMixin):
def process_request(self, request):
url = resolve(request.path_info)
url_name = url.url_name
if not request.path.startswith(get_script_prefix() + 'control'):
# This middleware should only touch the /control subpath
return
if hasattr(request, 'organizer'):
# If the user is on a organizer's subdomain, he should be redirected to pretix
return redirect(urljoin(settings.SITE_URL, request.get_full_path()))

View File

@@ -7,6 +7,7 @@ from django.contrib.messages import constants as messages # NOQA
from django.utils.crypto import get_random_string
from django.utils.translation import ugettext_lazy as _ # NOQA
from pkg_resources import iter_entry_points
from . import __version__
config = configparser.RawConfigParser()
config.read(['/etc/pretix/pretix.cfg', os.path.expanduser('~/.pretix.cfg'), 'pretix.cfg'],
@@ -205,6 +206,19 @@ for entry_point in iter_entry_points(group='pretix.plugin', name=None):
PLUGINS.append(entry_point.module_name)
INSTALLED_APPS.append(entry_point.module_name)
if config.has_option('sentry', 'dsn'):
INSTALLED_APPS += [
'raven.contrib.django.raven_compat',
]
DISABLE_SENTRY_INSTRUMENTATION = True # see celery.py for more, we use this differently
RAVEN_CONFIG = {
'dsn': config.get('sentry', 'dsn'),
'transport': 'raven.transport.threaded_requests.ThreadedRequestsHTTPTransport',
'release': __version__,
'environment': SITE_URL,
}
CORE_MODULES = {
("pretix", "base"),
("pretix", "presale"),