mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-02 15:30:25 +08:00
106 lines
3.9 KiB
Go
106 lines
3.9 KiB
Go
package machine
|
||
|
||
import (
|
||
"mayfly-go/base/model"
|
||
"mayfly-go/base/utils"
|
||
"strconv"
|
||
"strings"
|
||
)
|
||
|
||
type SystemVersion struct {
|
||
Version string
|
||
}
|
||
|
||
func (c *Cli) GetSystemVersion() *SystemVersion {
|
||
res, _ := c.Run("cat /etc/redhat-release")
|
||
return &SystemVersion{
|
||
Version: *res,
|
||
}
|
||
}
|
||
|
||
//top - 17:14:07 up 5 days, 6:30, 2 users, load average: 0.03, 0.04, 0.05
|
||
//Tasks: 101 total, 1 running, 100 sleeping, 0 stopped, 0 zombie
|
||
//%Cpu(s): 6.2 us, 0.0 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
|
||
//KiB Mem : 1882012 total, 73892 free, 770360 used, 1037760 buff/cache
|
||
//KiB Swap: 0 total, 0 free, 0 used. 933492 avail Mem
|
||
type Top struct {
|
||
Time string `json:"time"`
|
||
// 从本次开机到现在经过的时间
|
||
Up string `json:"up"`
|
||
// 当前有几个用户登录到该机器
|
||
NowUsers int `json:"nowUsers"`
|
||
// load average: 0.03, 0.04, 0.05 (系统1分钟、5分钟、15分钟内的平均负载值)
|
||
OneMinLoadavg float32 `json:"oneMinLoadavg"`
|
||
FiveMinLoadavg float32 `json:"fiveMinLoadavg"`
|
||
FifteenMinLoadavg float32 `json:"fifteenMinLoadavg"`
|
||
// 进程总数
|
||
TotalTask int `json:"totalTask"`
|
||
// 正在运行的进程数,对应状态TASK_RUNNING
|
||
RunningTask int `json:"runningTask"`
|
||
SleepingTask int `json:"sleepingTask"`
|
||
StoppedTask int `json:"stoppedTask"`
|
||
ZombieTask int `json:"zombieTask"`
|
||
// 进程在用户空间(user)消耗的CPU时间占比,不包含调整过优先级的进程
|
||
CpuUs float32 `json:"cpuUs"`
|
||
// 进程在内核空间(system)消耗的CPU时间占比
|
||
CpuSy float32 `json:"cpuSy"`
|
||
// 调整过用户态优先级的(niced)进程的CPU时间占比
|
||
CpuNi float32 `json:"cpuNi"`
|
||
// 空闲的(idle)CPU时间占比
|
||
CpuId float32 `json:"cpuId"`
|
||
// 等待(wait)I/O完成的CPU时间占比
|
||
CpuWa float32 `json:"cpuWa"`
|
||
// 处理硬中断(hardware interrupt)的CPU时间占比
|
||
CpuHi float32 `json:"cpuHi"`
|
||
// 处理硬中断(hardware interrupt)的CPU时间占比
|
||
CpuSi float32 `json:"cpuSi"`
|
||
// 当Linux系统是在虚拟机中运行时,等待CPU资源的时间(steal time)占比
|
||
CpuSt float32 `json:"cpuSt"`
|
||
|
||
TotalMem int `json:"totalMem"`
|
||
FreeMem int `json:"freeMem"`
|
||
UsedMem int `json:"usedMem"`
|
||
CacheMem int `json:"cacheMem"`
|
||
|
||
TotalSwap int `json:"totalSwap"`
|
||
FreeSwap int `json:"freeSwap"`
|
||
UsedSwap int `json:"usedSwap"`
|
||
AvailMem int `json:"availMem"`
|
||
}
|
||
|
||
func (c *Cli) GetTop() *Top {
|
||
res, _ := c.Run("top -b -n 1 | head -5")
|
||
topTemp := "top - {upAndUsers}, load average: {loadavg}\n" +
|
||
"Tasks:{totalTask} total,{runningTask} running,{sleepingTask} sleeping,{stoppedTask} stopped,{zombieTask} zombie\n" +
|
||
"%Cpu(s):{cpuUs} us,{cpuSy} sy,{cpuNi} ni,{cpuId} id,{cpuWa} wa,{cpuHi} hi,{cpuSi} si,{cpuSt} st\n" +
|
||
"KiB Mem :{totalMem} total,{freeMem} free,{usedMem} used,{cacheMem} buff/cache\n" +
|
||
"KiB Swap:{totalSwap} total,{freeSwap} free,{usedSwap} used. {availMem} avail Mem \n"
|
||
resMap := make(map[string]interface{})
|
||
utils.ReverStrTemplate(topTemp, *res, resMap)
|
||
|
||
//17:14:07 up 5 days, 6:30, 2
|
||
timeUpAndUserStr := resMap["upAndUsers"].(string)
|
||
timeUpAndUser := strings.Split(timeUpAndUserStr, "up")
|
||
time := utils.StrTrim(timeUpAndUser[0])
|
||
upAndUsers := strings.Split(timeUpAndUser[1], ",")
|
||
up := utils.StrTrim(upAndUsers[0]) + upAndUsers[1]
|
||
users, _ := strconv.Atoi(utils.StrTrim(strings.Split(utils.StrTrim(upAndUsers[2]), " ")[0]))
|
||
// 0.03, 0.04, 0.05
|
||
loadavgs := strings.Split(resMap["loadavg"].(string), ",")
|
||
oneMinLa, _ := strconv.ParseFloat(loadavgs[0], 32)
|
||
fiveMinLa, _ := strconv.ParseFloat(utils.StrTrim(loadavgs[1]), 32)
|
||
fifMinLa, _ := strconv.ParseFloat(utils.StrTrim(loadavgs[2]), 32)
|
||
|
||
top := &Top{Time: time, Up: up, NowUsers: users, OneMinLoadavg: float32(oneMinLa), FiveMinLoadavg: float32(fiveMinLa), FifteenMinLoadavg: float32(fifMinLa)}
|
||
err := utils.Map2Struct(resMap, top)
|
||
model.BizErrIsNil(err, "解析top出错")
|
||
return top
|
||
}
|
||
|
||
type Status struct {
|
||
// 系统版本
|
||
SysVersion SystemVersion
|
||
// top信息
|
||
Top Top
|
||
}
|