Import initial : script pour faire des stats. Voir la fin. Faut

utiliser sqlite3

rozel|37
fromont|38
fdumas|50
sabban|53
pauget|60
dubost|62
villemejane|70
salles|74
chove|80
pessoles|91
le-diraison|113
bernat|119

pour

select nom, count(nom) as combien from historique where
date>1093950403 and date<1100693808 and (action='paiement+2004' or
action='inscription') group by nom order by combien;

Les dates correspondent de septembre  mi-novembre.

darcs-hash:20050814111926-d1718-5427fc5d10a96fd567030a166fd9f68f581a2f36.gz
This commit is contained in:
bernat 2005-08-14 13:19:26 +02:00
parent e6939642a6
commit 36877b6969

64
gestion/tools/stats_cableur.py Executable file
View file

@ -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);