scripts/gestion/chambres_vides.py
Vincent Le Gallic 49fb17b8d5 [chambres_vides.py, config.py] On envoie un mail aux adhérent pour les prévenir qu'on va bientôt supprimer leur machines.
Ignore-this: 3a82abab8e7e49a0bfc30096319a33d3

darcs-hash:20120920030050-2c9c1-fd4b1f272d082d57b5fd3f1e7e601b19cde021f6.gz
2012-09-20 05:00:50 +02:00

90 lines
3.4 KiB
Python
Executable file

#!/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()