Skip to content
Snippets Groups Projects
Commit 0e70853c authored by Guilhem Saurel's avatar Guilhem Saurel
Browse files

machines: find issues with users DB

parent c9bb6649
No related branches found
No related tags found
No related merge requests found
......@@ -8,6 +8,7 @@ import pandas as pd
from ldap3 import Connection
from tabulate import tabulate
CONN = Connection("ldap.laas.fr", auto_bind=True)
ATTRIBUTES = [
"cn",
"laas-date-install",
......@@ -57,8 +58,7 @@ def machines_ldap(utilisateur="", responsable="", room="", **kwargs):
if room:
filters["roomNumber"] = room
conn = Connection("ldap.laas.fr", auto_bind=True)
conn.search(
CONN.search(
"ou=machines,dc=laas,dc=fr",
f"(&{filter(**filters)})",
attributes=ATTRIBUTES,
......@@ -68,12 +68,26 @@ def machines_ldap(utilisateur="", responsable="", room="", **kwargs):
str(entry.cn): {
short(k): parse(k, v) for k, v in entry.entry_attributes_as_dict.items()
}
for entry in conn.entries
for entry in CONN.entries
}
def display(data, sort_by="datePeremption"):
"""Pandas & Tabulate magic to display data."""
def users_ldap():
"""Get a dict of Gepettists with their room and st"""
CONN.search(
"ou=users,dc=laas,dc=fr", "(o=gepetto)", attributes=["uid", "st", "roomNumber"]
)
return {
str(entry.uid): {
short(k): parse(k, v) for k, v in entry.entry_attributes_as_dict.items()
}
for entry in CONN.entries
}
def machines_display(data, sort_by="datePeremption"):
"""Pandas & Tabulate magic to display machines data."""
df = pd.DataFrame(data).T.sort_values(by=sort_by)
print(tabulate(df.drop("cn", axis=1), headers="keys"))
......@@ -100,5 +114,21 @@ def get_parser() -> ArgumentParser:
if __name__ == "__main__":
args = get_parser().parse_args()
data = machines_ldap(**vars(args))
display(data, args.sort_by)
machines_data = machines_ldap(**vars(args))
machines_display(machines_data, args.sort_by)
print()
users_data = users_ldap()
for k, v in machines_data.items():
if not v["utilisateur"] or v["utilisateur"] not in users_data:
print(f"{k}: wrong user {v['utilisateur']}")
continue
user = users_data[v["utilisateur"]]
if user["st"] in ["JAMAIS", "NON-PERTINENT"]:
continue
d, m, y = (int(i) for i in user["st"].split("/"))
st = date(y, m, d)
if v["datePeremption"] > st:
print(
f"{k}: wrong peremption for {user['uid']}: "
f"{v['datePeremption']:%d/%m/%Y} > {st:%d/%m/%Y}"
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment