|
@@ -1,13 +1,14 @@
|
|
|
package main
|
|
|
|
|
|
import (
|
|
|
- "cicv-data-closedloop/common/config/c_log"
|
|
|
+ "cicv-data-closedloop/common/util"
|
|
|
"cicv-data-closedloop/kinglong/common/cfg"
|
|
|
+ commonConfig "cicv-data-closedloop/kinglong/common/cfg"
|
|
|
"cicv-data-closedloop/kinglong/common/log"
|
|
|
commonService "cicv-data-closedloop/kinglong/common/svc"
|
|
|
controlConfig "cicv-data-closedloop/kinglong/control/pkg/cfg"
|
|
|
- commonConfig "cicv-data-closedloop/pji/common/cfg"
|
|
|
"net/rpc"
|
|
|
+ "os"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
@@ -28,10 +29,10 @@ func init() {
|
|
|
}
|
|
|
|
|
|
func main() {
|
|
|
-
|
|
|
+ lastStatus := "NONE"
|
|
|
// 轮询任务接口判断是否有更新
|
|
|
for {
|
|
|
- time.Sleep(time.Duration(1) * time.Second)
|
|
|
+ time.Sleep(time.Duration(2) * time.Second)
|
|
|
// 1 获取当前设备的任务的 status
|
|
|
status, err := cfg.GetStatus(cfg.PlatformConfig.TaskConfigId)
|
|
|
if err != nil {
|
|
@@ -43,56 +44,52 @@ func main() {
|
|
|
// CHANGE 有新的任务,需要杀死旧的任务并重启
|
|
|
// NONE 设备没有配置任务,需要杀死旧的任务
|
|
|
if status == "UN_CHANGE" {
|
|
|
+ lastStatus = "UN_CHANGE"
|
|
|
continue
|
|
|
} else if status == "CHANGE" || status == "NONE" {
|
|
|
// 发送rpc信号杀死两个服务,并重启程序
|
|
|
- var masterArgs *commonService.KillSignal
|
|
|
- var slaveArgs *commonService.KillSignal
|
|
|
- if status == "CHANGE" {
|
|
|
- masterArgs = &commonService.KillSignal{NodeName: "master", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: true}
|
|
|
- c_log.GlobalLogger.Info("更新任务,发送rpc重启信号到主节点:", masterArgs)
|
|
|
- slaveArgs = &commonService.KillSignal{NodeName: "slave", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: true}
|
|
|
- c_log.GlobalLogger.Info("更新任务,发送rpc重启信号到从节点:", slaveArgs)
|
|
|
+ var killArgs *commonService.KillSignal
|
|
|
+ if lastStatus == "NONE" && status == "CHANGE" {
|
|
|
+ _, err := util.ExecuteWithPath(commonConfig.LocalConfig.RestartCmd.Dir, commonConfig.LocalConfig.RestartCmd.Name, commonConfig.LocalConfig.RestartCmd.Args...)
|
|
|
+ if err != nil {
|
|
|
+ log.GlobalLogger.Info("启动新程序失败,【path】=", commonConfig.LocalConfig.RestartCmd.Dir, "【cmd】=", commonConfig.LocalConfig.RestartCmd.Name, commonConfig.LocalConfig.RestartCmd.Args, ":", err)
|
|
|
+ os.Exit(-1)
|
|
|
+ }
|
|
|
+ log.GlobalLogger.Info("启动任务,本地执行启动命令:【path】=", commonConfig.LocalConfig.RestartCmd.Dir, "【cmd】=", commonConfig.LocalConfig.RestartCmd.Name, commonConfig.LocalConfig.RestartCmd.Args)
|
|
|
+ lastStatus = status
|
|
|
+ log.GlobalLogger.Info("获取数据闭环平台最新配置。")
|
|
|
+ commonConfig.InitPlatformConfig()
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if lastStatus == "UN_CHANGE" && status == "CHANGE" {
|
|
|
+ killArgs = &commonService.KillSignal{NodeName: cfg.LocalConfig.NodeName, DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: true}
|
|
|
+ log.GlobalLogger.Info("更新任务,发送rpc重启信号到localhost:", killArgs)
|
|
|
}
|
|
|
- if status == "NONE" {
|
|
|
- masterArgs = &commonService.KillSignal{NodeName: "master", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: false}
|
|
|
- c_log.GlobalLogger.Info("杀死任务,发送rpc结束信号到主节点:", masterArgs)
|
|
|
- slaveArgs = &commonService.KillSignal{NodeName: "slave", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: false}
|
|
|
- c_log.GlobalLogger.Info("杀死任务,发送rpc结束信号到从节点:", slaveArgs)
|
|
|
+ if lastStatus == "UN_CHANGE" && status == "NONE" {
|
|
|
+ killArgs = &commonService.KillSignal{NodeName: cfg.LocalConfig.NodeName, DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: false}
|
|
|
+ log.GlobalLogger.Info("杀死任务,发送rpc结束信号到从节点:", killArgs)
|
|
|
}
|
|
|
|
|
|
- KillRpcClientMaster, err := rpc.Dial("tcp", commonConfig.CloudConfig.Hosts[0].Ip+":"+commonConfig.CloudConfig.RpcPort)
|
|
|
+ KillRpcClient, err := rpc.Dial("tcp", "localhost:"+commonConfig.CloudConfig.RpcPort)
|
|
|
if err != nil {
|
|
|
log.GlobalLogger.Error("创建rpc客户端连接master失败:", err)
|
|
|
// 此处关闭client会报错
|
|
|
continue
|
|
|
}
|
|
|
- KillRpcClientSlave, err := rpc.Dial("tcp", commonConfig.CloudConfig.Hosts[1].Ip+":"+commonConfig.CloudConfig.RpcPort)
|
|
|
- if err != nil {
|
|
|
- log.GlobalLogger.Error("创建rpc客户端连接slave失败:", err)
|
|
|
- // 此处关闭client会报错
|
|
|
- continue
|
|
|
- }
|
|
|
|
|
|
reply := 0
|
|
|
- if err = KillRpcClientMaster.Call("KillService.Kill", masterArgs, &reply); err != nil {
|
|
|
+ if err = KillRpcClient.Call("KillService.Kill", killArgs, &reply); err != nil {
|
|
|
log.GlobalLogger.Error("发送rpc请求到master失败:", err)
|
|
|
- KillRpcClientMaster.Close()
|
|
|
- continue
|
|
|
+ //TODO 这里会报错unexpected EOF但是不影响,先注释 close 和 continue
|
|
|
+ //KillRpcClient.Close()
|
|
|
+ //continue
|
|
|
}
|
|
|
- if err = KillRpcClientSlave.Call("KillService.Kill", slaveArgs, &reply); err != nil {
|
|
|
- log.GlobalLogger.Error("发送rpc请求到slave失败:", err)
|
|
|
- KillRpcClientSlave.Close()
|
|
|
- continue
|
|
|
- }
|
|
|
- // 获取一下最新配置
|
|
|
- c_log.GlobalLogger.Info("获取数据闭环平台最新配置。")
|
|
|
+ lastStatus = status
|
|
|
+ log.GlobalLogger.Info("获取数据闭环平台最新配置。")
|
|
|
cfg.InitPlatformConfig()
|
|
|
- KillRpcClientMaster.Close()
|
|
|
- KillRpcClientSlave.Close()
|
|
|
+ KillRpcClient.Close()
|
|
|
} else {
|
|
|
- log.GlobalLogger.Error("未知的采集任务状态。status=", status)
|
|
|
+ log.GlobalLogger.Error("未知的采集任务状态。【status】=", status)
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|