|
|
@ -2,29 +2,22 @@ package core |
|
|
|
|
|
|
|
|
import ( |
|
|
import ( |
|
|
"aufs/db" |
|
|
"aufs/db" |
|
|
"aufs/proto/pb" |
|
|
|
|
|
"encoding/base64" |
|
|
|
|
|
"encoding/json" |
|
|
"encoding/json" |
|
|
"fmt" |
|
|
|
|
|
"log" |
|
|
"log" |
|
|
"net/http" |
|
|
"net/http" |
|
|
"net/rpc/jsonrpc" |
|
|
"net/rpc/jsonrpc" |
|
|
"strings" |
|
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/shirou/gopsutil/v3/cpu" |
|
|
|
|
|
"github.com/shirou/gopsutil/v3/disk" |
|
|
|
|
|
"github.com/shirou/gopsutil/v3/mem" |
|
|
|
|
|
"github.com/shirou/gopsutil/v3/net" |
|
|
|
|
|
"github.com/shirou/gopsutil/v3/process" |
|
|
|
|
|
"google.golang.org/protobuf/proto" |
|
|
|
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
// 返回json数据
|
|
|
// 返回json数据
|
|
|
type SysResp struct { |
|
|
type SysResp struct { |
|
|
Status int `json:"status"` |
|
|
Status int `json:"status"` |
|
|
Message string `json:"message"` |
|
|
Message string `json:"message"` |
|
|
Data any `json:"data"` |
|
|
Data Syslist `json:"data"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 定义返回的list 结构
|
|
|
|
|
|
type Syslist struct { |
|
|
|
|
|
Slist []string `json:"slist"` |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 系统监控
|
|
|
// 系统监控
|
|
|
@ -34,13 +27,10 @@ func SysMonitor(w http.ResponseWriter, r *http.Request) { |
|
|
// 查询状态为1的列表
|
|
|
// 查询状态为1的列表
|
|
|
scslist := db.GetlScList(1) |
|
|
scslist := db.GetlScList(1) |
|
|
//
|
|
|
//
|
|
|
var rsdata []string |
|
|
var rsdata Syslist |
|
|
|
|
|
|
|
|
|
|
|
// todo 待优化
|
|
|
for _, sc := range scslist { |
|
|
for _, sc := range scslist { |
|
|
// for test start
|
|
|
|
|
|
// sc.Addr = "http://" + sc.Addr + ":8080"
|
|
|
|
|
|
// rsdata = append(rsdata, sc.Addr)
|
|
|
|
|
|
// test end
|
|
|
|
|
|
|
|
|
|
|
|
// 利用jsonrpc 请求结果
|
|
|
// 利用jsonrpc 请求结果
|
|
|
// 构建访问的链接
|
|
|
// 构建访问的链接
|
|
|
@ -58,98 +48,15 @@ func SysMonitor(w http.ResponseWriter, r *http.Request) { |
|
|
// 调用远程方法 SysmonitorService.GetSysInfo
|
|
|
// 调用远程方法 SysmonitorService.GetSysInfo
|
|
|
client.Call("SysmonitorService.GetSysInfo", nil, &resp) |
|
|
client.Call("SysmonitorService.GetSysInfo", nil, &resp) |
|
|
// 添加到rsdata
|
|
|
// 添加到rsdata
|
|
|
rsdata = append(rsdata, resp) |
|
|
rsdata.Slist = append(rsdata.Slist, resp) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 合并为一个字符串
|
|
|
|
|
|
strdata := strings.Join(rsdata, ",") |
|
|
|
|
|
// scc := util.Bas64end(strdata)
|
|
|
|
|
|
|
|
|
|
|
|
// encdata := base64.StdEncoding.EncodeToString(hdinfo)
|
|
|
|
|
|
// 生成json数据
|
|
|
// 生成json数据
|
|
|
sysresp := SysResp{ |
|
|
sysresp := SysResp{ |
|
|
Status: 0, |
|
|
Status: 0, |
|
|
Message: "success", |
|
|
Message: "success", |
|
|
Data: strdata, |
|
|
Data: rsdata, |
|
|
} |
|
|
} |
|
|
// 增加跨域
|
|
|
// 增加跨域
|
|
|
uCorsHadler(w, r) |
|
|
uCorsHadler(w, r) |
|
|
json.NewEncoder(w).Encode(sysresp) |
|
|
json.NewEncoder(w).Encode(sysresp) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 系统监控
|
|
|
|
|
|
func SysMonitorOd(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
|
|
|
|
|
|
|
// 磁盘容量信息
|
|
|
|
|
|
diskInfo, err := disk.Usage("/") |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
log.Fatal("获取磁盘信息失败:", err) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
// 磁盘空间占用
|
|
|
|
|
|
hdtval := fmt.Sprintf("%.2f GB", float64(diskInfo.Total)/1024/1024/1024) |
|
|
|
|
|
hduval := fmt.Sprintf("%.2f GB", float64(diskInfo.Used)/1024/1024/1024) |
|
|
|
|
|
|
|
|
|
|
|
// 获取CPU占用率 (需要等待1秒来计算)
|
|
|
|
|
|
cpuPercent, err := cpu.Percent(time.Second, false) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
log.Fatalf("获取CPU信息失败: %v", err) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
cpuinfo := fmt.Sprintf(" %.2f%%", cpuPercent[0]) |
|
|
|
|
|
|
|
|
|
|
|
// 获取内存占用信息
|
|
|
|
|
|
memInfo, err := mem.VirtualMemory() |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
log.Fatalf("获取内存信息失败: %v", err) |
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 获取网络流量信息
|
|
|
|
|
|
netIO, err := net.IOCounters(false) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
log.Fatalf("获取网络信息失败: %v", err) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 获取系统进程信息 (只获取前5个进程)
|
|
|
|
|
|
processes, err := process.Processes() |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
log.Fatalf("获取进程信息失败: %v", err) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
// 统计运行中的进程数量
|
|
|
|
|
|
procnum := int32(len(processes)) |
|
|
|
|
|
|
|
|
|
|
|
//生成proto的内容
|
|
|
|
|
|
hdinfo, err := proto.Marshal(&pb.Hdinfo{ |
|
|
|
|
|
Hdstat: fmt.Sprintf("%v / %v", hduval, hdtval), |
|
|
|
|
|
Procout: fmt.Sprintf(" %d", procnum), |
|
|
|
|
|
Cpustat: cpuinfo, |
|
|
|
|
|
Memstat: fmt.Sprintf(" %.2f%%", memInfo.UsedPercent), |
|
|
|
|
|
Netstat: fmt.Sprintf(" %.2f MB", float64(netIO[0].BytesRecv)/1024/1024), |
|
|
|
|
|
}) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
http.Error(w, err.Error(), http.StatusInternalServerError) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// ver:0821
|
|
|
|
|
|
// 输出proto
|
|
|
|
|
|
encdata := base64.StdEncoding.EncodeToString(hdinfo) |
|
|
|
|
|
// w.Header().Set("content-type", "application/x-protobuf")
|
|
|
|
|
|
// w.Write([]byte(encdata))
|
|
|
|
|
|
|
|
|
|
|
|
w.Header().Set("Content-Type", "application/json") |
|
|
|
|
|
|
|
|
|
|
|
// 生成json数据
|
|
|
|
|
|
sysresp := SysResp{ |
|
|
|
|
|
Status: 0, |
|
|
|
|
|
Message: "success", |
|
|
|
|
|
Data: encdata, |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 增加跨域
|
|
|
|
|
|
uCorsHadler(w, r) |
|
|
|
|
|
json.NewEncoder(w).Encode(sysresp) |
|
|
|
|
|
} |
|
|
|
|
|
|