scripts/gestion/tools/stats_cableur.py
2013-11-02 22:52:39 +01:00

64 lines
2.1 KiB
Python

#! /usr/bin/env python
# -*- encoding: utf-8 -*-
# Stats sur les historiques
import sys
sys.path.append("/usr/scripts/gestion")
import types
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) != types.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);