func printReports()

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
}