Files
ac/src/pkg/factory/config.go
2025-11-05 13:16:01 +08:00

72 lines
1.3 KiB
Go

/*
* 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
}