mirror of
https://2025-dev.shylinux.com/x/20250213-machine
synced 2025-04-25 04:28:04 +08:00
add some
This commit is contained in:
parent
e1010d87ff
commit
c63ebf3304
70
src/monitor/process.go
Normal file
70
src/monitor/process.go
Normal file
@ -0,0 +1,70 @@
|
||||
package monitor
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/shirou/gopsutil/v4/process"
|
||||
"shylinux.com/x/ice"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
type Process struct {
|
||||
list string `name:"list name auto" help:"进程"`
|
||||
}
|
||||
|
||||
func (s Process) List(m *ice.Message, arg ...string) {
|
||||
stat := map[string]int{}
|
||||
ps, _ := process.Processes()
|
||||
for _, p := range ps {
|
||||
cmd, _ := p.Cmdline()
|
||||
if cmd == "" {
|
||||
continue
|
||||
}
|
||||
t, _ := p.CreateTime()
|
||||
ts, _ := p.NumThreads()
|
||||
cpu, _ := p.CPUPercent()
|
||||
mem, _ := p.MemoryInfo()
|
||||
conn, _ := p.Connections()
|
||||
fd, _ := p.NumFDs()
|
||||
rw, _ := p.IOCounters()
|
||||
user, _ := p.Username()
|
||||
name, _ := p.Name()
|
||||
m.Push("time", strings.TrimSuffix(time.Unix(t/1000, t%1000).Format(ice.MOD_TIME), ".000"))
|
||||
m.Push("pid", p.Pid)
|
||||
m.Push("ts", ts)
|
||||
m.Push("cpu", kit.Format("%.2f", cpu))
|
||||
m.Push("rss", kit.FmtSize(mem.RSS))
|
||||
m.Push("vms", kit.FmtSize(mem.VMS))
|
||||
m.Push("cs", len(conn))
|
||||
m.Push("fs", fd)
|
||||
m.Push("reads", kit.FmtSize(rw.ReadBytes))
|
||||
m.Push("writes", kit.FmtSize(rw.WriteBytes))
|
||||
m.Push("user", user)
|
||||
m.Push("cmd", kit.Select(name, cmd))
|
||||
stat["ts"] += int(ts)
|
||||
stat["cs"] += len(conn)
|
||||
stat["fs"] += int(fd)
|
||||
stat["rss"] += int(mem.RSS)
|
||||
if strings.Contains(cmd, "bin/ice.bin") {
|
||||
stat["ice.bin"] += int(mem.RSS)
|
||||
stat["ice.num"]++
|
||||
if strings.Contains(cmd, "-bash -c") {
|
||||
continue
|
||||
}
|
||||
kit.If(strings.Contains(cmd, "bin/ice.bin space"), func() { stat["ice.space"]++ })
|
||||
kit.If(strings.Contains(cmd, "bin/ice.bin serve"), func() { stat["ice.serve"]++ })
|
||||
}
|
||||
}
|
||||
stats := map[string]string{}
|
||||
kit.For(stat, func(key string, value int) {
|
||||
if kit.IsIn(key, "rss", "ice.bin") {
|
||||
stats[key] = kit.FmtSize(value)
|
||||
} else {
|
||||
stats[key] = kit.Format(value)
|
||||
}
|
||||
})
|
||||
m.StatusTimeCount(stats).SortIntR("rss")
|
||||
}
|
||||
|
||||
func init() { ice.Cmd("web.chat.dev.machine.process", Process{}) }
|
Loading…
x
Reference in New Issue
Block a user