Sync iTop: responsables domaine par fréquence + emails
- domain_environments.responsable_nom/email = responsable_domaine iTop le plus fréquent par couple domaine×env - servers.responsable_nom/email = responsable_serveur iTop (par VM) - servers.referent_nom/email = responsable_domaine iTop (par VM) - Mapping Excel: Resp Domaine DTS → domain_environments.responsable, Valideur RA = par serveur
This commit is contained in:
parent
73cec814b6
commit
3707308063
@ -3,6 +3,7 @@ import logging
|
||||
import requests
|
||||
import json
|
||||
from datetime import datetime
|
||||
from collections import defaultdict
|
||||
from sqlalchemy import text
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@ -183,7 +184,12 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
|
||||
fullname = f"{p.get('first_name','')} {p.get('name','')}".strip()
|
||||
person_email[fullname.lower()] = p.get("email", "")
|
||||
|
||||
# ─── 7. VirtualMachines ───
|
||||
# ─── 7. Pre-collect responsables per domaine×env (most frequent wins) ───
|
||||
# Will be populated during VM processing, then used to update domain_environments
|
||||
de_responsables = defaultdict(lambda: {"resp_dom": defaultdict(int), "resp_dom_email": {},
|
||||
"referent": defaultdict(int), "referent_email": {}})
|
||||
|
||||
# ─── 8. VirtualMachines ───
|
||||
vms = client.get_all("VirtualMachine",
|
||||
"name,description,status,managementip,osfamily_id_friendlyname,"
|
||||
"osversion_id_friendlyname,organization_name,cpu,ram,"
|
||||
@ -214,12 +220,8 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
|
||||
de_id = row.id
|
||||
else:
|
||||
try:
|
||||
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.execute(text("INSERT INTO domain_environments (domain_id, environment_id) VALUES (:d, :e)"),
|
||||
{"d": did, "e": eid})
|
||||
db.commit()
|
||||
row = db.execute(text("SELECT id FROM domain_environments WHERE domain_id=:d AND environment_id=:e"),
|
||||
{"d": did, "e": eid}).fetchone()
|
||||
@ -227,6 +229,13 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
|
||||
except Exception:
|
||||
db.rollback()
|
||||
|
||||
# Collect responsables for this domain×env
|
||||
if de_id:
|
||||
resp_dom = v.get("responsable_domaine_name", "")
|
||||
if resp_dom:
|
||||
de_responsables[de_id]["resp_dom"][resp_dom] += 1
|
||||
de_responsables[de_id]["resp_dom_email"][resp_dom] = person_email.get(resp_dom.lower(), "")
|
||||
|
||||
zone_id = zone_map.get(v.get("zone_name", "").lower())
|
||||
tier_raw = v.get("tier_name", "")
|
||||
tier = tier_raw.lower().replace(" ", "") if tier_raw else "a_definir"
|
||||
@ -295,7 +304,19 @@ def sync_from_itop(db, itop_url, itop_user, itop_pass):
|
||||
db.rollback()
|
||||
stats["errors"].append(f"VM {hostname}: {str(e)[:80]}")
|
||||
|
||||
# ─── 8. Physical Servers ───
|
||||
# ─── 8b. Update domain_environments with most frequent responsables ───
|
||||
for de_id, resps in de_responsables.items():
|
||||
updates = {}
|
||||
if resps["resp_dom"]:
|
||||
top_resp = max(resps["resp_dom"], key=resps["resp_dom"].get)
|
||||
updates["responsable_nom"] = top_resp
|
||||
updates["responsable_email"] = resps["resp_dom_email"].get(top_resp, "")
|
||||
db.execute(text("""UPDATE domain_environments SET
|
||||
responsable_nom=:responsable_nom, responsable_email=:responsable_email
|
||||
WHERE id=:id"""),
|
||||
{"id": de_id, **updates}) if updates else None
|
||||
|
||||
# ─── 9. Physical Servers ───
|
||||
phys = client.get_all("Server",
|
||||
"name,description,status,managementip,osfamily_id_friendlyname,"
|
||||
"osversion_id_friendlyname,contacts_list,location_name")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user