| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- 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"
- "github.com/tiger1103/gfast/v3/api/v1/system"
- "github.com/tiger1103/gfast/v3/library/libUtils"
- "os"
- "runtime"
- "strconv"
- "time"
- )
- 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
- }
|