НОВОСТИ Timetracker для Youtrack: DIY

BDFpromo
Оффлайн

BDFpromo

.
.
Регистрация
23.09.18
Сообщения
12.347
Реакции
176
Репутация
0
Есть замечательное приложение позволяющее трэкать время, потраченное на задачи в Youtrack, и записывающее его в таску. Но автор забросил его больше двух лет назад, плюс старые зависимости, постоянная загрузка одного ядра (тут видимо виноват electron) и периодические падения привели к тому, что пользоваться им стало «неудобно». Решил написать свой, с тем же функционалом, только на плюсах, так появился Honsu…

rs3fhi85xjqgpum910xbrykpzjy.jpeg



Актуальная документация по работе с Youtrack

Как это работает:
Чтобы получить доступ к Youtrack из стороннего приложения, нужен токен для работы.
1. Логинимся в YouTrack в браузере
2. Идем в профиль « »
3. Находим пункт «Update personal information and manage logins»
4. Открываем вкладку «Authentication»
5. Жмем кнопку «New token...»
6. Заполняем поле клиента «YoutrackTimerec»
7. Выбираем к каким подсистемам нам нужен доступ — для начала «YouTrack»
8. Нажимаем кнопку «Create Token»
9. Копируем токен, потому что он показывается только один раз.

Примеры в виде сurl запросов, но их легко переложить в нужную форму.
Для начала нужно проверить, что введенный адрес корректный и на стороне сервера есть REST API.
curl -X GET " "
-H "Accept: application/json"
-H "Authorization: Bearer perm:token"
-H "Cache-Control: no-cache"
-H "Content-Type: application/json"
если сервис доступен и ключ верный, в ответ придет json c данными учетки

{"login":"s.user",
"email":"[email protected]",
"name":"S User",
"id":"1-325",
"$type":"Me"}

h4k2evsnpqtmwh_niwgv0e4izq0.png


Какой же Agile без задач? Упрощенно, задачи живут обычно в спринтах, а спринты в бордах. Как раз активные борды и надо получить, чтобы потом выбрать задачи для учета времени.
curl -X GET " "
-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"
}
]

rlrec1s95qtgpdz96lgc3qe1j4y.png


Следующий этап — получение задач из борды:
— `Board Some Name:` указывается имя после пробела, заканчиваем `:`
— `{Current sprint}` берутся только задачи из текущего спринта
— `#Unresolved` берутся только незакрытые задачи
curl -X GET " "
-H "Accept: application/json"
-H "Authorization: Bearer perm:token"
-H "Cache-Control: no-cache"
-H "Content-Type: application/json"

Задачи придут массивом объектов, там довольно много свойств, но для учета времени будут нужны поля ID, Summary — заголовок, Spent Time — потраченное время в минутах, и sprint — ID спринта, если понадобится с ним работать.

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

9joh5b1zfvgqizgoapmj_oj1opa.png


Полученных данных достаточно для отображений и перемещения по списку задач. Основная идея приложения считать время, проведенное в работе над конкретной задачей. Для этого надо послать серверу количество минут (WorkItem), следующим запросом

curl -i -X POST " "

-H "Accept: application/json"

-H "Authorization: Bearer perm:token"

-H "Cache-Control: no-cache"

-H "Content-Type: application/xml"

-d

UnixEpocTime*1000
10
added by Honsu

Development



Почему XML? По какой-то причине, тестовый сервер не принимает WorkItem в виде json-объекта.
mub85ccjnjgcxad3bll4pifo680.png


История задач по дням:
Можно запросить задачи, у которых поле Spent Time > 0, обработав их WorkItem можно составить историю работы.
Запрос всех задач текущего спринта
curl -X GET " "
-H "Accept: application/json"
-H "Authorization: Bearer perm:token"
-H "Cache-Control: no-cache"
-H "Content-Type: application/json"

Далее обрабатываем пришедший массив задач, и делаем запросы для тех, которые имеют списанное время
curl -X GET " "
-H "Accept: application/json"
-H "Authorization: Bearer perm:token"
-H "Cache-Control: no-cache"
-H "Content-Type: application/json"

Обработав пришедшие данные, можно показать его в удобном виде
e992onn0uzg2o9yi_lzhwho3a54.png


Где живет Honsu:

Собирается вместе с остальными примерами

или тут в виде exe (Windows):


Для чего это сделано:
+ вести учет времени, потраченного на задачи
+ посмотреть как работать rest api youtrack
+ по возможности сделать моноапп, без зависимостей
+ интересно :)

Что умеет:
+ забирать таски из youtrack
+ показывает активные boards
+ отмечать собранное время в виде workItem в задаче
+ отсекать время простоя
+ напоминать об отсутствии задачи при обнаружении активности
+ показывать историю учета времени с разбивкой по дням
+ не хранит локально данные, кроме ключа и сервера

Чего не умеет:
+ использовать несколько аккаунтов
+ хранить потреканное время если нет инета
+ создавать новые задачи инапп
+ отображать цвет задачек
+ строить графики времени работы
+ обновляться из релизов гита

На чем написано:
+ CMake + С++11 + OpenGL (или другой gapi)
+ OpenSSL
+ cpp-httplib
+ Активно поддерживается версия под Windows, на другие платформы (Ubuntu\MacOS) собирается и даже работает
 
Сверху Снизу