func()

in perfdash/metrics-downloader.go [144:200]


func (g *Downloader) getJobData(wg *sync.WaitGroup, result JobToCategoryData, resultLock *sync.Mutex, job string, tests Tests) {
	defer wg.Done()
	buildNumbers, err := g.MetricsBkt.GetBuildNumbers(job)
	if err != nil {
		panic(err)
	}

	buildsToFetch := tests.BuildsCount
	if buildsToFetch < 1 || g.Options.OverrideBuildCount {
		buildsToFetch = g.Options.DefaultBuildsCount
	}
	klog.Infof("Builds to fetch for %v: %v", job, buildsToFetch)

	sort.Sort(sort.Reverse(sort.IntSlice(buildNumbers)))
	for index := 0; index < buildsToFetch && index < len(buildNumbers); index++ {
		buildNumber := buildNumbers[index]
		cache := newArtifactsCache(g.MetricsBkt)
		klog.Infof("Fetching %s build %v...", job, buildNumber)
		for categoryLabel, categoryMap := range tests.Descriptions {
			for testLabel, testDescriptions := range categoryMap {
				for _, testDescription := range testDescriptions {
					if !g.allowParsersForAllTests && testDescription.Name == "" {
						continue
					}
					filePrefix := testDescription.OutputFilePrefix
					if testDescription.Name != "" {
						filePrefix = fmt.Sprintf("%v_%v", filePrefix, testDescription.Name)
					}
					searchPrefix := g.artifactName(tests, filePrefix)

					artifacts, err := cache.getMatchingFiles(job, buildNumber, searchPrefix)
					if err != nil || len(artifacts) == 0 {
						klog.Infof("Error while looking for %s* in %s build %v: %v", searchPrefix, job, buildNumber, err)
						continue
					}

					for _, artifact := range artifacts {
						metricsFileName := filepath.Base(artifact)
						resultCategory := getResultCategory(metricsFileName, filePrefix, categoryLabel, artifacts, testDescription.FetchMetricNameFromArtifact)
						fileName := g.artifactName(tests, metricsFileName)
						testDataResponse, err := g.MetricsBkt.ReadFile(job, buildNumber, fileName)
						if err != nil {
							klog.Infof("Error when reading response Body for %q: %v", fileName, err)
							continue
						}
						if testDescription.FetchMetricNameFromArtifact {
							trimmed := strings.TrimPrefix(metricsFileName, filePrefix+" ")
							testLabel = strings.Split(trimmed, "_")[0]
						}
						buildData := getBuildData(result, tests.Prefix, resultCategory, testLabel, job, resultLock)
						testDescription.Parser(testDataResponse, buildNumber, buildData)
					}
				}
			}
		}
	}
}