mirror of
https://github.com/pretix/pretix.git
synced 2026-05-06 15:24:02 +00:00
New retry logic for webhooks (#2790)
Co-authored-by: Richard Schreiber <wiffbi@gmail.com>
This commit is contained in:
@@ -319,6 +319,8 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs):
|
||||
'pretix.giftcards.acceptance.removed': _('Gift card acceptance for another organizer has been removed.'),
|
||||
'pretix.webhook.created': _('The webhook has been created.'),
|
||||
'pretix.webhook.changed': _('The webhook has been changed.'),
|
||||
'pretix.webhook.retries.expedited': _('The webhook call retry jobs have been manually expedited.'),
|
||||
'pretix.webhook.retries.dropped': _('The webhook call retry jobs have been dropped.'),
|
||||
'pretix.membershiptype.created': _('The membership type has been created.'),
|
||||
'pretix.membershiptype.changed': _('The membership type has been changed.'),
|
||||
'pretix.membershiptype.deleted': _('The membership type has been deleted.'),
|
||||
|
||||
@@ -6,13 +6,42 @@
|
||||
<p>
|
||||
{% trans "This page shows all calls to your webhook in the past 30 days." %}
|
||||
</p>
|
||||
{% if retry_count %}
|
||||
<form action="" method="post">
|
||||
{% csrf_token %}
|
||||
<div class="alert alert-info">
|
||||
<p>
|
||||
{% blocktranslate trimmed count count=retry_count %}
|
||||
One webhook is scheduled to be retried.
|
||||
{% plural %}
|
||||
{{ count }} webhooks are scheduled to be retried.
|
||||
{% endblocktranslate %}
|
||||
</p>
|
||||
<p>
|
||||
<button type="submit" name="action" value="expedite" class="btn btn-success">
|
||||
{% trans "Retry now" %}
|
||||
</button>
|
||||
<button type="submit" name="action" value="drop" class="btn btn-danger">
|
||||
{% trans "Stop retrying" %}
|
||||
</button>
|
||||
</p>
|
||||
<p class="help-block">
|
||||
{% blocktranslate trimmed with minutes=5 %}
|
||||
Webhooks scheduled to be retried in less than {{ minutes }} minutes may not be listed here and can
|
||||
no longer be stopped or expedited.
|
||||
{% endblocktranslate %}
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
{% endif %}
|
||||
{% for c in calls %}
|
||||
<details class="panel panel-default">
|
||||
<summary class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-md-4 col-sm-12 col-xs-12">
|
||||
{% if c.is_retry %}
|
||||
<span class="fa fa-repeat fa-fw" data-toggle="tooltip" title="{% trans "This webhook was retried since it previously failed." %}"></span>
|
||||
<span class="fa fa-repeat fa-fw" data-toggle="tooltip"
|
||||
title="{% trans "This webhook was retried since it previously failed." %}"></span>
|
||||
{% else %}
|
||||
<span class="fa fa-clock-o fa-fw"></span>
|
||||
{% endif %}
|
||||
|
||||
@@ -62,6 +62,7 @@ from django.views.generic import (
|
||||
)
|
||||
|
||||
from pretix.api.models import WebHook
|
||||
from pretix.api.webhooks import manually_retry_all_calls
|
||||
from pretix.base.auth import get_auth_backends
|
||||
from pretix.base.channels import get_all_sales_channels
|
||||
from pretix.base.i18n import language
|
||||
@@ -1252,6 +1253,7 @@ class WebHookLogsView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin
|
||||
def get_context_data(self, **kwargs):
|
||||
ctx = super().get_context_data(**kwargs)
|
||||
ctx['webhook'] = self.webhook
|
||||
ctx['retry_count'] = self.webhook.retries.count()
|
||||
return ctx
|
||||
|
||||
@cached_property
|
||||
@@ -1263,6 +1265,25 @@ class WebHookLogsView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin
|
||||
def get_queryset(self):
|
||||
return self.webhook.calls.order_by('-datetime')
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
if request.POST.get("action") == "expedite":
|
||||
self.request.organizer.log_action('pretix.webhook.retries.expedited', user=self.request.user, data={
|
||||
'webhook': self.webhook.pk,
|
||||
})
|
||||
manually_retry_all_calls.apply_async(args=(self.webhook.pk,))
|
||||
messages.success(request, _('All requests will now be scheduled for an immediate attempt. Please '
|
||||
'allow for a few minutes before they are processed.'))
|
||||
elif request.POST.get("action") == "drop":
|
||||
self.request.organizer.log_action('pretix.webhook.retries.dropped', user=self.request.user, data={
|
||||
'webhook': self.webhook.pk,
|
||||
})
|
||||
self.webhook.retries.all().delete()
|
||||
messages.success(request, _('All unprocessed webhooks have been stopped from retrying.'))
|
||||
return redirect(reverse('control:organizer.webhook.logs', kwargs={
|
||||
'organizer': self.request.organizer.slug,
|
||||
'webhook': self.webhook.pk,
|
||||
}))
|
||||
|
||||
|
||||
class GiftCardListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView):
|
||||
model = GiftCard
|
||||
|
||||
Reference in New Issue
Block a user