Timetracker untuk Youtrack: DIY

Ada aplikasi T-REC yang luar biasa yang memungkinkan Anda melacak waktu yang dihabiskan untuk tugas di Youtrack, dan menuliskannya ke tugas. Tetapi penulis meninggalkannya lebih dari dua tahun yang lalu, ditambah ketergantungan lama, pemuatan konstan satu inti (elektron tampaknya disalahkan) dan crash berkala membuatnya menjadi "tidak nyaman" untuk menggunakannya. Saya memutuskan untuk menulis sendiri, dengan fungsi yang sama, hanya pada pro, jadi Honsu muncul ...



Dokumentasi terkini tentang bekerja dengan Youtrack ada di sini .

Cara kerjanya:

Untuk mengakses Youtrack dari aplikasi pihak ketiga, Anda memerlukan token untuk berfungsi.

  1. Masuk ke YouTrack di browser
  2. Buka profil " example.youtrack.com/users/me "
  3. Temukan item “Perbarui informasi pribadi dan kelola info masuk”
  4. Buka tab "Otentikasi"
  5. Klik tombol "Token baru ..."
  6. Isi kolom klien "YoutrackTimerec"
  7. Memilih subsistem mana yang perlu kita akses - “YouTrack” terlebih dahulu
  8. Klik tombol Buat Token
  9. Kami menyalin token, karena hanya ditampilkan sekali.

Contohnya dalam bentuk permintaan CURL, tetapi mudah untuk beralih ke formulir yang diinginkan.

Pertama, Anda perlu memeriksa bahwa alamat yang dimasukkan sudah benar dan ada REST API di sisi server. jika layanan tersedia dan kuncinya benar, json dengan data akuntansi akan dikembalikan

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



Agile apa tanpa tugas? Sederhananya, tugas biasanya hidup dalam sprint, sementara sprint hidup di papan. Hanya papan aktif yang perlu Anda peroleh untuk kemudian memilih tugas untuk pelacakan waktu. Jawabannya berisi daftar papan yang tersedia untuk pengguna tertentu:

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



Langkah selanjutnya adalah mendapatkan tugas dari

papan : - `Board Some Name:` ​​nama setelah spasi diindikasikan, diakhiri dengan `:`
- `{Sprint saat ini}` hanya tugas-tugas dari sprint saat
ini yang diambil - `# Tidak terselesaikan` hanya tugas tertutup yang diambil. Tugas akan datang dengan berbagai objek. , ada beberapa properti, tetapi untuk penghitungan waktu, bidang ID akan diperlukan, Ringkasan adalah tajuk, Waktu yang dihabiskan adalah dalam hitungan menit, dan sprint adalah sprint ID jika Anda perlu bekerja dengannya.

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



Data yang diperoleh cukup untuk pemetaan dan navigasi melalui daftar tugas. Ide utama dari aplikasi ini adalah untuk mempertimbangkan waktu yang dihabiskan dalam pekerjaan pada tugas tertentu. Untuk melakukan ini, kirim server jumlah menit (WorkItem), dengan permintaan berikut Mengapa XML? Untuk beberapa alasan, server uji tidak menerima WorkItem sebagai objek json. Riwayat tugas harian: Anda dapat meminta tugas yang bidang Waktu Habis> 0, setelah memproses WorkItem mereka, Anda dapat menyusun riwayat pekerjaan. Meminta semua tugas dalam sprint saat ini. Selanjutnya, kami memproses susunan tugas yang masuk, dan membuat permintaan bagi mereka yang telah menghapus waktu. Setelah memproses data yang diterima, Anda dapat menampilkannya dalam formulir yang nyaman Di mana Honsu live: 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"







Itu dirangkai bersama dengan contoh-contoh lain

Atau di sini dalam bentuk exe (Windows): github.com/dalerank/nanogui/releases

Mengapa ini dilakukan:

+ melacak waktu yang dihabiskan untuk tugas-tugas
+ melihat bagaimana sisa api youtrack bekerja
+ jika mungkin membuat monoapp, tanpa dependensi
+ menarik :)

Apa yang dapat dilakukannya:

+ mengambil tugas dari youtrack
+ menampilkan papan aktif
+ menandai waktu yang dikumpulkan sebagai sebuah workItem dalam tugas
+ memotong waktu henti
+ mengingatkan tentang tidak adanya tugas ketika aktivitas terdeteksi
+ menunjukkan riwayat pelacakan waktu berdasarkan hari
+ tidak menyimpan data lokal, kecuali kunci dan server

Apa yang tidak tahu caranya:

+ menggunakan banyak akun
+ menyimpan waktu yang retak jika tidak ada Internet
+ membuat tugas baru dan tidak
+ menampilkan warna tugas
+ membangun jadwal +
memperbarui dari rilis pertunjukan

Apa yang dikatakan:

+ CMake + C ++ 11 + OpenGL (atau gapi lain)
+ OpenSSL
+ cpp-httplib
+ Versi yang didukung secara aktif untuk Windows, pada platform lain (Ubuntu \ MacOS) dibuat dan bahkan berfungsi

All Articles