This commit is contained in:
IT 老营长 @云轩领航-创始人 2025-02-16 17:16:49 +08:00
parent b50323ab87
commit 9532ec1db6

View File

@ -8,6 +8,7 @@ import (
"shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits"
_ "2025-dev.shylinux.com/x/20250215-cluster/src/travel"
"github.com/shirou/gopsutil/v4/cpu"
"github.com/shirou/gopsutil/v4/disk"
"github.com/shirou/gopsutil/v4/mem"
@ -16,68 +17,86 @@ import (
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"`
list string `name:"list space auto" help:"设备监控"`
travel string `name:"travel" help:"遍历"`
}
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))
if len(arg) == 0 {
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":
break
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, "")
}
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, "")
}
})
m.Action(s.Travel)
} else {
m.Cmdy(web.SPACE, arg[0], m.PrefixKey())
}
}
func (s monitor) Travel(m *ice.Message, arg ...string) {
m.Cmdy("web.chat.dev.cluster.travel", "2025-dev.shylinux.com/x/20250213-machine", m.PrefixKey()).PushAction(s.Open)
stats := map[string]int{}
m.Table(func(value ice.Maps) {
kit.For([]string{"Thread", "Used", "Available", "DiskUsed", "DiskFree"}, func(key string) {
stats[key] += kit.Int(value[key])
})
})
list := []string{}
kit.For(stats, func(key string, value int) { list = append(list, key, kit.FmtSize(value)) })
m.StatusTime(list)
}
func (s monitor) Open(m *ice.Message, arg ...string) {
m.ProcessOpen(web.S(m.Option(web.SPACE)))
}
func init() { ice.Cmd("web.chat.dev.machine.monitor", monitor{}) }