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.- Faça login no YouTrack em um navegador
 - Vá para o perfil " example.youtrack.com/users/me "
 - Localize o item "Atualizar informações pessoais e gerenciar logins"
 - Abra a aba "Autenticação"
 - Clique no botão "Novo token ..."
 - Preencha o campo do cliente "YoutrackTimerec"
 - Escolhendo a quais subsistemas precisamos acessar - “YouTrack” primeiro
 - Clique no botão Criar token
 - 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á retornadocurl -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 doquadro : - `Board Some Name:` o nome após o espaço ser indicado, termine com `:`- `{Current sprint}` somente tarefas do sprint atualsã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/honsucurl -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 exemplosOu aqui na forma de exe (Windows): github.com/dalerank/nanogui/releasesPor 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 servidorO 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 showO 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