github.com/iotexproject/iotex-core@v1.14.1-rc1/ioctl/cmd/bc/bcversion.go (about) 1 package bc 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/grpc-ecosystem/go-grpc-middleware/util/metautils" 8 "github.com/iotexproject/iotex-proto/golang/iotexapi" 9 "github.com/spf13/cobra" 10 "google.golang.org/grpc/status" 11 12 "github.com/iotexproject/iotex-core/ioctl/config" 13 "github.com/iotexproject/iotex-core/ioctl/output" 14 "github.com/iotexproject/iotex-core/ioctl/util" 15 ) 16 17 var versionCmdShorts = map[config.Language]string{ 18 config.English: "get blockchain version", 19 config.Chinese: "获取API节点版本信息", 20 } 21 22 var _bcVersionCmd = &cobra.Command{ 23 Use: "version", 24 Short: config.TranslateInLang(versionCmdShorts, config.UILanguage), 25 Args: cobra.ExactArgs(0), 26 RunE: func(cmd *cobra.Command, args []string) error { 27 out, err := bcVersion() 28 if err != nil { 29 return output.PrintError(err) 30 } 31 output.PrintResult(out) 32 return nil 33 }, 34 } 35 36 func bcVersion() (string, error) { 37 conn, err := util.ConnectToEndpoint(config.ReadConfig.SecureConnect && !config.Insecure) 38 if err != nil { 39 return "", output.NewError(output.NetworkError, "failed to connect to endpoint", err) 40 } 41 defer conn.Close() 42 43 cli := iotexapi.NewAPIServiceClient(conn) 44 req := &iotexapi.GetServerMetaRequest{} 45 ctx := context.Background() 46 47 jwtMD, err := util.JwtAuth() 48 if err == nil { 49 ctx = metautils.NiceMD(jwtMD).ToOutgoing(ctx) 50 } 51 52 rsp, err := cli.GetServerMeta(ctx, req) 53 if err != nil { 54 sta, ok := status.FromError(err) 55 if ok { 56 return "", output.NewError(output.APIError, sta.Message(), nil) 57 } 58 return "", output.NewError(output.NetworkError, "failed to get version from server", err) 59 } 60 61 title := "API endpoint version" 62 detail := output.JSONString(rsp.ServerMeta) 63 64 return fmt.Sprintf("%s:\n%s\n", title, detail), nil 65 }