control.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. "time"
  8. )
  9. func init() {
  10. // 初始化日志配置
  11. log.InitLogConfig()
  12. // 初始化本地配置文件(第1处配置,在本地文件)
  13. cfg.InitLocalConfig()
  14. // 初始化Oss连接信息
  15. cfg.InitOssConfig()
  16. // 初始化业务逻辑配置信息,配置文件在oss上(第2处配置,在oss文件)
  17. cfg.InitCloudConfig()
  18. // 首先初始化平台配置。
  19. cfg.InitPlatformConfig()
  20. // 初始化rpc客户端,用于杀死旧的采集程序
  21. controlConfig.InitRpcClient()
  22. }
  23. func main() {
  24. // 轮询任务接口判断是否有更新
  25. for {
  26. time.Sleep(time.Duration(1) * time.Second)
  27. // 1 获取当前设备的任务的 status
  28. status, err := cfg.GetStatus(cfg.PlatformConfig.TaskConfigId)
  29. if err != nil {
  30. log.GlobalLogger.Error("获取配置status失败:", err)
  31. continue
  32. }
  33. // 2 判断 status
  34. // UN_CHANGE 没有新的任务,无需更改
  35. // CHANGE 有新的任务,需要杀死旧的任务并重启
  36. // NONE 设备没有配置任务,需要杀死旧的任务
  37. if status == "UN_CHANGE" {
  38. continue
  39. } else if status == "CHANGE" || status == "NONE" {
  40. // 发送rpc信号杀死两个服务,并重启程序
  41. var masterArgs *commonService.KillSignal
  42. var slaveArgs *commonService.KillSignal
  43. if status == "CHANGE" {
  44. masterArgs = &commonService.KillSignal{NodeName: "master", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: true}
  45. slaveArgs = &commonService.KillSignal{NodeName: "slave", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: true}
  46. }
  47. if status == "NONE" {
  48. masterArgs = &commonService.KillSignal{NodeName: "master", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: false}
  49. slaveArgs = &commonService.KillSignal{NodeName: "slave", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: false}
  50. }
  51. var reply int
  52. err = controlConfig.KillRpcClientMaster.Call("KillService.Kill", masterArgs, &reply)
  53. if err != nil {
  54. log.GlobalLogger.Error("发送rpc请求到master失败:", err)
  55. }
  56. err = controlConfig.KillRpcClientSlave.Call("KillService.Kill", slaveArgs, &reply)
  57. if err != nil {
  58. log.GlobalLogger.Error("发送rpc请求到slave失败:", err)
  59. }
  60. // 获取一下最新配置
  61. cfg.InitPlatformConfig()
  62. } else {
  63. log.GlobalLogger.Error("未知的采集任务状态。status=", status)
  64. }
  65. }
  66. }