perf(qualys/dashboard): parallelise fetch vulns par batch IPs (8 workers, ~18min -> ~3min)
This commit is contained in:
parent
ad630eba99
commit
5ec5271232
@ -959,18 +959,25 @@ def compute_vuln_dashboard(db, triggered_by="manual", run_id=None):
|
|||||||
""")).fetchall()
|
""")).fetchall()
|
||||||
asset_count = len(rows)
|
asset_count = len(rows)
|
||||||
|
|
||||||
# 5. Recuperer vulns par batch de 50 IPs (cache 10min via get_vuln_counts)
|
# 5. Recuperer vulns par batch de 50 IPs en parallele (cache 10min via get_vuln_counts)
|
||||||
|
# Une session par thread pour eviter les conflits SQLAlchemy
|
||||||
|
from app.database import SessionLocal
|
||||||
ip_to_vuln = {}
|
ip_to_vuln = {}
|
||||||
unique_ips = list({str(r.ip_address) for r in rows
|
unique_ips = list({str(r.ip_address) for r in rows
|
||||||
if r.ip_address and str(r.ip_address) != "None"})
|
if r.ip_address and str(r.ip_address) != "None"})
|
||||||
for i in range(0, len(unique_ips), 50):
|
batches = [unique_ips[i:i+50] for i in range(0, len(unique_ips), 50)]
|
||||||
batch = unique_ips[i:i+50]
|
def _fetch_vuln_batch(batch):
|
||||||
|
s = SessionLocal()
|
||||||
try:
|
try:
|
||||||
vmap = get_vuln_counts(db, ",".join(batch))
|
return get_vuln_counts(s, ",".join(batch))
|
||||||
|
except Exception:
|
||||||
|
return {}
|
||||||
|
finally:
|
||||||
|
s.close()
|
||||||
|
with ThreadPoolExecutor(max_workers=8) as ex:
|
||||||
|
for vmap in ex.map(_fetch_vuln_batch, batches):
|
||||||
if vmap:
|
if vmap:
|
||||||
ip_to_vuln.update(vmap)
|
ip_to_vuln.update(vmap)
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# 6. Classifier + agreger en utilisant les associations API
|
# 6. Classifier + agreger en utilisant les associations API
|
||||||
agg = {}
|
agg = {}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user