[chambres_vides] lc_ldapisation et gestion des erreurs lors de la suppression d'une machine

This commit is contained in:
Valentin Samir 2014-02-23 16:31:42 +01:00
parent e14bb4ac90
commit eb6116026f

View file

@ -1,4 +1,4 @@
#!/usr/bin/env python #!/bin/bash /usr/scripts/python.sh
# -*- encoding: utf-8 -*- # -*- encoding: utf-8 -*-
""" Pour détecter les gens en chambre invalide, les prévenir, et supprimer leurs machines """ Pour détecter les gens en chambre invalide, les prévenir, et supprimer leurs machines
@ -12,8 +12,8 @@
import datetime import datetime
import time import time
import re import re
import ldap_crans import lc_ldap.shortcuts
conn = ldap_crans.CransLdap() conn = lc_ldap.shortcuts.lc_ldap_admin()
import mail as mail_module import mail as mail_module
import sys import sys
@ -39,19 +39,20 @@ delai = config.demenagement_delai
# On récupère ceux qui n'ont pas payé cette année # On récupère ceux qui n'ont pas payé cette année
if config.periode_transitoire: if config.periode_transitoire:
bad_boys_e_s = conn.search('chbre=????&paiement=%d&paiement!=%d' % (year-1,year))['adherent'] bad_boys_e_s = conn.search(u'(&(aid)*)(chbre=????)(paiement=%d)(!(paiement=%d)))' % (year-1,year))
else: else:
bad_boys_e_s = conn.search('chbre=????&paiement=%d' % year)['adherent'] bad_boys_e_s = conn.search(u'(&(aid=*)(chbre=????)(paiement=%d))' % year)
now = time.time() now = time.time()
to_print = [] to_print = []
to_error = []
for clandestin in bad_boys_e_s: for clandestin in bad_boys_e_s:
# On cherche la dernière fois qu'il s'est retrouvé en chambre ???? # On cherche la dernière fois qu'il s'est retrouvé en chambre ????
for l in clandestin.historique(): for l in clandestin['historique'][::-1]:
# On récupère la date du dernier changement de chambre # On récupère la date du dernier changement de chambre
# (l'historique est enregistré par ordre chronologique) # (l'historique est enregistré par ordre chronologique)
x = re.match("(.*),.* : chbre \((.*) -> \?\?\?\?\)",l) x = re.match("(.*),.* : chbre \((.*) -> \?\?\?\?\)", str(l))
if x <> None: if x <> None:
kickout_date = x.group(1) kickout_date = x.group(1)
exchambre = x.group(2) exchambre = x.group(2)
@ -64,7 +65,7 @@ for clandestin in bad_boys_e_s:
if ttl > 0: if ttl > 0:
if (sendmails and machine_liste != [] or DEBUG) and (ttl >= (delai - 1)*86400 or 0 < ttl <= 86400): if (sendmails and machine_liste != [] or DEBUG) and (ttl >= (delai - 1)*86400 or 0 < ttl <= 86400):
# On lui envoie un mail pour le prévenir # On lui envoie un mail pour le prévenir
to = clandestin.mail() to = clandestin['mail'][0]
if not "@" in to: if not "@" in to:
to += "@crans.org" to += "@crans.org"
mail = mail_module.generate('demenagement', {"from" : "respbats@crans.org", mail = mail_module.generate('demenagement', {"from" : "respbats@crans.org",
@ -81,16 +82,19 @@ for clandestin in bad_boys_e_s:
else: else:
for m in machine_liste: for m in machine_liste:
to_print.append( (clandestin.id(), m.ip(), m.id(), m.nom()) ) try:
m2 = conn.search('mid=%s' % m.id(),mode='w')['machine'][0] m2 = conn.search(u'mid=%s' % m['mid'][0],mode='w')[0]
m2.delete('Adherent sans chambre valide depuis %d jours' % delai) m2.delete('Adherent sans chambre valide depuis %d jours' % delai)
to_print.append( (clandestin['aid'][0], m['ipHostNumber'][0], m['mid'][0], m['host'][0]) )
except Exception as e:
to_error.append((clandestin['aid'][0], m['ipHostNumber'][0], m['mid'][0], m['host'][0], e))
message = u""
if to_print != []: if to_print != []:
# Il s'est passé quelque chose, donc on envoie un mail # Il s'est passé quelque chose, donc on envoie un mail
# On regarde le plus grand hostname # On regarde le plus grand hostname
hostnamemaxsize = max([len(i[3]) for i in to_print]) hostnamemaxsize = max([len(str(i[3])) for i in to_print])
template = u"| %%4s | %%-15s | %%4s | %%-%ss |\n" % (hostnamemaxsize) template = u"| %%4s | %%-15s | %%4s | %%-%ss |\n" % (hostnamemaxsize)
message = u""
message += u"\nListe des machines supprimées pour chambre invalide depuis plus de %s jours :\n" % delai message += u"\nListe des machines supprimées pour chambre invalide depuis plus de %s jours :\n" % delai
tiret_line = u"+------+-----------------+------+-%s-+\n" % ("-" * hostnamemaxsize) tiret_line = u"+------+-----------------+------+-%s-+\n" % ("-" * hostnamemaxsize)
message += tiret_line message += tiret_line
@ -98,8 +102,24 @@ if to_print != []:
message += tiret_line message += tiret_line
for aid, ip, mid, hostname in to_print: for aid, ip, mid, hostname in to_print:
message += template % (aid, ip, mid, hostname) message += template % (aid, ip, mid, hostname)
message += tiret_line message += tiret_line
message += u"\nScore de cette nuit : %s" % (len(to_print)) message += u"\nScore de cette nuit : %s" % (len(to_print))
if to_error != []:
hostnamemaxsize = max([len(str(i[3])) for i in to_error])
errormaxsize = max([len(str(i[4])) for i in to_error])
template = u"| %%4s | %%-15s | %%4s | %%-%ss | %%-%ss |\n" % (hostnamemaxsize, errormaxsize)
message += u"\n"
tiret_line = u"+------+-----------------+------+-%s-+-%s-+\n" % ("-" * hostnamemaxsize, "-" * errormaxsize)
message += u"\nListe des machines dont la supression à échoué :\n"
message += tiret_line
message += template % ("aid", " ip", "mid", (" " * (max((hostnamemaxsize-8)/2,0)) + "hostname"), (" " * (max((errormaxsize-6)/2,0)) + "erreur"))
for aid, ip, mid, hostname, error in to_error:
message += template % (aid, ip, mid, hostname, error)
message += tiret_line
if to_print != [] or to_error != []:
headers = u"From: respbats@crans.org\nSubject: %s\n" % Header("Machines supprimées pour chambre invalide", "utf8").encode() headers = u"From: respbats@crans.org\nSubject: %s\n" % Header("Machines supprimées pour chambre invalide", "utf8").encode()
headers += u"Content-Type: text/plain; charset=UTF-8\n" headers += u"Content-Type: text/plain; charset=UTF-8\n"
headers += u"X-Mailer: /usr/scripts/gestion/chambres_vides.py\n" headers += u"X-Mailer: /usr/scripts/gestion/chambres_vides.py\n"