diff --git a/pkg/utils/grpc.go b/pkg/utils/grpc.go index 623b5f3..e34b0d7 100644 --- a/pkg/utils/grpc.go +++ b/pkg/utils/grpc.go @@ -2,21 +2,44 @@ package utils import ( "context" + "log/slog" "time" + nodev1beta1 "cosmossdk.io/api/cosmos/base/node/v1beta1" "google.golang.org/grpc" - "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials/insecure" ) -func IsGrpcPort(target string) bool { - dialCtx, dialCancel := context.WithTimeout(context.Background(), 1*time.Second) - defer dialCancel() +func GetNodeStatus(target string) (*nodev1beta1.StatusResponse, error) { + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + defer cancel() + + conn, err := grpc.DialContext( + ctx, + target, + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithBlock(), + ) + if err != nil { + return nil, err + } + defer conn.Close() + + client := nodev1beta1.NewServiceClient(conn) - conn, err := grpc.NewClient(target, grpc.WithTransportCredentials(insecure.NewCredentials())) + resp, err := client.Status(ctx, &nodev1beta1.StatusRequest{}) if err != nil { + return nil, err + } + + return resp, nil +} + +func IsGrpcPort(target string) bool { + resp, err := GetNodeStatus(target) + if err != nil || resp == nil { return false } - conn.Connect() - return conn.WaitForStateChange(dialCtx, connectivity.Ready) + slog.Debug("gRPC port is ready and responding", "target", target, "status", resp) + return true }