Skip to content

Commit f29ef16

Browse files
committed
Add severities in the prefetch and optimize the prefetching process for compute_and_store_package_risk_score
Signed-off-by: ziad hany <[email protected]>
1 parent 893183f commit f29ef16

File tree

2 files changed

+14
-17
lines changed

2 files changed

+14
-17
lines changed

vulnerabilities/pipelines/compute_package_risk.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#
99

1010
from aboutcode.pipeline import LoopProgress
11+
from django.db.models import Prefetch
1112

1213
from vulnerabilities.models import Package
1314
from vulnerabilities.models import Vulnerability
@@ -38,6 +39,7 @@ def compute_and_store_vulnerability_risk_score(self):
3839
affectedbypackagerelatedvulnerability__isnull=False
3940
).prefetch_related(
4041
"references",
42+
"severities",
4143
"exploits",
4244
)
4345

@@ -77,8 +79,15 @@ def compute_and_store_vulnerability_risk_score(self):
7779

7880
def compute_and_store_package_risk_score(self):
7981
affected_packages = (
80-
Package.objects.filter(affected_by_vulnerabilities__isnull=False).only("id").distinct()
81-
)
82+
Package.objects.filter(affected_by_vulnerabilities__isnull=False)
83+
.only("id")
84+
.prefetch_related(
85+
Prefetch(
86+
"affectedbypackagerelatedvulnerability_set__vulnerability",
87+
queryset=Vulnerability.objects.only("weighted_severity", "exploitability"),
88+
),
89+
)
90+
).distinct()
8291

8392
self.log(f"Calculating risk for {affected_packages.count():,d} affected package records")
8493

vulnerabilities/risk.py

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@
88
#
99
from urllib.parse import urlparse
1010

11-
from django.db.models import Prefetch
12-
13-
from vulnerabilities.models import AffectedByPackageRelatedVulnerability
14-
from vulnerabilities.models import Vulnerability
1511
from vulnerabilities.models import VulnerabilityReference
1612
from vulnerabilities.severity_systems import EPSS
1713
from vulnerabilities.weight_config import WEIGHT_CONFIG
@@ -107,18 +103,10 @@ def compute_package_risk(package):
107103
Calculate the risk for a package by iterating over all vulnerabilities that affects this package
108104
and determining the associated risk.
109105
"""
110-
111106
result = []
112-
affected_pkg_related_vul = AffectedByPackageRelatedVulnerability.objects.filter(
113-
package=package
114-
).prefetch_related(
115-
Prefetch(
116-
"vulnerability",
117-
queryset=Vulnerability.objects.only("weighted_severity", "exploitability"),
118-
)
119-
)
120-
for pkg_related_vul in affected_pkg_related_vul:
121-
if risk := pkg_related_vul.vulnerability.risk_score:
107+
vulnerabilities = package.vulnerabilities.all()
108+
for vulnerability in vulnerabilities:
109+
if risk := vulnerability.risk_score:
122110
result.append(float(risk))
123111

124112
if not result:

0 commit comments

Comments
 (0)