From 53e59e73056ff73b5723e042ecf264fe8140c71a Mon Sep 17 00:00:00 2001 From: Admin MPCZ Date: Fri, 10 Apr 2026 23:23:48 +0200 Subject: [PATCH] Sync iTop: ajout responsable serveur (contacts_list) + commentaire/description --- app/services/itop_service.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/app/services/itop_service.py b/app/services/itop_service.py index acf1cf3..2285a76 100644 --- a/app/services/itop_service.py +++ b/app/services/itop_service.py @@ -33,7 +33,7 @@ class ITopClient: return {"code": -1, "message": str(e)} def get_servers(self): - """Recupere tous les serveurs iTop (Server + VirtualMachine)""" + """Recupere tous les serveurs iTop (Server + VirtualMachine) avec contacts""" servers = [] for cls in ["Server", "VirtualMachine"]: r = self._call("core/get", **{ @@ -41,11 +41,20 @@ class ITopClient: "key": f"SELECT {cls}", "output_fields": "name,description,status,managementip,osfamily_id_friendlyname," "osversion_id_friendlyname,brand_name,model_name,serialnumber," - "org_name,location_name,business_criticity,cpu,ram" + "org_name,location_name,business_criticity,cpu,ram,contacts_list" }) if r.get("code") == 0 and r.get("objects"): for key, obj in r["objects"].items(): f = obj["fields"] + # Extract contacts (responsable serveur) + contacts = f.get("contacts_list", []) + contact_names = [] + contact_emails = [] + for c in contacts: + cname = c.get("contact_id_friendlyname", "") + if cname: + contact_names.append(cname) + servers.append({ "itop_id": obj["key"], "itop_class": cls, @@ -63,6 +72,7 @@ class ITopClient: "criticity": f.get("business_criticity", ""), "cpu": f.get("cpu", ""), "ram": f.get("ram", ""), + "responsable_nom": contact_names[0] if contact_names else "", }) return servers @@ -175,6 +185,12 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass): if s["location"]: sets.append("site = :site") updates["site"] = s["location"] + if s.get("responsable_nom"): + sets.append("responsable_nom = :resp_nom") + updates["resp_nom"] = s["responsable_nom"] + if s.get("description"): + sets.append("commentaire = :comm") + updates["comm"] = s["description"] if sets: sets.append("updated_at = NOW()") db.execute(text(f"UPDATE servers SET {', '.join(sets)} WHERE id = :sid"), updates) @@ -209,7 +225,7 @@ def sync_to_itop(db, itop_url, itop_user, itop_pass): itop_servers = {s["name"].lower(): s for s in client.get_servers()} # Get patchcenter servers - rows = db.execute(text("SELECT hostname, fqdn, os_version, os_family, etat, site FROM servers")).fetchall() + rows = db.execute(text("SELECT hostname, fqdn, os_version, os_family, etat, site, responsable_nom, commentaire FROM servers")).fetchall() status_map = {"en_production": "production", "decommissionne": "obsolete", "stock": "stock", "en_cours": "implementation"} @@ -221,7 +237,9 @@ def sync_to_itop(db, itop_url, itop_user, itop_pass): if itop_srv: fields = {} - if srv.os_version: + if srv.commentaire: + fields["description"] = srv.commentaire + elif srv.os_version: fields["description"] = f"OS: {srv.os_version}" if srv.etat: fields["status"] = status_map.get(srv.etat, "production")