Timetracker para Youtrack: DIY

Existe um maravilhoso aplicativo T-REC que permite rastrear o tempo gasto em tarefas no Youtrack e gravá-lo na tarefa. Mas o autor o abandonou há mais de dois anos, além de antigas dependências, o carregamento constante de um núcleo (o elétron aparentemente é o culpado) e falhas periódicas levaram ao fato de que se tornou "inconveniente" usá-lo. Eu decidi escrever o meu próprio, com a mesma funcionalidade, apenas para os profissionais, então Honsu apareceu ...



A documentação atual sobre como trabalhar com o Youtrack está aqui .

Como funciona:

para acessar o Youtrack a partir de um aplicativo de terceiros, você precisa de um token para funcionar.

  1. Faça login no YouTrack em um navegador
  2. Vá para o perfil " example.youtrack.com/users/me "
  3. Localize o item "Atualizar informações pessoais e gerenciar logins"
  4. Abra a aba "Autenticação"
  5. Clique no botão "Novo token ..."
  6. Preencha o campo do cliente "YoutrackTimerec"
  7. Escolhendo a quais subsistemas precisamos acessar - “YouTrack” primeiro
  8. Clique no botão Criar token
  9. Copiamos o token, porque ele é mostrado apenas uma vez.

Os exemplos estão na forma de solicitações cURL, mas são fáceis de mudar para a forma desejada.

Primeiro, você precisa verificar se o endereço digitado está correto e se há uma API REST no lado do servidor. se o serviço estiver disponível e a chave estiver correta, o json com dados contábeis será retornado

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



O que o Agile sem tarefas? Simplificadas, as tarefas geralmente vivem em sprints e sprints em pranchas. São apenas as placas ativas que você precisa para poder selecionar as tarefas mais tarde para acompanhamento do tempo. A resposta contém uma lista de placas disponíveis para um usuário 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"
   }
]



O próximo passo é obter tarefas do

quadro : - `Board Some Name:` ​​o nome após o espaço ser indicado, termine com `:`
- `{Current sprint}` somente tarefas do sprint atual
são executadas - `# Não resolvidas` apenas tarefas não fechadas são executadas As tarefas virão com uma variedade de objetos , existem algumas propriedades, mas, para contabilizar o tempo, serão necessários campos de ID, Resumo - o cabeçalho, Tempo gasto - o tempo gasto em minutos e sprint - o ID do sprint, se você precisar trabalhar com ele.

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



Os dados obtidos são suficientes para mapeamentos e navegação na lista de tarefas. A idéia principal do aplicativo é considerar o tempo gasto no trabalho em uma tarefa específica. Para fazer isso, envie ao servidor o número de minutos (WorkItem), com a seguinte consulta Por que XML? Por alguma razão, o servidor de teste não aceita o WorkItem como um objeto json. Histórico de tarefas diárias: é possível solicitar tarefas para as quais o campo Tempo gasto> 0, após processar o WorkItem, você pode compilar um histórico de trabalho. Solicitando todas as tarefas no sprint atual.Em seguida, processamos a matriz de tarefas recebidas e fazemos solicitações para aquelas que perderam tempo.Depois de processados ​​os dados recebidos, você pode mostrá-los de uma forma conveniente Onde vive o 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"







Ele é montado junto com outros exemplos

Ou aqui na forma de exe (Windows): github.com/dalerank/nanogui/releases

Por que isso é feito:

+ acompanhe o tempo gasto nas tarefas
+ veja como o resto da API funciona
+ se possível faça um monoapp, sem dependências
+ interessantes :)

O que ele pode fazer:

+ pegar tarefas do youtrack
+ mostra placas ativas
+ marcar o tempo coletado como um item de trabalhoItem na tarefa
+ interromper o tempo de inatividade
+ lembrar sobre a ausência de uma tarefa quando a atividade é detectada
+ mostrar o histórico de rastreamento de dias por dias
+ não armazena dados localmente, exceto uma chave e um servidor

O que não sabe como:

+ use várias contas
+ armazene o tempo de falha se não houver Internet
+ crie novas tarefas no app
+ mostre a cor das tarefas
+ construa cronogramas +
atualize a partir dos lançamentos do show

O que diz:

+ CMake + C ++ 11 + OpenGL (ou outro gapi)
+ OpenSSL
+ cpp-activationplib
+ Versão ativamente suportada para Windows, em outras plataformas (Ubuntu \ MacOS) é criada e até funciona

All Articles