Le petit projet des vacances...
Entre ma vie, la migration de Bearnaise (qui tarde un peu trop d'ailleurs, merci Free.), et le projet scolaire que je dois terminer pour la rentrée, je m'ennuyais un peu. Alors j'ai décidé de reprendre un vieux projet que j'avais entamé il y a fort longtemps avec Swater : un analyseur de logs de serveurs HTTP.
L'idée est de faire un analyseur de logs extremement modulaire afin de pouvoir ajouter ou retirer à souhait les traitements qui seront effectués sur les fichiers. Pour résumer le fonctionnement, il y a d'un coté des modules d'analyse genre "visiteurs", "referers", "hits", etc. qui s'occupent de collecter des données sur chaques lignes des fichiers de logs. De l'autre coté, un module de rendu (genre "html", "mail", "texte") qui lui s'occupe comme son nom l'indique si bien, du rendu du rapport de résultats.
Le projet est déjà bien entamé, et je compte releaser une première version très bientôt. J'ai fais quelques tests de performances pour avoir une idée (pour l'instant, ce n'est pas optimisé). Condition des tests : sur mon portable, Core Duo 1.66Ghz, 1Go de RAM (mais l'utilisation par le programme de la ram était minime), fichiers de logs du serveur http de Bearnaise, un peu plus d'un an pour 1231699 lignes.
Test #1
Traitement des lignes relatives au domaine "inaps.org" avec un seul module d'analyse actif et en mode verbeux : time python s.py -m inaps.org -d 01012006 -e 99999 -v html visitors logs/*
Résultat : 132.91user 0.58system 2:16.75elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
Test #2
Traitement des lignes relatives a tous les domaines avec un seul module d'analyse actif et en mode verbeux : time python s.py -d 01012006 -e 99999 -v html visitors logs/*
Résultat : 144.67user 4.52system 2:33.67elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
Test #3
Traitement des lignes relatives a tous les domaines avec deux modules d'analyse actifs et en mode verbeux : time python s.py -d 01012006 -e 99999 -v html visitors,referers logs/*
Résultat : 168.98user 5.69system 3:05.21elapsed 94%CPU (0avgtext+0avgdata 0maxresident)k
Test #4
Traitement des lignes relatives a tous les domaines avec deux modules d'analyse actifs et en mode silencieux : time python s.py -d 01012006 -e 99999 -q html visitors,referers logs/*
Résultat : 155.58user 0.24system 2:35.86elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
Même si ces tests ne sont pas hyper démonstratifs (ils dépendent des modules activés), ils donnent quand même une idée de la vitesse d'exécution du truc (il faudrait que je regarde ce qui se fait à coté).
Si certains ont des suggestions, elles sont les bienvenues...


Commentaires
BatchyX
le 27 avril 2008 07:33ça donne quoi le profilage ?
Antoine — inaps.org
le 27 avril 2008 11:26Pas encore essayé, je le ferais plus tard. Mais d'après les tests ci-dessus, ont peut déduire que ce qui prend le plus de temps n'est pas l'exécution des (deux) modules, mais tout le traitement de chaque ligne avant (extraction des infos avec le regex, comparaison de la date, du domaine...)
BatchyX
le 27 avril 2008 12:03des regex, ça s'optimise aussi...
David, biologeek — www.biologeek.com
le 01 mai 2008 16:31Une excellente présentation sur les générateurs avec pleins d'exemples qui ont l'air de faire ce que tu fais : http://www.dabeaz.com/generators/
Antoine — inaps.org
le 01 mai 2008 17:08Effectivement, c'est très intéressant, merci. J'ai ajouté un lien vers l'article sur <a href="http://inaps.org/journal/les-iterateurs-et-generateurs-en-python" rel="nofollow">mon billet sur les generators</a>.
Par contre, vu le fonctionnement de mon analyseur de logs, je doute que je puisse utiliser ce genre de trucs... :)
Laisser un commentaire