blog.bressure.net

Carnet professionnel d'un informaticien

Application

Planificateur de tâches dans Trac

admin
wikipedia:Trac icon, modified for the Open Ico...
Image via Wikipedia

Trac est un outils de gestion de projet pour lequel il existe de nombreuses extensions que l’on trouve sur le site trac-hacks . Mais il existe un plugin qui manquait à cette liste: un planificateur de tâche comme Cron.

Pourquoi aurait-on besoin d’un cron? Certaines tâches récurrentes comme la création périodique de ticket de type tâche comme par exemple « revue de code » pourraient ne plus avoir besoin d’être créées à la main. Dans mon cas, j’ai une version personnalisée de Trac qui possède une fonction de synchronisation des utilisateurs natifs Trac avec une table spécifique mise à jour journalièrement. La synchronisation est codée dans une méthode appelée par un bouton dans l’interface d’administration. Cette synchronisation ne peut être appelée que depuis Trac car elle fait usage de l’API de Trac.

Pour parvenir à nos fins nous pouvons utiliser le planificateur de l’OS ( Cron unix ou AT de Windows) mais cette solution manque d’élégance car on va ajouter un adhérence avec l’OS. De plus même si on enrichie la commande trac-admin pour bénéficier de l’environnement de Trac, il restera à gérer la concurrence avec le processus trac. C’est pour ses raisons que le choix d’un ordonnanceur de tâche intégré à Trac a fait son chemin.

Comment développer un tel planificateur?

La documentation de Trac nous montre qu’il est possible de définir des « composant » et des « extension ». Un composant est un plugin Trac qui est instancié par Trac. Une extension est un composant qui implémente une interface. Dans Trac il existe des interface standard comme ITicketValidator qui indique que le composant sait valider les champs d’un ticket. Chaque composant peut utiliser des extensions.

Pour notre besoin il nous suffit de :

  1. définir une interface de tâche ICronTask
  2. définir un composant Corequi utilisera les extensions de type ICronTask
  3. Le composant Core doit se charger de gérer l’ordonnanceur par une thread dédiée
  4. La thread dédiée doit se lancer dès le démarrage de Trac: pour cela on va intercepter l’instanciation du composant parce que Trac ne définit par d’interface pour capter son démarrage

Tels sont les éléments clés à mettre en œuvre auxquels s’ajoutent les point suivants pour une plus grande utilisabilité:

  1. Paramétrage dans trac.ini et par interface d’administration
  2. État de l’ordonnanceur : marche/arrêt paramétrable
  3. précision de l’ordonnanceur paramétrable
  4. plusieurs planification pour une même tâche
  5. planification dans l’interface d’administration

Désormais ce plugin existe, il est disponible sur Trac-Hacks, il s’agit de TracCronPlugin

Tags:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Back to top