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, } }