/* * AC Configuration Factory */ package factory import ( "fmt" "sync" "github.com/asaskevich/govalidator" "github.com/davecgh/go-spew/spew" "ac/internal/logger" ) const ( AcDefaultConfigPath = "/usr/local/etc/ac/ac.yaml" CapwapDefaultPort = 5246 MqttDefaultPort = 5247 ) type Config struct { DebugLevel string `yaml:"debugLevel" valid:"required,in(trace|debug|info|warn|error|fatal|panic)"` CapwapAddr string `yaml:"capwapAddr,omitempty" valid:"required,host"` sync.RWMutex } func (c *Config) Validate() (bool, error) { if _, err := govalidator.ValidateStruct(c); err != nil { return false, appendInvalid(err) } return true, nil } func appendInvalid(err error) error { var errs govalidator.Errors if err == nil { return nil } es := err.(govalidator.Errors).Errors() for _, e := range es { errs = append(errs, fmt.Errorf("Invalid %w", e)) } return error(errs) } func (c *Config) Print() { spew.Config.Indent = "\t" str := spew.Sdump(c) logger.CfgLog.Infof("==================================================") logger.CfgLog.Infof("%s", str) logger.CfgLog.Infof("==================================================") } func (c *Config) SetLogLevel(level string) { c.Lock() defer c.Unlock() c.DebugLevel = level } func (c *Config) GetLogLevel() string { c.RLock() defer c.RUnlock() return c.DebugLevel }