File tree Expand file tree Collapse file tree 2 files changed +14
-17
lines changed Expand file tree Collapse file tree 2 files changed +14
-17
lines changed Original file line number Diff line number Diff line change 88#
99
1010from aboutcode .pipeline import LoopProgress
11+ from django .db .models import Prefetch
1112
1213from vulnerabilities .models import Package
1314from 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
Original file line number Diff line number Diff line change 88#
99from 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
1511from vulnerabilities .models import VulnerabilityReference
1612from vulnerabilities .severity_systems import EPSS
1713from 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 :
You can’t perform that action at this time.
0 commit comments