feat: update finance exchange and source refresh jobs
All checks were successful
CI/CD Pipeline / Quality Gate (push) Successful in 31s
CI/CD Pipeline / Build and Push Images (push) Successful in 34s
CI/CD Pipeline / Internal Notify (push) Successful in 0s
CI/CD Pipeline / Deploy Dev via Compose (push) Successful in 33s

This commit is contained in:
2026-08-09 12:23:36 +02:00
parent 4da56f3823
commit a198f7e960
19 changed files with 266 additions and 52 deletions

View File

@@ -169,12 +169,16 @@ class BackgroundJob(TimestampMixin, models.Model):
self.status = JobStatus.SUCCESS
self.progress = 100
self.result = result
self.error = ""
self.traceback = ""
self.completed_at = timezone.now()
self.save(
update_fields=[
"status",
"progress",
"result",
"error",
"traceback",
"completed_at",
"updated_at",
]

View File

@@ -752,21 +752,21 @@ class BackgroundJobService(BaseReadOnlyService):
cls,
*,
max_age_minutes: int,
pending_max_age_minutes: int = 24 * 60,
task_names: set[str] | None = None,
meta_sources: set[str] | None = None,
) -> int:
"""Mark old active jobs as failed after worker restarts or hard kills."""
from apps.core.models import JobStatus
cutoff = timezone.now() - timedelta(minutes=max_age_minutes)
queryset = (
cls.get_queryset()
.filter(
status__in=[JobStatus.PENDING, JobStatus.STARTED, JobStatus.RETRY],
)
.filter(
Q(started_at__isnull=False, started_at__lt=cutoff)
| Q(started_at__isnull=True, created_at__lt=cutoff)
now = timezone.now()
cutoff = now - timedelta(minutes=max_age_minutes)
pending_cutoff = now - timedelta(minutes=pending_max_age_minutes)
queryset = cls.get_queryset().filter(
Q(status=JobStatus.PENDING, created_at__lt=pending_cutoff)
| Q(
status__in=[JobStatus.STARTED, JobStatus.RETRY],
updated_at__lt=cutoff,
)
)
if task_names: