From 298e75b8dff00a5d8460ccbe5fab094166fe3db8 Mon Sep 17 00:00:00 2001 From: mmetc <92726601+mmetc@users.noreply.github.com> Date: Thu, 23 Oct 2025 13:51:40 +0200 Subject: [PATCH] lint: nilaway, unnecessary pointers (#3951) * lint: nilaway * lint: nilaway, unnecessary pointers This removes *log.Level from configuration structs and logging helpers and switches to value log.Level everywhere. It simplifies defaults and inheritance, removes reliance on ptr.Of, and avoids nil checks. Uses PanicLevel (natural zero value) as sentinel instead of nil. --- cmd/crowdsec-cli/main.go | 3 +-- cmd/crowdsec/main.go | 15 ++++-------- pkg/acquisition/acquisition.go | 4 ++-- .../configuration/configuration.go | 2 +- pkg/acquisition/modules/loki/loki.go | 2 +- .../modules/victorialogs/victorialogs.go | 2 +- pkg/alertcontext/alertcontext.go | 2 +- pkg/apiserver/apiserver.go | 2 +- pkg/apiserver/apiserver_test.go | 10 ++++---- pkg/apiserver/papi.go | 2 +- pkg/cache/cache.go | 11 ++++----- pkg/csconfig/api.go | 23 ++++++++----------- pkg/csconfig/api_test.go | 6 ++--- pkg/csconfig/common.go | 2 +- pkg/csconfig/config.go | 3 +-- pkg/csconfig/database.go | 2 +- pkg/csplugin/broker.go | 3 +-- pkg/csplugin/hclog_adapter.go | 7 +++++- pkg/csprofiles/csprofiles.go | 3 +-- pkg/cticlient/ctiexpr/expr.go | 2 +- pkg/cticlient/ctiexpr/expr_test.go | 8 +++---- pkg/database/alerts.go | 5 ++++ pkg/database/database.go | 2 +- pkg/leakybucket/manager_load.go | 4 +--- pkg/parser/node.go | 3 +-- pkg/parser/stash.go | 2 +- pkg/types/utils.go | 6 ++--- test/bats/05_config_yaml_local.bats | 8 +++---- 28 files changed, 68 insertions(+), 76 deletions(-) diff --git a/cmd/crowdsec-cli/main.go b/cmd/crowdsec-cli/main.go index 05bd705e5..3ad2a2f6d 100644 --- a/cmd/crowdsec-cli/main.go +++ b/cmd/crowdsec-cli/main.go @@ -15,7 +15,6 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "github.com/crowdsecurity/go-cs-lib/ptr" "github.com/crowdsecurity/go-cs-lib/trace" "github.com/crowdsecurity/crowdsec/cmd/crowdsec-cli/clialert" @@ -176,7 +175,7 @@ func (cli *cliRoot) initialize() error { } if csConfig.DbConfig != nil { - csConfig.DbConfig.LogLevel = ptr.Of(cli.wantedLogLevel()) + csConfig.DbConfig.LogLevel = cli.wantedLogLevel() } return nil diff --git a/cmd/crowdsec/main.go b/cmd/crowdsec/main.go index 7d50e49e4..4b46fd425 100644 --- a/cmd/crowdsec/main.go +++ b/cmd/crowdsec/main.go @@ -187,14 +187,14 @@ func (f *Flags) Parse() { flag.Parse() } -func newLogLevel(curLevelPtr *log.Level, f *Flags) (*log.Level, bool) { +func newLogLevel(curLevel log.Level, f *Flags) (log.Level, bool) { // mother of all defaults ret := log.InfoLevel logLevelViaFlag := true // keep if already set - if curLevelPtr != nil { - ret = *curLevelPtr + if curLevel != log.PanicLevel { + ret = curLevel } // override from flags @@ -216,12 +216,7 @@ func newLogLevel(curLevelPtr *log.Level, f *Flags) (*log.Level, bool) { logLevelViaFlag = false } - if curLevelPtr != nil && ret == *curLevelPtr { - // avoid returning a new ptr to the same value - return curLevelPtr, logLevelViaFlag - } - - return &ret, logLevelViaFlag + return ret, logLevelViaFlag } // LoadConfig returns a configuration parsed from configuration file @@ -253,7 +248,7 @@ func LoadConfig(configFile string, disableAgent bool, disableAPI bool, quiet boo // Configure logging if err := types.SetDefaultLoggerConfig(cConfig.Common.LogMedia, - cConfig.Common.LogDir, *cConfig.Common.LogLevel, + cConfig.Common.LogDir, cConfig.Common.LogLevel, cConfig.Common.LogMaxSize, cConfig.Common.LogMaxFiles, cConfig.Common.LogMaxAge, cConfig.Common.LogFormat, cConfig.Common.CompressLogs, cConfig.Common.ForceColorLogs, logLevelViaFlag); err != nil { diff --git a/pkg/acquisition/acquisition.go b/pkg/acquisition/acquisition.go index b535bf807..9811fd974 100644 --- a/pkg/acquisition/acquisition.go +++ b/pkg/acquisition/acquisition.go @@ -120,7 +120,7 @@ func registerDataSource(dataSourceType string, dsGetter func() DataSource) { } // setupLogger creates a logger for the datasource to use at runtime. -func setupLogger(source, name string, level *log.Level) (*log.Entry, error) { +func setupLogger(source, name string, level log.Level) (*log.Entry, error) { clog := log.New() if err := types.ConfigureLogger(clog, level); err != nil { return nil, fmt.Errorf("while configuring datasource logger: %w", err) @@ -177,7 +177,7 @@ func LoadAcquisitionFromDSN(ctx context.Context, dsn string, labels map[string]s return nil, fmt.Errorf("no acquisition for protocol %s:// - %w", frags[0], err) } - subLogger, err := setupLogger(dsn, "", nil) + subLogger, err := setupLogger(dsn, "", 0) if err != nil { return nil, err } diff --git a/pkg/acquisition/configuration/configuration.go b/pkg/acquisition/configuration/configuration.go index e669a975e..0c50259ad 100644 --- a/pkg/acquisition/configuration/configuration.go +++ b/pkg/acquisition/configuration/configuration.go @@ -7,7 +7,7 @@ import ( type DataSourceCommonCfg struct { Mode string `yaml:"mode,omitempty"` Labels map[string]string `yaml:"labels,omitempty"` - LogLevel *log.Level `yaml:"log_level,omitempty"` + LogLevel log.Level `yaml:"log_level,omitempty"` Source string `yaml:"source,omitempty"` Name string `yaml:"name,omitempty"` UseTimeMachine bool `yaml:"use_time_machine,omitempty"` diff --git a/pkg/acquisition/modules/loki/loki.go b/pkg/acquisition/modules/loki/loki.go index 53279f4ac..d08e871fb 100644 --- a/pkg/acquisition/modules/loki/loki.go +++ b/pkg/acquisition/modules/loki/loki.go @@ -220,7 +220,7 @@ func (l *LokiSource) ConfigureByDSN(_ context.Context, dsn string, labels map[st if err != nil { return fmt.Errorf("invalid log_level in dsn: %w", err) } - l.Config.LogLevel = &level + l.Config.LogLevel = level l.logger.Logger.SetLevel(level) } diff --git a/pkg/acquisition/modules/victorialogs/victorialogs.go b/pkg/acquisition/modules/victorialogs/victorialogs.go index 8fa759a46..57a3a194f 100644 --- a/pkg/acquisition/modules/victorialogs/victorialogs.go +++ b/pkg/acquisition/modules/victorialogs/victorialogs.go @@ -196,7 +196,7 @@ func (l *VLSource) ConfigureByDSN(_ context.Context, dsn string, labels map[stri if err != nil { return fmt.Errorf("invalid log_level in dsn: %w", err) } - l.Config.LogLevel = &level + l.Config.LogLevel = level l.logger.Logger.SetLevel(level) } diff --git a/pkg/alertcontext/alertcontext.go b/pkg/alertcontext/alertcontext.go index 3c5a3e10c..137f6b19f 100644 --- a/pkg/alertcontext/alertcontext.go +++ b/pkg/alertcontext/alertcontext.go @@ -45,7 +45,7 @@ func ValidateContextExpr(key string, expressions []string) error { func NewAlertContext(contextToSend map[string][]string, valueLength int) error { clog := log.New() - if err := types.ConfigureLogger(clog, nil); err != nil { + if err := types.ConfigureLogger(clog, 0); err != nil { return fmt.Errorf("couldn't create logger for alert context: %w", err) } diff --git a/pkg/apiserver/apiserver.go b/pkg/apiserver/apiserver.go index 3a98fae31..d7e735859 100644 --- a/pkg/apiserver/apiserver.go +++ b/pkg/apiserver/apiserver.go @@ -262,7 +262,7 @@ func NewServer(ctx context.Context, config *csconfig.LocalApiServerCfg) (*APISer if apiClient.apiClient.IsEnrolled() { log.Info("Machine is enrolled in the console, Loading PAPI Client") - papiClient, err = NewPAPI(apiClient, dbClient, config.ConsoleConfig, *config.PapiLogLevel) + papiClient, err = NewPAPI(apiClient, dbClient, config.ConsoleConfig, config.PapiLogLevel) if err != nil { return nil, err } diff --git a/pkg/apiserver/apiserver_test.go b/pkg/apiserver/apiserver_test.go index 792e052bc..3c054a589 100644 --- a/pkg/apiserver/apiserver_test.go +++ b/pkg/apiserver/apiserver_test.go @@ -64,7 +64,7 @@ func LoadTestConfig(t *testing.T) csconfig.Config { } apiServerConfig := csconfig.LocalApiServerCfg{ ListenURI: "http://127.0.0.1:8080", - LogLevel: ptr.Of(log.DebugLevel), + LogLevel: log.DebugLevel, DbConfig: &dbconfig, ProfilesPath: "./tests/profiles.yaml", ConsoleConfig: &csconfig.ConsoleConfig{ @@ -388,10 +388,10 @@ func TestLoggingDebugToFileConfig(t *testing.T) { } expectedFile := filepath.Join(tempDir, "crowdsec_api.log") expectedLines := []string{"/test42"} - cfg.LogLevel = ptr.Of(log.DebugLevel) + cfg.LogLevel = log.DebugLevel // Configure logging - err := types.SetDefaultLoggerConfig(cfg.LogMedia, cfg.LogDir, *cfg.LogLevel, cfg.LogMaxSize, cfg.LogMaxFiles, cfg.LogMaxAge, cfg.LogFormat, cfg.CompressLogs, false, false) + err := types.SetDefaultLoggerConfig(cfg.LogMedia, cfg.LogDir, cfg.LogLevel, cfg.LogMaxSize, cfg.LogMaxFiles, cfg.LogMaxAge, cfg.LogFormat, cfg.CompressLogs, false, false) require.NoError(t, err) api, err := NewServer(ctx, &cfg) @@ -441,10 +441,10 @@ func TestLoggingErrorToFileConfig(t *testing.T) { DbConfig: &dbconfig, } expectedFile := filepath.Join(tempDir, "crowdsec_api.log") - cfg.LogLevel = ptr.Of(log.ErrorLevel) + cfg.LogLevel = log.ErrorLevel // Configure logging - err := types.SetDefaultLoggerConfig(cfg.LogMedia, cfg.LogDir, *cfg.LogLevel, cfg.LogMaxSize, cfg.LogMaxFiles, cfg.LogMaxAge, cfg.LogFormat, cfg.CompressLogs, false, false) + err := types.SetDefaultLoggerConfig(cfg.LogMedia, cfg.LogDir, cfg.LogLevel, cfg.LogMaxSize, cfg.LogMaxFiles, cfg.LogMaxAge, cfg.LogFormat, cfg.CompressLogs, false, false) require.NoError(t, err) api, err := NewServer(ctx, &cfg) diff --git a/pkg/apiserver/papi.go b/pkg/apiserver/papi.go index 058cd4398..292a9ef3e 100644 --- a/pkg/apiserver/papi.go +++ b/pkg/apiserver/papi.go @@ -88,7 +88,7 @@ type PapiPermCheckSuccess struct { func NewPAPI(apic *apic, dbClient *database.Client, consoleConfig *csconfig.ConsoleConfig, logLevel log.Level) (*Papi, error) { logger := log.New() - if err := types.ConfigureLogger(logger, &logLevel); err != nil { + if err := types.ConfigureLogger(logger, logLevel); err != nil { return &Papi{}, fmt.Errorf("creating papi logger: %w", err) } diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go index ac06a9b08..842d7abc9 100644 --- a/pkg/cache/cache.go +++ b/pkg/cache/cache.go @@ -14,9 +14,9 @@ import ( ) var ( - Caches []gcache.Cache + Caches = []gcache.Cache{} CacheNames []string - CacheConfig []CacheCfg + CacheConfig = []CacheCfg{} ) // UpdateCacheMetrics is called directly by the prom handler @@ -33,7 +33,7 @@ type CacheCfg struct { Size int TTL time.Duration Strategy string - LogLevel *log.Level + LogLevel log.Level Logger *log.Entry } @@ -44,9 +44,8 @@ func CacheInit(cfg CacheCfg) error { } } // get a default logger - if cfg.LogLevel == nil { - cfg.LogLevel = new(log.Level) - *cfg.LogLevel = log.InfoLevel + if cfg.LogLevel == log.PanicLevel { + cfg.LogLevel = log.InfoLevel } clog := log.New() diff --git a/pkg/csconfig/api.go b/pkg/csconfig/api.go index 6761b9ba7..0ab99ec8f 100644 --- a/pkg/csconfig/api.go +++ b/pkg/csconfig/api.go @@ -2,6 +2,7 @@ package csconfig import ( "bytes" + "cmp" "crypto/tls" "crypto/x509" "errors" @@ -67,7 +68,7 @@ type CTICfg struct { CacheTimeout *time.Duration `yaml:"cache_timeout,omitempty"` CacheSize *int `yaml:"cache_size,omitempty"` Enabled *bool `yaml:"enabled,omitempty"` - LogLevel *log.Level `yaml:"log_level,omitempty"` + LogLevel log.Level `yaml:"log_level,omitempty"` } func (a *CTICfg) Load() error { @@ -232,7 +233,7 @@ type LocalApiServerCfg struct { ConsoleConfigPath string `yaml:"console_path,omitempty"` ConsoleConfig *ConsoleConfig `yaml:"-"` Profiles []*ProfileCfg `yaml:"-"` - LogLevel *log.Level `yaml:"log_level"` + LogLevel log.Level `yaml:"log_level"` UseForwardedForHeaders bool `yaml:"use_forwarded_for_headers,omitempty"` TrustedProxies *[]string `yaml:"trusted_proxies,omitempty"` CompressLogs *bool `yaml:"-"` @@ -241,7 +242,7 @@ type LocalApiServerCfg struct { LogMaxFiles int `yaml:"-"` LogFormat string `yaml:"-"` TrustedIPs []string `yaml:"trusted_ips,omitempty"` - PapiLogLevel *log.Level `yaml:"papi_log_level"` + PapiLogLevel log.Level `yaml:"papi_log_level"` DisableRemoteLapiRegistration bool `yaml:"disable_remote_lapi_registration,omitempty"` CapiWhitelistsPath string `yaml:"capi_whitelists_path,omitempty"` CapiWhitelists *CapiWhitelist `yaml:"-"` @@ -337,18 +338,12 @@ func (c *Config) LoadAPIServer(inCli bool, skipOnlineCreds bool) error { return errors.New("no listen_uri or listen_socket specified") } - // inherit log level from common, then api->server - var logLevel log.Level - if c.API.Server.LogLevel != nil { - logLevel = *c.API.Server.LogLevel - } else if c.Common.LogLevel != nil { - logLevel = *c.Common.LogLevel - } else { - logLevel = log.InfoLevel - } + // inherit log level from api->server, common, and default to info + // 0 = panicLevel, not useful / not allowed + logLevel := cmp.Or(c.API.Server.LogLevel, c.Common.LogLevel, log.InfoLevel) - if c.API.Server.PapiLogLevel == nil { - c.API.Server.PapiLogLevel = &logLevel + if c.API.Server.PapiLogLevel == log.PanicLevel { + c.API.Server.PapiLogLevel = logLevel } if c.API.Server.OnlineClient != nil && c.API.Server.OnlineClient.CredentialsFilePath != "" && !skipOnlineCreds { diff --git a/pkg/csconfig/api_test.go b/pkg/csconfig/api_test.go index 4b17cd5e8..cb6ac1411 100644 --- a/pkg/csconfig/api_test.go +++ b/pkg/csconfig/api_test.go @@ -172,7 +172,7 @@ func TestLoadAPIServer(t *testing.T) { CredentialsFilePath: "./testdata/online-api-secrets.yaml", }, ProfilesPath: "./testdata/profiles.yaml", - PapiLogLevel: &logLevel, + PapiLogLevel: logLevel, }, }, DbConfig: &DatabaseCfg{ @@ -223,7 +223,7 @@ func TestLoadAPIServer(t *testing.T) { Profiles: tmpLAPI.Profiles, ProfilesPath: "./testdata/profiles.yaml", UseForwardedForHeaders: false, - PapiLogLevel: &logLevel, + PapiLogLevel: logLevel, AutoRegister: &LocalAPIAutoRegisterCfg{ Enable: ptr.Of(false), Token: "", @@ -249,7 +249,7 @@ func TestLoadAPIServer(t *testing.T) { }, expected: &LocalApiServerCfg{ Enable: ptr.Of(true), - PapiLogLevel: &logLevel, + PapiLogLevel: logLevel, }, expectedErr: "no database configuration provided", }, diff --git a/pkg/csconfig/common.go b/pkg/csconfig/common.go index 2e725d99c..1737033db 100644 --- a/pkg/csconfig/common.go +++ b/pkg/csconfig/common.go @@ -10,7 +10,7 @@ type CommonCfg struct { PidDir string `yaml:"pid_dir,omitempty"` // TODO: This is just for backward compat. Remove this later LogMedia string `yaml:"log_media"` LogDir string `yaml:"log_dir,omitempty"` // if LogMedia = file - LogLevel *log.Level `yaml:"log_level"` + LogLevel log.Level `yaml:"log_level"` WorkingDir string `yaml:"working_dir,omitempty"` // TODO: This is just for backward compat. Remove this later CompressLogs *bool `yaml:"compress_logs,omitempty"` LogMaxSize int `yaml:"log_max_size,omitempty"` diff --git a/pkg/csconfig/config.go b/pkg/csconfig/config.go index d5a7eae1a..6eb40ea60 100644 --- a/pkg/csconfig/config.go +++ b/pkg/csconfig/config.go @@ -110,10 +110,9 @@ func GetConfig() Config { } func NewDefaultConfig() *Config { - logLevel := log.InfoLevel commonCfg := CommonCfg{ LogMedia: "stdout", - LogLevel: &logLevel, + LogLevel: log.InfoLevel, } prometheus := PrometheusCfg{ Enabled: true, diff --git a/pkg/csconfig/database.go b/pkg/csconfig/database.go index f34b40889..c00d11489 100644 --- a/pkg/csconfig/database.go +++ b/pkg/csconfig/database.go @@ -41,7 +41,7 @@ type DatabaseCfg struct { DbPath string `yaml:"db_path"` Type string `yaml:"type"` Flush *FlushDBCfg `yaml:"flush"` - LogLevel *log.Level `yaml:"log_level"` + LogLevel log.Level `yaml:"log_level"` MaxOpenConns int `yaml:"max_open_conns,omitempty"` UseWal *bool `yaml:"use_wal,omitempty"` DecisionBulkSize int `yaml:"decision_bulk_size,omitempty"` diff --git a/pkg/csplugin/broker.go b/pkg/csplugin/broker.go index dfafd72d7..55e513161 100644 --- a/pkg/csplugin/broker.go +++ b/pkg/csplugin/broker.go @@ -21,7 +21,6 @@ import ( "gopkg.in/yaml.v2" "github.com/crowdsecurity/go-cs-lib/csstring" - "github.com/crowdsecurity/go-cs-lib/ptr" "github.com/crowdsecurity/go-cs-lib/slicetools" "github.com/crowdsecurity/crowdsec/pkg/csconfig" @@ -346,7 +345,7 @@ func (pb *PluginBroker) loadNotificationPlugin(ctx context.Context, name string, pb.pluginMap[name] = &NotifierPlugin{} l := log.New() - err = types.ConfigureLogger(l, ptr.Of(log.TraceLevel)) + err = types.ConfigureLogger(l, log.TraceLevel) if err != nil { return nil, err } diff --git a/pkg/csplugin/hclog_adapter.go b/pkg/csplugin/hclog_adapter.go index 7276daf17..6e60fc5a8 100644 --- a/pkg/csplugin/hclog_adapter.go +++ b/pkg/csplugin/hclog_adapter.go @@ -228,6 +228,11 @@ func safeString(str fmt.Stringer) (s string) { } }() - s = str.String() + if str == nil { + // typed nil, happy nilaway + s = "NULL" + } else { + s = str.String() + } return //nolint:revive // bare return for the defer } diff --git a/pkg/csprofiles/csprofiles.go b/pkg/csprofiles/csprofiles.go index 3081f4d31..9f68812fe 100644 --- a/pkg/csprofiles/csprofiles.go +++ b/pkg/csprofiles/csprofiles.go @@ -8,7 +8,6 @@ import ( log "github.com/sirupsen/logrus" "github.com/crowdsecurity/go-cs-lib/cstime" - "github.com/crowdsecurity/go-cs-lib/ptr" "github.com/crowdsecurity/crowdsec/pkg/csconfig" "github.com/crowdsecurity/crowdsec/pkg/exprhelpers" @@ -36,7 +35,7 @@ func NewProfile(profilesCfg []*csconfig.ProfileCfg) ([]*Runtime, error) { runtime := &Runtime{} xlog := log.New() - if err := types.ConfigureLogger(xlog, ptr.Of(log.InfoLevel)); err != nil { + if err := types.ConfigureLogger(xlog, log.InfoLevel); err != nil { return nil, fmt.Errorf("while configuring profiles-specific logger: %w", err) } diff --git a/pkg/cticlient/ctiexpr/expr.go b/pkg/cticlient/ctiexpr/expr.go index 6a6fdf52c..8b05906ff 100644 --- a/pkg/cticlient/ctiexpr/expr.go +++ b/pkg/cticlient/ctiexpr/expr.go @@ -29,7 +29,7 @@ var ( var ctiClient *cticlient.CrowdsecCTIClient -func InitCrowdsecCTI(key *string, ttl *time.Duration, size *int, logLevel *log.Level) error { +func InitCrowdsecCTI(key *string, ttl *time.Duration, size *int, logLevel log.Level) error { if key == nil || *key == "" { log.Warningf("CTI API key not set or empty, CTI will not be available") return cticlient.ErrDisabled diff --git a/pkg/cticlient/ctiexpr/expr_test.go b/pkg/cticlient/ctiexpr/expr_test.go index c3bfb08c8..3f11a567e 100644 --- a/pkg/cticlient/ctiexpr/expr_test.go +++ b/pkg/cticlient/ctiexpr/expr_test.go @@ -114,7 +114,7 @@ func smokeHandler(req *http.Request) *http.Response { func TestNilClient(t *testing.T) { defer ShutdownCrowdsecCTI() - if err := InitCrowdsecCTI(ptr.Of(""), nil, nil, nil); !errors.Is(err, cticlient.ErrDisabled) { + if err := InitCrowdsecCTI(ptr.Of(""), nil, nil, 0); !errors.Is(err, cticlient.ErrDisabled) { t.Fatalf("failed to init CTI : %s", err) } @@ -126,7 +126,7 @@ func TestNilClient(t *testing.T) { func TestInvalidAuth(t *testing.T) { defer ShutdownCrowdsecCTI() - if err := InitCrowdsecCTI(ptr.Of("asdasd"), nil, nil, nil); err != nil { + if err := InitCrowdsecCTI(ptr.Of("asdasd"), nil, nil, 0); err != nil { t.Fatalf("failed to init CTI : %s", err) } // Replace the client created by InitCrowdsecCTI with one that uses a custom transport @@ -153,7 +153,7 @@ func TestInvalidAuth(t *testing.T) { func TestNoKey(t *testing.T) { defer ShutdownCrowdsecCTI() - err := InitCrowdsecCTI(nil, nil, nil, nil) + err := InitCrowdsecCTI(nil, nil, nil, 0) require.ErrorIs(t, err, cticlient.ErrDisabled) // Replace the client created by InitCrowdsecCTI with one that uses a custom transport ctiClient = cticlient.NewCrowdsecCTIClient(cticlient.WithAPIKey("asdasd"), cticlient.WithHTTPClient(&http.Client{ @@ -170,7 +170,7 @@ func TestCache(t *testing.T) { defer ShutdownCrowdsecCTI() cacheDuration := 1 * time.Second - if err := InitCrowdsecCTI(ptr.Of(validApiKey), &cacheDuration, nil, nil); err != nil { + if err := InitCrowdsecCTI(ptr.Of(validApiKey), &cacheDuration, nil, 0); err != nil { t.Fatalf("failed to init CTI : %s", err) } // Replace the client created by InitCrowdsecCTI with one that uses a custom transport diff --git a/pkg/database/alerts.go b/pkg/database/alerts.go index 9a94c8f55..69f452851 100644 --- a/pkg/database/alerts.go +++ b/pkg/database/alerts.go @@ -60,6 +60,11 @@ func (c *Client) CreateOrUpdateAlert(ctx context.Context, machineID string, aler return "", fmt.Errorf("unable to create alert: %w", err) } + // happy nilaway + if len(alertIDs) == 0 { + return "", fmt.Errorf("unable to create alert: no IDs returned for alert %s", alertItem.UUID) + } + return alertIDs[0], nil } diff --git a/pkg/database/database.go b/pkg/database/database.go index 3d7a4e1b0..cf60ef74f 100644 --- a/pkg/database/database.go +++ b/pkg/database/database.go @@ -93,7 +93,7 @@ func NewClient(ctx context.Context, config *csconfig.DatabaseCfg) (*Client, erro client = ent.NewClient(ent.Driver(drv), entOpt) - if config.LogLevel != nil && *config.LogLevel >= log.DebugLevel { + if config.LogLevel >= log.DebugLevel { clog.Debugf("Enabling request debug") client = client.Debug() diff --git a/pkg/leakybucket/manager_load.go b/pkg/leakybucket/manager_load.go index 206d9dc91..a7bb1c519 100644 --- a/pkg/leakybucket/manager_load.go +++ b/pkg/leakybucket/manager_load.go @@ -16,8 +16,6 @@ import ( "gopkg.in/tomb.v2" yaml "gopkg.in/yaml.v2" - "github.com/crowdsecurity/go-cs-lib/ptr" - "github.com/crowdsecurity/crowdsec/pkg/alertcontext" "github.com/crowdsecurity/crowdsec/pkg/csconfig" "github.com/crowdsecurity/crowdsec/pkg/cwhub" @@ -342,7 +340,7 @@ func LoadBucket(bucketFactory *BucketFactory, tomb *tomb.Tomb) error { if bucketFactory.Debug { clog := log.New() - if err = types.ConfigureLogger(clog, ptr.Of(log.DebugLevel)); err != nil { + if err = types.ConfigureLogger(clog, log.DebugLevel); err != nil { return fmt.Errorf("while creating bucket-specific logger: %w", err) } diff --git a/pkg/parser/node.go b/pkg/parser/node.go index fdfb7545a..f73079276 100644 --- a/pkg/parser/node.go +++ b/pkg/parser/node.go @@ -13,7 +13,6 @@ import ( log "github.com/sirupsen/logrus" yaml "gopkg.in/yaml.v2" - "github.com/crowdsecurity/go-cs-lib/ptr" "github.com/crowdsecurity/grokky" "github.com/crowdsecurity/crowdsec/pkg/exprhelpers" @@ -413,7 +412,7 @@ func (n *Node) compile(pctx *UnixParserCtx, ectx EnricherCtx) error { that will be used only for processing this node ;) */ if n.Debug { clog := log.New() - if err = types.ConfigureLogger(clog, ptr.Of(log.DebugLevel)); err != nil { + if err = types.ConfigureLogger(clog, log.DebugLevel); err != nil { return fmt.Errorf("while creating bucket-specific logger: %w", err) } diff --git a/pkg/parser/stash.go b/pkg/parser/stash.go index 25cb25b5a..57f4882ca 100644 --- a/pkg/parser/stash.go +++ b/pkg/parser/stash.go @@ -88,7 +88,7 @@ func (s *Stash) Compile(logger *log.Entry) (*RuntimeStash, error) { TTL: rs.TTLVal, Name: s.Name, Strategy: s.Strategy, - LogLevel: &logLvl, + LogLevel: logLvl, }); err != nil { return nil, fmt.Errorf("while initializing cache: %w", err) } diff --git a/pkg/types/utils.go b/pkg/types/utils.go index 6b1506f0d..11635999e 100644 --- a/pkg/types/utils.go +++ b/pkg/types/utils.go @@ -76,7 +76,7 @@ func SetDefaultLoggerConfig(cfgMode string, cfgFolder string, cfgLevel log.Level return nil } -func ConfigureLogger(clog *log.Logger, level *log.Level) error { +func ConfigureLogger(clog *log.Logger, level log.Level) error { /*Configure logs*/ if LogOutput != nil { clog.SetOutput(LogOutput) @@ -88,8 +88,8 @@ func ConfigureLogger(clog *log.Logger, level *log.Level) error { clog.SetLevel(logLevel) - if level != nil && !logLevelViaFlag { - clog.SetLevel(*level) + if level != log.PanicLevel && !logLevelViaFlag { + clog.SetLevel(level) } return nil diff --git a/test/bats/05_config_yaml_local.bats b/test/bats/05_config_yaml_local.bats index ca7f47dac..e0efc57e5 100644 --- a/test/bats/05_config_yaml_local.bats +++ b/test/bats/05_config_yaml_local.bats @@ -33,22 +33,22 @@ teardown() { @test "config.yaml.local - cscli (log_level)" { config_set '.common.log_level="warning"' rune -0 cscli config show --key Config.Common.LogLevel - assert_output "&3" + assert_output "3" echo "{'common':{'log_level':'debug'}}" >"${CONFIG_YAML}.local" rune -0 cscli config show --key Config.Common.LogLevel - assert_output "&5" + assert_output "5" } @test "config.yaml.local - cscli (log_level - with envvar)" { config_set '.common.log_level="warning"' rune -0 cscli config show --key Config.Common.LogLevel - assert_output "&3" + assert_output "3" export CROWDSEC_LOG_LEVEL=debug echo "{'common':{'log_level':'${CROWDSEC_LOG_LEVEL}'}}" >"${CONFIG_YAML}.local" rune -0 cscli config show --key Config.Common.LogLevel - assert_output "&5" + assert_output "5" } @test "config.yaml.local - crowdsec (listen_url)" {