diff --git a/cmd/tmtop.go b/cmd/tmtop.go index c7386d0..5196634 100644 --- a/cmd/tmtop.go +++ b/cmd/tmtop.go @@ -31,8 +31,9 @@ func main() { } rootCmd.PersistentFlags().StringVar(&config.RPCHost, "rpc-host", "http://localhost:26657", "RPC host URL") + rootCmd.PersistentFlags().StringVar(&config.ProviderRPCHost, "provider-rpc-host", "", "Provider chain RPC host URL") rootCmd.PersistentFlags().DurationVar(&config.RefreshRate, "refresh-rate", time.Second, "Refresh rate") - rootCmd.PersistentFlags().BoolVar(&config.QueryValidators, "query-validators", false, "Whether to query validators from cosmos-sdk") + rootCmd.PersistentFlags().BoolVar(&config.QueryValidators, "query-validators", true, "Whether to query validators from cosmos-sdk") rootCmd.PersistentFlags().DurationVar(&config.ValidatorsRefreshRate, "validators-refresh-rate", time.Minute, "Validators refresh rate") rootCmd.PersistentFlags().DurationVar(&config.ChainInfoRefreshRate, "chain-info-refresh-rate", 5*time.Minute, "Chain info refresh rate") diff --git a/pkg/config/config.go b/pkg/config/config.go index a1445b1..9325896 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -4,8 +4,17 @@ import "time" type Config struct { RPCHost string + ProviderRPCHost string RefreshRate time.Duration ValidatorsRefreshRate time.Duration ChainInfoRefreshRate time.Duration QueryValidators bool } + +func (c Config) GetProviderOrConsumerHost() string { + if c.ProviderRPCHost != "" { + return c.ProviderRPCHost + } + + return c.RPCHost +} diff --git a/pkg/fetcher/cosmos.go b/pkg/fetcher/cosmos.go index 9e1193b..5e2c054 100644 --- a/pkg/fetcher/cosmos.go +++ b/pkg/fetcher/cosmos.go @@ -43,6 +43,7 @@ func (f *CosmosDataFetcher) AbciQuery( method string, message codec.ProtoMarshaler, output codec.ProtoMarshaler, + host string, ) error { dataBytes, err := message.Marshal() if err != nil { @@ -57,7 +58,7 @@ func (f *CosmosDataFetcher) AbciQuery( ) var response types.AbciQueryResponse - if err := f.Get(queryURL, &response); err != nil { + if err := f.Get(queryURL, &response, host); err != nil { return err } @@ -84,6 +85,7 @@ func (f *CosmosDataFetcher) GetValidators() (*types.ChainValidators, error) { "/cosmos.staking.v1beta1.Query/Validators", &query, &validatorsResponse, + f.Config.GetProviderOrConsumerHost(), ); err != nil { return nil, err } @@ -109,29 +111,29 @@ func (f *CosmosDataFetcher) GetValidators() (*types.ChainValidators, error) { return &validators, nil } -func (f *CosmosDataFetcher) Get(relativeURL string, target interface{}) error { +func (f *CosmosDataFetcher) Get(relativeURL string, target interface{}, host string) error { client := &http.Client{Timeout: 300 * time.Second} start := time.Now() - url := fmt.Sprintf("%s%s", f.Config.RPCHost, relativeURL) + fullURL := fmt.Sprintf("%s%s", host, relativeURL) - req, err := http.NewRequest(http.MethodGet, url, nil) + req, err := http.NewRequest(http.MethodGet, fullURL, nil) if err != nil { return err } req.Header.Set("User-Agent", "tmtop") - f.Logger.Debug().Str("url", url).Msg("Doing a query...") + f.Logger.Debug().Str("url", fullURL).Msg("Doing a query...") res, err := client.Do(req) if err != nil { - f.Logger.Warn().Str("url", url).Err(err).Msg("Query failed") + f.Logger.Warn().Str("url", fullURL).Err(err).Msg("Query failed") return err } defer res.Body.Close() - f.Logger.Debug().Str("url", url).Dur("duration", time.Since(start)).Msg("Query is finished") + f.Logger.Debug().Str("url", fullURL).Dur("duration", time.Since(start)).Msg("Query is finished") return json.NewDecoder(res.Body).Decode(target) }