cmd/tc-collector/buildList.go (89 lines of code) (raw):
package main
import (
"fmt"
"io"
"time"
"github.com/json-iterator/go"
)
type BuildList struct {
Count int `json:"count"`
Href string `json:"href"`
NextHref string `json:"nextHref"`
Builds []*Build `json:"build"`
}
type Build struct {
Id int `json:"id"`
Type string `json:"buildTypeId"`
Status string `json:"status"`
Agent Agent `json:"agent"`
FinishDate string `json:"finishDate"`
BuildNumber string `json:"number"`
ArtifactDependencies ArtifactDependencies `json:"artifact-dependencies"`
Artifacts Artifacts `json:"artifacts"`
Private bool `json:"personal"`
TriggeredBy *TriggeredBy `json:"triggered"`
installerInfo *InstallerInfo
buildInfo *BuildInfo
}
type TriggeredBy struct {
User *User `json:"user"`
}
type User struct {
Email string `json:"email"`
}
type InstallerInfo struct {
id int
changes []string
buildTime time.Time
}
type BuildInfo struct {
id int
changes []string
}
type Artifacts struct {
File []Artifact `json:"file"`
}
type Artifact struct {
Url string `json:"href"`
Children Artifacts `json:"children"`
}
type ArtifactDependencies struct {
Builds []ArtifactDependencyBuild `json:"build"`
}
type ArtifactDependencyBuild struct {
Id int `json:"id"`
BuildTypeId string `json:"buildTypeId"`
FinishDate string `json:"finishDate"`
}
type Agent struct {
Name string `json:"name"`
}
func (t *Collector) loadBuilds(url string) (*BuildList, error) {
t.logger.Info("request", "url", url)
request, err := t.createRequest(t.taskContext, url)
if err != nil {
return nil, err
}
response, err := t.httpClient.Do(request)
if err != nil {
return nil, fmt.Errorf("failed to load builds: %w", err)
}
defer response.Body.Close()
if response.StatusCode > 300 {
responseBody, _ := io.ReadAll(response.Body)
return nil, fmt.Errorf("invalid response (%s): %s", response.Status, responseBody)
}
t.storeSessionIdCookie(response)
var result BuildList
err = jsoniter.ConfigFastest.NewDecoder(response.Body).Decode(&result)
if err != nil {
return nil, fmt.Errorf("failed to parse builds: %w", err)
}
return &result, nil
}
type ChangeList struct {
List []Change `json:"change"`
}
type Change struct {
Version string `json:"version"`
}