diff --git a/cmd/analyze/analyze.go b/cmd/analyze/analyze.go index 9522dd3546..dea8225258 100644 --- a/cmd/analyze/analyze.go +++ b/cmd/analyze/analyze.go @@ -36,10 +36,11 @@ var AnalyzeCmd = &cobra.Command{ os.Exit(1) } - err = config.RunAnalysis() - if err != nil { - color.Red("Error: %v", err) - os.Exit(1) + analysisErrors := config.RunAnalysis() + if len(analysisErrors) != 0 { + for _, err := range analysisErrors { + color.Red("Error: %s", err) + } } if explain { diff --git a/pkg/analysis/analysis.go b/pkg/analysis/analysis.go index e7ed414bd5..c8fcadf9aa 100644 --- a/pkg/analysis/analysis.go +++ b/pkg/analysis/analysis.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "os" + "reflect" "strings" "github.com/fatih/color" @@ -95,7 +96,7 @@ func NewAnalysis(backend string, language string, filters []string, namespace st }, nil } -func (a *Analysis) RunAnalysis() error { +func (a *Analysis) RunAnalysis() []error { activeFilters := viper.GetStringSlice("active_filters") analyzerMap := analyzer.GetAnalyzerMap() @@ -107,16 +108,18 @@ func (a *Analysis) RunAnalysis() error { AIClient: a.AIClient, } + var errorList []error + // if there are no filters selected and no active_filters then run all of them if len(a.Filters) == 0 && len(activeFilters) == 0 { for _, analyzer := range analyzerMap { results, err := analyzer.Analyze(analyzerConfig) if err != nil { - return err + errorList = append(errorList, errors.New(fmt.Sprintf("[%s] %s", reflect.TypeOf(analyzer).Name(), err))) } a.Results = append(a.Results, results...) } - return nil + return errorList } // if the filters flag is specified @@ -125,14 +128,14 @@ func (a *Analysis) RunAnalysis() error { if analyzer, ok := analyzerMap[filter]; ok { results, err := analyzer.Analyze(analyzerConfig) if err != nil { - return err + errorList = append(errorList, errors.New(fmt.Sprintf("[%s] %s", filter, err))) } a.Results = append(a.Results, results...) } else { - return errors.New(fmt.Sprintf("\"%s\" filter does not exist. Please run k8sgpt filters list.", filter)) + errorList = append(errorList, errors.New(fmt.Sprintf("\"%s\" filter does not exist. Please run k8sgpt filters list.", filter))) } } - return nil + return errorList } // use active_filters @@ -140,12 +143,12 @@ func (a *Analysis) RunAnalysis() error { if analyzer, ok := analyzerMap[filter]; ok { results, err := analyzer.Analyze(analyzerConfig) if err != nil { - return err + errorList = append(errorList, errors.New(fmt.Sprintf("[%s] %s", filter, err))) } a.Results = append(a.Results, results...) } } - return nil + return errorList } func (a *Analysis) GetAIResults(output string, anonymize bool) error { diff --git a/pkg/server/server.go b/pkg/server/server.go index 341a611159..34e7471ade 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -55,12 +55,14 @@ func (s *Config) analyzeHandler(w http.ResponseWriter, r *http.Request) { return } - err = config.RunAnalysis() - if err != nil { - color.Red("Error: %v", err) + analysisErrors := config.RunAnalysis() + if analysisErrors != nil { + var errorMessage string + for _, err := range analysisErrors { + errorMessage += err.Error() + "\n" + } + http.Error(w, errorMessage, http.StatusInternalServerError) health.Failure++ - http.Error(w, err.Error(), http.StatusInternalServerError) - return } if explain {