Rastreador de tiempo para Youtrack: bricolaje

Hay una maravillosa aplicación T-REC que le permite realizar un seguimiento del tiempo dedicado a las tareas en Youtrack, y lo escribe en la tarea. Pero el autor lo abandonó hace más de dos años, además de las viejas dependencias, la carga constante de un núcleo (aparentemente el culpable es el electrón) y los bloqueos periódicos hicieron que fuera "inconveniente" usarlo. Decidí escribir el mío, con la misma funcionalidad, solo en los profesionales, por lo que apareció Honsu ...



La documentación actual sobre cómo trabajar con Youtrack está aquí .

Cómo funciona:

para acceder a Youtrack desde una aplicación de terceros, necesita un token para funcionar.

  1. Inicie sesión en YouTrack en un navegador
  2. Vaya al perfil " example.youtrack.com/users/me "
  3. Encuentre el elemento "Actualizar información personal y administrar inicios de sesión"
  4. Abra la pestaña "Autenticación"
  5. Haga clic en el botón "Nuevo token ..."
  6. Rellene el campo del cliente "YoutrackTimerec"
  7. Elegir a qué subsistemas necesitamos acceso - primero "YouTrack"
  8. Haga clic en el botón Crear token
  9. Copiamos el token, porque solo se muestra una vez.

Los ejemplos están en forma de solicitudes cURL, pero son fáciles de cambiar al formulario deseado.

Primero debe verificar que la dirección ingresada sea correcta y que haya una API REST en el lado del servidor. si el servicio está disponible y la clave es correcta, se devolverá json con datos contables

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é ágil sin tareas? Simplificado, las tareas generalmente viven en sprints y sprints en tableros. Son solo los tableros activos los que debes obtener para luego seleccionar tareas para el seguimiento del tiempo. La respuesta contiene una lista de tableros disponibles para un usuario específico:

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"
   }
]



El siguiente paso es obtener tareas del

tablero : - `Nombre del tablero:` el nombre después de que se indique el espacio, termina con `:`
- `{Sprint actual}` solo
se toman las tareas del sprint actual - `# # Sin resolver` solo se toman las tareas no cerradas Las tareas vendrán con una variedad de objetos , hay bastantes propiedades, pero para tener en cuenta el tiempo, se necesitarán los campos de ID, Resumen: el encabezado, Tiempo empleado: el tiempo empleado en minutos y sprint: la ID de sprint, si necesita trabajar con ella.

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" } ] }
         ],
      }]
}



Los datos obtenidos son suficientes para las asignaciones y la navegación a través de la lista de tareas. La idea principal de la aplicación es considerar el tiempo dedicado al trabajo en una tarea específica. Para hacer esto, envíe al servidor el número de minutos (WorkItem), con la siguiente consulta ¿Por qué XML? Por alguna razón, el servidor de prueba no acepta el WorkItem como un objeto json. Historial de tareas diarias: puede solicitar tareas para las cuales el campo Tiempo empleado> 0, después de procesar su WorkItem, puede compilar un historial de trabajo. Solicitando todas las tareas en el sprint actual. A continuación, procesamos la matriz de tareas entrantes y hacemos solicitudes para aquellos que han cancelado el tiempo. Una vez procesados ​​los datos recibidos, puede mostrarlos en una forma conveniente Dónde vive Honsu: 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"







Se ensambla junto con otros ejemplos

O aquí en forma de exe (Windows): github.com/dalerank/nanogui/releases

Por qué se hace esto:

+ realizar un seguimiento del tiempo dedicado a las tareas
+ ver cómo funciona la API de seguimiento de seguimiento
+ si es posible hacer una monoapp, sin dependencias
+ interesante :)

Lo que puede hacer:

+ recoger tareas de youtrack
+ mostrar tableros activos
+ marcar el tiempo recogido como un elemento de trabajo en la tarea
+ cortar el tiempo de inactividad
+ recordar la ausencia de una tarea cuando se detecta actividad
+ mostrar el historial de seguimiento de tiempo por días
+ no se almacena datos locales, excepto una clave y un servidor

Lo que no sabe cómo:

+ use varias cuentas
+ almacene el tiempo agrietado si no hay Internet
+ cree nuevas tareas inapp
+ muestre el color de las tareas
+ construya líneas de tiempo +
actualice desde los lanzamientos del concierto

Qué dice:

+ CMake + C ++ 11 + OpenGL (u otro gapi)
+ OpenSSL
+ cpp-httplib
+ Versión activa para Windows, en otras plataformas (Ubuntu \ MacOS) está construida e incluso funciona

All Articles