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)
|
}
|