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 client struct {
|
DeviceID string `mapstructure:"device-id"`
|
Username string `mapstructure:"username"`
|
Password string `mapstructure:"password"`
|
ServerAddr string `mapstructure:"server-addr"`
|
ServerPort string `mapstructure:"server-port"`
|
Proto string `mapstructure:"proto" ` // http, https
|
UploadType string `mapstructure:"upload-type"` // binary, url
|
ChannelNo string `mapstructure:"channel-number"` // 通道号, 同id
|
HeartbeatInterval int `mapstructure:"heartbeat-interval"` // 心跳周期
|
HeartbeatCount int `mapstructure:"heartbeat-count"` // 心跳超时次数
|
Enable bool `mapstructure:"enable"`
|
}
|
|
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"`
|
CutFaceImage bool `mapstructure:"cut-face-image"`
|
Enable bool `mapstructure:"enable"`
|
}
|
|
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{}
|
var ClientConf = &client{}
|
|
// 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)
|
v.UnmarshalKey("client", ClientConf)
|
|
if LogConf.Level == "" {
|
LogConf.Level = "info"
|
}
|
|
if ForwardConf.ReportInterval == 0 {
|
ForwardConf.ReportInterval = 10
|
}
|
|
if ForwardConf.RetryInterval == 0 {
|
ForwardConf.RetryInterval = 5
|
}
|
|
logger.SetLogLevel(LogConf.Level)
|
}
|