You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

status_report.go 1.9 kB

2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package main
  2. import (
  3. "sync"
  4. "time"
  5. log "gitlink.org.cn/cloudream/common/pkgs/logger"
  6. "gitlink.org.cn/cloudream/storage-agent/internal/config"
  7. "gitlink.org.cn/cloudream/storage-common/consts"
  8. coormq "gitlink.org.cn/cloudream/storage-common/pkgs/mq/coordinator"
  9. "gitlink.org.cn/cloudream/storage-common/utils"
  10. )
  11. func reportStatus(wg *sync.WaitGroup) {
  12. coorCli, err := coormq.NewClient(&config.Cfg().RabbitMQ)
  13. if err != nil {
  14. wg.Done()
  15. log.Error("new coordinator client failed, err: %w", err)
  16. return
  17. }
  18. // TODO 增加退出死循环的方法
  19. for {
  20. //挨个ping其他agent(AgentIpList),记录延迟到AgentDelay
  21. // TODO AgentIP考虑放到配置文件里或者启动时从coor获取
  22. ips := utils.GetAgentIps()
  23. agentDelay := make([]int, len(ips))
  24. waitG := sync.WaitGroup{}
  25. waitG.Add(len(ips))
  26. for i := 0; i < len(ips); i++ {
  27. go func(i int, wg *sync.WaitGroup) {
  28. connStatus, err := utils.GetConnStatus(ips[i])
  29. if err != nil {
  30. wg.Done()
  31. log.Warnf("ping %s failed, err: %s", ips[i], err.Error())
  32. return
  33. }
  34. log.Debugf("connection status to %s: %+v", ips[i], connStatus)
  35. if connStatus.IsReachable {
  36. agentDelay[i] = int(connStatus.Delay.Milliseconds()) + 1
  37. } else {
  38. agentDelay[i] = -1
  39. }
  40. wg.Done()
  41. }(i, &waitG)
  42. }
  43. waitG.Wait()
  44. //TODO: 查看本地IPFS daemon是否正常,记录到ipfsStatus
  45. ipfsStatus := consts.IPFSStateOK
  46. //TODO:访问自身资源目录(配置文件中获取路径),记录是否正常,记录到localDirStatus
  47. localDirStatus := consts.StorageDirectoryStateOK
  48. //发送心跳
  49. // TODO 由于数据结构未定,暂时不发送真实数据
  50. coorCli.AgentStatusReport(coormq.NewAgentStatusReportBody(config.Cfg().ID, []int64{}, []int{}, ipfsStatus, localDirStatus))
  51. time.Sleep(time.Minute * 5)
  52. }
  53. coorCli.Close()
  54. wg.Done()
  55. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。