diff --git a/app/services/itop_service.py b/app/services/itop_service.py index 5c1e7d7..d4ac270 100644 --- a/app/services/itop_service.py +++ b/app/services/itop_service.py @@ -177,6 +177,12 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass): env_map = {r.name.lower(): r.id for r in db.execute(text("SELECT id, name FROM environments")).fetchall()} zone_map = {r.name.lower(): r.id for r in db.execute(text("SELECT id, name FROM zones")).fetchall()} + # Person name → email lookup + person_email = {} + for p in persons: + fullname = f"{p.get('first_name','')} {p.get('name','')}".strip() + person_email[fullname.lower()] = p.get("email", "") + # ─── 7. VirtualMachines ─── vms = client.get_all("VirtualMachine", "name,description,status,managementip,osfamily_id_friendlyname," @@ -208,8 +214,12 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass): de_id = row.id else: try: - db.execute(text("INSERT INTO domain_environments (domain_id, environment_id, responsable_nom) VALUES (:d, :e, :r)"), - {"d": did, "e": eid, "r": v.get("responsable_domaine_name", "")}) + resp_dom_name = v.get("responsable_domaine_name", "") + resp_dom_email = person_email.get(resp_dom_name.lower(), "") + db.execute(text("INSERT INTO domain_environments (domain_id, environment_id, responsable_nom, responsable_email, referent_nom, referent_email) VALUES (:d, :e, :rn, :re, :fn, :fe)"), + {"d": did, "e": eid, "rn": resp_dom_name, "re": resp_dom_email, + "fn": v.get("responsable_serveur_name", ""), + "fe": person_email.get(v.get("responsable_serveur_name", "").lower(), "")}) db.commit() row = db.execute(text("SELECT id FROM domain_environments WHERE domain_id=:d AND environment_id=:e"), {"d": did, "e": eid}).fetchone() @@ -225,6 +235,9 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass): pref_jour = (v.get("pref_patch_jour_name", "") or "").lower() or "indifferent" pref_heure = v.get("patch_window", "") or "indifferent" + resp_srv_name = v.get("responsable_serveur_name", "") + resp_dom_name = v.get("responsable_domaine_name", "") + vals = { "hostname": hostname, "fqdn": v.get("name", hostname), "os_family": "linux" if "linux" in v.get("osfamily_id_friendlyname", "").lower() else "windows", @@ -232,8 +245,10 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass): "machine_type": "vm", "etat": itop_status.get(v.get("status", ""), "en_production"), "de_id": de_id, "zone_id": zone_id, - "resp_srv": v.get("responsable_serveur_name", ""), - "resp_dom": v.get("responsable_domaine_name", ""), + "resp_srv": resp_srv_name, + "resp_srv_email": person_email.get(resp_srv_name.lower(), ""), + "resp_dom": resp_dom_name, + "resp_dom_email": person_email.get(resp_dom_name.lower(), ""), "desc": v.get("description", ""), "ip": v.get("managementip", ""), "tier": tier, "ssh_method": ssh_method, @@ -247,7 +262,8 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass): if existing: db.execute(text("""UPDATE servers SET fqdn=:fqdn, os_family=:os_family, os_version=:os_version, etat=:etat, domain_env_id=:de_id, zone_id=:zone_id, - responsable_nom=:resp_srv, referent_nom=:resp_dom, commentaire=:desc, + responsable_nom=:resp_srv, responsable_email=:resp_srv_email, + referent_nom=:resp_dom, referent_email=:resp_dom_email, commentaire=:desc, tier=:tier, ssh_method=:ssh_method, ssh_user=:ssh_user, patch_frequency=:patch_freq, patch_excludes=:patch_excludes, domain_ltd=:domain_ltd, pref_patch_jour=:pref_jour, pref_patch_heure=:pref_heure, @@ -259,11 +275,13 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass): else: try: db.execute(text("""INSERT INTO servers (hostname, fqdn, os_family, os_version, machine_type, - etat, domain_env_id, zone_id, responsable_nom, referent_nom, commentaire, + etat, domain_env_id, zone_id, responsable_nom, responsable_email, + referent_nom, referent_email, commentaire, ssh_port, ssh_user, ssh_method, tier, patch_frequency, patch_excludes, domain_ltd, pref_patch_jour, pref_patch_heure) VALUES (:hostname, :fqdn, :os_family, :os_version, :machine_type, - :etat, :de_id, :zone_id, :resp_srv, :resp_dom, :desc, + :etat, :de_id, :zone_id, :resp_srv, :resp_srv_email, + :resp_dom, :resp_dom_email, :desc, 22, :ssh_user, :ssh_method, :tier, :patch_freq, :patch_excludes, :domain_ltd, :pref_jour, :pref_heure)"""), vals) db.flush()