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.
76 lines
1.5 KiB
76 lines
1.5 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
|
|
|
|
// 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", err)
|
|
// 跳过
|
|
continue
|
|
}
|
|
//
|
|
defer client.Close()
|
|
// 返回的是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)
|
|
}
|
|
// 生成json数据
|
|
sysresp := SysResp{
|
|
Status: 0,
|
|
Message: "success",
|
|
Data: rsdata,
|
|
}
|
|
// 增加跨域
|
|
uCorsHadler(w, r)
|
|
json.NewEncoder(w).Encode(sysresp)
|
|
}
|
|
|