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{}) }