Sortie d’un plugin Jira : jira-order-plugin

J’avais déjà parlé de Jira et des possibilités de personnalisation dans un précédent article. Ici plus exactement.

Cette fois-ci c’est un nouveau plugin que je sors des cartons, Jira order plugin, une fille d’attente pour gérer des fiches par ordre de priorité.

 

Principe de fonctionnement

Pour résumer, le principe de ce plugin est assez simple, il permet de créer une file d’attente des fiches à traiter.

Mais pourquoi une file d’attente alors qu’on a déjà une priorité sur les fiches me direz-vous ? Ne vous est-il jamais arrivé d’avoir 200 fiches ouvertes dans votre projet avec 20 fiches à traiter d’urgence sans parler du reste ? Ok et dans ce cas là quelle est votre stratégie ? Traiter toutes les demandes urgentes d’un coup ? Les traiter dans un ordre aléatoire ?

Parfois on voit des managers qui vont de nouveau reprioriser leur fiches urgentes avec des priorités « urgentes ++ » en créant donc un nouveau stade d’urgence. Bon super, et après, on créé un « urgente +++ », « plus urgente tu meurs » etc… L’autre idée c’est de définir leur ordre de traitement de façon linéaire à travers une file d’attente.

Mais bon, pas envie de gérer sans arrêt les ajouts dans la file d’attente, dans ce cas le plugin va calculer automatiquement la position d’une nouvelle fiche entrée dans le système à partir de sa priorité et de sa date de création. Et voilà, vous avez les grandes lignes directrices de ce plugin :

  • file d’attente des fiches à traiter
  • calcul de la position initiale des fiches dans la file à partir de leur priorité et de la date de création
  • recalcul de la position des fiches dans la file après un déplacement ou un changement d’état

Concrètement la visualisation de cette file d’attente utilise le navigateur de fiches :

issueorder

On remarquera sur l’image la colonne « Issue ordering » qui représente notre Custom field configuré pour apparaître dans le navigateur de fiches.

Et sous le capot, ça marche comment ?

Plus complexe que le précédent plugin, cette fois-ci il s’agit :

  • d’un custom field
  • d’un listener qui écoute les changements d’états des fiches
  • d’un service qui réordonne les fiches régulièrement
  • d’une action webwork combiné avec Jquery pour un réarrangement manuel de l’ordre des fiches

Jquery

Parmi les éléments techniques intéressants ici je citerais notamment l’utilisation de Jquery pour la partie Drag and drop qui permet de repositionner les fiches manuellement.

Dans le template Velocity j’utilise un bout de code Jquery pour chaque valeur de champ

$('#rankHkn${index}').draggable({ axis: 'y', cursor: 'crosshair', opacity: 0.35, revert: true });
$('.droppable').droppable({drop: function ( event, ui) {displayMessageOrderField(ui.draggable.attr("id"),this); }});

Et voilà, en deux lignes à peine j’obtiens la possibilité de faire du Drag and Drop sans être vraiment expert JavaScript moi-même ^^

On notera que ${index} est interprété par Velocity lors de la création de la page, alors que $(‘.droppable’) n’ayant pas été interprété par Velocity, il apparaît tel quel dans la page HTML et sera donc utilisé comme sélecteur CSS par JQuery. L’utilisation du $ dans les templates Velocity pour deux choses distinctes peut amener bien des surprises si on n’y fait pas gaffe.

Un petit brin d’ergonomie, évitez l’attente

Vous vous souvenez, plus haut j’ai écrit que les fiches étaient automatiquement placés dans la file d’attente lors de leur création en fonction de certains critères. Ok mais du coup ca implique un calcul. Rapide sur une petite instance, ce calcul peut facilement prendre du temps sur une instance Jira avec un grand nombre de fiches. Et ce temps on veut éviter de l’infliger à l’utilisateur qui voulait juste créer une fiche, lui.

Toute l’astuce a donc été ici d’utiliser un design pattern assez simple, le producteur consommateur :

  • le producteur c’est l’utilisateur, à la création d’une fiche (ou sa modif) il empile l’action dans une file d’évènement
  • le consommateur c’est un service Jira qui dépile cette file pour traiter les évènements

Du coup, pas d’attente pour l’utilisateur car l’ajout dans la pile est rapide. Le défaut c’est par contre d’avoir une actualisation de la position dans la file d’attente plus lente, après le passage du service uniquement.

Et côté implémentation en Java, rien de mieux que l’utilisation d’une BlockingQueue qui permet de gérer correctement la concurrence d’accès à l’ajout et la lecture dans la pile.

Où trouver tout ça

Bon, si le plugin vous intéresse, vous pouvez le trouver sur le plugins exchange ou sur sa page Confluence.

Et si le code vous intéresse, celui-ci est accessible via svn ici.

 

10 réflexions sur “Sortie d’un plugin Jira : jira-order-plugin

  1. Bonjour Hugo,

    Ton plugin JIRA m’est extrêmement utile et je t’en remercie.

    Cependant, quelques fonctionnalités manquent et j’aimerais savoir si elles seront disponibles éventuellement ou si je dois chercher un autre outil de gestion des priorités. Voici les fontionnalités en question :

    – Possibilité d’exporter en d’autres formats (Excel, PDF, Dashboard, etc) et que le custom field Issue Ordering reste visible.

    Ce champ semble visible seulement dans le Issue List.

    Merci à l’avance de ta réponse

  2. Ca fait un petit moment que j’y ai pas touché mais pour l’export, en fait ca doit déjà exister il me semble.
    Quand on affiche un ensemble de fiche dans le issue navigator, on peut choisir d’exporter le résultat et on choisit les champs à afficher. Le champ Issue Order field doit (ou devrait en tout cas) s’afficher comme un simple chiffre.
    Pour exporter : http://confluence.atlassian.com/display/JIRA044/Exporting+Search+Results+to+Microsoft+Excel

    • Bonjour Hugo,

      Merci pour ta réponse. L’export de JIRA fonctionne très bien, le seul problème est qu’une fois exporté dans Excel le champ Issue Ordering est vide.

      En fait, ce champ n’est visible que dans le Issue Browser. Il disparait aussitôt qu’on l’exporte ou l’imprime.

      C’est d’ailleurs, l’idée de mon commentaire, je souhaite exporter ou imprimer des rapports pour fin de révision des priorités de la haute direction.

      Si tu me fourni une adresse de courriel, je pourrai t’envoyer des exemples.

      Merci à l’avance de ton aide.

  3. Bonjour Hugo,

    Ton plugin JIRA m’est extrêmement utile et je t’en remercie.

    Cependant, quelques fonctionnalités manquent et j’aimerais savoir si elles seront disponibles éventuellement ou si je dois chercher un autre outil de gestion des priorités. Voici les fontionnalités en question :

    – Possibilité d’exporter en d’autres formats (Excel, PDF, Dashboard, etc) et que le custom field Issue Ordering reste visible.

    Ce champ semble visible seulement dans le Issue List.

    Merci à l’avance de ta réponse

  4. Ca fait un petit moment que j’y ai pas touché mais pour l’export, en fait ca doit déjà exister il me semble.
    Quand on affiche un ensemble de fiche dans le issue navigator, on peut choisir d’exporter le résultat et on choisit les champs à afficher. Le champ Issue Order field doit (ou devrait en tout cas) s’afficher comme un simple chiffre.
    Pour exporter : http://confluence.atlassian.com/display/JIRA044/Exporting+Search+Results+to+Microsoft+Excel

    • Bonjour Hugo,

      Merci pour ta réponse. L’export de JIRA fonctionne très bien, le seul problème est qu’une fois exporté dans Excel le champ Issue Ordering est vide.

      En fait, ce champ n’est visible que dans le Issue Browser. Il disparait aussitôt qu’on l’exporte ou l’imprime.

      C’est d’ailleurs, l’idée de mon commentaire, je souhaite exporter ou imprimer des rapports pour fin de révision des priorités de la haute direction.

      Si tu me fourni une adresse de courriel, je pourrai t’envoyer des exemples.

      Merci à l’avance de ton aide.

  5. I am trying to implement your Jira Order Plugin.

    I have a working copy of Jira, version Atlassian JIRA (v5.0.2#725-sha1:5735107)

    I shut down the Jira services.

    When I copy the JAR into the “C:Program FilesAtlassianJIRAatlassian-jiraWEB-INFlib” folder I get this error when I try to open JIra in a browser after restarting the services:-

    HTTP STATUS 404
    The requested resource is not available

    Any ideas?

    Mike

  6. I am trying to implement your Jira Order Plugin.

    I have a working copy of Jira, version Atlassian JIRA (v5.0.2#725-sha1:5735107)

    I shut down the Jira services.

    When I copy the JAR into the “C:Program FilesAtlassianJIRAatlassian-jiraWEB-INFlib” folder I get this error when I try to open JIra in a browser after restarting the services:-

    HTTP STATUS 404
    The requested resource is not available

    Any ideas?

    Mike

Laisser un commentaire