github.com/joomcode/cue@v0.4.4-0.20221111115225-539fe3512047/pkg/joom/devenv/client.go (about) 1 package devenv 2 3 import ( 4 "context" 5 "fmt" 6 "log" 7 8 pb "github.com/joomcode/cue/pkg/joom/devenv/proto" 9 "google.golang.org/grpc" 10 "google.golang.org/grpc/credentials" 11 "google.golang.org/protobuf/types/known/emptypb" 12 ) 13 14 type DevEnvManagerClient struct { 15 host string 16 port uint16 17 } 18 19 func NewDevEnvManagerClient(host string, port uint16) *DevEnvManagerClient { 20 return &DevEnvManagerClient{host: host, port: port} 21 } 22 23 func NewDefaultDevEnvClient() *DevEnvManagerClient { 24 return NewDevEnvManagerClient("dns:///infra.hoffman.grpc.joom.it", 443) 25 } 26 27 func (demc *DevEnvManagerClient) dial() *grpc.ClientConn { 28 connectionString := fmt.Sprintf("%s:%d", demc.host, demc.port) 29 //fmt.Printf("Establishing connection to %s...\n", connectionString) 30 insecureTlsCreds := credentials.NewClientTLSFromCert(nil, "") 31 connection, err := grpc.Dial(connectionString, grpc.WithTransportCredentials(insecureTlsCreds)) 32 if err != nil { 33 log.Fatalf("did not connect: %v", err) 34 } 35 return connection 36 } 37 38 func (demc *DevEnvManagerClient) ListDevClusters(maxCount int) []string { 39 connection := demc.dial() 40 if connection == nil { 41 return []string{} 42 } 43 defer connection.Close() 44 45 c := pb.NewClusterStateClient(connection) 46 r, err := c.ListClusters(context.Background(), &emptypb.Empty{}) 47 if err != nil { 48 log.Fatalf("failed to get clusters list: %v", err) 49 return []string{} 50 } 51 if errResp := r.GetErrorResponse(); errResp != nil { 52 log.Fatalf("invalid response: %v", errResp.String()) 53 return []string{} 54 } 55 56 resp := r.GetSuccessResponse() 57 var result []string 58 if resp != nil { 59 for _, cluster := range resp.Clusters { 60 if cluster.Id.EnvType == "dev" { 61 result = append(result, cluster.Id.Name) 62 if len(result) >= maxCount { 63 break 64 } 65 } 66 } 67 } 68 return result 69 } 70 71 type ClusterInfo struct { 72 Version uint32 73 HasSearch bool 74 } 75 76 func (demc *DevEnvManagerClient) DescribeCluster(env, name string) *ClusterInfo { 77 connection := demc.dial() 78 if connection == nil { 79 return nil 80 } 81 defer connection.Close() 82 83 c := pb.NewClusterStateClient(connection) 84 cluster, err := c.GetCluster(context.Background(), &pb.GetClusterRequest{Cluster: &pb.ClusterID{EnvType: env, Name: name}}) 85 if err != nil { 86 log.Fatalf("Unknown cluster %s-%s: %v", env, name, err) 87 return nil 88 } 89 if errResp := cluster.GetErrorResponse(); errResp != nil { 90 log.Fatalf("Invalid response: %v", errResp) 91 return nil 92 } 93 if resp := cluster.GetSuccessResponse(); resp != nil { 94 result := &ClusterInfo{Version: resp.Cluster.Version} 95 flags := resp.Cluster.Flags 96 if flag, ok := flags["optionalComponentsSearch"]; ok { 97 result.HasSearch = flag == pb.Cluster_ON 98 } 99 return result 100 } 101 return nil 102 }