package config
|
|
import (
|
"fmt"
|
"gat1400Exchange/pkg/logger"
|
|
"github.com/fsnotify/fsnotify"
|
"github.com/spf13/viper"
|
)
|
|
type serve struct {
|
ID string `mapstructure:"id"`
|
Mode string `mapstructure:"mode"`
|
Host string `mapstructure:"host"`
|
Port string `mapstructure:"port"`
|
Password string `mapstructure:"password"`
|
}
|
|
type logConfig struct {
|
LogWay string `mapstructure:"log-way"` // 日志输出
|
Path string `mapstructure:"path"` // 日志存储路径
|
Level string `mapstructure:"level"` // 日志等级
|
MaxAge int64 `mapstructure:"max-age"` // 保留压缩包天数
|
}
|
|
type forward struct {
|
SyncServer string `mapstructure:"sync-server"`
|
ReportServer string `mapstructure:"report-server"`
|
ReportInterval int `mapstructure:"report-interval"`
|
RetryInterval int `mapstructure:"retry-interval"`
|
}
|
|
type rateLimitConfig struct {
|
FillInterval int64 `mapstructure:"fill-interval" json:"fillInterval"`
|
Capacity int64 `mapstructure:"capacity" json:"capacity"`
|
}
|
|
var ServeConf = &serve{}
|
var LogConf = &logConfig{}
|
var ForwardConf = &forward{}
|
var RateLimitConf = &rateLimitConfig{}
|
|
// Init is an exported method that takes the environment starts the viper
|
// (external lib) and returns the configuration struct.
|
func init() {
|
var err error
|
v := viper.New()
|
v.SetConfigType("yaml")
|
v.SetConfigName("gat1400")
|
v.AddConfigPath("./config/")
|
v.AddConfigPath("../config/")
|
err = v.ReadInConfig()
|
if err != nil {
|
fmt.Println("error on parsing configuration file", err)
|
}
|
|
read2Conf(v)
|
v.WatchConfig()
|
v.OnConfigChange(func(e fsnotify.Event) {
|
read2Conf(v)
|
})
|
}
|
|
func read2Conf(v *viper.Viper) {
|
v.UnmarshalKey("serve", ServeConf)
|
v.UnmarshalKey("log", LogConf)
|
v.UnmarshalKey("forward", ForwardConf)
|
v.UnmarshalKey("rate-limit", RateLimitConf)
|
|
if LogConf.Level == "" {
|
LogConf.Level = "info"
|
}
|
|
if ForwardConf.ReportInterval == 0 {
|
ForwardConf.ReportInterval = 10
|
}
|
|
if ForwardConf.RetryInterval == 0 {
|
ForwardConf.RetryInterval = 5
|
}
|
|
logger.SetLogLevel(LogConf.Level)
|
}
|