You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
3.9 KiB
143 lines
3.9 KiB
3 years ago
|
package controller
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"github.com/gogf/gf/v2/os/gtime"
|
||
|
"github.com/gogf/gf/v2/util/gconv"
|
||
|
"github.com/shirou/gopsutil/cpu"
|
||
|
"github.com/shirou/gopsutil/disk"
|
||
|
"github.com/shirou/gopsutil/host"
|
||
|
"github.com/shirou/gopsutil/load"
|
||
|
"github.com/shirou/gopsutil/mem"
|
||
|
"os"
|
||
|
"runtime"
|
||
|
"strconv"
|
||
|
"time"
|
||
|
"tyj_admin/api/v1/system"
|
||
|
"tyj_admin/library/libUtils"
|
||
|
)
|
||
|
|
||
|
var Monitor = sysMonitorController{
|
||
|
startTime: gtime.Now(),
|
||
|
}
|
||
|
|
||
|
type sysMonitorController struct {
|
||
|
BaseController
|
||
|
startTime *gtime.Time
|
||
|
}
|
||
|
|
||
|
func (c *sysMonitorController) List(ctx context.Context, req *system.MonitorSearchReq) (res *system.MonitorSearchRes, err error) {
|
||
|
cpuNum := runtime.NumCPU() //核心数
|
||
|
var cpuUsed float64 = 0 //用户使用率
|
||
|
var cpuAvg5 float64 = 0 //CPU负载5
|
||
|
var cpuAvg15 float64 = 0 //当前空闲率
|
||
|
|
||
|
cpuInfo, err := cpu.Percent(time.Duration(time.Second), false)
|
||
|
if err == nil {
|
||
|
cpuUsed, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", cpuInfo[0]), 64)
|
||
|
}
|
||
|
|
||
|
loadInfo, err := load.Avg()
|
||
|
if err == nil {
|
||
|
cpuAvg5, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", loadInfo.Load5), 64)
|
||
|
cpuAvg15, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", loadInfo.Load5), 64)
|
||
|
}
|
||
|
|
||
|
var memTotal uint64 = 0 //总内存
|
||
|
var memUsed uint64 = 0 //总内存 := 0 //已用内存
|
||
|
var memFree uint64 = 0 //剩余内存
|
||
|
var memUsage float64 = 0 //使用率
|
||
|
|
||
|
v, err := mem.VirtualMemory()
|
||
|
if err == nil {
|
||
|
memTotal = v.Total
|
||
|
memUsed = v.Used
|
||
|
memFree = memTotal - memUsed
|
||
|
memUsage, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", v.UsedPercent), 64)
|
||
|
}
|
||
|
|
||
|
var goTotal uint64 = 0 //go分配的总内存数
|
||
|
var goUsed uint64 = 0 //go使用的内存数
|
||
|
var goFree uint64 = 0 //go剩余的内存数
|
||
|
var goUsage float64 = 0 //使用率
|
||
|
|
||
|
var gomem runtime.MemStats
|
||
|
runtime.ReadMemStats(&gomem)
|
||
|
goUsed = gomem.Sys
|
||
|
goUsage = gconv.Float64(fmt.Sprintf("%.2f", gconv.Float64(goUsed)/gconv.Float64(memTotal)*100))
|
||
|
sysComputerIp := "" //服务器IP
|
||
|
|
||
|
ip, err := libUtils.GetLocalIP()
|
||
|
if err == nil {
|
||
|
sysComputerIp = ip
|
||
|
}
|
||
|
|
||
|
sysComputerName := "" //服务器名称
|
||
|
sysOsName := "" //操作系统
|
||
|
sysOsArch := "" //系统架构
|
||
|
|
||
|
sysInfo, err := host.Info()
|
||
|
|
||
|
if err == nil {
|
||
|
sysComputerName = sysInfo.Hostname
|
||
|
sysOsName = sysInfo.OS
|
||
|
sysOsArch = sysInfo.KernelArch
|
||
|
}
|
||
|
|
||
|
goName := "GoLang" //语言环境
|
||
|
goVersion := runtime.Version() //版本
|
||
|
gtime.Date()
|
||
|
goStartTime := c.startTime //启动时间
|
||
|
|
||
|
goRunTime := gtime.Now().Timestamp() - c.startTime.Timestamp() //运行时长(秒)
|
||
|
goHome := runtime.GOROOT() //安装路径
|
||
|
goUserDir := "" //项目路径
|
||
|
|
||
|
curDir, err := os.Getwd()
|
||
|
|
||
|
if err == nil {
|
||
|
goUserDir = curDir
|
||
|
}
|
||
|
|
||
|
//服务器磁盘信息
|
||
|
diskList := make([]disk.UsageStat, 0)
|
||
|
diskInfo, err := disk.Partitions(true) //所有分区
|
||
|
if err == nil {
|
||
|
for _, p := range diskInfo {
|
||
|
diskDetail, err := disk.Usage(p.Mountpoint)
|
||
|
if err == nil {
|
||
|
diskDetail.UsedPercent, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", diskDetail.UsedPercent), 64)
|
||
|
diskList = append(diskList, *diskDetail)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
res = new(system.MonitorSearchRes)
|
||
|
res = &system.MonitorSearchRes{
|
||
|
"cpuNum": cpuNum,
|
||
|
"cpuUsed": cpuUsed,
|
||
|
"cpuAvg5": gconv.String(cpuAvg5),
|
||
|
"cpuAvg15": gconv.String(cpuAvg15),
|
||
|
"memTotal": memTotal,
|
||
|
"goTotal": goTotal,
|
||
|
"memUsed": memUsed,
|
||
|
"goUsed": goUsed,
|
||
|
"memFree": memFree,
|
||
|
"goFree": goFree,
|
||
|
"memUsage": memUsage,
|
||
|
"goUsage": goUsage,
|
||
|
"sysComputerName": sysComputerName,
|
||
|
"sysOsName": sysOsName,
|
||
|
"sysComputerIp": sysComputerIp,
|
||
|
"sysOsArch": sysOsArch,
|
||
|
"goName": goName,
|
||
|
"goVersion": goVersion,
|
||
|
"goStartTime": goStartTime,
|
||
|
"goRunTime": goRunTime,
|
||
|
"goHome": goHome,
|
||
|
"goUserDir": goUserDir,
|
||
|
"diskList": diskList,
|
||
|
}
|
||
|
return
|
||
|
}
|