package conf import ( "io/ioutil" "os" "path/filepath" "sync" "github.com/cloudwego/kitex/pkg/klog" "github.com/kr/pretty" "gopkg.in/validator.v2" "gopkg.in/yaml.v2" ) var ( conf *Config once sync.Once ) type Config struct { Env string Kitex Kitex `yaml:"kitex"` DB DB `yaml:"db"` Registry Registry `yaml:"registry"` } type DB struct { DSN string `yaml:"dsn"` } type Kitex struct { Service string `yaml:"service"` Address string `yaml:"address"` EnablePprof bool `yaml:"enable_pprof"` EnableGzip bool `yaml:"enable_gzip"` EnableAccessLog bool `yaml:"enable_access_log"` LogLevel string `yaml:"log_level"` LogFileName string `yaml:"log_file_name"` LogMaxSize int `yaml:"log_max_size"` LogMaxBackups int `yaml:"log_max_backups"` LogMaxAge int `yaml:"log_max_age"` } type Registry struct { RegistryAddress []string `yaml:"registry_address"` Username string `yaml:"username"` Password string `yaml:"password"` } // GetConf gets configuration instance func GetConf() *Config { once.Do(initConf) return conf } func initConf() { prefix := "/data" confFileRelPath := filepath.Join(prefix, filepath.Join(GetEnv(), "conf.yaml")) content, err := ioutil.ReadFile(confFileRelPath) if err != nil { panic(err) } conf = new(Config) err = yaml.Unmarshal(content, conf) if err != nil { klog.Error("parse yaml error - %v", err) panic(err) } if err = validator.Validate(conf); err != nil { klog.Error("validate config error - %v", err) panic(err) } conf.Env = GetEnv() pretty.Printf("%+v\n", conf) } func GetEnv() string { e := os.Getenv("GO_ENV") if len(e) == 0 { return "test" } return e } func LogLevel() klog.Level { level := GetConf().Kitex.LogLevel switch level { case "trace": return klog.LevelTrace case "debug": return klog.LevelDebug case "info": return klog.LevelInfo case "notice": return klog.LevelNotice case "warn": return klog.LevelWarn case "error": return klog.LevelError case "fatal": return klog.LevelFatal default: return klog.LevelInfo } }