Timetracker pour Youtrack: DIY

Il existe une merveilleuse application T-REC qui vous permet de suivre le temps passé sur les tâches dans Youtrack et de l'écrire dans la tâche. Mais l'auteur l'a abandonné il y a plus de deux ans, plus les anciennes dépendances, le chargement constant d'un noyau (l'électron est apparemment à blâmer) et les plantages périodiques l'ont rendu «peu pratique» pour l'utiliser. J'ai décidé d'écrire le mien, avec la même fonctionnalité, uniquement sur les pros, alors Honsu est apparu ...



La documentation actuelle sur l'utilisation de Youtrack est ici .

Fonctionnement:

pour accéder à Youtrack à partir d'une application tierce, vous avez besoin d'un token pour fonctionner.

  1. Connectez-vous Ă  YouTrack dans un navigateur
  2. Accédez au profil " example.youtrack.com/users/me "
  3. Recherchez l'élément «Mettre à jour les informations personnelles et gérer les connexions»
  4. Ouvrez l'onglet "Authentification"
  5. Cliquez sur le bouton "Nouveau jeton ..."
  6. Remplissez le champ client "YoutrackTimerec"
  7. Choisir les sous-systèmes auxquels nous devons accéder - «YouTrack» d'abord
  8. Cliquez sur le bouton Créer un jeton
  9. Nous copions le jeton, car il n'est affiché qu'une seule fois.

Les exemples sont sous forme de requêtes cURL, mais ils sont faciles à passer à la forme souhaitée.

Vous devez d'abord vérifier que l'adresse saisie est correcte et qu'il existe une API REST côté serveur. si le service est disponible et que la clé est correcte, json avec les données comptables sera retourné

curl -X GET "https://example.myjetbrains.com/api/admin/users/me?fields=id,login,name,email"
-H "Accept: application/json"
-H "Authorization: Bearer perm:token"
-H "Cache-Control: no-cache"
-H "Content-Type: application/json"




{"login":"s.user",
"email":"s.user@example.team",
"name":"S User",
"id":"1-325",
"$type":"Me"}



Qu'est-ce que Agile sans tâches? Simplifiées, les tâches vivent généralement dans des sprints et des sprints dans des tableaux. Ce ne sont que les tableaux actifs dont vous avez besoin pour sélectionner ultérieurement des tâches pour le suivi du temps. La réponse contient une liste des cartes disponibles pour un utilisateur spécifique:

curl -X GET "https://example.myjetbrains.com/api/agiles?fields=name,id,projects(id,shortName,name),columnSettings(columns(presentation))&$top=100"
-H "Accept: application/json"
-H "Authorization: Bearer perm:token"
-H "Cache-Control: no-cache"
-H "Content-Type: application/json"




[
   {
      "projects":[{ "shortName":"OPS", "name":"Operations",
                     "id":"04", "$type":"Project" }],
      "columnSettings":{
         "columns":[
            { "presentation":"Open", "$type":"AgileColumn"},
            { "presentation":"In Progress, Paused","$type":"AgileColumn" },
            { "presentation":"Postponed", "$type":"AgileColumn" },
            { "presentation":"Closed, Resolved", "$type":"AgileColumn" },
            { "presentation":"Feedback, On Review", "$type":"AgileColumn" }
         ],
         "$type":"ColumnSettings"
      },
      "name":"Web",
      "id":"15",
      "$type":"Agile"
   }
]



L'étape suivante consiste à obtenir les tâches du

tableau : - `Board Some Name:` ​​le nom après que l'espace est indiqué, se termine par `:`
- `{Sprint actuel}` seules les tâches du sprint actuel
sont prises - `# Unresolved` seules les tâches non fermées sont prises Les tâches seront fournies avec un tableau d'objets , il existe de nombreuses propriétés, mais pour tenir compte du temps, des champs ID seront nécessaires, Résumé - l'en-tête, Temps passé - le temps passé en minutes et sprint - l'ID de sprint, si vous avez besoin de travailler avec.

curl -X GET "https://example.myjetbrains.com/rest/issue?filter=for:me%20Board%20Some%20Name:%7BCurrent%20sprint%7D%20%23Unresolved%20"
-H "Accept: application/json"
-H "Authorization: Bearer perm:token"
-H "Cache-Control: no-cache"
-H "Content-Type: application/json"




{
   "issue":[
      {
         "id":"38-1234", 
         "entityId":"2-12345",
         "jiraId":null,
         "field":[
            { "name":"projectShortName", "value":"38"  },
            { "name":"summary", "value":"[system] [tech] Huge hard task" },
            { "name":"created", "value":"1582624816973" },
            { "name":"Spent time", "value":[ "399" ],  "valueId":["6h 39m"],"color":null },
            { "name":"sprint", "value":[  { "value":"Value", "id":"ID" } ] }
         ],
      }]
}



Les données obtenues sont suffisantes pour les mappages et la navigation dans la liste des tâches. L'idée principale de l'application est de considérer le temps passé à travailler sur une tâche spécifique. Pour ce faire, envoyez au serveur le nombre de minutes (WorkItem), avec la requête suivante Pourquoi XML? Pour une raison quelconque, le serveur de test n'accepte pas le WorkItem en tant qu'objet json. Historique des tâches quotidiennes: Vous pouvez demander des tâches pour lesquelles le champ Temps passé> 0, après avoir traité leur WorkItem, vous pouvez créer un historique de travail. Demander toutes les tâches dans le sprint en cours. Ensuite, nous traitons le tableau des tâches entrantes et faisons des demandes pour celles qui ont annulé le temps. Après avoir traité les données reçues, vous pouvez les afficher sous une forme pratique Où Honsu vit-il: github.com/dalerank/nanogui/tree/master/honsu

curl -i -X POST "https://example.myjetbrains.com/rest/issue/38-1234/timetracking/workitem" 
-H "Accept: application/json"
-H "Authorization: Bearer perm:token"
-H "Cache-Control: no-cache"
-H "Content-Type: application/xml"
-d <?xml version=\"1.0\" encoding=\"UTF-8\"?> <workItem> <date>UnixEpocTime*1000</date> <duration>10</duration> <description>added by Honsu</description> <worktype> <name>Development</name> </worktype> </workItem>











curl -X GET "https://example.myjetbrains.com/rest/issue?filter=for:me%20Board%20Some%20Name:%7BCurrent%20sprint%7D"
-H "Accept: application/json"
-H "Authorization: Bearer perm:token"
-H "Cache-Control: no-cache"
-H "Content-Type: application/json"




curl -X GET "https://example.myjetbrains.com/rest/issue/38-1234/timetracking/workitem"
-H "Accept: application/json"
-H "Authorization: Bearer perm:token"
-H "Cache-Control: no-cache"
-H "Content-Type: application/json"







Il est assemblé avec d'autres exemples

Ou ici sous forme d'exe (Windows): github.com/dalerank/nanogui/releases

Pourquoi cela est fait:

+ garder une trace du temps passé sur les tâches
+ voir comment fonctionne l'api youtrack de repos
+ si possible faire un monoapp, sans dépendances
+ intéressant :)

Ce que cela peut faire:

+ ramasser des tâches sur youtrack
+ affiche les tableaux actifs
+ marquer le temps collecté comme un élément de travail dans la tâche
+ couper les temps d'arrĂŞt
+ rappeler l'absence d'une tâche lorsque l'activité est détectée
+ afficher l'historique du suivi du temps par jours
+ ne pas stocker localement des données, à l'exception d'une clé et d'un serveur

Ce qui ne sait pas comment:

+ utiliser plusieurs comptes
+ stocker le temps de cracké s'il n'y a pas Internet
+ créer de nouvelles tâches inapp
+ afficher la couleur des tâches
+ construire des délais +
mettre Ă  jour Ă  partir des versions du concert

Ce qu'il dit:

+ CMake + C ++ 11 + OpenGL (ou un autre gapi)
+ OpenSSL
+ cpp-httplib
+ Version activement prise en charge pour Windows, sur d'autres plateformes (Ubuntu \ MacOS) est construite et fonctionne mĂŞme

All Articles