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