From c19309fec2f04aaebfa11b232c5beeed668c5b58 Mon Sep 17 00:00:00 2001 From: Admin MPCZ Date: Tue, 5 May 2026 15:50:13 +0200 Subject: [PATCH] fix(servers/edit): retire le push iTop sur changement application (etait bloquant 10s+ si iTop injoignable) - update local seulement, push iTop dedie via endpoint async a faire si besoin --- app/routers/servers.py | 27 ++++--------------------- app/templates/partials/server_edit.html | 4 ++-- 2 files changed, 6 insertions(+), 25 deletions(-) diff --git a/app/routers/servers.py b/app/routers/servers.py index dfc70d6..d89bb27 100644 --- a/app/routers/servers.py +++ b/app/routers/servers.py @@ -176,39 +176,20 @@ async def server_update(request: Request, server_id: int, db=Depends(get_db), } update_server(db, server_id, data, user.get("sub")) - # Application (changement manuel SecOps) — update + push iTop + # Application (changement manuel SecOps) — update local seulement. + # Le push iTop est désactivé ici (peut bloquer 10s si iTop injoignable). + # Si besoin de pousser vers iTop, utiliser un endpoint dédié async. if application_id is not None: app_id_val = int(application_id) if application_id and application_id.strip().isdigit() else None - app_itop_id = None app_name = None if app_id_val: - row = db.execute(text("SELECT itop_id, nom_court FROM applications WHERE id=:id"), + row = db.execute(text("SELECT nom_court FROM applications WHERE id=:id"), {"id": app_id_val}).fetchone() if row: - app_itop_id = row.itop_id app_name = row.nom_court db.execute(text("""UPDATE servers SET application_id=:aid, application_name=:an, updated_at=NOW() WHERE id=:sid"""), {"aid": app_id_val, "an": app_name, "sid": server_id}) db.commit() - # Push iTop (best effort) - try: - from ..services.itop_service import ITopClient - from ..services.secrets_service import get_secret - srv_row = db.execute(text("SELECT hostname FROM servers WHERE id=:id"), {"id": server_id}).fetchone() - if srv_row: - url = get_secret(db, "itop_url") - u = get_secret(db, "itop_user") - p = get_secret(db, "itop_pass") - if url and u and p: - client = ITopClient(url, u, p) - r = client._call("core/get", **{"class": "VirtualMachine", - "key": f'SELECT VirtualMachine WHERE name = "{srv_row.hostname}"', "output_fields": "name"}) - if r.get("objects"): - vm_id = list(r["objects"].values())[0]["key"] - new_list = [{"applicationsolution_id": int(app_itop_id)}] if app_itop_id else [] - client.update("VirtualMachine", vm_id, {"applicationsolution_list": new_list}) - except Exception as e: - logger.warning(f"Erreur non bloquante: {e}") s = get_server_full(db, server_id) tags = get_server_tags(db, s.qid) diff --git a/app/templates/partials/server_edit.html b/app/templates/partials/server_edit.html index c03b65f..89170dc 100644 --- a/app/templates/partials/server_edit.html +++ b/app/templates/partials/server_edit.html @@ -71,7 +71,7 @@
- +