diff --git a/tools/walletextension/api/routes.go b/tools/walletextension/api/routes.go index 2489511b12..44fb2f7bd2 100644 --- a/tools/walletextension/api/routes.go +++ b/tools/walletextension/api/routes.go @@ -63,6 +63,10 @@ func NewHTTPRoutes(walletExt *walletextension.WalletExtension) []Route { Name: common.PathHealth, Func: httpHandler(walletExt, healthRequestHandler), }, + { + Name: common.PathNetworkHealth, + Func: httpHandler(walletExt, networkHealthRequestHandler), + }, { Name: common.PathVersion, Func: httpHandler(walletExt, versionRequestHandler), @@ -422,12 +426,40 @@ func healthRequestHandler(walletExt *walletextension.WalletExtension, conn userc return } + // TODO: connect to database and check if it is healthy err = conn.WriteResponse([]byte(common.SuccessMsg)) if err != nil { walletExt.Logger().Error("error writing success response", log.ErrKey, err) } } +// Handles request to /network-health endpoint. +func networkHealthRequestHandler(walletExt *walletextension.WalletExtension, userConn userconn.UserConn) { + // read the request + _, err := userConn.ReadRequest() + if err != nil { + walletExt.Logger().Error("error reading request", log.ErrKey, err) + return + } + + healthStatus, err := walletExt.GetTenNodeHealthStatus() + + data, err := json.Marshal(map[string]interface{}{ + "result": healthStatus, + "error": err, + }) + if err != nil { + walletExt.Logger().Error("error marshaling response", log.ErrKey, err) + return + } + + err = userConn.WriteResponse(data) + + if err != nil { + walletExt.Logger().Error("error writing success response", log.ErrKey, err) + } +} + // Handles request to /version endpoint. func versionRequestHandler(walletExt *walletextension.WalletExtension, userConn userconn.UserConn) { // read the request diff --git a/tools/walletextension/common/constants.go b/tools/walletextension/common/constants.go index 6cca9175e0..1e35fb7628 100644 --- a/tools/walletextension/common/constants.go +++ b/tools/walletextension/common/constants.go @@ -35,6 +35,7 @@ const ( PathRevoke = "/revoke/" PathObscuroGateway = "/" PathHealth = "/health/" + PathNetworkHealth = "/network-health/" WSProtocol = "ws://" DefaultUser = "defaultUser" UserQueryParameter = "u" diff --git a/tools/walletextension/wallet_extension.go b/tools/walletextension/wallet_extension.go index 55ee12fe98..4bd539b523 100644 --- a/tools/walletextension/wallet_extension.go +++ b/tools/walletextension/wallet_extension.go @@ -11,6 +11,7 @@ import ( "github.com/ten-protocol/go-ten/tools/walletextension/config" "github.com/ten-protocol/go-ten/go/common/log" + "github.com/ten-protocol/go-ten/go/obsclient" "github.com/ten-protocol/go-ten/tools/walletextension/useraccountmanager" @@ -38,6 +39,7 @@ type WalletExtension struct { stopControl *stopcontrol.StopControl version string config *config.Config + tenClient *obsclient.ObsClient } func New( @@ -49,6 +51,12 @@ func New( logger gethlog.Logger, config *config.Config, ) *WalletExtension { + rpcClient, err := rpc.NewNetworkClient(hostAddr) + if err != nil { + logger.Error(fmt.Errorf("could not create RPC client on %s. Cause: %w", hostAddr, err).Error()) + panic(err) + } + newTenClient := obsclient.NewObsClient(rpcClient) return &WalletExtension{ hostAddr: hostAddr, userAccountManager: userAccountManager, @@ -58,6 +66,7 @@ func New( stopControl: stopControl, version: version, config: config, + tenClient: newTenClient, } } @@ -384,3 +393,7 @@ func (w *WalletExtension) checkParametersForInterceptedGetStorageAt(params []int func (w *WalletExtension) Version() string { return w.version } + +func (w *WalletExtension) GetTenNodeHealthStatus() (bool, error) { + return w.tenClient.Health() +}