Timetracker für Youtrack: DIY

Es gibt eine wunderbare T-REC- Anwendung , mit der Sie die für Aufgaben in Youtrack aufgewendete Zeit verfolgen und in Aufgaben schreiben können. Aber der Autor hat es vor mehr als zwei Jahren aufgegeben, plus alte Abhängigkeiten, die ständige Belastung eines Kerns (das Elektron ist anscheinend schuld) und regelmäßige Abstürze machten es "unpraktisch", es zu benutzen. Ich beschloss, meine eigenen mit der gleichen Funktionalität nur für die Profis zu schreiben, also erschien Honsu ...



Die aktuelle Dokumentation zur Arbeit mit Youtrack finden Sie hier .

So funktioniert es:

Um von einer Drittanbieteranwendung aus auf Youtrack zugreifen zu können, benötigen Sie ein Token.

  1. Melden Sie sich in einem Browser bei YouTrack an
  2. Gehen Sie zum Profil " example.youtrack.com/users/me ".
  3. Suchen Sie den Punkt "Persönliche Informationen aktualisieren und Anmeldungen verwalten".
  4. Öffnen Sie die Registerkarte "Authentifizierung"
  5. Klicken Sie auf die Schaltfläche "Neuer Token ..."
  6. Füllen Sie das Client-Feld "YoutrackTimerec" aus.
  7. Wählen Sie zuerst aus, auf welche Subsysteme wir Zugriff benötigen - "YouTrack"
  8. Klicken Sie auf die Schaltfläche Token erstellen
  9. Wir kopieren das Token, da es nur einmal angezeigt wird.

Beispiele sind cURL-Anforderungen, die sich jedoch leicht in die gewünschte Form verschieben lassen.

Zuerst müssen Sie überprüfen, ob die eingegebene Adresse korrekt ist und auf der Serverseite eine REST-API vorhanden ist. Wenn der Dienst verfügbar ist und der Schlüssel korrekt ist, wird json mit Buchhaltungsdaten zurückgegeben

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



Was ist agil ohne Aufgaben? Vereinfacht gesagt leben Aufgaben normalerweise in Sprints und Sprints in Boards. Es sind nur die aktiven Boards, die Sie benötigen, um Aufgaben für die Zeiterfassung auszuwählen. Die Antwort enthält eine Liste der verfügbaren Boards für einen bestimmten Benutzer:

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



Der nächste Schritt besteht darin, Aufgaben vom

Board abzurufen : - `Board Some Name:` ​​Der Name nach der Angabe des Leerzeichens endet mit `:`
- `{Aktueller Sprint}` Es werden nur Aufgaben aus dem aktuellen Sprint ausgeführt.
- `# Ungelöst` Nur nicht geschlossene Aufgaben werden ausgeführt. Aufgaben werden mit einer Reihe von Objekten geliefert Es gibt einige Eigenschaften, aber für die Berücksichtigung der Zeit werden ID-Felder benötigt. Zusammenfassung ist die Kopfzeile, verbrachte Zeit ist die in Minuten verbrachte Zeit und Sprint ist die Sprint-ID, wenn Sie damit arbeiten müssen.

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



Die erhaltenen Daten reichen für Zuordnungen und Navigation durch die Aufgabenliste aus. Die Hauptidee der Anwendung besteht darin, die Zeit zu berücksichtigen, die für die Arbeit an einer bestimmten Aufgabe aufgewendet wird. Senden Sie dazu dem Server die Anzahl der Minuten (WorkItem) mit der folgenden Abfrage: Warum XML? Aus irgendeinem Grund akzeptiert der Testserver das WorkItem nicht als JSON-Objekt. Täglicher Aufgabenverlauf: Sie können Aufgaben anfordern, für die Sie im Feld Verwendete Zeit> 0 nach der Verarbeitung ihres WorkItems einen Arbeitsverlauf erstellen können. . Anfordern alle Aufgaben im aktuellen Sprint Als nächstes verarbeiten wir die eingehende Task - Array und Make - Anfragen für diejenigen , die aus der Zeit geschrieben haben. Nachdem die empfangenen Daten verarbeitet, können Sie es in einer bequemen Form zeigen kann Wo steht Honsů 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"







Es wird zusammen mit anderen Beispielen zusammengestellt.

Oder hier in Form von exe (Windows): github.com/dalerank/nanogui/releases

Warum dies getan wird:

+ Verfolgen Sie die für Aufgaben aufgewendete Zeit
+ Sehen Sie, wie Ruhe-API-Youtrack funktioniert
+ Erstellen Sie nach Möglichkeit eine Monoapp ohne Abhängigkeiten
+ interessant :)

Was es tun kann:

+ Aufgaben von youtrack abholen
+ aktive Boards anzeigen +
die gesammelte Zeit als Arbeitselement in der Aufgabe markieren
+ Ausfallzeiten abschneiden
+ an das Fehlen einer Aufgabe erinnern, wenn Aktivität erkannt wird
+ den Verlauf der Zeiterfassung nach Tagen anzeigen
+ nicht speichern + lokale Daten, außer einem Schlüssel und einem Server

Was weiß nicht wie:

+ Verwenden Sie mehrere Konten
+ Speichern Sie die geknackte Zeit, wenn kein Internet vorhanden ist
+ Erstellen Sie neue Aufgaben in App
+ Zeigen Sie die Farbe der Aufgaben an
+ Erstellen Sie Zeitpläne +
Aktualisieren Sie von den Veröffentlichungen des Gigs

Was es heißt:

+ CMake + C ++ 11 + OpenGL (oder eine andere Lücke)
+ OpenSSL
+ cpp-httplib
+ Die aktiv unterstützte Version für Windows auf anderen Plattformen (Ubuntu \ MacOS) wurde erstellt und funktioniert sogar

All Articles