自动更新管控端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

80 lines
1.6 KiB

package core
import (
"aufs/db"
"encoding/json"
"log"
"net/http"
"net/rpc/jsonrpc"
)
// 返回json数据
type SysResp struct {
Status int `json:"status"`
Message string `json:"message"`
Data Syslist `json:"data"`
}
// 定义返回的list 结构
type Syslist struct {
Slist []SysInfo `json:"slist"`
}
// 返回的结构
type SysInfo struct {
Addr string `json:"addr"`
Port string `json:"port"`
Resp string `json:"resp"`
}
// 系统监控
// 从数据库中读取相关记录并利用jsonrpc 请求结果
func SysMonitor(w http.ResponseWriter, r *http.Request) {
db.Init()
// 查询状态为1的列表
scslist := db.GetlScList(1)
//
var rsdata Syslist
var sinfo SysInfo
// todo 待优化
for _, sc := range scslist {
// 利用jsonrpc 请求结果
// 构建访问的链接
ser := sc.Addr + ":" + sc.Port
// 链接服务
client, err := jsonrpc.Dial("tcp", ser)
// 发生错误,执行下一个
if err != nil {
log.Fatalf("Dial SysMonitor failed: %v\n", err)
}
//
defer client.Close()
if client != nil {
// 返回的是pb字符串
var resp string
// 调用远程方法 SysmonitorService.GetSysInfo
client.Call("SysmonitorService.GetSysInfo", nil, &resp)
// 构建json结构的字符串
sinfo = SysInfo{
Addr: sc.Addr,
Port: sc.Port,
Resp: resp,
}
// 添加到rsdata
rsdata.Slist = append(rsdata.Slist, sinfo)
} else {
continue
}
}
// 生成json数据
sysresp := SysResp{
Status: 0,
Message: "success",
Data: rsdata,
}
// 增加跨域
uCorsHadler(w, r)
json.NewEncoder(w).Encode(sysresp)
}