59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
package heartbeat
|
|
|
|
import (
|
|
"encoding/json"
|
|
"git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/config"
|
|
"git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/config/agent"
|
|
"git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/internal/model/nats_msg_model"
|
|
"git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/internal/nats_service/definition"
|
|
"git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/internal/service/heartbeat_service"
|
|
"git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/pkg/log"
|
|
natsClient "git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/pkg/nats-client"
|
|
"git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/pkg/utils/randomutils"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
commonConfig = config.Config
|
|
)
|
|
|
|
func Strat() {
|
|
InitHeartBeatScheduler()
|
|
}
|
|
|
|
// InitHeartBeatScheduler
|
|
// 初始化 heartbeat 定时器
|
|
func InitHeartBeatScheduler() {
|
|
log.Infof("启动心跳服务")
|
|
// 每 30 秒钟时执行一次
|
|
randomNumber := randomutils.GetRandomNumber(-10, 10)
|
|
ticker := time.NewTicker(time.Duration(commonConfig.Schedule.HeartBeat+int64(randomNumber)) * time.Second) // 创建一个定时器
|
|
go func() {
|
|
for {
|
|
select {
|
|
case <-ticker.C:
|
|
doHeartBeatMQ()
|
|
}
|
|
}
|
|
}()
|
|
}
|
|
|
|
func doHeartBeatMQ() {
|
|
bytes, err := json.Marshal(heartbeat_service.AgentState)
|
|
if err != nil {
|
|
log.Infof("上报心跳信息序列化失败:%s", err)
|
|
return
|
|
}
|
|
|
|
msg := nats_msg_model.MsgModel{
|
|
Func: definition.HEALTHCHECK,
|
|
Body: bytes,
|
|
Version: "v1",
|
|
Rid: agent.Agent.RID,
|
|
}
|
|
|
|
marshal, _ := msg.Marshal()
|
|
log.Infof("上报心跳")
|
|
natsClient.Publish(definition.ToScheduleSubject, marshal)
|
|
}
|