[chambres_vides] lc_ldapisation et gestion des erreurs lors de la suppression d'une machine
This commit is contained in:
parent
e14bb4ac90
commit
eb6116026f
1 changed files with 33 additions and 13 deletions
|
@ -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"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue