github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/ctl/master/list_member.go (about) 1 // Copyright 2019 PingCAP, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package master 15 16 import ( 17 "context" 18 "errors" 19 "os" 20 21 "github.com/pingcap/tiflow/dm/ctl/common" 22 "github.com/pingcap/tiflow/dm/pb" 23 "github.com/spf13/cobra" 24 ) 25 26 var listMemberFlags = ListMemberFlags{} 27 28 // ListMemberFlags are flags that used in ListMember command. 29 type ListMemberFlags struct { 30 names []string // specify names to list information 31 } 32 33 // NewListMemberCmd creates an ListMember command. 34 func NewListMemberCmd() *cobra.Command { 35 cmd := &cobra.Command{ 36 Use: "list-member [--leader] [--master] [--worker] [--name master-name/worker-name ...]", 37 Short: "Lists member information", 38 RunE: listMemberFunc, 39 } 40 cmd.Flags().BoolP("leader", "l", false, "only to list leader information") 41 cmd.Flags().BoolP("master", "m", false, "only to list master information") 42 cmd.Flags().BoolP("worker", "w", false, "only to list worker information") 43 cmd.Flags().StringSliceVarP(&listMemberFlags.names, "name", "n", []string{}, "specify member names in choosing type") 44 return cmd 45 } 46 47 func convertListMemberType(cmd *cobra.Command) (bool, bool, bool, error) { 48 leader, err := cmd.Flags().GetBool("leader") 49 if err != nil { 50 return false, false, false, err 51 } 52 master, err := cmd.Flags().GetBool("master") 53 if err != nil { 54 return false, false, false, err 55 } 56 worker, err := cmd.Flags().GetBool("worker") 57 if err != nil { 58 return false, false, false, err 59 } 60 return leader, master, worker, nil 61 } 62 63 // listMemberFunc does list member request. 64 func listMemberFunc(cmd *cobra.Command, _ []string) error { 65 if len(cmd.Flags().Args()) != 0 { 66 cmd.SetOut(os.Stdout) 67 common.PrintCmdUsage(cmd) 68 return errors.New("please check output to see error") 69 } 70 71 leader, master, worker, err := convertListMemberType(cmd) 72 if err != nil { 73 common.PrintLinesf("%v", err) 74 } 75 76 ctx, cancel := context.WithCancel(context.Background()) 77 defer cancel() 78 79 resp := &pb.ListMemberResponse{} 80 err = common.SendRequest(ctx, 81 "ListMember", 82 &pb.ListMemberRequest{ 83 Leader: leader, 84 Master: master, 85 Worker: worker, 86 Names: listMemberFlags.names, 87 }, 88 &resp, 89 ) 90 91 if err != nil { 92 return err 93 } 94 common.PrettyPrintResponse(resp) 95 return nil 96 }