Store event_id in OrderSyncQueue, always fill not_before, log unhandled exceptions

This commit is contained in:
Mira Weller
2025-05-07 15:41:41 +02:00
parent 114304855f
commit 922d3cd629
6 changed files with 56 additions and 35 deletions

View File

@@ -148,9 +148,10 @@ class OutboundSyncProvider:
raise TypeError('Call this method on a derived class that defines an "identifier" attribute.')
OrderSyncQueue.objects.create(
order=order,
event=order.event,
sync_provider=cls.identifier,
triggered_by=triggered_by,
not_before=not_before,
not_before=not_before or now(),
)
@classmethod
@@ -235,6 +236,11 @@ class OutboundSyncProvider:
f"Could not sync order {sq.order.code} to {type(self).__name__} (unhandled exception)"
)
sentry_sdk.capture_exception(e)
sq.order.log_action("pretix.event.order.data_sync.failed.internal", {
"provider": self.identifier,
"error": [],
"full_message": str(e),
})
sq.delete()
else:
sq.order.log_action("pretix.event.order.data_sync.success", {

View File

@@ -1,4 +1,4 @@
# Generated by Django 4.2.16 on 2025-04-01 14:52
# Generated by Django 4.2.16 on 2025-05-07 13:01
import django.db.models.deletion
from django.db import migrations, models
@@ -11,33 +11,6 @@ class Migration(migrations.Migration):
]
operations = [
migrations.CreateModel(
name="OrderSyncQueue",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False
),
),
("sync_provider", models.CharField(max_length=128)),
("triggered_by", models.CharField(max_length=128)),
("triggered", models.DateTimeField(auto_now_add=True)),
("failed_attempts", models.PositiveIntegerField(default=0)),
("not_before", models.DateTimeField(blank=True, null=True)),
(
"order",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="queued_sync_jobs",
to="pretixbase.order",
),
),
],
options={
"unique_together": {("order", "sync_provider")},
},
),
migrations.CreateModel(
name="OrderSyncResult",
fields=[
@@ -79,9 +52,45 @@ class Migration(migrations.Migration):
"indexes": [
models.Index(
fields=["order", "sync_provider"],
name="pretixbase__order_i_23d278_idx",
name="pretixbase__order_i_3e3c84_idx",
)
],
},
),
migrations.CreateModel(
name="OrderSyncQueue",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False
),
),
("sync_provider", models.CharField(max_length=128)),
("triggered_by", models.CharField(max_length=128)),
("triggered", models.DateTimeField(auto_now_add=True)),
("failed_attempts", models.PositiveIntegerField(default=0)),
("not_before", models.DateTimeField(db_index=True)),
(
"event",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="queued_sync_jobs",
to="pretixbase.event",
),
),
(
"order",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="queued_sync_jobs",
to="pretixbase.order",
),
),
],
options={
"ordering": ("triggered",),
"unique_together": {("order", "sync_provider")},
},
),
]

View File

@@ -25,7 +25,7 @@ from functools import cached_property
from django.db import models
from pretix.base.models import Order, OrderPosition
from pretix.base.models import Event, Order, OrderPosition
logger = logging.getLogger(__name__)
@@ -40,11 +40,14 @@ class OrderSyncQueue(models.Model):
order = models.ForeignKey(
Order, on_delete=models.CASCADE, related_name="queued_sync_jobs"
)
event = models.ForeignKey(
Event, on_delete=models.CASCADE, related_name="queued_sync_jobs"
)
sync_provider = models.CharField(blank=False, null=False, max_length=128)
triggered_by = models.CharField(blank=False, null=False, max_length=128)
triggered = models.DateTimeField(blank=False, null=False, auto_now_add=True)
failed_attempts = models.PositiveIntegerField(default=0)
not_before = models.DateTimeField(blank=True, null=True)
not_before = models.DateTimeField(blank=False, null=False, db_index=True)
class Meta:
unique_together = (("order", "sync_provider"),)