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 全功能 Keepalive bool `mapstructure:"keepalive"` } 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"` // 心跳超时次数 AddFloorToFaceId bool `mapstructure:"add-floor-faceId"` Enable bool `mapstructure:"enable"` } type log 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"` FTPServer string `mapstructure:"ftp-server"` RecordServer string `mapstructure:"record-server"` } type image struct { CutFaceImage bool `mapstructure:"cut-face-image"` Enlarge int `mapstructure:"enlarge"` ImageUriPrefix string `mapstructure:"url-prefix"` } // 梯控设备 type nvcs struct { Mac string `mapstructure:"mac"` Model string `mapstructure:"model"` // 型号 Port string `mapstructure:"port"` // 端口 OSD string `mapstructure:"osd"` RunState bool `mapstructure:"run-state"` WaitRunTime int `mapstructure:"wait-run-time"` } type rfid struct { DevName string `mapstructure:"dev"` Baud int `mapstructure:"baud"` ReadFloor bool `mapstructure:"read-floor"` EPC string `mapstructure:"epc"` Position uint8 `mapstructure:"position"` } type rateLimit struct { FillInterval int64 `mapstructure:"fill-interval" json:"fillInterval"` Capacity int64 `mapstructure:"capacity" json:"capacity"` } type sysTime struct { NTPServer string `mapstructure:"ntp-server" json:"ntp-server"` SyncInterval int `mapstructure:"sync-interval" json:"sync-interval"` } var ServeConf = &serve{} var LogConf = &log{} var ForwardConf = &forward{} var RateLimitConf = &rateLimit{} var ClientConf = &client{} var NVCSConf = &nvcs{} var ImageConf = &image{} var SysTimeConf = &sysTime{} var RFIDConf = &rfid{} // 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("./") 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) v.UnmarshalKey("rfid", RFIDConf) v.UnmarshalKey("image", ImageConf) v.UnmarshalKey("systime", SysTimeConf) 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" } if ImageConf.Enlarge == 0 { ImageConf.Enlarge = 100 } if NVCSConf.WaitRunTime == 0 { NVCSConf.WaitRunTime = 60 } if SysTimeConf.SyncInterval == 0 { SysTimeConf.SyncInterval = 10 } if SysTimeConf.NTPServer == "" { SysTimeConf.NTPServer = "ntp.aliyun.com" } logger.SetLogLevel(LogConf.Level) }