106 lines
2.1 KiB
Go
106 lines
2.1 KiB
Go
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
|
|
}
|
|
}
|