diff --git a/gestion/tools/stats_cableur.py b/gestion/tools/stats_cableur.py new file mode 100755 index 00000000..6f48a355 --- /dev/null +++ b/gestion/tools/stats_cableur.py @@ -0,0 +1,64 @@ +#! /usr/bin/env python +# -*- encoding: iso-8859-15 -*- + +# Stats sur les historiques + +import sys +sys.path.append("/usr/scripts/gestion") + +from types import * +from ldap_crans import crans_ldap +from pysqlite2 import dbapi2 as sqlite +import re +from time import mktime, strptime + +def plat(chose): + """Applatit une liste de liste. Hautement récursif.""" + if type(chose) != ListType: + return [chose] + return sum(map(lambda x: plat(x), chose), []) + + +def hist(): + """Récupère l'historique dans une base SQLite dont la connexion est returnée.""" + # On récupèr les adhérents + adherents = crans_ldap().search("nom=*")['adherent'] + # Et les historiques rattachés à eux et à leurs machines + historiques = map(lambda x: [x.historique(), map(lambda y: y.historique(), x.machines())], + adherents) + historiques = plat(historiques) + # On va maintenant coller les historiques dans une structure plus + # sympa, style une base SQL que l'on garde en mémoire + con = sqlite.connect("historiques") + cur = con.cursor() + cur.execute("CREATE TABLE historique (date INTEGER, nom TEXT, action TEXT)") + # On doit maintenant mettre ce qu'il faut dans la table... + regex = re.compile("([^,]*), ([^ ]*) : (.*)") + for h in historiques: + mo = regex.match(h) + if not mo: + print "Hummm ? Ligne bizarre : %s" % h + else: + date = int(mktime(strptime(mo.group(1), "%d/%m/%Y %H:%M"))) + utilisateur = mo.group(2) + # Il peut y avoir plusieurs raisons ! + raisons = mo.group(3).split(", ") + # On garde les raisons courtes + raisons = map(lambda x: x.split(" ")[0].strip(), raisons) + for r in raisons: + cur.execute("INSERT INTO historique VALUES (?, ?, ?)", + (date, utilisateur, r)) + con.commit() + + + return con + +hist() + +# Exemple de requete : + +# select nom, count(nom) as combien from historique +# where date>1093950403 group by nom order by combien ; + +# select action,count(action) from historique where nom='bernat' and +# date>1093950403 group by action order by count(action);