From 4f96d04f88a736ff0333eea2986ce86f65b962f8 Mon Sep 17 00:00:00 2001 From: liuzhihang1 <1625167628@qq.com> Date: Tue, 25 Feb 2025 15:05:38 +0800 Subject: [PATCH] add cpu and memery total info --- boot/boot.go | 2 +- config/config.go | 2 +- go.mod | 2 ++ go.sum | 8 ++++++++ internal/app/logic/process_base.go | 2 +- internal/app/logic/process_logic.go | 4 ++++ internal/app/model/proc.go | 8 +++++--- internal/app/route/route.go | 2 +- internal/app/termui/tui.go | 2 +- log/log.go | 2 +- 10 files changed, 25 insertions(+), 9 deletions(-) diff --git a/boot/boot.go b/boot/boot.go index 22be640..3ba24ff 100644 --- a/boot/boot.go +++ b/boot/boot.go @@ -74,7 +74,7 @@ func initConfiguration() { func initArgs() { if len(os.Args) >= 2 && os.Args[1] == "tui" { - config.CF.UserTui = true + config.CF.Tui = true } } diff --git a/config/config.go b/config/config.go index 639f2cb..59a5a7d 100644 --- a/config/config.go +++ b/config/config.go @@ -32,5 +32,5 @@ type configuration struct { CgroupPeriod int64 `default:"100000" describe:"CgroupPeriod"` CgroupSwapLimit bool `default:"false" describe:"cgroup swap限制"` CondWaitTime int `default:"30" describe:"长轮询等待时间(秒)"` - UserTui bool `default:"-"` + Tui bool `default:"-"` } diff --git a/go.mod b/go.mod index ae81192..8c3303c 100644 --- a/go.mod +++ b/go.mod @@ -18,9 +18,11 @@ require ( github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/iamacarpet/go-winpty v1.0.2 // indirect github.com/josharian/intern v1.0.0 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/moby/sys/userns v0.1.0 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/tklauser/go-sysconf v0.3.13 // indirect github.com/tklauser/numcpus v0.7.0 // indirect diff --git a/go.sum b/go.sum index de7a4e7..559592f 100644 --- a/go.sum +++ b/go.sum @@ -65,6 +65,7 @@ github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= @@ -104,6 +105,8 @@ github.com/levigross/grequests v0.0.0-20231203190023-9c307ef1f48d h1:8fVmm2qScPn github.com/levigross/grequests v0.0.0-20231203190023-9c307ef1f48d/go.mod h1:dFu6nuJHC3u9kCDcyGrEL7LwhK2m6Mt+alyiiIjDrRY= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -133,6 +136,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= @@ -150,6 +155,8 @@ github.com/runletapp/go-console v0.0.0-20211204140000-27323a28410a h1:1hh8CSomjZ github.com/runletapp/go-console v0.0.0-20211204140000-27323a28410a/go.mod h1:9Y3jw1valnPKqsYSsBWxQNAuxqNSBuwd2ZEeElxgNUI= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= +github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -212,6 +219,7 @@ golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/internal/app/logic/process_base.go b/internal/app/logic/process_base.go index bce7d24..13f5442 100644 --- a/internal/app/logic/process_base.go +++ b/internal/app/logic/process_base.go @@ -283,7 +283,7 @@ func (p *ProcessBase) monitorHanler() { } p.AddRecordTime() p.AddCpuUsage(cpuPercent) - p.AddMemUsage(float64(memInfo.RSS) / 1024.0) + p.AddMemUsage(float64(memInfo.RSS >> 10)) // log.Logger.Debugw("进程资源使用率获取成功", "cpu", cpuPercent, "mem", memInfo.RSS) select { case <-ticker.C: diff --git a/internal/app/logic/process_logic.go b/internal/app/logic/process_logic.go index 57f60db..c7ce209 100644 --- a/internal/app/logic/process_logic.go +++ b/internal/app/logic/process_logic.go @@ -2,6 +2,7 @@ package logic import ( "errors" + "runtime" "slices" "strings" "sync" @@ -11,6 +12,7 @@ import ( "github.com/lzh-1625/go_process_manager/internal/app/repository" "github.com/lzh-1625/go_process_manager/log" "github.com/lzh-1625/go_process_manager/utils" + "github.com/shirou/gopsutil/mem" ) type processCtlLogic struct { @@ -118,7 +120,9 @@ func (p *processCtlLogic) getProcessInfoList(processConfiglist []model.Process) pi.StartTime = process.GetStartTimeFormat() pi.User = process.GetUserString() pi.Usage.Cpu = process.performanceStatus.cpu + pi.Usage.CpuCapacity = float64(runtime.NumCPU()) * 100.0 pi.Usage.Mem = process.performanceStatus.mem + pi.Usage.MemCapacity = float64(utils.UnwarpIgnore(mem.VirtualMemory()).Total >> 10) pi.Usage.Time = process.performanceStatus.time pi.TermType = process.Type() pi.CgroupEnable = process.Config.cgroupEnable diff --git a/internal/app/model/proc.go b/internal/app/model/proc.go index ae8b846..2f44f18 100644 --- a/internal/app/model/proc.go +++ b/internal/app/model/proc.go @@ -16,9 +16,11 @@ type ProcessInfo struct { } type Usage struct { - Cpu []float64 `json:"cpu"` - Mem []float64 `json:"mem"` - Time []string `json:"time"` + CpuCapacity float64 `json:"cpuCapacity"` + MemCapacity float64 `json:"memCapacity"` + Cpu []float64 `json:"cpu"` + Mem []float64 `json:"mem"` + Time []string `json:"time"` } type State struct { diff --git a/internal/app/route/route.go b/internal/app/route/route.go index ace1c67..0ad7c0c 100644 --- a/internal/app/route/route.go +++ b/internal/app/route/route.go @@ -19,7 +19,7 @@ import ( func Route() { r := gin.New() r.Use(gin.Recovery()) - if !config.CF.UserTui { + if !config.CF.Tui { r.Use(gin.Logger()) } routePathInit(r) diff --git a/internal/app/termui/tui.go b/internal/app/termui/tui.go index 2af7e9f..b91c2b0 100644 --- a/internal/app/termui/tui.go +++ b/internal/app/termui/tui.go @@ -36,7 +36,7 @@ type tui struct { var Tui = new(tui) func (t *tui) TermuiInit() { - if config.CF.UserTui { + if config.CF.Tui { t.drawProcessList() } } diff --git a/log/log.go b/log/log.go index 0204814..16258d1 100644 --- a/log/log.go +++ b/log/log.go @@ -77,7 +77,7 @@ func InitLog() { atom := zap.NewAtomicLevelAt(level) zap.NewDevelopmentConfig() var outputPaths []string = []string{"info.log"} - if !config.CF.UserTui { // 不使用tui则打印日志到stdout + if !config.CF.Tui { // 不使用tui则打印日志到stdout outputPaths = append(outputPaths, "stdout") } config := zap.Config{