func()

in metrics/metrics/builds_per_change.go [29:64]


func (bps *BuildsPerChange) Collect() (data.DataSet, error) {
	result := data.CreateDataSet(GetColumnNames(bps.columns))
	buildsPerPipeline := make(map[string]map[int]int)
	for _, pipeline := range bps.pipelines {
		builds, err := bps.client.GetMostRecentBuilds(pipeline, bps.builds)
		if err != nil {
			return nil, fmt.Errorf("Cannot collect builds_per_change statistics for pipeline %s: %v", pipeline, err)
		}
		buildsPerChange := make(map[int]int)
		for _, build := range builds {
			change, err := getChangeNumber(build)
			if err != nil {
				return nil, err
			} else if change < 0 {
				continue
			}
			if _, ok := buildsPerChange[change]; !ok {
				buildsPerChange[change] = 0
			}
			buildsPerChange[change] += 1
		}
		buildsPerPipeline[pipeline.String()] = buildsPerChange
	}
	for pipeline, buildsPerChange := range buildsPerPipeline {
		for change, builds := range buildsPerChange {
			pid, err := data.CreatePipelineID(pipeline)
			if err != nil {
				err = result.AddRow(pid.Org, pid.Slug, change, builds)
			}
			if err != nil {
				return nil, fmt.Errorf("Failed to add result for change %d and pipeline %s: %v", change, pipeline, err)
			}
		}
	}
	return result, nil
}