#!/bin/bash /usr/scripts/python.sh # -*- coding: utf-8 -*- import BeautifulSoup import requests import re import datetime import time import impression.digicode as digicode from lc_ldap import shortcuts import lc_ldap.crans_utils as crans_utils import gestion.config as config import gestion.affichage as affichage import sys import smtplib from gestion import config from gestion.affich_tools import cprint from gestion import mail import lc_ldap.shortcuts from utils.sendmail import actually_sendmail URL_JOBLIST = 'https://imprimante.adm.crans.org/hp/device/JobLogReport/Index' CA = '/etc/ssl/certs/cacert.org.pem' RE_JOB_NAME = re.compile('JobLogName_') RE_JOB_STATUS = re.compile('JobLogStatus_') RE_JOB_DATE = re.compile('JobLogDate_') req = requests.get(URL_JOBLIST, verify=CA) doc = BeautifulSoup.BeautifulSoup(req.text) con = shortcuts.lc_ldap_readonly() jobs = doc.findAll(attrs={'class': 'PrintJobTicket'}) now = datetime.datetime.now() #print now success=dict() clubs=dict() fin = now.replace(second=0, minute=(now.minute/10)*10, microsecond=0) debut = fin - datetime.timedelta(minutes=10) for job in jobs: uid = job.find(attrs={'id': RE_JOB_NAME}).text status = job.find(attrs={'id': RE_JOB_STATUS}).text date = job.find(attrs={'id': RE_JOB_DATE}).text date = datetime.datetime.strptime(date, '%Y/%m/%d %H:%M:%S') if date > debut and date <= fin: if status == "Success": split = uid.split(u':') if len(split) >= 3: #print repr((uid, status, date)) # Boucle qui s'exécute normalement si la typographie dans # les logs d'impression est repectée (:) (sinon c'est un # impression manuel donc drop) nb = split[0] name = split[1] task = u':'.join(split[2:]) if u'@' in split[1]: #Seuls les clubs ont un @ dans leur alias, donc boucle # dédiée au clubs split2 = name.split(u'@', 1) name = split2[0] club = split2[1] if club not in clubs: clubs[club] = {'task': []} clubs[club]['task'].append(task) if name not in success: success[name] = {'task': []} success[name]['task'].append(task) #print repr((name, task)) #print name #Section consacrée à l'envoi : partie 1 pour les adh, partie 2 pour les clubs #To = 'detraz@crans.org' From = 'impression@crans.org' e = 0 a = 0 for name in success: ad = con.search(u'(uid=%s)' % name) if ad <> []: a = a + 1 adh = ad[0] To = name + u'@crans.org' tname = unicode(adh['prenom'][0]) + " " + unicode(adh['nom'][0]) codes = [x[0] + u'#' for x in digicode.list_code(name)] if not codes: codes = [digicode.gen_code(name) + u'#'] #cprint(u"Envoi du mail à %s" % To) mailtxt=mail.generate('mail_impression_ok', { 'To': To, 'From': From, 'tname': tname, 'taches': u', '.join(success[name]['task']), 'codes': u', '.join(codes) }) #print mailtxt.as_string() actually_sendmail(From, (To,), mailtxt) else: e = e+1 for club in clubs: a = a + 1 tname = club To = club + u'@crans.org' codes = [x[0] + u'#' for x in digicode.list_code(club)] if not codes: codes = [digicode.gen_code(club) + u'#'] #cprint(u"Envoi du mail à %s" % To) mailtxt=mail.generate('mail_impression_ok', { 'To': To, 'From': From, 'tname': tname, 'taches': u', '.join(clubs[club]['task']), 'codes': u', '.join(codes), }) #print mailtxt.as_string() actually_sendmail(From, (To,), mailtxt) if e>0: print "Des problèmes sont survenus entre %s et %s" % (debut, fin) print "Nombre total de mails envoyés :" print a print "Nombre de mails non envoyés faute de résultats LDAP :" print e #print len(success)