()
| 14 | ) |
| 15 | |
| 16 | func (da *Auditor) PrintReport() { |
| 17 | _ = da.flushWriteQueue(2 * time.Second) |
| 18 | |
| 19 | type reportJob struct { |
| 20 | id JobID |
| 21 | job JobAnalysis |
| 22 | } |
| 23 | |
| 24 | da.mu.RLock() |
| 25 | jobs := make([]reportJob, 0, len(da.jobs)) |
| 26 | for id, job := range da.jobs { |
| 27 | jobs = append(jobs, reportJob{id: id, job: cloneJobAnalysis(job)}) |
| 28 | } |
| 29 | writeErrorCount := da.writeErrorCount |
| 30 | writeErrors := append([]string(nil), da.writeErrors...) |
| 31 | da.mu.RUnlock() |
| 32 | |
| 33 | sort.Slice(jobs, func(i, j int) bool { |
| 34 | if jobs[i].id.Module == jobs[j].id.Module { |
| 35 | return jobs[i].id.Name < jobs[j].id.Name |
| 36 | } |
| 37 | return jobs[i].id.Module < jobs[j].id.Module |
| 38 | }) |
| 39 | |
| 40 | for _, entry := range jobs { |
| 41 | job := entry.job |
| 42 | da.printJobAnalysis(&job) |
| 43 | } |
| 44 | |
| 45 | da.printWriteErrorSummary(writeErrorCount, writeErrors) |
| 46 | } |
| 47 | |
| 48 | // PrintSummary prints a consolidated summary across all jobs |
| 49 | func (da *Auditor) PrintSummary() { |
no test coverage detected