diff --git a/cmd/crowdsec/crowdsec.go b/cmd/crowdsec/crowdsec.go index a6bb03868ab..6e0affc85a6 100644 --- a/cmd/crowdsec/crowdsec.go +++ b/cmd/crowdsec/crowdsec.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "strconv" + "os" "time" log "github.com/sirupsen/logrus" @@ -97,12 +98,12 @@ func startHeartBeat(ctx context.Context, _ *csconfig.Config, apiClient *apiclien apiClient.HeartBeat.StartHeartBeat(ctx) } -func startOutputRoutines(ctx context.Context, cConfig *csconfig.Config, parsers *parser.Parsers, apiClient *apiclient.ApiClient, stageCollector *parser.StageParseCollector, bucketOverflows []pipeline.Event) { +func startOutputRoutines(ctx context.Context, cConfig *csconfig.Config, parsers *parser.Parsers, apiClient *apiclient.ApiClient, sd *StateDumper) { for idx := range cConfig.Crowdsec.OutputRoutinesCount { log.WithField("idx", idx).Info("Starting output routine") outputsTomb.Go(func() error { defer trace.CatchPanic("crowdsec/runOutput/"+strconv.Itoa(idx)) - return runOutput(ctx, inEvents, outEvents, buckets, *parsers.PovfwCtx, parsers.Povfwnodes, apiClient, stageCollector, bucketOverflows) + return runOutput(ctx, inEvents, outEvents, buckets, *parsers.PovfwCtx, parsers.Povfwnodes, apiClient, sd) }) } } @@ -157,7 +158,7 @@ func runCrowdsec( startHeartBeat(ctx, cConfig, apiClient) - startOutputRoutines(ctx, cConfig, parsers, apiClient, sd.StageParse, sd.BucketOverflows) + startOutputRoutines(ctx, cConfig, parsers, apiClient, sd) if err := startLPMetrics(ctx, cConfig, apiClient, hub, datasources); err != nil { return err @@ -222,7 +223,7 @@ func serveCrowdsec( log.Fatal(err) } - return nil + os.Exit(0) } return nil diff --git a/cmd/crowdsec/output.go b/cmd/crowdsec/output.go index 91017fec85e..149dd1c0d3c 100644 --- a/cmd/crowdsec/output.go +++ b/cmd/crowdsec/output.go @@ -60,8 +60,7 @@ func runOutput( postOverflowCTX parser.UnixParserCtx, postOverflowNodes []parser.Node, client *apiclient.ApiClient, - stageCollector *parser.StageParseCollector, - bucketOverflows []pipeline.Event, + sd *StateDumper, ) error { var ( cache []pipeline.RuntimeAlert @@ -114,7 +113,7 @@ func runOutput( } /* process post overflow parser nodes */ - event, err := parser.Parse(postOverflowCTX, event, postOverflowNodes, stageCollector) + event, err := parser.Parse(postOverflowCTX, event, postOverflowNodes, sd.StageParse) if err != nil { return fmt.Errorf("postoverflow failed: %w", err) } @@ -124,7 +123,7 @@ func runOutput( // if the Alert is nil, it's to signal bucket is ready for GC, don't track this // dump after postoveflow processing to avoid missing whitelist info if flags.DumpDir != "" && ov.Alert != nil { - bucketOverflows = append(bucketOverflows, event) + sd.BucketOverflows = append(sd.BucketOverflows, event) } if ov.Whitelisted {