From eb6116026f3aaad8f7938c135bfce66aa37c9235 Mon Sep 17 00:00:00 2001 From: Valentin Samir Date: Sun, 23 Feb 2014 16:31:42 +0100 Subject: [PATCH] [chambres_vides] lc_ldapisation et gestion des erreurs lors de la suppression d'une machine --- gestion/chambres_vides.py | 46 ++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/gestion/chambres_vides.py b/gestion/chambres_vides.py index 3b49dd57..fdb74c46 100755 --- a/gestion/chambres_vides.py +++ b/gestion/chambres_vides.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/bin/bash /usr/scripts/python.sh # -*- encoding: utf-8 -*- """ Pour détecter les gens en chambre invalide, les prévenir, et supprimer leurs machines @@ -12,8 +12,8 @@ import datetime import time import re -import ldap_crans -conn = ldap_crans.CransLdap() +import lc_ldap.shortcuts +conn = lc_ldap.shortcuts.lc_ldap_admin() import mail as mail_module import sys @@ -39,19 +39,20 @@ delai = config.demenagement_delai # On récupère ceux qui n'ont pas payé cette année 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: - 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() to_print = [] +to_error = [] for clandestin in bad_boys_e_s: # 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 # (l'historique est enregistré par ordre chronologique) - x = re.match("(.*),.* : chbre \((.*) -> \?\?\?\?\)",l) + x = re.match("(.*),.* : chbre \((.*) -> \?\?\?\?\)", str(l)) if x <> None: kickout_date = x.group(1) exchambre = x.group(2) @@ -64,7 +65,7 @@ for clandestin in bad_boys_e_s: if ttl > 0: 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 - to = clandestin.mail() + to = clandestin['mail'][0] if not "@" in to: to += "@crans.org" mail = mail_module.generate('demenagement', {"from" : "respbats@crans.org", @@ -81,16 +82,19 @@ for clandestin in bad_boys_e_s: else: for m in machine_liste: - to_print.append( (clandestin.id(), m.ip(), m.id(), m.nom()) ) - m2 = conn.search('mid=%s' % m.id(),mode='w')['machine'][0] - m2.delete('Adherent sans chambre valide depuis %d jours' % delai) + try: + m2 = conn.search(u'mid=%s' % m['mid'][0],mode='w')[0] + 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 != []: # Il s'est passé quelque chose, donc on envoie un mail # 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) - message = u"" message += u"\nListe des machines supprimées pour chambre invalide depuis plus de %s jours :\n" % delai tiret_line = u"+------+-----------------+------+-%s-+\n" % ("-" * hostnamemaxsize) message += tiret_line @@ -98,8 +102,24 @@ if to_print != []: message += tiret_line for aid, ip, mid, hostname in to_print: message += template % (aid, ip, mid, hostname) + message += tiret_line 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"Content-Type: text/plain; charset=UTF-8\n" headers += u"X-Mailer: /usr/scripts/gestion/chambres_vides.py\n"