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
}