buildMissingDataSummary aggregates missing data across all runs
(processedRuns []ProcessedRun)
| 109 | |
| 110 | // buildMissingDataSummary aggregates missing data across all runs |
| 111 | func buildMissingDataSummary(processedRuns []ProcessedRun) []MissingDataSummary { |
| 112 | reportLog.Printf("Building missing data summary from %d processed runs", len(processedRuns)) |
| 113 | result := aggregateSummaryItems( |
| 114 | processedRuns, |
| 115 | // getItems: extract missing data from each run |
| 116 | func(pr ProcessedRun) []MissingDataReport { |
| 117 | return pr.MissingData |
| 118 | }, |
| 119 | // getKey: use data type as the aggregation key |
| 120 | func(data MissingDataReport) string { |
| 121 | return data.DataType |
| 122 | }, |
| 123 | // createSummary: create new summary for first occurrence |
| 124 | func(data MissingDataReport) *MissingDataSummary { |
| 125 | return &MissingDataSummary{ |
| 126 | DataType: data.DataType, |
| 127 | AggregatedSummaryBase: AggregatedSummaryBase{ |
| 128 | Count: 1, |
| 129 | Workflows: []string{data.WorkflowName}, |
| 130 | FirstReason: data.Reason, |
| 131 | RunIDs: []int64{data.RunID}, |
| 132 | }, |
| 133 | } |
| 134 | }, |
| 135 | // updateSummary: update existing summary with new occurrence |
| 136 | func(summary *MissingDataSummary, data MissingDataReport) { |
| 137 | summary.Count++ |
| 138 | summary.Workflows = sliceutil.MergeUnique(summary.Workflows, data.WorkflowName) |
| 139 | summary.RunIDs = append(summary.RunIDs, data.RunID) |
| 140 | }, |
| 141 | // finalizeSummary: populate display fields for console rendering |
| 142 | func(summary *MissingDataSummary) { |
| 143 | summary.WorkflowsDisplay = strings.Join(summary.Workflows, ", ") |
| 144 | summary.FirstReasonDisplay = summary.FirstReason |
| 145 | }, |
| 146 | ) |
| 147 | |
| 148 | // Sort by count descending |
| 149 | slices.SortFunc(result, func(a, b MissingDataSummary) int { |
| 150 | return cmp.Compare(b.Count, a.Count) |
| 151 | }) |
| 152 | |
| 153 | return result |
| 154 | } |
no test coverage detected