diff --git a/src/monitor/monitor.go b/src/monitor/monitor.go index c33e1ef..cfcaf66 100644 --- a/src/monitor/monitor.go +++ b/src/monitor/monitor.go @@ -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{}) }