package conf import ( "apsClient/pkg/convertx" "apsClient/pkg/logx" "apsClient/pkg/sqlitex" "apsClient/pkg/timex" "apsClient/utils" "github.com/spf13/viper" "log" "time" ) var ( // config file name configName = "apsClient" // config file paths configPaths = []string{ "./", "../", "./conf", "../conf", } ) type ( System struct { Env string // 环境值 develop test public Port int // 端口 DeviceId string //设备id NetSetShellPath string //网络设置脚本路径 NetUpShellName string //网络停用脚本 NetDownShellName string //网络开启脚本 } Etcd struct { Endpoints []string // etcd地址 DialTimeout int // etcd超时时间 KeyPrefix string // etcd key前缀 Tls Tls // etcd tls配置 } Tls struct { CertFile string // 证书文件 KeyFile string // 私钥文件 CaFile string // ca文件 } Rancher struct { Url string // rancher地址 Token string // rancher token } K8s struct { Image string // k8s deployment 镜像 DBHost string // db host ALHost string // al host Host string // host IP string // tmp ip } Services struct { ApsServer string Serial string } nsqConf struct { NodeId string NsqdAddr string NsqlookupdAddr string } plc struct { FinishNumberTimeInterval int TotalNumberTimeInterval int ModbusIntType string SlaveId int Package string StandbyTime int64 } Prompt struct { SafeProduce string `json:"safeProduce,omitempty"` PlcNotConnected string `json:"plcNotConnected,omitempty"` } config struct { // 系统配置 System System // 日志 Log logx.Conf // mysql配置 Sqlite sqlitex.Conf //Services Address Services Services //NsqConf NsqConf nsqConf //PLC PLC plc Prompt Prompt CurrentDeviceID string //设置当前面板控制的设备 SerfClusterStatus string //集群状态 ClusterNodeQuantity int //集群节点数量 SystemDeviceRunSince int64 //系统开始运行时间戳 } ) var ( Conf config Viper *viper.Viper ) func init() { Viper = viper.New() Viper.SetConfigName(configName) for _, path := range configPaths { Viper.AddConfigPath(path) } if err := Viper.ReadInConfig(); err != nil { log.Fatalf("ReadInConfig err:%v", err) } if err := Viper.Unmarshal(&Conf); err != nil { log.Fatalf("Unmarshal err:%v", err) } if Conf.PLC.StandbyTime == 0 { Conf.PLC.StandbyTime = 300 //5分钟 } uptimeStr, err := utils.Exec("uptime -s") if err == nil { t, err := timex.StringToTime(uptimeStr) if err == nil { Conf.SystemDeviceRunSince = t.Unix() } } else { Conf.SystemDeviceRunSince = time.Now().Unix() } SetUpTime() ShowConfig() } // WriteConfig 回写配置 func (c *config) WriteConfig() error { cs := convertx.StructToMap(Conf) for k, v := range cs { Viper.Set(k, v) } return Viper.WriteConfig() } func ShowConfig() { log.Println("......................................................") log.Printf(" System: %+v", Conf.System) log.Printf(" Log: %+v", Conf.Log) log.Printf(" plc : %+v", Conf.PLC) log.Printf(" services : %+v", Conf.Services) log.Println("......................................................") } func SetUpTime() { uptimeStr, err := utils.Exec("uptime -s") if err == nil { t, err := timex.StringToTime(uptimeStr) if err == nil { Conf.SystemDeviceRunSince = t.Unix() } } else { Conf.SystemDeviceRunSince = time.Now().Unix() } }