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"` Realm string `mapstructure:"realm"` Username string `mapstructure:"username"` Password string `mapstructure:"password"` Role string `mapstructure:"role"` // agent 设备端, proxy 1400中转 不处理deivce, server 全功能 } type client struct { ServerId string `mapstructure:"server-id"` 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"` // 心跳周期 HeartbeatFailCount 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 nvcs struct { Model string `mapstructure:"model"` // 型号 Port string `mapstructure:"port"` // 端口 } 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{} var NVCSConf = &nvcs{} // 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) v.UnmarshalKey("nvcs", NVCSConf) if LogConf.Level == "" { LogConf.Level = "info" } if ForwardConf.ReportInterval == 0 { ForwardConf.ReportInterval = 10 } if ForwardConf.RetryInterval == 0 { ForwardConf.RetryInterval = 5 } if ClientConf.HeartbeatInterval == 0 { ClientConf.HeartbeatInterval = 30 } if ClientConf.Proto == "" { ClientConf.Proto = "http" } logger.SetLogLevel(LogConf.Level) }