|
|
|
@ -6,6 +6,7 @@ import ( |
|
|
|
"log" |
|
|
|
"net/http" |
|
|
|
"net/rpc/jsonrpc" |
|
|
|
"time" |
|
|
|
) |
|
|
|
|
|
|
|
// 返回json数据
|
|
|
|
@ -38,31 +39,43 @@ func SysMonitor(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
|
|
|
// todo 待优化
|
|
|
|
for _, sc := range scslist { |
|
|
|
|
|
|
|
// 利用channel控制超时
|
|
|
|
errch := make(chan error, 1) |
|
|
|
// 利用jsonrpc 请求结果
|
|
|
|
// 构建访问的链接
|
|
|
|
ser := sc.Addr + ":" + sc.Port |
|
|
|
// 链接服务
|
|
|
|
client, err := jsonrpc.Dial("tcp", ser) |
|
|
|
if err != nil { |
|
|
|
log.Fatalf("Dial SysMonitor failed: %v", err) |
|
|
|
// 跳过
|
|
|
|
continue |
|
|
|
} |
|
|
|
go func() { |
|
|
|
// 链接服务
|
|
|
|
client, err := jsonrpc.Dial("tcp", ser) |
|
|
|
// 发生错误,执行下一个
|
|
|
|
if err != nil { |
|
|
|
log.Fatalf("Dial SysMonitor failed: %v\n", err) |
|
|
|
errch <- err |
|
|
|
} |
|
|
|
//
|
|
|
|
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) |
|
|
|
}() |
|
|
|
|
|
|
|
//
|
|
|
|
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, |
|
|
|
select { |
|
|
|
case err := <-errch: |
|
|
|
log.Printf("SysMonitor failed: %v\n", err) |
|
|
|
case <-time.After(5 * time.Second): |
|
|
|
log.Printf("SysMonitor timeout: %v\n", ser) |
|
|
|
} |
|
|
|
// 添加到rsdata
|
|
|
|
rsdata.Slist = append(rsdata.Slist, sinfo) |
|
|
|
|
|
|
|
} |
|
|
|
// 生成json数据
|
|
|
|
sysresp := SysResp{ |
|
|
|
|