mirror of
https://github.com/tiger1103/gfast.git
synced 2026-09-21 02:04:07 +00:00
149 lines
4.1 KiB
Go
149 lines
4.1 KiB
Go
package admin
|
|
|
|
import (
|
|
"fmt"
|
|
"gfast/library/response"
|
|
"gfast/library/utils"
|
|
"github.com/gogf/gf/frame/g"
|
|
"github.com/gogf/gf/net/ghttp"
|
|
"github.com/gogf/gf/os/gtime"
|
|
"github.com/gogf/gf/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"
|
|
)
|
|
|
|
type MonitorServer struct{}
|
|
|
|
var StartTime = gtime.Datetime()
|
|
|
|
// @Summary 服务监控
|
|
// @Description 服务监控
|
|
// @Tags 服务监控
|
|
// @Success 0 {object} response.Response "{"code": 200, "data": [...]}"
|
|
// @Router /system/monitor/server/info [get]
|
|
// @Security
|
|
func (c *MonitorServer) Info(r *ghttp.Request) {
|
|
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 / 1024 / 1024
|
|
memUsed = v.Used / 1024 / 1024
|
|
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 / 1024 / 1024
|
|
goUsage = gconv.Float64(fmt.Sprintf("%.2f", gconv.Float64(goUsed)/gconv.Float64(memTotal)*100))
|
|
sysComputerIp := "" //服务器IP
|
|
|
|
ip, err := utils.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 := StartTime //启动时间
|
|
|
|
goRunTime := utils.GetHourDiffer(StartTime, gtime.Datetime()) //运行时长
|
|
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)
|
|
diskDetail.Total = diskDetail.Total / 1024 / 1024
|
|
diskDetail.Used = diskDetail.Used / 1024 / 1024
|
|
diskDetail.Free = diskDetail.Free / 1024 / 1024
|
|
disklist = append(disklist, *diskDetail)
|
|
}
|
|
}
|
|
}
|
|
|
|
res := g.Map{
|
|
"cpuNum": cpuNum,
|
|
"cpuUsed": cpuUsed,
|
|
"cpuAvg5": cpuAvg5,
|
|
"cpuAvg15": 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,
|
|
}
|
|
response.SusJson(true, r, "服务监控", res)
|
|
}
|