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"` 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", ser) return } // defer client.Close() // 返回的是pb字符串 var resp string // 调用远程方法 SysmonitorService.GetSysInfo client.Call("SysmonitorService.GetSysInfo", nil, &resp) // 构建json结构的字符串 sinfo := SysInfo{ Addr: sc.Addr, 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) }