robots/issue-creator/sources/triage-filer.go
func (f *TriageFiler) loadClusters(jsonIn []byte) ([]*Cluster, error) {
	var err error
	f.data, err = parseTriageData(jsonIn)
	if err != nil {
		return nil, err
	}
	if err = f.filterAndValidate(f.windowDays); err != nil {
		return nil, err
	}

	// Aggregate failing builds in each cluster by job (independent of tests).
	for _, clust := range f.data.Clustered {
		clust.filer = f
		clust.jobs = make(map[string][]int)

		for _, test := range clust.Tests {
			for _, job := range test.Jobs {
				for _, buildnum := range job.Builds {
					found := false
					for _, oldBuild := range clust.jobs[job.Name] {
						if oldBuild == buildnum {
							found = true
							break
						}
					}
					if !found {
						clust.jobs[job.Name] = append(clust.jobs[job.Name], buildnum)
					}
				}
			}
		}
		clust.totalJobs = len(clust.jobs)
		clust.totalTests = len(clust.Tests)
		clust.totalBuilds = 0
		for _, builds := range clust.jobs {
			clust.totalBuilds += len(builds)
		}
	}
	return f.data.Clustered, nil
}
func (f *TriageFiler) loadClusters(jsonIn []byte) ([]*Cluster, error) {
	var err error
	f.data, err = parseTriageData(jsonIn)
	if err != nil {
		return nil, err
	}
	if err = f.filterAndValidate(f.windowDays); err != nil {
		return nil, err
	}

	// Aggregate failing builds in each cluster by job (independent of tests).
	for _, clust := range f.data.Clustered {
		clust.filer = f
		clust.jobs = make(map[string][]int)

		for _, test := range clust.Tests {
			for _, job := range test.Jobs {
				for _, buildnum := range job.Builds {
					found := false
					for _, oldBuild := range clust.jobs[job.Name] {
						if oldBuild == buildnum {
							found = true
							break
						}
					}
					if !found {
						clust.jobs[job.Name] = append(clust.jobs[job.Name], buildnum)
					}
				}
			}
		}
		clust.totalJobs = len(clust.jobs)
		clust.totalTests = len(clust.Tests)
		clust.totalBuilds = 0
		for _, builds := range clust.jobs {
			clust.totalBuilds += len(builds)
		}
	}
	return f.data.Clustered, nil
}
func ( f * TriageFiler ) loadClusters ( jsonIn [ ] byte ) ( [ ] * Cluster , error ) { var err error f . data , err = parseTriageData ( jsonIn ) if err != nil { return nil , err } if err = f . filterAndValidate ( f . windowDays ) ; err != nil { return nil , err } // Aggregate failing builds in each cluster by job (independent of tests). for _ , clust := range f . data . Clustered { clust . filer = f clust . jobs = make ( map [ string ] [ ] int ) for _ , test := range clust . Tests { for _ , job := range test . Jobs { for _ , buildnum := range job . Builds { found := false for _ , oldBuild := range clust . jobs [ job . Name ] { if oldBuild == buildnum { found = true break } } if ! found { clust . jobs [ job . Name ] = append ( clust . jobs [ job . Name ] , buildnum ) } } } } clust . totalJobs = len ( clust . jobs ) clust . totalTests = len ( clust . Tests ) clust . totalBuilds = 0 for _ , builds := range clust . jobs { clust . totalBuilds += len ( builds ) } } return f . data . Clustered , nil }
// loadClusters parses and filters the json data, then populates every Cluster struct with
// aggregated job data and totals. The job data specifies all jobs that failed in a cluster and the
// builds that failed for each job, independent of which tests the jobs or builds failed.
loadClusters parses and filters the json data then populates every Cluster struct with aggregated job data and totals . The job data specifies all jobs that failed in a cluster and the builds that failed for each job independent of which tests the jobs or builds failed .