Skip to content

Commit c01759d

Browse files
authored
Merge pull request #2344 from aboutcode-org/pipeline-frequency-config
Increase frequency and priority for critical pipelines
2 parents a66b8a1 + d978b00 commit c01759d

21 files changed

Lines changed: 146 additions & 51 deletions

vulnerabilities/api_v2.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,7 +788,7 @@ def get_latest_run(self, schedule):
788788

789789
def to_representation(self, schedule):
790790
representation = super().to_representation(schedule)
791-
representation["run_interval"] = f"{schedule.run_interval}hr"
791+
representation["run_interval"] = f"{schedule.run_interval}min"
792792
representation["execution_timeout"] = f"{schedule.execution_timeout}hr"
793793
return representation
794794

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Generated by Django 5.2.11 on 2026-06-16 12:29
2+
3+
import django.core.validators
4+
from django.db import migrations
5+
from django.db import models
6+
from django.db.models import F
7+
8+
9+
class Migration(migrations.Migration):
10+
11+
dependencies = [
12+
("vulnerabilities", "0136_advisorysetmember_unique_advisory_per_set"),
13+
]
14+
15+
def convert_hours_to_minutes(apps, schema_editor):
16+
PipelineSchedule = apps.get_model("vulnerabilities", "PipelineSchedule")
17+
PipelineSchedule.objects.update(run_interval=F("run_interval") * 60)
18+
19+
def revert_convert_hours_to_minutes(apps, schema_editor):
20+
PipelineSchedule = apps.get_model("vulnerabilities", "PipelineSchedule")
21+
for schedule in PipelineSchedule.objects.all():
22+
schedule.run_interval = min(8760, max(1, schedule.run_interval // 60))
23+
schedule.save(update_fields=["run_interval"])
24+
25+
operations = [
26+
migrations.AlterField(
27+
model_name="pipelineschedule",
28+
name="run_interval",
29+
field=models.PositiveSmallIntegerField(
30+
default=1440,
31+
help_text="Number of minutes to wait between run of this pipeline.",
32+
validators=[
33+
django.core.validators.MinValueValidator(
34+
5, message="Interval must be at least 5 minutes."
35+
),
36+
django.core.validators.MaxValueValidator(
37+
43200, message="Interval must be at most 43200 minutes (i.e 30 days)."
38+
),
39+
],
40+
),
41+
),
42+
migrations.RunPython(
43+
convert_hours_to_minutes,
44+
revert_convert_hours_to_minutes,
45+
),
46+
]

vulnerabilities/models.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2302,13 +2302,15 @@ class ExecutionPriority(models.IntegerChoices):
23022302
),
23032303
)
23042304

2305-
run_interval = models.PositiveSmallIntegerField(
2305+
run_interval = models.IntegerField(
23062306
validators=[
2307-
MinValueValidator(1, message="Interval must be at least 1 hour."),
2308-
MaxValueValidator(8760, message="Interval must be at most 8760 hours."),
2307+
MinValueValidator(5, message="Interval must be at least 5 minutes."),
2308+
MaxValueValidator(
2309+
43200, message="Interval must be at most 43200 minutes (i.e 30 days)."
2310+
),
23092311
],
2310-
default=24,
2311-
help_text=("Number of hours to wait between run of this pipeline."),
2312+
default=1440,
2313+
help_text=("Number of minutes to wait between run of this pipeline."),
23122314
)
23132315

23142316
run_priority = models.IntegerField(

vulnerabilities/pipelines/__init__.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ class VulnerableCodePipeline(PipelineDefinition, BasePipelineRun):
145145
# When set to true pipeline is run only once.
146146
# To rerun onetime pipeline reset is_active field to True via migration.
147147
run_once = False
148-
# Interval between runs in hour.
149-
run_interval = 24
148+
# Interval between runs in minutes.
149+
run_interval = 1440
150150
run_priority = PipelineSchedule.ExecutionPriority.DEFAULT
151151

152152
def on_failure(self):
@@ -180,8 +180,8 @@ class VulnerableCodeBaseImporterPipeline(VulnerableCodePipeline):
180180
# When set to true pipeline is run only once.
181181
# To rerun onetime pipeline reset is_active field to True via migration.
182182
run_once = False
183-
# Interval between runs in hour.
184-
run_interval = 24
183+
# Interval between runs in minutes.
184+
run_interval = 1440
185185
run_priority = PipelineSchedule.ExecutionPriority.DEFAULT
186186

187187
@classmethod
@@ -290,8 +290,8 @@ class VulnerableCodeBaseImporterPipelineV2(VulnerableCodePipeline):
290290
# When set to true pipeline is run only once.
291291
# To rerun onetime pipeline reset is_active field to True via migration.
292292
run_once = False
293-
# Interval between runs in hour.
294-
run_interval = 24
293+
# Interval between runs in minutes.
294+
run_interval = 1440
295295
run_priority = PipelineSchedule.ExecutionPriority.DEFAULT
296296

297297
@classmethod

vulnerabilities/pipelines/v2_improvers/collect_ssvc_trees.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from vulnerabilities.models import SSVC
1717
from vulnerabilities.models import AdvisorySeverity
1818
from vulnerabilities.models import AdvisoryV2
19+
from vulnerabilities.models import PipelineSchedule
1920
from vulnerabilities.pipelines import VulnerableCodePipeline
2021
from vulnerabilities.severity_systems import SCORING_SYSTEMS
2122

@@ -31,6 +32,10 @@ class CollectSSVCPipeline(VulnerableCodePipeline):
3132

3233
pipeline_id = "collect_ssvc_trees"
3334

35+
# Run pipeline every 30 minutes.
36+
run_interval = 30
37+
run_priority = PipelineSchedule.ExecutionPriority.HIGH
38+
3439
@classmethod
3540
def steps(cls):
3641
return (cls.collect_ssvc_data,)

vulnerabilities/pipelines/v2_improvers/compute_package_risk.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from vulnerabilities.models import AdvisorySeverity
1616
from vulnerabilities.models import AdvisoryV2
1717
from vulnerabilities.models import PackageV2
18+
from vulnerabilities.models import PipelineSchedule
1819
from vulnerabilities.pipelines import VulnerableCodePipeline
1920
from vulnerabilities.pipes.risk_score import bulk_update
2021
from vulnerabilities.risk import compute_vulnerability_risk_factors
@@ -30,6 +31,10 @@ class ComputePackageRiskPipeline(VulnerableCodePipeline):
3031
pipeline_id = "compute_package_risk_v2"
3132
license_expression = None
3233

34+
# Run pipeline every 30 minutes.
35+
run_interval = 30
36+
run_priority = PipelineSchedule.ExecutionPriority.HIGH
37+
3338
@classmethod
3439
def steps(cls):
3540
return (

vulnerabilities/pipelines/v2_improvers/enhance_with_exploitdb.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from dateutil import parser as dateparser
1818

1919
from vulnerabilities.models import AdvisoryExploit
20+
from vulnerabilities.models import PipelineSchedule
2021
from vulnerabilities.pipelines import VulnerableCodePipeline
2122
from vulnerabilities.utils import build_alias_to_advisory_map
2223

@@ -30,6 +31,10 @@ class ExploitDBImproverPipeline(VulnerableCodePipeline):
3031
pipeline_id = "enhance_with_exploitdb_v2"
3132
spdx_license_expression = "GPL-2.0"
3233

34+
# Run pipeline every 30 minutes.
35+
run_interval = 30
36+
run_priority = PipelineSchedule.ExecutionPriority.HIGH
37+
3338
@classmethod
3439
def steps(cls):
3540
return (

vulnerabilities/pipelines/v2_improvers/enhance_with_github_poc.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@
1313
from aboutcode.pipeline import LoopProgress
1414
from fetchcode.vcs import fetch_via_vcs
1515

16-
from vulnerabilities.models import AdvisoryAlias
1716
from vulnerabilities.models import AdvisoryPOC
18-
from vulnerabilities.models import AdvisoryV2
1917
from vulnerabilities.pipelines import VulnerableCodePipeline
2018
from vulnerabilities.utils import relate_aliases_with_advisories
2119

vulnerabilities/pipelines/v2_improvers/enhance_with_kev.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from aboutcode.pipeline import LoopProgress
1515

1616
from vulnerabilities.models import AdvisoryExploit
17+
from vulnerabilities.models import PipelineSchedule
1718
from vulnerabilities.pipelines import VulnerableCodePipeline
1819
from vulnerabilities.utils import build_alias_to_advisory_map
1920

@@ -27,6 +28,10 @@ class VulnerabilityKevPipeline(VulnerableCodePipeline):
2728
pipeline_id = "enhance_with_kev_v2"
2829
license_expression = None
2930

31+
# Run pipeline every 30 minutes.
32+
run_interval = 30
33+
run_priority = PipelineSchedule.ExecutionPriority.HIGH
34+
3035
@classmethod
3136
def steps(cls):
3237
return (

vulnerabilities/pipelines/v2_improvers/enhance_with_metasploit.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from dateutil import parser as dateparser
1717

1818
from vulnerabilities.models import AdvisoryExploit
19+
from vulnerabilities.models import PipelineSchedule
1920
from vulnerabilities.pipelines import VulnerableCodePipeline
2021
from vulnerabilities.utils import build_alias_to_advisory_map
2122

@@ -29,6 +30,10 @@ class MetasploitImproverPipeline(VulnerableCodePipeline):
2930
pipeline_id = "enhance_with_metasploit_v2"
3031
spdx_license_expression = "BSD-3-clause"
3132

33+
# Run pipeline every 30 minutes.
34+
run_interval = 30
35+
run_priority = PipelineSchedule.ExecutionPriority.HIGH
36+
3237
@classmethod
3338
def steps(cls):
3439
return (

0 commit comments

Comments
 (0)