|
- package ticktock
-
- import (
- "fmt"
- "time"
-
- "gitlink.org.cn/cloudream/common/pkgs/logger"
- "gitlink.org.cn/cloudream/common/pkgs/mq"
- "gitlink.org.cn/cloudream/common/utils/reflect2"
- "gitlink.org.cn/cloudream/jcs-pub/common/consts"
- stgglb "gitlink.org.cn/cloudream/jcs-pub/common/globals"
- hubmq "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/mq/hub"
- cortypes "gitlink.org.cn/cloudream/jcs-pub/coordinator/types"
- )
-
- type CheckHubState struct {
- }
-
- func (j *CheckHubState) Name() string {
- return reflect2.TypeNameOf[CheckHubState]()
- }
-
- func (j *CheckHubState) Execute(t *TickTock) {
- log := logger.WithType[CheckHubState]("TickTock")
- log.Debugf("job start")
- startTime := time.Now()
- defer func() {
- log.Debugf("job end, time: %v", time.Since(startTime))
- }()
-
- hubs, err := t.db.Hub().GetAllHubs(t.db.DefCtx())
- if err != nil {
- log.Warnf("get all hubs: %s", err.Error())
- return
- }
-
- for _, hub := range hubs {
- err := j.checkOne(t, hub)
- if err != nil {
- log.Warnf("check one hub %v: %s", hub, err.Error())
- }
- }
- }
-
- func (j *CheckHubState) checkOne(t *TickTock, hub cortypes.Hub) error {
- log := logger.WithType[CheckHubState]("TickTock")
-
- agtCli, err := stgglb.HubMQPool.Acquire(hub.HubID)
- if err != nil {
- return fmt.Errorf("new hub mq client: %w", err)
- }
- defer stgglb.HubMQPool.Release(agtCli)
-
- _, err = agtCli.GetState(hubmq.NewGetState(), mq.RequestOption{Timeout: time.Second * 30})
- if err != nil {
- if hub.LastReportTime != nil {
- if time.Since(*hub.LastReportTime) > t.cfg.HubUnavailableTime {
- err := t.db.Hub().UpdateState(t.db.DefCtx(), hub.HubID, consts.HubStateUnavailable)
- if err != nil {
- log.Warnf("set hub %v state: %s", hub, err.Error())
- }
- }
-
- } else if hub.LastReportTime == nil {
- err := t.db.Hub().UpdateState(t.db.DefCtx(), hub.HubID, consts.HubStateUnavailable)
- if err != nil {
- log.Warnf("set hub %v state: %s", hub, err.Error())
- }
- }
-
- return fmt.Errorf("getting state: %w", err)
- }
-
- // TODO 如果以后还有其他的状态,要判断哪些状态下能设置Normal
- err = t.db.Hub().UpdateState(t.db.DefCtx(), hub.HubID, consts.HubStateNormal)
- if err != nil {
- log.Warnf("set hub %v state: %s", hub, err.Error())
- }
-
- return nil
- }
|