fix button force anoncecall
This commit is contained in:
1 parent
9af91941d9
commit
4525ec3e6a
9 files changed
+99
-48
No files matched your search
@@ -85,7 +85,7 @@ def _deliver(job):
|
||||
job.last_error = ""
|
||||
|
||||
|
||||
def process_due_announcements():
|
||||
def process_due_announcements(*, job_id=None):
|
||||
now = timezone.now()
|
||||
# A crashed worker can safely retry with the same provider idempotency key.
|
||||
AnnouncementJob.objects.filter(
|
||||
@@ -93,13 +93,15 @@ def process_due_announcements():
|
||||
next_attempt_at__lt=now - timedelta(minutes=10),
|
||||
).update(status=AnnouncementJob.Status.PENDING, next_attempt_at=now)
|
||||
with transaction.atomic():
|
||||
jobs = list(
|
||||
queryset = (
|
||||
AnnouncementJob.objects.select_for_update(skip_locked=True)
|
||||
.filter(status=AnnouncementJob.Status.PENDING, next_attempt_at__lte=now)
|
||||
.select_related("message__ticket__customer", "ticket__customer")
|
||||
.annotate(priority=Case(When(source=AnnouncementJob.Source.MANUAL, then=Value(0)), default=Value(1), output_field=IntegerField()))
|
||||
.order_by("priority", "next_attempt_at", "pk")[:20]
|
||||
)
|
||||
if job_id is not None:
|
||||
queryset = queryset.filter(pk=job_id)
|
||||
jobs = list(queryset.order_by("priority", "next_attempt_at", "pk")[:20])
|
||||
AnnouncementJob.objects.filter(pk__in=[job.pk for job in jobs]).update(
|
||||
status=AnnouncementJob.Status.PROCESSING, next_attempt_at=now,
|
||||
)
|
||||
|
||||
@@ -251,9 +251,19 @@ def _process_delivery_checks(options):
|
||||
NotificationJob.objects.filter(pk__in=[job.pk for job in jobs]).update(
|
||||
delivery_next_check_at=now + timedelta(minutes=10),
|
||||
)
|
||||
provider = get_sms_provider()
|
||||
if not jobs:
|
||||
return
|
||||
try:
|
||||
provider = get_sms_provider()
|
||||
except Exception:
|
||||
logger.exception("SMS delivery provider initialization failed")
|
||||
return
|
||||
for job in jobs:
|
||||
result = provider.get_delivery_status(job.provider_message_id)
|
||||
try:
|
||||
result = provider.get_delivery_status(job.provider_message_id)
|
||||
except Exception:
|
||||
logger.exception("SMS delivery check failed for job %s", job.pk)
|
||||
continue
|
||||
if result is None:
|
||||
job.delivery_status = ""
|
||||
job.delivery_next_check_at = None
|
||||
|
||||
Reference in new issue
Block a user