in cli_tools/diagnostics/main_windows.go [364:405]
func gatherLogs(trace bool) ([]logFolder, error) {
runFuncs := []func(logs chan logFolder, errs chan error){
gatherSystemLogs,
gatherDiskLogs,
gatherNetworkLogs,
gatherProgramLogs,
gatherEventLogs,
gatherKubernetesLogs,
gatherRDPSettings,
getDockerImagesList,
}
if trace {
runFuncs = append(runFuncs, gatherTraceLogs)
}
folderCount := len(runFuncs)
folders := make([]logFolder, 0, folderCount)
errStrings := make([]string, 0)
ch := make(chan logFolder, folderCount)
errs := make(chan error)
for _, run := range runFuncs {
go run(ch, errs)
}
for {
select {
case folder := <-ch:
folders = append(folders, folder)
case err := <-errs:
errStrings = append(errStrings, err.Error())
}
if len(folders) == folderCount {
break
}
}
if len(errStrings) > 0 {
return folders, errors.New(strings.Join(errStrings, "\n"))
}
return folders, nil
}