Skip to content

Commit

Permalink
Add http header manipulation + url querl params to clients (ava-labs#…
Browse files Browse the repository at this point in the history
  • Loading branch information
felipemadero authored Apr 7, 2022
1 parent 3f113ac commit b4ec091
Show file tree
Hide file tree
Showing 15 changed files with 465 additions and 274 deletions.
54 changes: 27 additions & 27 deletions api/admin/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ var _ Client = &client{}

// Client interface for the Avalanche Platform Info API Endpoint
type Client interface {
StartCPUProfiler(context.Context) (bool, error)
StopCPUProfiler(context.Context) (bool, error)
MemoryProfile(context.Context) (bool, error)
LockProfile(context.Context) (bool, error)
Alias(ctx context.Context, endpoint string, alias string) (bool, error)
AliasChain(ctx context.Context, chainID string, alias string) (bool, error)
GetChainAliases(ctx context.Context, chainID string) ([]string, error)
Stacktrace(context.Context) (bool, error)
LoadVMs(context.Context) (map[ids.ID][]string, map[ids.ID]string, error)
StartCPUProfiler(context.Context, ...rpc.Option) (bool, error)
StopCPUProfiler(context.Context, ...rpc.Option) (bool, error)
MemoryProfile(context.Context, ...rpc.Option) (bool, error)
LockProfile(context.Context, ...rpc.Option) (bool, error)
Alias(ctx context.Context, endpoint string, alias string, options ...rpc.Option) (bool, error)
AliasChain(ctx context.Context, chainID string, alias string, options ...rpc.Option) (bool, error)
GetChainAliases(ctx context.Context, chainID string, options ...rpc.Option) ([]string, error)
Stacktrace(context.Context, ...rpc.Option) (bool, error)
LoadVMs(context.Context, ...rpc.Option) (map[ids.ID][]string, map[ids.ID]string, error)
}

// Client implementation for the Avalanche Platform Info API Endpoint
Expand All @@ -39,64 +39,64 @@ func NewClient(uri string) Client {
}
}

func (c *client) StartCPUProfiler(ctx context.Context) (bool, error) {
func (c *client) StartCPUProfiler(ctx context.Context, options ...rpc.Option) (bool, error) {
res := &api.SuccessResponse{}
err := c.requester.SendRequest(ctx, "startCPUProfiler", struct{}{}, res)
err := c.requester.SendRequest(ctx, "startCPUProfiler", struct{}{}, res, options...)
return res.Success, err
}

func (c *client) StopCPUProfiler(ctx context.Context) (bool, error) {
func (c *client) StopCPUProfiler(ctx context.Context, options ...rpc.Option) (bool, error) {
res := &api.SuccessResponse{}
err := c.requester.SendRequest(ctx, "stopCPUProfiler", struct{}{}, res)
err := c.requester.SendRequest(ctx, "stopCPUProfiler", struct{}{}, res, options...)
return res.Success, err
}

func (c *client) MemoryProfile(ctx context.Context) (bool, error) {
func (c *client) MemoryProfile(ctx context.Context, options ...rpc.Option) (bool, error) {
res := &api.SuccessResponse{}
err := c.requester.SendRequest(ctx, "memoryProfile", struct{}{}, res)
err := c.requester.SendRequest(ctx, "memoryProfile", struct{}{}, res, options...)
return res.Success, err
}

func (c *client) LockProfile(ctx context.Context) (bool, error) {
func (c *client) LockProfile(ctx context.Context, options ...rpc.Option) (bool, error) {
res := &api.SuccessResponse{}
err := c.requester.SendRequest(ctx, "lockProfile", struct{}{}, res)
err := c.requester.SendRequest(ctx, "lockProfile", struct{}{}, res, options...)
return res.Success, err
}

func (c *client) Alias(ctx context.Context, endpoint, alias string) (bool, error) {
func (c *client) Alias(ctx context.Context, endpoint, alias string, options ...rpc.Option) (bool, error) {
res := &api.SuccessResponse{}
err := c.requester.SendRequest(ctx, "alias", &AliasArgs{
Endpoint: endpoint,
Alias: alias,
}, res)
}, res, options...)
return res.Success, err
}

func (c *client) AliasChain(ctx context.Context, chain, alias string) (bool, error) {
func (c *client) AliasChain(ctx context.Context, chain, alias string, options ...rpc.Option) (bool, error) {
res := &api.SuccessResponse{}
err := c.requester.SendRequest(ctx, "aliasChain", &AliasChainArgs{
Chain: chain,
Alias: alias,
}, res)
}, res, options...)
return res.Success, err
}

func (c *client) GetChainAliases(ctx context.Context, chain string) ([]string, error) {
func (c *client) GetChainAliases(ctx context.Context, chain string, options ...rpc.Option) ([]string, error) {
res := &GetChainAliasesReply{}
err := c.requester.SendRequest(ctx, "getChainAliases", &GetChainAliasesArgs{
Chain: chain,
}, res)
}, res, options...)
return res.Aliases, err
}

func (c *client) Stacktrace(ctx context.Context) (bool, error) {
func (c *client) Stacktrace(ctx context.Context, options ...rpc.Option) (bool, error) {
res := &api.SuccessResponse{}
err := c.requester.SendRequest(ctx, "stacktrace", struct{}{}, res)
err := c.requester.SendRequest(ctx, "stacktrace", struct{}{}, res, options...)
return res.Success, err
}

func (c *client) LoadVMs(ctx context.Context) (map[ids.ID][]string, map[ids.ID]string, error) {
func (c *client) LoadVMs(ctx context.Context, options ...rpc.Option) (map[ids.ID][]string, map[ids.ID]string, error) {
res := &LoadVMsReply{}
err := c.requester.SendRequest(ctx, "loadVMs", struct{}{}, res)
err := c.requester.SendRequest(ctx, "loadVMs", struct{}{}, res, options...)
return res.NewVMs, res.FailedVMs, err
}
2 changes: 1 addition & 1 deletion api/admin/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func NewMockClient(response interface{}, err error) rpc.EndpointRequester {
}
}

func (mc *mockClient) SendRequest(ctx context.Context, method string, params interface{}, reply interface{}) error {
func (mc *mockClient) SendRequest(ctx context.Context, method string, params interface{}, reply interface{}, options ...rpc.Option) error {
if mc.err != nil {
return mc.err
}
Expand Down
24 changes: 12 additions & 12 deletions api/health/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ var _ Client = &client{}
// Client interface for Avalanche Health API Endpoint
type Client interface {
// Readiness returns if the node has finished initialization
Readiness(context.Context) (*APIHealthReply, error)
Readiness(context.Context, ...rpc.Option) (*APIHealthReply, error)
// Health returns a summation of the health of the node
Health(context.Context) (*APIHealthReply, error)
Health(context.Context, ...rpc.Option) (*APIHealthReply, error)
// Liveness returns if the node is in need of a restart
Liveness(context.Context) (*APIHealthReply, error)
Liveness(context.Context, ...rpc.Option) (*APIHealthReply, error)
// AwaitHealthy queries the Health endpoint with a pause of [interval]
// in between checks and returns early if Health returns healthy
AwaitHealthy(ctx context.Context, freq time.Duration) (bool, error)
AwaitHealthy(ctx context.Context, freq time.Duration, options ...rpc.Option) (bool, error)
}

// Client implementation for Avalanche Health API Endpoint
Expand All @@ -38,30 +38,30 @@ func NewClient(uri string) Client {
}
}

func (c *client) Readiness(ctx context.Context) (*APIHealthReply, error) {
func (c *client) Readiness(ctx context.Context, options ...rpc.Option) (*APIHealthReply, error) {
res := &APIHealthReply{}
err := c.requester.SendRequest(ctx, "readiness", struct{}{}, res)
err := c.requester.SendRequest(ctx, "readiness", struct{}{}, res, options...)
return res, err
}

func (c *client) Health(ctx context.Context) (*APIHealthReply, error) {
func (c *client) Health(ctx context.Context, options ...rpc.Option) (*APIHealthReply, error) {
res := &APIHealthReply{}
err := c.requester.SendRequest(ctx, "health", struct{}{}, res)
err := c.requester.SendRequest(ctx, "health", struct{}{}, res, options...)
return res, err
}

func (c *client) Liveness(ctx context.Context) (*APIHealthReply, error) {
func (c *client) Liveness(ctx context.Context, options ...rpc.Option) (*APIHealthReply, error) {
res := &APIHealthReply{}
err := c.requester.SendRequest(ctx, "liveness", struct{}{}, res)
err := c.requester.SendRequest(ctx, "liveness", struct{}{}, res, options...)
return res, err
}

func (c *client) AwaitHealthy(ctx context.Context, freq time.Duration) (bool, error) {
func (c *client) AwaitHealthy(ctx context.Context, freq time.Duration, options ...rpc.Option) (bool, error) {
ticker := time.NewTicker(freq)
defer ticker.Stop()

for {
res, err := c.Health(ctx)
res, err := c.Health(ctx, options...)
if err == nil && res.Healthy {
return true, nil
}
Expand Down
3 changes: 2 additions & 1 deletion api/health/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"testing"
"time"

"github.com/ava-labs/avalanchego/utils/rpc"
"github.com/stretchr/testify/assert"
)

Expand All @@ -17,7 +18,7 @@ type mockClient struct {
onCall func()
}

func (mc *mockClient) SendRequest(ctx context.Context, method string, params interface{}, replyIntf interface{}) error {
func (mc *mockClient) SendRequest(ctx context.Context, method string, params interface{}, replyIntf interface{}, options ...rpc.Option) error {
reply := replyIntf.(*APIHealthReply)
*reply = mc.reply
mc.onCall()
Expand Down
66 changes: 33 additions & 33 deletions api/info/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,17 @@ var _ Client = &client{}

// Client interface for an Info API Client
type Client interface {
GetNodeVersion(context.Context) (*GetNodeVersionReply, error)
GetNodeID(context.Context) (string, error)
GetNodeIP(context.Context) (string, error)
GetNetworkID(context.Context) (uint32, error)
GetNetworkName(context.Context) (string, error)
GetBlockchainID(context.Context, string) (ids.ID, error)
Peers(context.Context) ([]Peer, error)
IsBootstrapped(context.Context, string) (bool, error)
GetTxFee(context.Context) (*GetTxFeeResponse, error)
Uptime(context.Context) (*UptimeResponse, error)
GetVMs(context.Context) (map[ids.ID][]string, error)
GetNodeVersion(context.Context, ...rpc.Option) (*GetNodeVersionReply, error)
GetNodeID(context.Context, ...rpc.Option) (string, error)
GetNodeIP(context.Context, ...rpc.Option) (string, error)
GetNetworkID(context.Context, ...rpc.Option) (uint32, error)
GetNetworkName(context.Context, ...rpc.Option) (string, error)
GetBlockchainID(context.Context, string, ...rpc.Option) (ids.ID, error)
Peers(context.Context, ...rpc.Option) ([]Peer, error)
IsBootstrapped(context.Context, string, ...rpc.Option) (bool, error)
GetTxFee(context.Context, ...rpc.Option) (*GetTxFeeResponse, error)
Uptime(context.Context, ...rpc.Option) (*UptimeResponse, error)
GetVMs(context.Context, ...rpc.Option) (map[ids.ID][]string, error)
}

// Client implementation for an Info API Client
Expand All @@ -40,72 +40,72 @@ func NewClient(uri string) Client {
}
}

func (c *client) GetNodeVersion(ctx context.Context) (*GetNodeVersionReply, error) {
func (c *client) GetNodeVersion(ctx context.Context, options ...rpc.Option) (*GetNodeVersionReply, error) {
res := &GetNodeVersionReply{}
err := c.requester.SendRequest(ctx, "getNodeVersion", struct{}{}, res)
err := c.requester.SendRequest(ctx, "getNodeVersion", struct{}{}, res, options...)
return res, err
}

func (c *client) GetNodeID(ctx context.Context) (string, error) {
func (c *client) GetNodeID(ctx context.Context, options ...rpc.Option) (string, error) {
res := &GetNodeIDReply{}
err := c.requester.SendRequest(ctx, "getNodeID", struct{}{}, res)
err := c.requester.SendRequest(ctx, "getNodeID", struct{}{}, res, options...)
return res.NodeID, err
}

func (c *client) GetNodeIP(ctx context.Context) (string, error) {
func (c *client) GetNodeIP(ctx context.Context, options ...rpc.Option) (string, error) {
res := &GetNodeIPReply{}
err := c.requester.SendRequest(ctx, "getNodeIP", struct{}{}, res)
err := c.requester.SendRequest(ctx, "getNodeIP", struct{}{}, res, options...)
return res.IP, err
}

func (c *client) GetNetworkID(ctx context.Context) (uint32, error) {
func (c *client) GetNetworkID(ctx context.Context, options ...rpc.Option) (uint32, error) {
res := &GetNetworkIDReply{}
err := c.requester.SendRequest(ctx, "getNetworkID", struct{}{}, res)
err := c.requester.SendRequest(ctx, "getNetworkID", struct{}{}, res, options...)
return uint32(res.NetworkID), err
}

func (c *client) GetNetworkName(ctx context.Context) (string, error) {
func (c *client) GetNetworkName(ctx context.Context, options ...rpc.Option) (string, error) {
res := &GetNetworkNameReply{}
err := c.requester.SendRequest(ctx, "getNetworkName", struct{}{}, res)
err := c.requester.SendRequest(ctx, "getNetworkName", struct{}{}, res, options...)
return res.NetworkName, err
}

func (c *client) GetBlockchainID(ctx context.Context, alias string) (ids.ID, error) {
func (c *client) GetBlockchainID(ctx context.Context, alias string, options ...rpc.Option) (ids.ID, error) {
res := &GetBlockchainIDReply{}
err := c.requester.SendRequest(ctx, "getBlockchainID", &GetBlockchainIDArgs{
Alias: alias,
}, res)
}, res, options...)
return res.BlockchainID, err
}

func (c *client) Peers(ctx context.Context) ([]Peer, error) {
func (c *client) Peers(ctx context.Context, options ...rpc.Option) ([]Peer, error) {
res := &PeersReply{}
err := c.requester.SendRequest(ctx, "peers", struct{}{}, res)
err := c.requester.SendRequest(ctx, "peers", struct{}{}, res, options...)
return res.Peers, err
}

func (c *client) IsBootstrapped(ctx context.Context, chainID string) (bool, error) {
func (c *client) IsBootstrapped(ctx context.Context, chainID string, options ...rpc.Option) (bool, error) {
res := &IsBootstrappedResponse{}
err := c.requester.SendRequest(ctx, "isBootstrapped", &IsBootstrappedArgs{
Chain: chainID,
}, res)
}, res, options...)
return res.IsBootstrapped, err
}

func (c *client) GetTxFee(ctx context.Context) (*GetTxFeeResponse, error) {
func (c *client) GetTxFee(ctx context.Context, options ...rpc.Option) (*GetTxFeeResponse, error) {
res := &GetTxFeeResponse{}
err := c.requester.SendRequest(ctx, "getTxFee", struct{}{}, res)
err := c.requester.SendRequest(ctx, "getTxFee", struct{}{}, res, options...)
return res, err
}

func (c *client) Uptime(ctx context.Context) (*UptimeResponse, error) {
func (c *client) Uptime(ctx context.Context, options ...rpc.Option) (*UptimeResponse, error) {
res := &UptimeResponse{}
err := c.requester.SendRequest(ctx, "uptime", struct{}{}, res)
err := c.requester.SendRequest(ctx, "uptime", struct{}{}, res, options...)
return res, err
}

func (c *client) GetVMs(ctx context.Context) (map[ids.ID][]string, error) {
func (c *client) GetVMs(ctx context.Context, options ...rpc.Option) (map[ids.ID][]string, error) {
res := &GetVMsReply{}
err := c.requester.SendRequest(ctx, "getVMs", struct{}{}, res)
err := c.requester.SendRequest(ctx, "getVMs", struct{}{}, res, options...)
return res.VMs, err
}
18 changes: 9 additions & 9 deletions api/ipcs/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ var _ Client = &client{}
// Client interface for interacting with the IPCS endpoint
type Client interface {
// PublishBlockchain requests the node to begin publishing consensus and decision events
PublishBlockchain(ctx context.Context, chainID string) (*PublishBlockchainReply, error)
PublishBlockchain(ctx context.Context, chainID string, options ...rpc.Option) (*PublishBlockchainReply, error)
// UnpublishBlockchain requests the node to stop publishing consensus and decision events
UnpublishBlockchain(ctx context.Context, chainID string) (bool, error)
UnpublishBlockchain(ctx context.Context, chainID string, options ...rpc.Option) (bool, error)
// GetPublishedBlockchains requests the node to get blockchains being published
GetPublishedBlockchains(ctx context.Context) ([]ids.ID, error)
GetPublishedBlockchains(ctx context.Context, options ...rpc.Option) ([]ids.ID, error)
}

// Client implementation for interacting with the IPCS endpoint
Expand All @@ -36,24 +36,24 @@ func NewClient(uri string) Client {
}
}

func (c *client) PublishBlockchain(ctx context.Context, blockchainID string) (*PublishBlockchainReply, error) {
func (c *client) PublishBlockchain(ctx context.Context, blockchainID string, options ...rpc.Option) (*PublishBlockchainReply, error) {
res := &PublishBlockchainReply{}
err := c.requester.SendRequest(ctx, "publishBlockchain", &PublishBlockchainArgs{
BlockchainID: blockchainID,
}, res)
}, res, options...)
return res, err
}

func (c *client) UnpublishBlockchain(ctx context.Context, blockchainID string) (bool, error) {
func (c *client) UnpublishBlockchain(ctx context.Context, blockchainID string, options ...rpc.Option) (bool, error) {
res := &api.SuccessResponse{}
err := c.requester.SendRequest(ctx, "unpublishBlockchain", &UnpublishBlockchainArgs{
BlockchainID: blockchainID,
}, res)
}, res, options...)
return res.Success, err
}

func (c *client) GetPublishedBlockchains(ctx context.Context) ([]ids.ID, error) {
func (c *client) GetPublishedBlockchains(ctx context.Context, options ...rpc.Option) ([]ids.ID, error) {
res := &GetPublishedBlockchainsReply{}
err := c.requester.SendRequest(ctx, "getPublishedBlockchains", nil, res)
err := c.requester.SendRequest(ctx, "getPublishedBlockchains", nil, res, options...)
return res.Chains, err
}
Loading

0 comments on commit b4ec091

Please sign in to comment.