control.go 2.5 KB

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