Skip to content

Commit ae1a260

Browse files
committed
Use uuid to track pipeline job id
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent 354c605 commit ae1a260

File tree

3 files changed

+30
-14
lines changed

3 files changed

+30
-14
lines changed

vulnerabilities/migrations/0092_pipelineschedule_pipelinerun.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
# Generated by Django 4.2.20 on 2025-05-01 12:53
1+
# Generated by Django 4.2.20 on 2025-05-12 17:04
22

33
import django.core.validators
44
from django.db import migrations, models
55
import django.db.models.deletion
6+
import uuid
67

78

89
class Migration(migrations.Migration):
@@ -74,12 +75,15 @@ class Migration(migrations.Migration):
7475
name="PipelineRun",
7576
fields=[
7677
(
77-
"id",
78-
models.AutoField(
79-
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
78+
"run_id",
79+
models.UUIDField(
80+
default=uuid.uuid4,
81+
editable=False,
82+
primary_key=True,
83+
serialize=False,
84+
unique=True,
8085
),
8186
),
82-
("run_id", models.CharField(blank=True, editable=False, null=True)),
8387
("run_start_date", models.DateTimeField(blank=True, editable=False, null=True)),
8488
("run_end_date", models.DateTimeField(blank=True, editable=False, null=True)),
8589
("run_exitcode", models.IntegerField(blank=True, editable=False, null=True)),

vulnerabilities/models.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import csv
1111
import datetime
1212
import logging
13+
import uuid
1314
import xml.etree.ElementTree as ET
1415
from contextlib import suppress
1516
from functools import cached_property
@@ -1828,11 +1829,14 @@ class PipelineRun(models.Model):
18281829
related_name="pipelineruns",
18291830
on_delete=models.CASCADE,
18301831
)
1831-
run_id = models.CharField(
1832-
blank=True,
1833-
null=True,
1832+
1833+
run_id = models.UUIDField(
1834+
primary_key=True,
1835+
default=uuid.uuid4,
18341836
editable=False,
1837+
unique=True,
18351838
)
1839+
18361840
run_start_date = models.DateTimeField(
18371841
blank=True,
18381842
null=True,
@@ -1880,6 +1884,7 @@ class Status(models.TextChoices):
18801884
SUCCESS = "success"
18811885
FAILURE = "failure"
18821886
STOPPED = "stopped"
1887+
QUEUED = "queued"
18831888
STALE = "stale"
18841889

18851890
@property
@@ -1902,6 +1907,9 @@ def status(self):
19021907
elif self.run_start_date:
19031908
return status.RUNNING
19041909

1910+
elif self.created_date:
1911+
return status.QUEUED
1912+
19051913
return status.UNKNOWN
19061914

19071915
@property
@@ -1982,8 +1990,10 @@ def set_run_stopped(self):
19821990
self.set_run_ended(exitcode=99)
19831991

19841992
def stop_run(self):
1985-
self.append_to_log("Stop run requested")
1993+
if self.run_succeeded:
1994+
return
19861995

1996+
self.append_to_log("Stop run requested")
19871997
if not VULNERABLECODE_ASYNC:
19881998
self.set_run_stopped()
19891999
return
@@ -2084,7 +2094,9 @@ def __str__(self):
20842094
return f"{self.pipeline_id}"
20852095

20862096
def save(self, *args, **kwargs):
2087-
if self.pk and (existing := PipelineSchedule.objects.get(pk=self.pk)):
2097+
if not self.pk:
2098+
self.schedule_work_id = self.create_new_job(execute_now=True)
2099+
elif self.pk and (existing := PipelineSchedule.objects.get(pk=self.pk)):
20882100
if existing.is_active != self.is_active or existing.run_interval != self.run_interval:
20892101
self.schedule_work_id = self.create_new_job()
20902102
self.full_clean()
@@ -2116,7 +2128,7 @@ def earliest_run(self):
21162128

21172129
@property
21182130
def latest_run_date(self):
2119-
return self.latest_run.created_date if self.latest_run else None
2131+
return self.latest_run.run_start_date if self.latest_run else None
21202132

21212133
@property
21222134
def next_run_date(self):
@@ -2139,7 +2151,7 @@ def status(self):
21392151
if self.latest_run:
21402152
return self.latest_run.status
21412153

2142-
def create_new_job(self):
2154+
def create_new_job(self, execute_now=False):
21432155
"""
21442156
Create a new scheduled job. If a previous scheduled job
21452157
exists remove the existing job from the scheduler.
@@ -2151,4 +2163,4 @@ def create_new_job(self):
21512163
if self.schedule_work_id:
21522164
schedules.clear_job(self.schedule_work_id)
21532165

2154-
return schedules.schedule_execution(self) if self.is_active else None
2166+
return schedules.schedule_execution(self, execute_now) if self.is_active else None

vulnerablecode/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def __init__(self, *args, **kwargs):
7777
name="runs-list",
7878
),
7979
path(
80-
"pipelines/<str:pipeline_id>/run/<str:run_id>/",
80+
"pipelines/<str:pipeline_id>/run/<uuid:run_id>/",
8181
PipelineRunDetailView.as_view(),
8282
name="run-details",
8383
),

0 commit comments

Comments
 (0)