
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 :
- définir une interface de tâche
ICronTask
- définir un composant
Core
qui utilisera les extensions de typeICronTask
- Le composant
Core
doit se charger de gérer l’ordonnanceur par une thread dédiée - 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é:
- Paramétrage dans trac.ini et par interface d’administration
- État de l’ordonnanceur : marche/arrêt paramétrable
- précision de l’ordonnanceur paramétrable
- plusieurs planification pour une même tâche
- planification dans l’interface d’administration
Désormais ce plugin existe, il est disponible sur Trac-Hacks, il s’agit de TracCronPlugin
Tags: opensource Python Trac TracCronPlugin