Browse Source

优化代码

master
xyiege 5 months ago
parent
commit
6a8d8539ab
  1. 113
      aufs/core/sysmonitor.go

113
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"`
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,97 +48,14 @@ func SysMonitor(w http.ResponseWriter, r *http.Request) {
// 调用远程方法 SysmonitorService.GetSysInfo
client.Call("SysmonitorService.GetSysInfo", nil, &resp)
// 添加到rsdata
rsdata = append(rsdata, resp)
}
// 合并为一个字符串
strdata := strings.Join(rsdata, ",")
// scc := util.Bas64end(strdata)
// encdata := base64.StdEncoding.EncodeToString(hdinfo)
// 生成json数据
sysresp := SysResp{
Status: 0,
Message: "success",
Data: strdata,
}
// 增加跨域
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
rsdata.Slist = append(rsdata.Slist, resp)
}
// 获取系统进程信息 (只获取前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,
Data: rsdata,
}
// 增加跨域
uCorsHadler(w, r)
json.NewEncoder(w).Encode(sysresp)

Loading…
Cancel
Save