diff --git a/.github/workflows/ci_golangci-lint.yml b/.github/workflows/ci_golangci-lint.yml index 02792ff5b..b2ee12360 100644 --- a/.github/workflows/ci_golangci-lint.yml +++ b/.github/workflows/ci_golangci-lint.yml @@ -33,16 +33,6 @@ jobs: - name: golangci-lint uses: golangci/golangci-lint-action@v3 with: - # Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version version: v1.50 - # Optional: golangci-lint command line arguments. args: --issues-exit-code=1 --timeout 10m - # Optional: show only new issues if it's a pull request. The default value is `false`. only-new-issues: false - # Optional: if set to true then the all caching functionality will be complete disabled, - # takes precedence over all other caching options. - skip-cache: false - # Optional: if set to true then the action don't cache or restore ~/go/pkg. - skip-pkg-cache: false - # Optional: if set to true then the action don't cache or restore ~/.cache/go-build. - skip-build-cache: false diff --git a/.golangci.yml b/.golangci.yml index 3047402bf..74c9dafdc 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -5,6 +5,7 @@ run: - pkg/time/rate skip-files: - pkg/database/ent/generate.go + - pkg/yamlpatch/merge.go - pkg/yamlpatch/merge_test.go linters-settings: diff --git a/cmd/crowdsec-cli/alerts.go b/cmd/crowdsec-cli/alerts.go index 2ca5b07bf..8f96525fa 100644 --- a/cmd/crowdsec-cli/alerts.go +++ b/cmd/crowdsec-cli/alerts.go @@ -420,7 +420,7 @@ cscli alerts delete -s crowdsecurity/ssh-bf"`, log.Fatal("Local API is disabled, please run this command on the local API machine") } if err := csConfig.LoadDBConfig(); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } dbClient, err = database.NewClient(csConfig.DbConfig) if err != nil { diff --git a/cmd/crowdsec-cli/alerts_table.go b/cmd/crowdsec-cli/alerts_table.go index 6bca95bed..3f8c581c9 100644 --- a/cmd/crowdsec-cli/alerts_table.go +++ b/cmd/crowdsec-cli/alerts_table.go @@ -55,7 +55,7 @@ func alertDecisionsTable(out io.Writer, alert *models.Alert) { for _, decision := range alert.Decisions { parsedDuration, err := time.ParseDuration(*decision.Duration) if err != nil { - log.Errorf(err.Error()) + log.Error(err) } expire := time.Now().UTC().Add(parsedDuration) if time.Now().UTC().After(expire) { diff --git a/cmd/crowdsec-cli/bouncers.go b/cmd/crowdsec-cli/bouncers.go index ee7426f12..a67ff9b6f 100644 --- a/cmd/crowdsec-cli/bouncers.go +++ b/cmd/crowdsec-cli/bouncers.go @@ -75,7 +75,7 @@ Note: This command requires database direct access, so is intended to be run on log.Fatal("Local API is disabled, please run this command on the local API machine") } if err := csConfig.LoadDBConfig(); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } dbClient, err = database.NewClient(csConfig.DbConfig) if err != nil { diff --git a/cmd/crowdsec-cli/dashboard.go b/cmd/crowdsec-cli/dashboard.go index 899b019fd..5bd74e240 100644 --- a/cmd/crowdsec-cli/dashboard.go +++ b/cmd/crowdsec-cli/dashboard.go @@ -66,11 +66,11 @@ cscli dashboard remove metabaseConfigFolderPath := filepath.Join(csConfig.ConfigPaths.ConfigDir, metabaseConfigFolder) metabaseConfigPath = filepath.Join(metabaseConfigFolderPath, metabaseConfigFile) if err := os.MkdirAll(metabaseConfigFolderPath, os.ModePerm); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } if err := csConfig.LoadDBConfig(); err != nil { log.Errorf("This command requires direct database access (must be run on the local API machine)") - log.Fatalf(err.Error()) + log.Fatal(err) } /* @@ -170,11 +170,11 @@ cscli dashboard setup -l 0.0.0.0 -p 443 --password mb, err := metabase.SetupMetabase(csConfig.API.Server.DbConfig, metabaseListenAddress, metabaseListenPort, metabaseUser, metabasePassword, metabaseDbPath, dockerGroup.Gid, metabaseContainerID) if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } if err := mb.DumpConfig(metabaseConfigPath); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } log.Infof("Metabase is ready") @@ -203,7 +203,7 @@ cscli dashboard setup -l 0.0.0.0 -p 443 --password Run: func(cmd *cobra.Command, args []string) { mb, err := metabase.NewMetabase(metabaseConfigPath, metabaseContainerID) if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } if err := mb.Container.Start(); err != nil { log.Fatalf("Failed to start metabase container : %s", err) diff --git a/cmd/crowdsec-cli/decisions.go b/cmd/crowdsec-cli/decisions.go index fab83a7e4..0459b0085 100644 --- a/cmd/crowdsec-cli/decisions.go +++ b/cmd/crowdsec-cli/decisions.go @@ -351,7 +351,7 @@ cscli decisions add --scope username --value foobar _, _, err = Client.Alerts.Add(context.Background(), alerts) if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } log.Info("Decision successfully added") @@ -597,7 +597,7 @@ decisions.json : _, _, err = Client.Alerts.Add(context.Background(), alerts) if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } log.Infof("%d decisions successfully imported", len(decisionsList)) }, diff --git a/cmd/crowdsec-cli/hubtest.go b/cmd/crowdsec-cli/hubtest.go index 8023e9d1f..717291f03 100644 --- a/cmd/crowdsec-cli/hubtest.go +++ b/cmd/crowdsec-cli/hubtest.go @@ -483,7 +483,7 @@ cscli hubtest create my-scenario-test --parsers crowdsecurity/nginx --scenarios } output, err := test.ParserAssert.EvalExpression(evalExpression) if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } fmt.Print(output) } diff --git a/cmd/crowdsec-cli/machines.go b/cmd/crowdsec-cli/machines.go index 53706048a..c327b7935 100644 --- a/cmd/crowdsec-cli/machines.go +++ b/cmd/crowdsec-cli/machines.go @@ -169,7 +169,7 @@ Note: This command requires database direct access, so is intended to be run on } if err := csConfig.LoadDBConfig(); err != nil { log.Errorf("This command requires direct database access (must be run on the local API machine)") - log.Fatalf(err.Error()) + log.Fatal(err) } }, } diff --git a/cmd/crowdsec-cli/main.go b/cmd/crowdsec-cli/main.go index 0b2b86548..6aeb9a2e5 100644 --- a/cmd/crowdsec-cli/main.go +++ b/cmd/crowdsec-cli/main.go @@ -58,11 +58,11 @@ func initConfig() { if !inSlice(os.Args[1], NoNeedConfig) { csConfig, err = csconfig.NewConfig(ConfigFilePath, false, false) if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } log.Debugf("Using %s as configuration file", ConfigFilePath) if err := csConfig.LoadCSCLI(); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } } else { csConfig = csconfig.NewDefaultConfig() diff --git a/cmd/crowdsec-cli/metrics.go b/cmd/crowdsec-cli/metrics.go index 7620a8a02..e77eb40a8 100644 --- a/cmd/crowdsec-cli/metrics.go +++ b/cmd/crowdsec-cli/metrics.go @@ -260,7 +260,7 @@ func NewMetricsCmd() *cobra.Command { DisableAutoGenTag: true, Run: func(cmd *cobra.Command, args []string) { if err := csConfig.LoadPrometheus(); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } if !csConfig.Prometheus.Enabled { log.Warning("Prometheus is not enabled, can't show metrics") diff --git a/cmd/crowdsec-cli/notifications.go b/cmd/crowdsec-cli/notifications.go index 81255292c..fd5238688 100644 --- a/cmd/crowdsec-cli/notifications.go +++ b/cmd/crowdsec-cli/notifications.go @@ -46,7 +46,7 @@ func NewNotificationsCmd() *cobra.Command { err error ) if err = csConfig.API.Server.LoadProfiles(); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } if csConfig.ConfigPaths.NotificationDir == "" { log.Fatalf("config_paths.notification_dir is not set in crowdsec config") diff --git a/cmd/crowdsec-cli/simulation.go b/cmd/crowdsec-cli/simulation.go index e9dd06c6a..456f5ef3e 100644 --- a/cmd/crowdsec-cli/simulation.go +++ b/cmd/crowdsec-cli/simulation.go @@ -108,7 +108,7 @@ cscli simulation disable crowdsecurity/ssh-bf`, DisableAutoGenTag: true, PersistentPreRunE: func(cmd *cobra.Command, args []string) error { if err := csConfig.LoadSimulation(); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } if csConfig.Cscli == nil { return fmt.Errorf("you must configure cli before using simulation") diff --git a/cmd/crowdsec-cli/support.go b/cmd/crowdsec-cli/support.go index 84c0e2700..1e8f6d9ea 100644 --- a/cmd/crowdsec-cli/support.go +++ b/cmd/crowdsec-cli/support.go @@ -160,11 +160,11 @@ func collectAPIStatus(login string, password string, endpoint string, prefix str apiurl, err := url.Parse(endpoint) if err != nil { - return []byte(fmt.Sprintf("cannot parse API URL: %s", err.Error())) + return []byte(fmt.Sprintf("cannot parse API URL: %s", err)) } scenarios, err := cwhub.GetInstalledScenariosAsString() if err != nil { - return []byte(fmt.Sprintf("could not collect scenarios: %s", err.Error())) + return []byte(fmt.Sprintf("could not collect scenarios: %s", err)) } Client, err = apiclient.NewDefaultClient(apiurl, @@ -172,7 +172,7 @@ func collectAPIStatus(login string, password string, endpoint string, prefix str fmt.Sprintf("crowdsec/%s", cwversion.VersionStr()), nil) if err != nil { - return []byte(fmt.Sprintf("could not init client: %s", err.Error())) + return []byte(fmt.Sprintf("could not init client: %s", err)) } t := models.WatcherAuthRequest{ MachineID: &login, diff --git a/cmd/crowdsec/api.go b/cmd/crowdsec/api.go index 6f8e3969d..2af3bbf05 100644 --- a/cmd/crowdsec/api.go +++ b/cmd/crowdsec/api.go @@ -52,7 +52,7 @@ func serveAPIServer(apiServer *apiserver.APIServer, apiReady chan bool) { defer types.CatchPanic("crowdsec/runAPIServer") log.Debugf("serving API after %s ms", time.Since(crowdsecT0)) if err := apiServer.Run(apiReady); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } }() diff --git a/cmd/crowdsec/run_in_svc.go b/cmd/crowdsec/run_in_svc.go index 40df6c227..2e6e81c6e 100644 --- a/cmd/crowdsec/run_in_svc.go +++ b/cmd/crowdsec/run_in_svc.go @@ -40,7 +40,7 @@ func StartRunSvc() error { // Configure logging if err = types.SetDefaultLoggerConfig(cConfig.Common.LogMedia, cConfig.Common.LogDir, *cConfig.Common.LogLevel, cConfig.Common.LogMaxSize, cConfig.Common.LogMaxFiles, cConfig.Common.LogMaxAge, cConfig.Common.CompressLogs, cConfig.Common.ForceColorLogs); err != nil { - log.Fatal(err.Error()) + log.Fatal(err) } log.Infof("Crowdsec %s", cwversion.VersionStr()) diff --git a/cmd/crowdsec/win_service.go b/cmd/crowdsec/win_service.go index 94dfbf495..85b1f167f 100644 --- a/cmd/crowdsec/win_service.go +++ b/cmd/crowdsec/win_service.go @@ -58,7 +58,7 @@ func (m *crowdsec_winservice) Execute(args []string, r <-chan svc.ChangeRequest, err := WindowsRun() changes <- svc.Status{State: svc.Stopped} if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } return } diff --git a/pkg/acquisition/acquisition.go b/pkg/acquisition/acquisition.go index 00c5325d8..43093a503 100644 --- a/pkg/acquisition/acquisition.go +++ b/pkg/acquisition/acquisition.go @@ -184,11 +184,11 @@ func LoadAcquisitionFromFile(config *csconfig.CrowdsecServiceCfg) ([]DataSource, var idx int err = dec.Decode(&sub) if err != nil { - if err == io.EOF { - log.Tracef("End of yaml file") - break + if ! errors.Is(err, io.EOF) { + return nil, errors.Wrapf(err, "failed to yaml decode %s", acquisFile) } - return nil, errors.Wrapf(err, "failed to yaml decode %s", acquisFile) + log.Tracef("End of yaml file") + break } //for backward compat ('type' was not mandatory, detect it) diff --git a/pkg/acquisition/modules/kafka/kafka_test.go b/pkg/acquisition/modules/kafka/kafka_test.go index 8b229b606..2e69a9a5b 100644 --- a/pkg/acquisition/modules/kafka/kafka_test.go +++ b/pkg/acquisition/modules/kafka/kafka_test.go @@ -85,18 +85,18 @@ func writeToKafka(w *kafka.Writer, logs []string) { func createTopic(topic string, broker string) { conn, err := kafka.Dial("tcp", broker) if err != nil { - panic(err.Error()) + panic(err) } defer conn.Close() controller, err := conn.Controller() if err != nil { - panic(err.Error()) + panic(err) } var controllerConn *kafka.Conn controllerConn, err = kafka.Dial("tcp", net.JoinHostPort(controller.Host, strconv.Itoa(controller.Port))) if err != nil { - panic(err.Error()) + panic(err) } defer controllerConn.Close() @@ -110,7 +110,7 @@ func createTopic(topic string, broker string) { err = controllerConn.CreateTopics(topicConfigs...) if err != nil { - panic(err.Error()) + panic(err) } } diff --git a/pkg/apiclient/client_http.go b/pkg/apiclient/client_http.go index bfe328b97..d9ba49aa7 100644 --- a/pkg/apiclient/client_http.go +++ b/pkg/apiclient/client_http.go @@ -103,17 +103,15 @@ func (c *ApiClient) Do(ctx context.Context, req *http.Request, v interface{}) (* } if v != nil { - if w, ok := v.(io.Writer); ok { - io.Copy(w, resp.Body) - } else { + w, ok := v.(io.Writer) + if !ok { decErr := json.NewDecoder(resp.Body).Decode(v) - if decErr == io.EOF { + if errors.Is(decErr, io.EOF) { decErr = nil // ignore EOF errors caused by empty response body } - if decErr != nil { - err = decErr - } + return response, decErr } + io.Copy(w, resp.Body) } return response, err } diff --git a/pkg/apiclient/decisions_service_test.go b/pkg/apiclient/decisions_service_test.go index 8ea5e39de..313ce240e 100644 --- a/pkg/apiclient/decisions_service_test.go +++ b/pkg/apiclient/decisions_service_test.go @@ -326,7 +326,7 @@ func TestDecisionsStreamOpts_addQueryParamsToURL(t *testing.T) { // }) // if err != nil { -// t.Fatalf("new api client: %s", err.Error()) +// t.Fatalf("new api client: %s", err) // } // filters := DecisionsDeleteOpts{IPEquals: new(string)} diff --git a/pkg/apiserver/alerts_test.go b/pkg/apiserver/alerts_test.go index 9b6fc04ad..f6388fc1e 100644 --- a/pkg/apiserver/alerts_test.go +++ b/pkg/apiserver/alerts_test.go @@ -76,7 +76,7 @@ func InitMachineTest() (*gin.Engine, models.WatcherAuthResponse, csconfig.Config loginResp, err := LoginToTestAPI(router, config) if err != nil { - return nil, models.WatcherAuthResponse{}, config, fmt.Errorf("%s", err) + return nil, models.WatcherAuthResponse{}, config, err } return router, loginResp, config, nil } @@ -84,7 +84,7 @@ func InitMachineTest() (*gin.Engine, models.WatcherAuthResponse, csconfig.Config func LoginToTestAPI(router *gin.Engine, config csconfig.Config) (models.WatcherAuthResponse, error) { body, err := CreateTestMachine(router) if err != nil { - return models.WatcherAuthResponse{}, fmt.Errorf("%s", err) + return models.WatcherAuthResponse{}, err } err = ValidateMachine("test", config.API.Server.DbConfig) if err != nil { @@ -99,7 +99,7 @@ func LoginToTestAPI(router *gin.Engine, config csconfig.Config) (models.WatcherA loginResp := models.WatcherAuthResponse{} err = json.NewDecoder(w.Body).Decode(&loginResp) if err != nil { - return models.WatcherAuthResponse{}, fmt.Errorf("%s", err) + return models.WatcherAuthResponse{}, err } return loginResp, nil diff --git a/pkg/apiserver/apiserver.go b/pkg/apiserver/apiserver.go index e020d3ed0..c03b7158b 100644 --- a/pkg/apiserver/apiserver.go +++ b/pkg/apiserver/apiserver.go @@ -70,10 +70,10 @@ func CustomRecoveryWithWriter() gin.HandlerFunc { errHandlerComplete = errors.New("http2: request body closed due to handler exiting") errStreamClosed = errors.New("http2: stream closed") ) - if strErr == errClientDisconnected || - strErr == errClosedBody || - strErr == errHandlerComplete || - strErr == errStreamClosed { + if errors.Is(strErr, errClientDisconnected) || + errors.Is(strErr, errClosedBody) || + errors.Is(strErr, errHandlerComplete) || + errors.Is(strErr, errStreamClosed) { brokenPipe = true } } diff --git a/pkg/apiserver/apiserver_test.go b/pkg/apiserver/apiserver_test.go index 04e136549..3eaaab651 100644 --- a/pkg/apiserver/apiserver_test.go +++ b/pkg/apiserver/apiserver_test.go @@ -358,7 +358,7 @@ func TestLoggingDebugToFileConfig(t *testing.T) { // Configure logging if err := types.SetDefaultLoggerConfig(cfg.LogMedia, cfg.LogDir, *cfg.LogLevel, cfg.LogMaxSize, cfg.LogMaxFiles, cfg.LogMaxAge, cfg.CompressLogs, false); err != nil { - t.Fatal(err.Error()) + t.Fatal(err) } api, err := NewServer(&cfg) if err != nil { @@ -415,7 +415,7 @@ func TestLoggingErrorToFileConfig(t *testing.T) { // Configure logging if err := types.SetDefaultLoggerConfig(cfg.LogMedia, cfg.LogDir, *cfg.LogLevel, cfg.LogMaxSize, cfg.LogMaxFiles, cfg.LogMaxAge, cfg.CompressLogs, false); err != nil { - t.Fatal(err.Error()) + t.Fatal(err) } api, err := NewServer(&cfg) if err != nil { diff --git a/pkg/apiserver/jwt_test.go b/pkg/apiserver/jwt_test.go index b589213db..ece32c1b8 100644 --- a/pkg/apiserver/jwt_test.go +++ b/pkg/apiserver/jwt_test.go @@ -18,7 +18,7 @@ func TestLogin(t *testing.T) { body, err := CreateTestMachine(router) if err != nil { - log.Fatalln(err.Error()) + log.Fatalln(err) } // Login with machine not validated yet @@ -60,7 +60,7 @@ func TestLogin(t *testing.T) { //Validate machine err = ValidateMachine("test", config.API.Server.DbConfig) if err != nil { - log.Fatalln(err.Error()) + log.Fatalln(err) } // Login with invalid password diff --git a/pkg/apiserver/machines_test.go b/pkg/apiserver/machines_test.go index 63c4e2597..373cd42a4 100644 --- a/pkg/apiserver/machines_test.go +++ b/pkg/apiserver/machines_test.go @@ -150,7 +150,7 @@ func TestCreateMachineAlreadyExist(t *testing.T) { body, err := CreateTestMachine(router) if err != nil { - log.Fatalln(err.Error()) + log.Fatalln(err) } w := httptest.NewRecorder() diff --git a/pkg/csconfig/api_test.go b/pkg/csconfig/api_test.go index 3fb793c85..6014b9824 100644 --- a/pkg/csconfig/api_test.go +++ b/pkg/csconfig/api_test.go @@ -157,18 +157,18 @@ func TestLoadAPIServer(t *testing.T) { LogDirFullPath, err := filepath.Abs("./tests") if err != nil { - t.Fatalf(err.Error()) + t.Fatal(err) } config := &Config{} fcontent, err := os.ReadFile("./tests/config.yaml") if err != nil { - t.Fatalf(err.Error()) + t.Fatal(err) } configData := os.ExpandEnv(string(fcontent)) err = yaml.UnmarshalStrict([]byte(configData), &config) if err != nil { - t.Fatalf(err.Error()) + t.Fatal(err) } tests := []struct { name string diff --git a/pkg/csconfig/common_test.go b/pkg/csconfig/common_test.go index b049a8220..5666f2d74 100644 --- a/pkg/csconfig/common_test.go +++ b/pkg/csconfig/common_test.go @@ -13,12 +13,12 @@ func TestLoadCommon(t *testing.T) { pidDirPath := "./tests" LogDirFullPath, err := filepath.Abs("./tests/log/") if err != nil { - t.Fatalf(err.Error()) + t.Fatal(err) } WorkingDirFullPath, err := filepath.Abs("./tests") if err != nil { - t.Fatalf(err.Error()) + t.Fatal(err) } tests := []struct { diff --git a/pkg/csconfig/cscli_test.go b/pkg/csconfig/cscli_test.go index f287afdca..1f432f6e3 100644 --- a/pkg/csconfig/cscli_test.go +++ b/pkg/csconfig/cscli_test.go @@ -12,22 +12,22 @@ import ( func TestLoadCSCLI(t *testing.T) { hubFullPath, err := filepath.Abs("./hub") if err != nil { - t.Fatalf(err.Error()) + t.Fatal(err) } dataFullPath, err := filepath.Abs("./data") if err != nil { - t.Fatalf(err.Error()) + t.Fatal(err) } configDirFullPath, err := filepath.Abs("./tests") if err != nil { - t.Fatalf(err.Error()) + t.Fatal(err) } hubIndexFileFullPath, err := filepath.Abs("./hub/.index.json") if err != nil { - t.Fatalf(err.Error()) + t.Fatal(err) } tests := []struct { diff --git a/pkg/csconfig/profiles.go b/pkg/csconfig/profiles.go index 05072c263..b51ba33e3 100644 --- a/pkg/csconfig/profiles.go +++ b/pkg/csconfig/profiles.go @@ -42,7 +42,7 @@ func (c *LocalApiServerCfg) LoadProfiles() error { t := ProfileCfg{} err = dec.Decode(&t) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { break } return errors.Wrapf(err, "while decoding %s", c.ProfilesPath) diff --git a/pkg/csplugin/broker.go b/pkg/csplugin/broker.go index b06554ab8..a70514e42 100644 --- a/pkg/csplugin/broker.go +++ b/pkg/csplugin/broker.go @@ -351,7 +351,7 @@ func ParsePluginConfigFile(path string) ([]PluginConfig, error) { pc := PluginConfig{} err = dec.Decode(&pc) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { break } return []PluginConfig{}, fmt.Errorf("while decoding %s got error %s", path, err) diff --git a/pkg/cwhub/download.go b/pkg/cwhub/download.go index 5f5ccf962..1aab64734 100644 --- a/pkg/cwhub/download.go +++ b/pkg/cwhub/download.go @@ -254,10 +254,10 @@ func downloadData(dataFolder string, force bool, reader io.Reader) error { data := &types.DataSet{} err = dec.Decode(data) if err != nil { - if err != io.EOF { - return errors.Wrap(err, "while reading file") + if errors.Is(err, io.EOF) { + break } - break + return errors.Wrap(err, "while reading file") } download := false diff --git a/pkg/exprhelpers/exprlib_test.go b/pkg/exprhelpers/exprlib_test.go index 1bfbf7730..8b5664cbe 100644 --- a/pkg/exprhelpers/exprlib_test.go +++ b/pkg/exprhelpers/exprlib_test.go @@ -44,7 +44,7 @@ func getDBClient(t *testing.T) *database.Client { func TestVisitor(t *testing.T) { if err := Init(nil); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } tests := []struct { @@ -131,12 +131,12 @@ func TestVisitor(t *testing.T) { func TestRegexpInFile(t *testing.T) { if err := Init(nil); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } err := FileInit(TestFolder, "test_data_re.txt", "regex") if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } tests := []struct { @@ -174,11 +174,11 @@ func TestRegexpInFile(t *testing.T) { for _, test := range tests { compiledFilter, err := expr.Compile(test.filter, expr.Env(GetExprEnv(map[string]interface{}{}))) if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } result, err := expr.Run(compiledFilter, GetExprEnv(map[string]interface{}{})) if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } if isOk := assert.Equal(t, test.result, result); !isOk { t.Fatalf("test '%s' : NOK", test.name) @@ -188,7 +188,7 @@ func TestRegexpInFile(t *testing.T) { func TestFileInit(t *testing.T) { if err := Init(nil); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } tests := []struct { @@ -226,7 +226,7 @@ func TestFileInit(t *testing.T) { for _, test := range tests { err := FileInit(TestFolder, test.filename, test.types) if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } if test.types == "string" { if _, ok := dataFile[test.filename]; !ok { @@ -256,12 +256,12 @@ func TestFileInit(t *testing.T) { func TestFile(t *testing.T) { if err := Init(nil); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } err := FileInit(TestFolder, "test_data.txt", "string") if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } tests := []struct { @@ -299,11 +299,11 @@ func TestFile(t *testing.T) { for _, test := range tests { compiledFilter, err := expr.Compile(test.filter, expr.Env(GetExprEnv(map[string]interface{}{}))) if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } result, err := expr.Run(compiledFilter, GetExprEnv(map[string]interface{}{})) if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } if isOk := assert.Equal(t, test.result, result); !isOk { t.Fatalf("test '%s' : NOK", test.name) diff --git a/pkg/exprhelpers/jsonextract.go b/pkg/exprhelpers/jsonextract.go index 61c927524..5b393db9e 100644 --- a/pkg/exprhelpers/jsonextract.go +++ b/pkg/exprhelpers/jsonextract.go @@ -2,6 +2,7 @@ package exprhelpers import ( "encoding/json" + "errors" "fmt" "strings" @@ -17,7 +18,7 @@ func JsonExtractLib(jsblob string, target ...string) string { ) if err != nil { - if err == jsonparser.KeyPathNotFoundError { + if errors.Is(err, jsonparser.KeyPathNotFoundError) { log.Debugf("%+v doesn't exist", target) return "" } @@ -39,7 +40,7 @@ func JsonExtractUnescape(jsblob string, target ...string) string { ) if err != nil { - if err == jsonparser.KeyPathNotFoundError { + if errors.Is(err, jsonparser.KeyPathNotFoundError) { log.Debugf("%+v doesn't exist", target) return "" } @@ -74,7 +75,7 @@ func jsonExtractType(jsblob string, target string, t jsonparser.ValueType) ([]by ) if err != nil { - if err == jsonparser.KeyPathNotFoundError { + if errors.Is(err, jsonparser.KeyPathNotFoundError) { log.Debugf("Key %+v doesn't exist", target) return nil, fmt.Errorf("key %s does not exist", target) } diff --git a/pkg/exprhelpers/jsonextract_test.go b/pkg/exprhelpers/jsonextract_test.go index ceb9119f2..6b85df8a3 100644 --- a/pkg/exprhelpers/jsonextract_test.go +++ b/pkg/exprhelpers/jsonextract_test.go @@ -9,12 +9,12 @@ import ( func TestJsonExtract(t *testing.T) { if err := Init(nil); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } err := FileInit(TestFolder, "test_data_re.txt", "regex") if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } tests := []struct { @@ -55,12 +55,12 @@ func TestJsonExtract(t *testing.T) { } func TestJsonExtractUnescape(t *testing.T) { if err := Init(nil); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } err := FileInit(TestFolder, "test_data_re.txt", "regex") if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } tests := []struct { @@ -95,12 +95,12 @@ func TestJsonExtractUnescape(t *testing.T) { func TestJsonExtractSlice(t *testing.T) { if err := Init(nil); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } err := FileInit(TestFolder, "test_data_re.txt", "regex") if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } tests := []struct { @@ -146,12 +146,12 @@ func TestJsonExtractSlice(t *testing.T) { func TestJsonExtractObject(t *testing.T) { if err := Init(nil); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } err := FileInit(TestFolder, "test_data_re.txt", "regex") if err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } tests := []struct { diff --git a/pkg/exprhelpers/xml_test.go b/pkg/exprhelpers/xml_test.go index a6fdae3f9..695ac0446 100644 --- a/pkg/exprhelpers/xml_test.go +++ b/pkg/exprhelpers/xml_test.go @@ -9,7 +9,7 @@ import ( func TestXMLGetAttributeValue(t *testing.T) { if err := Init(nil); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } tests := []struct { @@ -68,7 +68,7 @@ func TestXMLGetAttributeValue(t *testing.T) { } func TestXMLGetNodeValue(t *testing.T) { if err := Init(nil); err != nil { - log.Fatalf(err.Error()) + log.Fatal(err) } tests := []struct { diff --git a/pkg/leakybucket/buckets_test.go b/pkg/leakybucket/buckets_test.go index c6427fbda..a7eb3a087 100644 --- a/pkg/leakybucket/buckets_test.go +++ b/pkg/leakybucket/buckets_test.go @@ -3,6 +3,7 @@ package leakybucket import ( "bytes" "encoding/json" + "errors" "fmt" "html/template" "io" @@ -153,7 +154,7 @@ func testFile(t *testing.T, file string, bs string, holders []BucketFactory, res tf := TestFile{} err = dec.Decode(&tf) if err != nil { - if err != io.EOF { + if errors.Is(err, io.EOF) { t.Errorf("Failed to load testfile '%s' yaml error : %v", file, err) return false } diff --git a/pkg/leakybucket/manager_load.go b/pkg/leakybucket/manager_load.go index 0e4771e4e..e7bd35014 100644 --- a/pkg/leakybucket/manager_load.go +++ b/pkg/leakybucket/manager_load.go @@ -2,6 +2,7 @@ package leakybucket import ( "encoding/json" + "errors" "fmt" "io" "os" @@ -169,7 +170,7 @@ func LoadBuckets(cscfg *csconfig.CrowdsecServiceCfg, files []string, tomb *tomb. bucketFactory := BucketFactory{} err = dec.Decode(&bucketFactory) if err != nil { - if err != io.EOF { + if !errors.Is(err, io.EOF) { log.Errorf("Bad yaml in %s : %v", f, err) return nil, nil, fmt.Errorf("bad yaml in %s : %v", f, err) } diff --git a/pkg/metabase/container.go b/pkg/metabase/container.go index 76788b096..b53803b1a 100644 --- a/pkg/metabase/container.go +++ b/pkg/metabase/container.go @@ -155,7 +155,7 @@ func RemoveContainer(name string) error { ctx := context.Background() log.Printf("Removing docker metabase %s", name) if err := cli.ContainerRemove(ctx, name, types.ContainerRemoveOptions{}); err != nil { - return fmt.Errorf("failed remove container %s : %s", name, err) + return fmt.Errorf("failed to remove container %s : %s", name, err) } return nil } @@ -168,7 +168,7 @@ func RemoveImageContainer() error { ctx := context.Background() log.Printf("Removing docker image '%s'", metabaseImage) if _, err := cli.ImageRemove(ctx, metabaseImage, types.ImageRemoveOptions{}); err != nil { - return fmt.Errorf("failed remove image container %s : %s", metabaseImage, err) + return fmt.Errorf("failed to remove image container %s : %s", metabaseImage, err) } return nil } diff --git a/pkg/metabase/metabase.go b/pkg/metabase/metabase.go index e2f7e0eaa..c12d9166f 100644 --- a/pkg/metabase/metabase.go +++ b/pkg/metabase/metabase.go @@ -367,7 +367,7 @@ func (m *Metabase) ExtractDatabase(buf *bytes.Reader) error { return fmt.Errorf("while opening zip content %s : %s", f.Name, err) } written, err := io.Copy(tfd, rc) - if err == io.EOF { + if errors.Is(err, io.EOF) { log.Printf("files finished ok") } else if err != nil { return fmt.Errorf("while copying content to %s : %s", tfname, err) diff --git a/pkg/parser/node.go b/pkg/parser/node.go index 38af6fb35..b6cad0023 100644 --- a/pkg/parser/node.go +++ b/pkg/parser/node.go @@ -420,7 +420,7 @@ func (n *Node) compile(pctx *UnixParserCtx, ectx EnricherCtx) error { for _, pattern := range n.SubGroks { n.Logger.Tracef("Adding subpattern '%s' : '%s'", pattern.Key, pattern.Value) if err := pctx.Grok.Add(pattern.Key.(string), pattern.Value.(string)); err != nil { - if err == grokky.ErrAlreadyExist { + if errors.Is(err, grokky.ErrAlreadyExist) { n.Logger.Warningf("grok '%s' already registred", pattern.Key) continue } diff --git a/pkg/parser/parsing_test.go b/pkg/parser/parsing_test.go index bebee3376..4344d0cb7 100644 --- a/pkg/parser/parsing_test.go +++ b/pkg/parser/parsing_test.go @@ -2,6 +2,7 @@ package parser import ( "bytes" + "errors" "fmt" "html/template" "io" @@ -182,7 +183,7 @@ func loadTestFile(file string) []TestFile { tf := TestFile{} err := dec.Decode(&tf) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { break } log.Fatalf("Failed to load testfile '%s' yaml error : %v", file, err) diff --git a/pkg/parser/stage.go b/pkg/parser/stage.go index 3bc7bdd32..a66c4e3b5 100644 --- a/pkg/parser/stage.go +++ b/pkg/parser/stage.go @@ -7,8 +7,7 @@ package parser */ import ( - //"fmt" - + "errors" "fmt" "io" _ "net/http/pprof" @@ -68,7 +67,7 @@ func LoadStages(stageFiles []Stagefile, pctx *UnixParserCtx, ectx EnricherCtx) ( node.OnSuccess = "continue" //default behavior is to continue err = dec.Decode(&node) if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { log.Tracef("End of yaml file") break } @@ -115,7 +114,7 @@ func LoadStages(stageFiles []Stagefile, pctx *UnixParserCtx, ectx EnricherCtx) ( for _, data := range node.Data { err = exprhelpers.FileInit(pctx.DataFolder, data.DestPath, data.Type) if err != nil { - log.Errorf(err.Error()) + log.Error(err) } } }