mirror of
https://2025-dev.shylinux.com/x/20250213-machine
synced 2025-04-25 04:28:04 +08:00
84 lines
2.4 KiB
Go
84 lines
2.4 KiB
Go
package monitor
|
|
|
|
import (
|
|
"time"
|
|
|
|
"shylinux.com/x/ice"
|
|
"shylinux.com/x/icebergs/base/mdb"
|
|
"shylinux.com/x/icebergs/base/web"
|
|
kit "shylinux.com/x/toolkits"
|
|
|
|
"github.com/shirou/gopsutil/v4/cpu"
|
|
"github.com/shirou/gopsutil/v4/disk"
|
|
"github.com/shirou/gopsutil/v4/mem"
|
|
"github.com/shirou/gopsutil/v4/net"
|
|
)
|
|
|
|
type monitor struct {
|
|
fields string `data:"ModelName,Mhz,Core,Thread,CorePercent,ThreadPercent,Total,Free,Available,Used,UsedPercent,DiskTotal,DiskFree,DiskUsed,DiskUsedPercent,BytesRecv,BytesSent,PacketsRecv,PacketsSent"`
|
|
list string `name:"list hash auto" help:"monitor"`
|
|
}
|
|
|
|
func (s monitor) List(m *ice.Message, arg ...string) {
|
|
m.Cmd(web.SPACE, ice.OPS, web.DREAM, web.SERVER).Table(func(value ice.Maps) {
|
|
m.PushRecord(value)
|
|
})
|
|
return
|
|
c, _ := cpu.Info()
|
|
v, _ := mem.VirtualMemory()
|
|
d, _ := disk.Usage(kit.Pwd())
|
|
n, _ := net.IOCounters(false)
|
|
kit.For(kit.Split(m.OptionDefault(mdb.FIELDS, m.Config(mdb.FIELDS))), func(field string) {
|
|
switch field {
|
|
case "ModelName":
|
|
m.Push(field, c[0].ModelName)
|
|
case "Mhz":
|
|
list := []string{}
|
|
for _, v := range c {
|
|
list = append(list, kit.Format("%.2f", v.Mhz))
|
|
}
|
|
m.Push(field, kit.Join(list, ","))
|
|
case "Core", "Thread":
|
|
n, _ := cpu.Counts(field == "Thread")
|
|
m.Push(field, n)
|
|
case "CorePercent", "ThreadPercent":
|
|
p, _ := cpu.Percent(3*time.Second, field == "ThreadPercent")
|
|
list := []string{}
|
|
for _, v := range p {
|
|
list = append(list, kit.Format("%.2f", v))
|
|
}
|
|
m.Push(field, kit.Join(list, ","))
|
|
case "Total":
|
|
m.Push(field, kit.FmtSize(v.Total))
|
|
case "Free":
|
|
m.Push(field, kit.FmtSize(v.Free))
|
|
case "Available":
|
|
m.Push(field, kit.FmtSize(v.Available))
|
|
case "Used":
|
|
m.Push(field, kit.FmtSize(v.Used))
|
|
case "UsedPercent":
|
|
m.Push(field, kit.Format("%.2f%%", v.UsedPercent))
|
|
case "DiskTotal":
|
|
m.Push(field, kit.FmtSize(d.Total))
|
|
case "DiskFree":
|
|
m.Push(field, kit.FmtSize(d.Free))
|
|
case "DiskUsed":
|
|
m.Push(field, kit.FmtSize(d.Used))
|
|
case "DiskUsedPercent":
|
|
m.Push(field, kit.Format("%.2f%%", d.UsedPercent))
|
|
case "BytesRecv":
|
|
m.Push(field, kit.FmtSize(n[0].BytesRecv))
|
|
case "BytesSent":
|
|
m.Push(field, kit.FmtSize(n[0].BytesSent))
|
|
case "PacketsRecv":
|
|
m.Push(field, kit.FmtSize(n[0].PacketsRecv))
|
|
case "PacketsSent":
|
|
m.Push(field, kit.FmtSize(n[0].PacketsSent))
|
|
default:
|
|
m.Push(field, "")
|
|
}
|
|
})
|
|
}
|
|
|
|
func init() { ice.Cmd("web.chat.dev.machine.monitor", monitor{}) }
|