bsm/cmd/commands/ps.go

109 lines
2.2 KiB
Go

package cmd
import (
"encoding/json"
"fmt"
"path/filepath"
"time"
"git.apinb.com/bsm-sdk/engine/env"
"git.apinb.com/bsm-sdk/engine/utils"
"git.apinb.com/bsm-sdk/engine/vars"
"github.com/modood/table"
"github.com/spf13/cobra"
)
type Releases struct {
Msg string `json:"msg"`
Code int `json:"code"`
Data []Service `json:"data"`
}
type Service struct {
ID uint `gorm:"primarykey"`
CreatedAt time.Time
UpdatedAt time.Time
Identity string
Origin string
ServiceKey string
Version string
FullName string
OssUrl string
EtcPath string
FilePath string
ImagePath string
}
type PsTable struct {
ServiceKey string `table:"Service Key"`
Origin string
Status string
PID string
Performance string
CurrentVersion string `table:"Local Version"`
RegisterVersion string `table:"Registry Version"`
UpdatedAt string `table:"Updated At"`
}
var psCmd = &cobra.Command{
Use: "ps",
Short: "列表展示本地已经安装的微服务.",
Run: func(cmd *cobra.Command, args []string) {
psExecute()
},
}
func psExecute() {
fmt.Println("Blocks Registry:", registryUrl)
pt := make([]PsTable, 0)
body, err := utils.HttpGet(registryUrl)
checkError(err)
var ms Releases
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
srvLine.Origin = v.Origin
srvLine.RegisterVersion = v.Version
srvLine.UpdatedAt = v.UpdatedAt.Format(vars.YYYY_MM_DD_HH_MM_SS)
pt = append(pt, srvLine)
}
// Output to stdout
table.Output(pt)
}
func getSrvStatus(srv string) PsTable {
var status string = " - "
execbin := filepath.Join(env.MeshEnv.Prefix, srv)
binExists := utils.PathExists(execbin)
if binExists {
//status = "\033[32mRunning\033[0m"
status = "Running"
}
isRun := checkProcessRunning(srv)
if binExists && !isRun {
//status = "\033[31mStop\033[0m"
status = "Stop"
}
pid, cm := getProcessInfo(srv)
return PsTable{
Status: status,
CurrentVersion: getCurrentVersion(srv),
PID: pid,
Performance: cm,
}
}