diff --git a/cmd/ps.go b/cmd/ps.go index 4e766f4..4c01ac5 100644 --- a/cmd/ps.go +++ b/cmd/ps.go @@ -36,13 +36,13 @@ type ActionsReleases struct { } type PsTable struct { - ServiceKey string + ServiceKey string `table:"Service Key"` Origin string Status string Performance string - CurrentVersion string - RegisterVersion string - UpdatedAt string + CurrentVersion string `table:"Current Version"` + RegisterVersion string `table:"Register Version"` + UpdatedAt string `table:"Updated At"` } var psCmd = &cobra.Command{ @@ -63,6 +63,10 @@ func psExecute() { err = json.Unmarshal(body, &ms) checkError(err) + if len(ms.Data) == 0 { + pt = append(pt, PsTable{}) + } + for _, v := range ms.Data { srvLine := getSrvStatus(v.ServiceKey) srvLine.ServiceKey = v.ServiceKey @@ -70,7 +74,6 @@ func psExecute() { srvLine.RegisterVersion = v.Version srvLine.UpdatedAt = v.UpdatedAt.Format(vars.YYYY_MM_DD_HH_MM_SS) pt = append(pt, srvLine) - } // Output to stdout @@ -78,12 +81,18 @@ func psExecute() { } func getSrvStatus(srv string) PsTable { - isRun := checkProcessRunning(srv) + var status string = " - " - if isRun { + binExists := utils.PathExists(env.MeshEnv.Prefix + srv) + if binExists { status = "Running" } + isRun := checkProcessRunning(srv) + if binExists && !isRun { + status = "Stop" + } + return PsTable{ Status: status, CurrentVersion: getCurrentVersion(srv), @@ -115,8 +124,8 @@ func getCurrentVersion(srv string) string { func getProcessInfo(processName string) string { var info string = " - " - cmd := exec.Command("ps", "-eo", "pid,%cpu,%mem") // 使用ps命令查询进程信息 - output, err := cmd.Output() // 获取命令输出结果 + cmd := exec.Command("ps", "-eo", "pid,%cpu,%mem,cmd") // 使用ps命令查询进程信息 + output, err := cmd.Output() // 获取命令输出结果 if err != nil { return info } @@ -125,13 +134,15 @@ func getProcessInfo(processName string) string { lines := strings.Split(string(output), "\n")[1:] for _, line := range lines { - fields := strings.Fields(line) // 将每行按空格分隔为字段数组 - if len(fields) >= 3 && fields[2] == processName { - pid := fields[0] // PID(进程标识) - cpuUsage := fields[1] // CPU使用情况 - memoryUsage := fields[2] // 内存使用情况 - info = fmt.Sprintf("PID:%s / CPU:%s / MEM:%s", pid, cpuUsage, memoryUsage) - return info + if strings.Contains(line, processName) { + fields := strings.Fields(line) // 将每行按空格分隔为字段数组 + if len(fields) >= 3 { + pid := fields[0] // PID(进程标识) + cpuUsage := fields[1] // CPU使用情况 + memoryUsage := fields[2] // 内存使用情况 + info = fmt.Sprintf("PID:%s / CPU:%s / MEM:%s", pid, cpuUsage, memoryUsage) + return info + } } } diff --git a/go.mod b/go.mod index 5940450..e6a5e73 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( github.com/jaevor/go-nanoid v1.3.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect + github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19 github.com/modood/table v0.0.0-20220527013332-8d47e76dad33 github.com/spf13/cobra v1.8.0 gorm.io/gorm v1.25.7 // indirect diff --git a/go.sum b/go.sum index e6862cc..c2dea66 100644 --- a/go.sum +++ b/go.sum @@ -11,6 +11,8 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19 h1:WjT3fLi9n8YWh/Ih8Q1LHAPsTqGddPcHqscN+PJ3i68= +github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ= github.com/modood/table v0.0.0-20220527013332-8d47e76dad33 h1:T5IbS9C1G2zeHb6eBy6OfIvj5tfQB23kGFpewCJuGDg= github.com/modood/table v0.0.0-20220527013332-8d47e76dad33/go.mod h1:41qyXVI5QH9/ObyPj27CGCVau5v/njfc3Gjj7yzr0HQ= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=