孟令鑫 hace 1 año
padre
commit
da6d68772f

+ 1 - 0
kinglong/common/cfg/local-config-soc1.yaml

@@ -1,3 +1,4 @@
+node-name: master
 # 数据闭环平台参数
 equipment-no: kinglong3
 secret-key: 8EGgsLqCer8j7VR0q12emEAcrHQ3x1jh8pX9MZIa

+ 1 - 0
kinglong/common/cfg/local-config-soc2.yaml

@@ -1,3 +1,4 @@
+node-name: master
 # 数据闭环平台参数
 equipment-no: kinglong3
 secret-key: 8EGgsLqCer8j7VR0q12emEAcrHQ3x1jh8pX9MZIa

+ 1 - 0
kinglong/common/cfg/local-config.yaml

@@ -1,3 +1,4 @@
+node-name: master
 # 数据闭环平台参数
 equipment-no: kinglong3
 secret-key: 8EGgsLqCer8j7VR0q12emEAcrHQ3x1jh8pX9MZIa

+ 1 - 0
kinglong/common/cfg/local_cfg.go

@@ -13,6 +13,7 @@ type restartCmd struct {
 }
 
 type localConfig struct {
+	NodeName             string     `yaml:"node-name"`               // 获取oss配置的url
 	UrlGetOssConfig      string     `yaml:"url-get-oss-config"`      // 获取oss配置的url
 	OssBasePrefix        string     `yaml:"oss-base-prefix"`         // 云端配置文件的位置
 	EquipmentNo          string     `yaml:"equipment-no"`            // 当前设备的编号

+ 34 - 37
kinglong/control/main/control.go

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

+ 7 - 10
pji/control/main/control.go

@@ -29,9 +29,7 @@ func init() {
 }
 
 func main() {
-
 	lastStatus := "NONE"
-
 	//  轮询任务接口判断是否有更新
 	for {
 		time.Sleep(time.Duration(2) * time.Second)
@@ -50,7 +48,7 @@ func main() {
 			continue
 		} else if status == "CHANGE" || status == "NONE" {
 			// 3 发送rpc信号杀死采集程序
-			var masterArgs *commonService.KillSignal
+			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 {
@@ -64,15 +62,15 @@ func main() {
 				continue
 			}
 			if lastStatus == "UN_CHANGE" && status == "CHANGE" {
-				masterArgs = &commonService.KillSignal{NodeName: "master", DropUploadData: commonConfig.PlatformConfig.DropUploadData, Restart: true}
-				c_log.GlobalLogger.Info("更新任务,发送rpc重启信号:", masterArgs)
+				killArgs = &commonService.KillSignal{NodeName: "master", DropUploadData: commonConfig.PlatformConfig.DropUploadData, Restart: true}
+				c_log.GlobalLogger.Info("更新任务,发送rpc重启信号:", killArgs)
 			}
 			if lastStatus == "UN_CHANGE" && status == "NONE" {
-				masterArgs = &commonService.KillSignal{NodeName: "master", DropUploadData: commonConfig.PlatformConfig.DropUploadData, Restart: false}
-				c_log.GlobalLogger.Info("杀死任务,发送rpc结束信号:", masterArgs)
+				killArgs = &commonService.KillSignal{NodeName: "master", DropUploadData: commonConfig.PlatformConfig.DropUploadData, Restart: false}
+				c_log.GlobalLogger.Info("杀死任务,发送rpc结束信号:", killArgs)
 			}
 
-			KillRpcClient, err := rpc.Dial("tcp", commonConfig.CloudConfig.Hosts[0].Ip+":"+commonConfig.CloudConfig.RpcPort)
+			KillRpcClient, err := rpc.Dial("tcp", "localhost:"+commonConfig.CloudConfig.RpcPort)
 			if err != nil {
 				c_log.GlobalLogger.Error("创建rpc客户端连接master失败:", err)
 				// 此处关闭client会报错
@@ -80,8 +78,7 @@ func main() {
 			}
 
 			reply := 0
-			err = KillRpcClient.Call("KillService.Kill", masterArgs, &reply)
-			if err != nil {
+			if err = KillRpcClient.Call("KillService.Kill", killArgs, &reply); err != nil {
 				c_log.GlobalLogger.Error("发送 rpc 请求到 master 报错:", err)
 				//TODO 这里会报错unexpected EOF但是不影响,先注释 close 和 continue
 				//KillRpcClient.Close()