瀏覽代碼

add --failures to explain feature : only display failed lines (#1048)

* add --failures to explain feature : only display failed lines

* no error no problem
Thibault "bui" Koechlin 3 年之前
父節點
當前提交
7362828a3b
共有 3 個文件被更改,包括 18 次插入10 次删除
  1. 4 5
      cmd/crowdsec-cli/explain.go
  2. 2 2
      cmd/crowdsec-cli/hubtest.go
  3. 12 3
      pkg/cstest/parser_assert.go

+ 4 - 5
cmd/crowdsec-cli/explain.go

@@ -17,7 +17,7 @@ func NewExplainCmd() *cobra.Command {
 	var dsn string
 	var dsn string
 	var logLine string
 	var logLine string
 	var logType string
 	var logType string
-	var details bool
+	var opts cstest.DumpOpts
 
 
 	var cmdExplain = &cobra.Command{
 	var cmdExplain = &cobra.Command{
 		Use:   "explain",
 		Use:   "explain",
@@ -96,16 +96,15 @@ cscli explain -dsn "file://myfile.log" --type nginx
 				log.Fatalf("unable to load bucket dump result: %s", err)
 				log.Fatalf("unable to load bucket dump result: %s", err)
 			}
 			}
 
 
-			if err := cstest.DumpTree(*parserDump, *bucketStateDump, details); err != nil {
-				log.Fatalf(err.Error())
-			}
+			cstest.DumpTree(*parserDump, *bucketStateDump, opts)
 		},
 		},
 	}
 	}
 	cmdExplain.PersistentFlags().StringVarP(&logFile, "file", "f", "", "Log file to test")
 	cmdExplain.PersistentFlags().StringVarP(&logFile, "file", "f", "", "Log file to test")
 	cmdExplain.PersistentFlags().StringVarP(&dsn, "dsn", "d", "", "DSN to test")
 	cmdExplain.PersistentFlags().StringVarP(&dsn, "dsn", "d", "", "DSN to test")
 	cmdExplain.PersistentFlags().StringVarP(&logLine, "log", "l", "", "Lgg line to test")
 	cmdExplain.PersistentFlags().StringVarP(&logLine, "log", "l", "", "Lgg line to test")
 	cmdExplain.PersistentFlags().StringVarP(&logType, "type", "t", "", "Type of the acquisition to test")
 	cmdExplain.PersistentFlags().StringVarP(&logType, "type", "t", "", "Type of the acquisition to test")
-	cmdExplain.PersistentFlags().BoolVarP(&details, "verbose", "v", false, "Display individual changes")
+	cmdExplain.PersistentFlags().BoolVarP(&opts.Details, "verbose", "v", false, "Display individual changes")
+	cmdExplain.PersistentFlags().BoolVar(&opts.SkipOk, "failures", false, "Only show failed lines")
 
 
 	return cmdExplain
 	return cmdExplain
 }
 }

+ 2 - 2
cmd/crowdsec-cli/hubtest.go

@@ -574,8 +574,8 @@ cscli hubtest create my-scenario-test --parsers crowdsecurity/nginx --scenarios
 						log.Fatalf("unable to load scenario result after run: %s", err)
 						log.Fatalf("unable to load scenario result after run: %s", err)
 					}
 					}
 				}
 				}
-
-				cstest.DumpTree(*test.ParserAssert.TestData, *test.ScenarioAssert.PourData, false)
+				opts := cstest.DumpOpts{}
+				cstest.DumpTree(*test.ParserAssert.TestData, *test.ScenarioAssert.PourData, opts)
 			}
 			}
 		},
 		},
 	}
 	}

+ 12 - 3
pkg/cstest/parser_assert.go

@@ -271,7 +271,12 @@ func LoadParserDump(filepath string) (*ParserResults, error) {
 	return &pdump, nil
 	return &pdump, nil
 }
 }
 
 
-func DumpTree(parser_results ParserResults, bucket_pour BucketPourInfo, details bool) error {
+type DumpOpts struct {
+	Details bool
+	SkipOk  bool
+}
+
+func DumpTree(parser_results ParserResults, bucket_pour BucketPourInfo, opts DumpOpts) {
 	//note : we can use line -> time as the unique identifier (of acquisition)
 	//note : we can use line -> time as the unique identifier (of acquisition)
 
 
 	state := make(map[time.Time]map[string]map[string]ParserResult)
 	state := make(map[time.Time]map[string]map[string]ParserResult)
@@ -317,6 +322,11 @@ func DumpTree(parser_results ParserResults, bucket_pour BucketPourInfo, details
 	green := color.New(color.FgGreen).SprintFunc()
 	green := color.New(color.FgGreen).SprintFunc()
 	//get each line
 	//get each line
 	for tstamp, rawstr := range assoc {
 	for tstamp, rawstr := range assoc {
+		if opts.SkipOk {
+			if _, ok := state[tstamp]["buckets"]["OK"]; ok {
+				continue
+			}
+		}
 		fmt.Printf("line: %s\n", rawstr)
 		fmt.Printf("line: %s\n", rawstr)
 		skeys := make([]string, 0, len(state[tstamp]))
 		skeys := make([]string, 0, len(state[tstamp]))
 		for k := range state[tstamp] {
 		for k := range state[tstamp] {
@@ -409,7 +419,7 @@ func DumpTree(parser_results ParserResults, bucket_pour BucketPourInfo, details
 				}
 				}
 				if res {
 				if res {
 					fmt.Printf("\t%s\t%s %s %s (%s)\n", presep, sep, emoji.GreenCircle, parser, changeStr)
 					fmt.Printf("\t%s\t%s %s %s (%s)\n", presep, sep, emoji.GreenCircle, parser, changeStr)
-					if details {
+					if opts.Details {
 						fmt.Print(detailsDisplay)
 						fmt.Print(detailsDisplay)
 					}
 					}
 				} else {
 				} else {
@@ -451,5 +461,4 @@ func DumpTree(parser_results ParserResults, bucket_pour BucketPourInfo, details
 		}
 		}
 		fmt.Println()
 		fmt.Println()
 	}
 	}
-	return nil
 }
 }