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()
|
||||
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 = {}
|
||||
unique_ips = list({str(r.ip_address) for r in rows
|
||||
if r.ip_address and str(r.ip_address) != "None"})
|
||||
for i in range(0, len(unique_ips), 50):
|
||||
batch = unique_ips[i:i+50]
|
||||
batches = [unique_ips[i:i+50] for i in range(0, len(unique_ips), 50)]
|
||||
def _fetch_vuln_batch(batch):
|
||||
s = SessionLocal()
|
||||
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:
|
||||
ip_to_vuln.update(vmap)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# 6. Classifier + agreger en utilisant les associations API
|
||||
agg = {}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user