control.go 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package main
  2. import (
  3. "cicv-data-closedloop/kinglong/common/cfg"
  4. "cicv-data-closedloop/kinglong/common/log"
  5. commonService "cicv-data-closedloop/kinglong/common/svc"
  6. controlConfig "cicv-data-closedloop/kinglong/control/pkg/cfg"
  7. commonConfig "cicv-data-closedloop/pji/common/cfg"
  8. "net/rpc"
  9. "time"
  10. )
  11. func init() {
  12. //runtime.GOMAXPROCS(1)
  13. // 初始化日志配置
  14. log.InitLogConfig()
  15. // 初始化本地配置文件(第1处配置,在本地文件)
  16. cfg.InitLocalConfig()
  17. // 初始化Oss连接信息
  18. cfg.InitOssConfig()
  19. // 初始化业务逻辑配置信息,配置文件在oss上(第2处配置,在oss文件)
  20. cfg.InitCloudConfig()
  21. // 首先初始化平台配置。
  22. cfg.InitPlatformConfig()
  23. // 初始化rpc客户端,用于杀死旧的采集程序
  24. controlConfig.InitRpcClient()
  25. }
  26. func main() {
  27. // 轮询任务接口判断是否有更新
  28. for {
  29. time.Sleep(time.Duration(1) * time.Second)
  30. // 1 获取当前设备的任务的 status
  31. status, err := cfg.GetStatus(cfg.PlatformConfig.TaskConfigId)
  32. if err != nil {
  33. log.GlobalLogger.Error("获取配置status失败:", err)
  34. continue
  35. }
  36. // 2 判断 status
  37. // UN_CHANGE 没有新的任务,无需更改
  38. // CHANGE 有新的任务,需要杀死旧的任务并重启
  39. // NONE 设备没有配置任务,需要杀死旧的任务
  40. if status == "UN_CHANGE" {
  41. continue
  42. } else if status == "CHANGE" || status == "NONE" {
  43. // 发送rpc信号杀死两个服务,并重启程序
  44. var masterArgs *commonService.KillSignal
  45. var slaveArgs *commonService.KillSignal
  46. if status == "CHANGE" {
  47. masterArgs = &commonService.KillSignal{NodeName: "master", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: true}
  48. slaveArgs = &commonService.KillSignal{NodeName: "slave", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: true}
  49. }
  50. if status == "NONE" {
  51. masterArgs = &commonService.KillSignal{NodeName: "master", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: false}
  52. slaveArgs = &commonService.KillSignal{NodeName: "slave", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: false}
  53. }
  54. KillRpcClientMaster, err := rpc.Dial("tcp", commonConfig.CloudConfig.Hosts[0].Ip+":"+commonConfig.CloudConfig.RpcPort)
  55. if err != nil {
  56. log.GlobalLogger.Error("创建rpc连接master失败:", err)
  57. KillRpcClientMaster.Close()
  58. continue
  59. }
  60. KillRpcClientSlave, err := rpc.Dial("tcp", commonConfig.CloudConfig.Hosts[1].Ip+":"+commonConfig.CloudConfig.RpcPort)
  61. if err != nil {
  62. log.GlobalLogger.Error("创建rpc连接slave失败:", err)
  63. KillRpcClientSlave.Close()
  64. continue
  65. }
  66. reply := 0
  67. if err = KillRpcClientMaster.Call("KillService.Kill", masterArgs, &reply); err != nil {
  68. log.GlobalLogger.Error("发送rpc请求到master失败:", err)
  69. KillRpcClientMaster.Close()
  70. continue
  71. }
  72. if err = KillRpcClientSlave.Call("KillService.Kill", slaveArgs, &reply); err != nil {
  73. log.GlobalLogger.Error("发送rpc请求到slave失败:", err)
  74. KillRpcClientSlave.Close()
  75. continue
  76. }
  77. // 获取一下最新配置
  78. cfg.InitPlatformConfig()
  79. KillRpcClientMaster.Close()
  80. KillRpcClientSlave.Close()
  81. } else {
  82. log.GlobalLogger.Error("未知的采集任务状态。status=", status)
  83. }
  84. }
  85. }