代码拉取完成,页面将自动刷新
package cron
import (
"github.com/dinp/agent/g"
"github.com/dinp/common/dock"
"github.com/dinp/common/model"
"github.com/toolkits/nux"
"log"
"time"
)
func Heartbeat() {
duration := time.Duration(g.Config().Interval) * time.Second
for {
heartbeat(duration)
time.Sleep(duration)
}
}
func heartbeat(duration time.Duration) {
mem, err := nux.MemInfo()
if err != nil {
log.Println("[ERROR] get meminfo:", err)
return
}
// use MB
memFree := (mem.MemFree + mem.Buffers + mem.Cached) / 1024 / 1024
localIp := g.Config().LocalIp
containers, err := dock.Containers(g.Config().Docker)
if err != nil {
log.Println("[ERROR] list containers fail:", err)
// this node dead
var resp model.NodeResponse
err = g.RpcClient.Call("NodeState.NodeDown", localIp, &resp)
if err != nil || resp.Code != 0 {
log.Println("[ERROR] call rpc: NodeState.NodeDown fail:", err, "resp:", resp)
} else if g.Config().Debug {
log.Println("[INFO] call rpc: NodeState.NodeDown successfully. I am dead...")
}
for {
time.Sleep(duration)
containers, err = dock.Containers(g.Config().Docker)
if err == nil {
break
} else {
log.Println("[ERROR] list containers fail:", err)
}
}
}
req := model.NodeRequest{
Node: model.Node{
Ip: localIp,
MemFree: memFree,
},
Containers: containers,
}
var resp model.NodeResponse
err = g.RpcClient.Call("NodeState.Push", req, &resp)
if err != nil || resp.Code != 0 {
log.Println("[ERROR] call rpc: NodeState.Push fail:", err, "resp:", resp)
} else if g.Config().Debug {
log.Println("[DEBUG] =>", req)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。