Parce que Modoba le vaut bien

Parce que Modoba le vaut bien

Comme indiqué dans un précédent article, je vais vous présenter mon retour d'expérience sur le remplacement des graphiques RRDtool par quelque chose de plus actuel.

Le contexte

Il y quelques années, j'ai intégré quelques graphiques de supervision dans Modoboa. Ayant déjà une expérience significative avec RRDtool, j'ai choisi cette solution.

Remplacer RRDtool peut se faire de manière partielle ou totale. Un remplacement total implique de ne plus utiliser de fichier RRDtool pour l'archivage des données statistiques (dommage, c'est là qu'il est le meilleur). Outre le fait de trouver une solution de substitution, il faut prévoir une migration de l'existant. Comme je ne suis pas le seul à utiliser Modoboa (du moins je l'espère...), une migration et les dommages potentiels qu'ils impliquent me font peur.

Reste donc la solution partielle qui consiste à ne pas utiliser RRDtool pour générer les graphiques mais une librairie côté navigateur. Comme vous l'aurez compris, le pré-requis indispensable à cette solution est la mise à disposition des données statistiques au niveau du client. Heureusement, RRDtool dispose d'une fonctionnalité d'export au format JSON.

Que demander de mieux ?!

RRDtool est vilain

Et pas qu'un peu!

Tout d'abord, le module Python fourni par RRDtool n'implémente pas la commande xport! Me voilà obligé de lancer un processus pour exécuter la commande rrdtool. Au passage, j'ai gagné une étape de parsing supplémentaire... Chouette :p

Comme si cela ne suffisait pas, l'export JSON fourni par RRDtool est inutilisable jusqu'à la version 1.4.8 (les clés utilisées dans le contenu généré ne sont pas entourées de guillemets). Problème : la majorité des distributions actuelles fournissent la version 1.4.7. Étant donné que je ne peux pas forcer les utilisateurs à mettre à jour la version de RRDtool installée sur leur serveur, autant oublier cette option.

J'en ai mal au derrière mais la seule alternative qu'il me reste consiste à exporter les données en XML. Heureusement que Modoboa dépend déjà de lxml pour son webmail...

Le monde merveilleux de d3.js

Voici un domaine dans lequel je suis, je le dis sans honte aucune, un noob!

Écoutant les conseils de mon entourage, j'ai choisi d3.js pour afficher les données que j'ai tant peiné à exporter. Comme cette librairie est plutôt bas niveau et que je suis un affreux fainéant, je suis parti à la recherche recherche d'une surcouche facilitant la création de graphiques temporels.

Toujours en écoutant mon entourage (et en demandant un peu à Google quand même), je tombe sur nvd3. La page d'accueil fait rêver, je suis certain d'avoir trouvé le bon candidat... ou presque.

Malgré l'absence quasi-totale de documentation, je réussi à remplacer mes vieux graphiques par des nouveaux, tous beaux et tous dynamiques. La première étape de mon POC étant validée, je passe à la suivante qui consiste à simuler ce comportement de RRDtool : afficher sur l'abscisse des dates adaptées à la résolution temporelle choisie. Le naïf que je suis est persuadé que cela n'est pas bien compliqué et que, cerise sur le gâteau, cela doit être géré automatiquement... Je n'étais pas loin!

Après quelques essais infructueux, je parcours la toile en quête d'indices et je finis par tomber la dessus : grosse déception. nvd3 ne supporte tout simplement pas ce comportement et ce n'est pas demain la veille que cela changera! En désespoir de cause, j'opte pour la solution proposée par l'un des plaignants du ticket sus-mentionné : passer à Rickshaw. (qui a dit Rick Hunter ?!)

J'ai bien fait.

Le couple gagnant ?

Pourquoi pas!

Avant de me lancer dans une nouvelle explication, un peu de concret :

/media/uploads/zinnia/rickshaw_modoboa.png

Vous aurez (peut-être) reconnu le graphique Traffic normal moyen fourni par Modoboa.

A la différence de nvd3, rickshaw est spécialisée dans l'affichage de graphiques temporels. Les exemples fournis sont mieux présentés, sa mise en œuvre est très rapide et j'ai le sentiment (à vue d’œil) que ses performances sont meilleures. Le plus important dans tout cela : cette librairie fonctionne comme attendu!

Le périmètre fonctionnel est effectivement plus restreint mais correspond à mon besoin. Des raccourcis sont disponibles pour activer tous les outils utiles à l'exploitation de graphiques :

  • Légende ;
  • Zoom ;
  • Activation / désactivation des courbes ;
  • Affichage des valeurs (x et y) en fonction de la position de la souris sur le graphique.

Le seul reproche que je lui ferai concerne le zoom dont je trouve l'ergonomie discutable. Le sélecteur (dans le graphique inférieur) est activé par défaut et contient toute la période affichée. Il faut d'abord réduire la l'intervalle pour pouvoir se déplacer. Personnellement, je ne proposerais pas de sélection par défaut.

Si quelqu'un sait comment modifier ce comportement, je suis preneur :)

Disponible dans Modoboa 1.2 ?

Oui, mais pas forcément sous cette forme.

Comme je le mentionnais plus tôt, rickshaw dispose d'un périmètre fonctionnel limité. Si dans le futur j'ai besoin de plus (afficher un camembert par exemple), je devrai trouver une autre librairie ou utiliser d3.js directement. Je suis effectivement feignant mais je n'aime pas trop multiplier les dépendances extérieures dans un projet, cela complexifie la maintenance.

Utiliser d3.js directement parait être l'option la plus pertinente, y compris à la place de rickshaw. Cette voie est forcément plus longue et plus coûteuse en terme d'apprentissage mais offre plus d'autonomie et me permet d'apprendre une nouvelle technologie. J'ai d'ores et déjà entamé cette nouvelle expérimentation et je me rend compte que l'autonomie apportée est toute relative... Je présenterai peut-être mes résultats dans un prochain billet :)

Si vous êtes encore là, merci! Si vous disposez d'une expérience à partager ou que vous trouvez mon raisonnement bizarre, n'hésitez pas à réagir :)

0 commentaires

Aucun commentaire!

Postez votre commentaire