From 1a1af9e28a5901a3f6ef08147b4b940275a5ea91 Mon Sep 17 00:00:00 2001 From: Admin MPCZ Date: Wed, 15 Apr 2026 12:17:02 +0200 Subject: [PATCH] Qualys sync multi-pass: filtres SRV/server/SED/SEI/EMV pour couvrir tags heterogenes --- app/services/qualys_service.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/app/services/qualys_service.py b/app/services/qualys_service.py index 2e206ac..03eecd6 100644 --- a/app/services/qualys_service.py +++ b/app/services/qualys_service.py @@ -574,7 +574,7 @@ def _refresh_all_agents_impl(db): stats = {"created": 0, "updated": 0, "errors": 0, "pages": 0} last_id = None - max_pages = 20 # garde-fou + max_pages = 30 # garde-fou par filtre (multi-pass = max_pages * nb_filtres) # Autocommit sur la session courante try: @@ -582,15 +582,22 @@ def _refresh_all_agents_impl(db): except Exception: pass - while stats["pages"] < max_pages: + # Multi-pass : plusieurs filtres tagName CONTAINS pour couvrir la + # nomenclature heterogene (SRV, server, SED, SEI, EMV...). + # Doublons gere par ON CONFLICT/UPDATE sur qualys_asset_id. + tag_filters = ["SRV", "server", "SED", "SEI", "EMV"] + current_filter_idx = 0 + last_id = None + + while current_filter_idx < len(tag_filters): + tag_filter = tag_filters[current_filter_idx] if _refresh_cancel.is_set(): stats["ok"] = True stats["cancelled"] = True - stats["msg"] = f"Annulé après {stats['pages']} pages: {stats['created']} créés, {stats['updated']} mis à jour" + stats["msg"] = f"Annulé apres {stats['pages']} pages (filtre={tag_filter}): {stats['created']} créés, {stats['updated']} mis à jour" return stats stats["pages"] += 1 - # CONTAINS SRV matche OS-WIN-SRV DYN / OS-LIN-SRV DYN (nomenclature SANEF v3) - criteria = [{"field": "tagName", "operator": "CONTAINS", "value": "SRV"}] + criteria = [{"field": "tagName", "operator": "CONTAINS", "value": tag_filter}] if last_id: criteria.append({"field": "id", "operator": "GREATER", "value": str(last_id)}) payload = {"ServiceRequest": { @@ -710,14 +717,15 @@ def _refresh_all_agents_impl(db): db.commit() - if "true" not in r.text: - break - if new_last_id == last_id: - break - last_id = new_last_id + # Filtre actuel: page suivante OU passe au prochain filtre + if "true" not in r.text or new_last_id == last_id: + current_filter_idx += 1 + last_id = None + else: + last_id = new_last_id stats["ok"] = True - stats["msg"] = f"{stats['created']} créés, {stats['updated']} mis à jour ({stats['pages']} pages, {stats['errors']} erreurs)" + stats["msg"] = f"{stats['created']} créés, {stats['updated']} mis à jour ({stats['pages']} pages, {stats['errors']} erreurs, {len(tag_filters)} filtres)" return stats