#!/usr/bin/env python # -*- encoding: utf-8 -*- # Codé par b2moo, commenté par 20-100, cr{itiqu|on}é par Nit import datetime import time import re import ldap_crans conn = ldap_crans.CransLdap() import sys sendmails = False if "--mail-all" in sys.argv: sendmails = True import email.Header import os import config year = config.ann_scol delai = config.upload.demenagement_delai # On récupère ceux qui n'ont pas payé cette année bad_boys_e_s = conn.search('chbre=????&paiement=%d&paiement!=%d' % (year-1,year))['adherent'] now = time.time() to_print = [] 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(): # On récupère la date du dernier changement de chambre # (l'historique est enregistré par ordre chronologique) x = re.match("(.*),.* : chbre \((.*) -> \?\?\?\?\)",l) if x <> None: kickout_date = x.group(1) exchambre = x.group(2) machine_liste = clandestin.machines() # On lui accorde un délai kickout_date = time.mktime(time.strptime(kickout_date, "%d/%m/%Y %H:%M")) delta = now - kickout_date ttl = delai*86400 - delta if ttl > 0: if sendmails and machine_liste != []: # On lui envoie un mail pour le prévenir to = clandestin.mail() if not "@" in to: to += "@crans.org" mail = config.upload.message_demenagement % {"from" : "respbats@crans.org", "chambre" : exchambre, "jours" : int(ttl/86400) + 1, "to" : to} mailer = os.popen("/usr/sbin/sendmail -t", "w") mailer.write(mail.encode("utf-8") + "\n.") mailer.close() else: for m in machine_liste: # On n'a pas envie d'essayer de supprimer une machine qui a une blackliste if len(m.blacklist_actif()) > 0: continue 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) 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]) template = u"| %%4s | %%-15s | %%4s | %%-%ss |\n" % (hostnamemaxsize) message = u"" message += u"\nListe des machines supprimée pour chambre invalide depuis plus de %s jours :\n" % delai tiret_line = u"+------+-----------------+------+-%s-+\n" % ("-" * hostnamemaxsize) message += tiret_line message += template % ("aid", " ip", "mid", (" " * (max((hostnamemaxsize-8)/2,0)) + "hostname")) message += tiret_line for aid, ip, mid, hostname in to_print: message += template % (aid, ip, mid, hostname) message += tiret_line headers = u"From: respbats@crans.org\nSubject: %s\n" % email.Header.make_header([("Machines supprimées pour chambre invalide", "utf8")]).encode() headers += u"Content-Type: text/plain; charset=UTF-8\n" headers += u"To: respbats@crans.org\n" mail = headers + "\n" + message mailer = os.popen("/usr/sbin/sendmail -t", "w") mailer.write(mail.encode("utf-8") + "\n.") mailer.close()