From 6a8d8539abd23e829d6657ed8c586dd6d4f92ecf Mon Sep 17 00:00:00 2001 From: xc Date: Thu, 4 Sep 2025 11:18:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aufs/core/sysmonitor.go | 117 +++++----------------------------------- 1 file changed, 12 insertions(+), 105 deletions(-) diff --git a/aufs/core/sysmonitor.go b/aufs/core/sysmonitor.go index 1c8a0c2..ac9013f 100644 --- a/aufs/core/sysmonitor.go +++ b/aufs/core/sysmonitor.go @@ -2,29 +2,22 @@ package core import ( "aufs/db" - "aufs/proto/pb" - "encoding/base64" "encoding/json" - "fmt" "log" "net/http" "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数据 type SysResp struct { - Status int `json:"status"` - Message string `json:"message"` - Data any `json:"data"` + Status int `json:"status"` + Message string `json:"message"` + 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的列表 scslist := db.GetlScList(1) // - var rsdata []string + var rsdata Syslist + // todo 待优化 for _, sc := range scslist { - // for test start - // sc.Addr = "http://" + sc.Addr + ":8080" - // rsdata = append(rsdata, sc.Addr) - // test end // 利用jsonrpc 请求结果 // 构建访问的链接 @@ -58,98 +48,15 @@ func SysMonitor(w http.ResponseWriter, r *http.Request) { // 调用远程方法 SysmonitorService.GetSysInfo client.Call("SysmonitorService.GetSysInfo", nil, &resp) // 添加到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数据 sysresp := SysResp{ Status: 0, Message: "success", - Data: strdata, + Data: rsdata, } // 增加跨域 uCorsHadler(w, r) 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) -}