in cli/report/report.go [101:162]
func printReports(results interface{}, reportOutputPath string, format string, fileSuffix string) error {
resultsMap := results.(map[string]interface{})
for group, reports := range resultsMap {
reportsMap := reports.(map[string]interface{})
for reportName, content := range reportsMap {
if strings.HasSuffix(reportName, "_report") {
reportFileName := group + "." + reportName + "_" + fileSuffix
fmt.Printf("Generating %v.%v\n", group, reportName)
if format == "json" {
reportFileName = reportFileName + ".json"
fileContent, err := json.MarshalIndent(content, "", " ")
if err != nil {
return err
}
err = os.WriteFile(filepath.Join(reportOutputPath, reportFileName), fileContent, 0644)
if err != nil {
return err
}
} else {
reportFileName = reportFileName + ".csv"
contentSlice := content.([]interface{})
f, _ := os.Create(filepath.Join(reportOutputPath, reportFileName))
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
w := csv.NewWriter(f)
if len(contentSlice) > 0 {
firstRow := contentSlice[0]
var keys []string
firstRowMap := firstRow.(map[string]interface{})
for key := range firstRowMap {
keys = append(keys, key)
}
sort.Strings(keys)
err := w.Write(keys)
if err != nil {
return err
}
w.Flush()
for _, record := range contentSlice {
recordMap := record.(map[string]interface{})
var record []string
for _, key := range keys {
record = append(record, recordMap[key].(string))
}
err = w.Write(record)
if err != nil {
return err
}
}
w.Flush()
}
}
}
}
}
return nil
}