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