From 0db6440525e4a7ec125c2eab05e326195f71c1a9 Mon Sep 17 00:00:00 2001 From: Patrick O'Grady Date: Fri, 21 Jul 2023 17:08:58 -0700 Subject: [PATCH] making progress with cleanup --- examples/basevm/cmd/base-cli/cmd/key.go | 139 ++++------------ .../basevm/cmd/base-cli/cmd/prometheus.go | 153 +++++------------- examples/basevm/cmd/base-cli/cmd/root.go | 7 - examples/tokenvm/cmd/token-cli/cmd/key.go | 5 +- .../tokenvm/cmd/token-cli/cmd/prometheus.go | 18 --- examples/tokenvm/cmd/token-cli/cmd/root.go | 7 - 6 files changed, 66 insertions(+), 263 deletions(-) diff --git a/examples/basevm/cmd/base-cli/cmd/key.go b/examples/basevm/cmd/base-cli/cmd/key.go index 226a1ef776..e36afc561f 100644 --- a/examples/basevm/cmd/base-cli/cmd/key.go +++ b/examples/basevm/cmd/base-cli/cmd/key.go @@ -6,15 +6,11 @@ package cmd import ( "context" + "github.com/ava-labs/avalanchego/ids" "github.com/ava-labs/hypersdk/crypto" - "github.com/ava-labs/hypersdk/rpc" + brpc "github.com/ava-labs/hypersdk/examples/basevm/rpc" hutils "github.com/ava-labs/hypersdk/utils" - "github.com/fatih/color" "github.com/spf13/cobra" - - "github.com/ava-labs/hypersdk/examples/basevm/consts" - trpc "github.com/ava-labs/hypersdk/examples/basevm/rpc" - "github.com/ava-labs/hypersdk/examples/basevm/utils" ) var keyCmd = &cobra.Command{ @@ -27,23 +23,7 @@ var keyCmd = &cobra.Command{ var genKeyCmd = &cobra.Command{ Use: "generate", RunE: func(*cobra.Command, []string) error { - // TODO: encrypt key - priv, err := crypto.GeneratePrivateKey() - if err != nil { - return err - } - if err := StoreKey(priv); err != nil { - return err - } - publicKey := priv.PublicKey() - if err := StoreDefault(defaultKeyKey, publicKey[:]); err != nil { - return err - } - color.Green( - "created address %s", - utils.Address(publicKey), - ) - return nil + return handler.Root().GenerateKey() }, } @@ -56,106 +36,41 @@ var importKeyCmd = &cobra.Command{ return nil }, RunE: func(_ *cobra.Command, args []string) error { - priv, err := crypto.LoadKey(args[0]) - if err != nil { - return err - } - if err := StoreKey(priv); err != nil { - return err - } - publicKey := priv.PublicKey() - if err := StoreDefault(defaultKeyKey, publicKey[:]); err != nil { - return err - } - color.Green( - "imported address %s", - utils.Address(publicKey), - ) - return nil + return handler.Root().ImportKey(args[0]) }, } +func lookupSetKeyBalance(choice int, address string, uri string, networkID uint32, chainID ids.ID) error { + // TODO: just load once + cli := brpc.NewJSONRPCClient(uri, networkID, chainID) + balance, err := cli.Balance(context.TODO(), address) + if err != nil { + return err + } + hutils.Outf( + "%d) {{cyan}}address:{{/}} %s {{cyan}}balance:{{/}} %s BASE\n", + choice, + address, + handler.Root().ValueString(ids.Empty, balance), + ) + return nil +} + var setKeyCmd = &cobra.Command{ Use: "set", RunE: func(*cobra.Command, []string) error { - keys, err := GetKeys() - if err != nil { - return err - } - if len(keys) == 0 { - hutils.Outf("{{red}}no stored keys{{/}}\n") - return nil - } - chainID, uris, err := GetDefaultChain() - if err != nil { - return err - } - if len(uris) == 0 { - hutils.Outf("{{red}}no available chains{{/}}\n") - return nil - } - rcli := rpc.NewJSONRPCClient(uris[0]) - networkID, _, _, err := rcli.Network(context.TODO()) - if err != nil { - return err - } - cli := trpc.NewJSONRPCClient(uris[0], networkID, chainID) - hutils.Outf("{{cyan}}stored keys:{{/}} %d\n", len(keys)) - for i := 0; i < len(keys); i++ { - address := utils.Address(keys[i].PublicKey()) - balance, err := cli.Balance(context.TODO(), address) - if err != nil { - return err - } - hutils.Outf( - "%d) {{cyan}}address:{{/}} %s {{cyan}}balance:{{/}} %s %s\n", - i, - address, - hutils.FormatBalance(balance), - consts.Symbol, - ) - } - - // Select key - keyIndex, err := promptChoice("set default key", len(keys)) - if err != nil { - return err - } - key := keys[keyIndex] - publicKey := key.PublicKey() - return StoreDefault(defaultKeyKey, publicKey[:]) + return handler.Root().SetKey(lookupSetKeyBalance) }, } +func lookupKeyBalance(pk crypto.PublicKey, uri string, networkID uint32, chainID ids.ID, assetID ids.ID) error { + _, err := handler.GetBalance(context.TODO(), brpc.NewJSONRPCClient(uri, networkID, chainID), pk) + return err +} + var balanceKeyCmd = &cobra.Command{ Use: "balance", RunE: func(*cobra.Command, []string) error { - ctx := context.Background() - - priv, err := GetDefaultKey() - if err != nil { - return err - } - chainID, uris, err := GetDefaultChain() - if err != nil { - return err - } - - max := len(uris) - if !checkAllChains { - max = 1 - } - for _, uri := range uris[:max] { - hutils.Outf("{{yellow}}uri:{{/}} %s\n", uri) - rcli := rpc.NewJSONRPCClient(uris[0]) - networkID, _, _, err := rcli.Network(context.TODO()) - if err != nil { - return err - } - if _, err = getBalance(ctx, trpc.NewJSONRPCClient(uri, networkID, chainID), priv.PublicKey()); err != nil { - return err - } - } - return nil + return handler.Root().Balance(checkAllChains, lookupKeyBalance) }, } diff --git a/examples/basevm/cmd/base-cli/cmd/prometheus.go b/examples/basevm/cmd/base-cli/cmd/prometheus.go index 753c5b4676..c514fdd710 100644 --- a/examples/basevm/cmd/base-cli/cmd/prometheus.go +++ b/examples/basevm/cmd/base-cli/cmd/prometheus.go @@ -6,12 +6,10 @@ package cmd import ( "fmt" - "net/url" - "os" + "github.com/ava-labs/avalanchego/ids" "github.com/ava-labs/hypersdk/utils" "github.com/spf13/cobra" - "gopkg.in/yaml.v2" ) var prometheusCmd = &cobra.Command{ @@ -21,120 +19,45 @@ var prometheusCmd = &cobra.Command{ }, } -type PrometheusStaticConfig struct { - Targets []string `yaml:"targets"` -} - -type PrometheusScrapeConfig struct { - JobName string `yaml:"job_name"` - StaticConfigs []*PrometheusStaticConfig `yaml:"static_configs"` - MetricsPath string `yaml:"metrics_path"` -} - -type PrometheusConfig struct { - Global struct { - ScrapeInterval string `yaml:"scrape_interval"` - EvaluationInterval string `yaml:"evaluation_interval"` - } `yaml:"global"` - ScrapeConfigs []*PrometheusScrapeConfig `yaml:"scrape_configs"` -} - var generatePrometheusCmd = &cobra.Command{ Use: "generate", RunE: func(_ *cobra.Command, args []string) error { - // Generate Prometheus-compatible endpoints - chainID, uris, err := promptChain("select chainID") - if err != nil { - return err - } - endpoints := make([]string, len(uris)) - for i, uri := range uris { - host, err := utils.GetHost(uri) - if err != nil { - return err - } - port, err := utils.GetPort(uri) - if err != nil { - return err - } - endpoints[i] = fmt.Sprintf("%s:%s", host, port) - } - - // Create Prometheus YAML - var prometheusConfig PrometheusConfig - prometheusConfig.Global.ScrapeInterval = "15s" - prometheusConfig.Global.EvaluationInterval = "15s" - prometheusConfig.ScrapeConfigs = []*PrometheusScrapeConfig{ - { - JobName: "prometheus", - StaticConfigs: []*PrometheusStaticConfig{ - { - Targets: endpoints, - }, - }, - MetricsPath: "/ext/metrics", - }, - } - yamlData, err := yaml.Marshal(&prometheusConfig) - if err != nil { - return err - } - if err := os.WriteFile(prometheusFile, yamlData, fsModeWrite); err != nil { - return err - } - - // Log useful queries - panels := []string{} - panels = append(panels, fmt.Sprintf("avalanche_%s_blks_processing", chainID)) - utils.Outf("{{yellow}}blocks processing:{{/}} %s\n", panels[len(panels)-1]) - - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_blks_accepted_count[30s])/30", chainID)) - utils.Outf("{{yellow}}blocks accepted per second:{{/}} %s\n", panels[len(panels)-1]) - - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_blks_rejected_count[30s])/30", chainID)) - utils.Outf("{{yellow}}blocks rejected per second:{{/}} %s\n", panels[len(panels)-1]) - - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hyper_sdk_vm_txs_accepted[30s])/30", chainID)) - utils.Outf("{{yellow}}transactions per second:{{/}} %s\n", panels[len(panels)-1]) - - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hyper_sdk_chain_state_operations[30s])/30", chainID)) - utils.Outf("{{yellow}}state operations per second:{{/}} %s\n", panels[len(panels)-1]) - - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hyper_sdk_chain_state_changes[30s])/30", chainID)) - utils.Outf("{{yellow}}state changes per second:{{/}} %s\n", panels[len(panels)-1]) - - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hyper_sdk_chain_root_calculated_sum[30s])/1000000/30", chainID)) - utils.Outf("{{yellow}}root calcuation wait (ms/s):{{/}} %s\n", panels[len(panels)-1]) - - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hyper_sdk_chain_wait_signatures_sum[30s])/1000000/30", chainID)) - utils.Outf("{{yellow}}signature verification wait (ms/s):{{/}} %s\n", panels[len(panels)-1]) - - panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hyper_sdk_chain_mempool_size", chainID)) - utils.Outf("{{yellow}}mempool size:{{/}} %s\n", panels[len(panels)-1]) - - panels = append(panels, "avalanche_resource_tracker_cpu_usage") - utils.Outf("{{yellow}}CPU usage:{{/}} %s\n", panels[len(panels)-1]) - - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_handler_chits_sum[30s])/1000000/30 + increase(avalanche_%s_handler_notify_sum[30s])/1000000/30 + increase(avalanche_%s_handler_get_sum[30s])/1000000/30 + increase(avalanche_%s_handler_push_query_sum[30s])/1000000/30 + increase(avalanche_%s_handler_put_sum[30s])/1000000/30 + increase(avalanche_%s_handler_pull_query_sum[30s])/1000000/30 + increase(avalanche_%s_handler_query_failed_sum[30s])/1000000/30", chainID, chainID, chainID, chainID, chainID, chainID, chainID)) - utils.Outf("{{yellow}}consensus engine processing (ms/s):{{/}} %s\n", panels[len(panels)-1]) - - // Generated dashboard link - // - // We must manually encode the params because prometheus skips any panels - // that are not numerically sorted and `url.params` only sorts - // lexicographically. - dashboard := "http://localhost:9090/graph" - for i, panel := range panels { - appendChar := "&" - if i == 0 { - appendChar = "?" - } - dashboard = fmt.Sprintf("%s%sg%d.expr=%s&g%d.tab=0", dashboard, appendChar, i, url.QueryEscape(panel), i) - } - utils.Outf("{{orange}}pre-built dashboard:{{/}} %s\n", dashboard) - - // Emit command to run prometheus - utils.Outf("{{green}}prometheus cmd:{{/}} /tmp/prometheus --config.file=%s --storage.tsdb.path=%s\n", prometheusFile, prometheusData) - return nil + return handler.Root().GeneratePrometheus(prometheusFile, prometheusData, func(chainID ids.ID) []string { + panels := []string{} + panels = append(panels, fmt.Sprintf("avalanche_%s_blks_processing", chainID)) + utils.Outf("{{yellow}}blocks processing:{{/}} %s\n", panels[len(panels)-1]) + + panels = append(panels, fmt.Sprintf("increase(avalanche_%s_blks_accepted_count[30s])/30", chainID)) + utils.Outf("{{yellow}}blocks accepted per second:{{/}} %s\n", panels[len(panels)-1]) + + panels = append(panels, fmt.Sprintf("increase(avalanche_%s_blks_rejected_count[30s])/30", chainID)) + utils.Outf("{{yellow}}blocks rejected per second:{{/}} %s\n", panels[len(panels)-1]) + + panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_vm_txs_accepted[30s])/30", chainID)) + utils.Outf("{{yellow}}transactions per second:{{/}} %s\n", panels[len(panels)-1]) + + panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_state_operations[30s])/30", chainID)) + utils.Outf("{{yellow}}state operations per second:{{/}} %s\n", panels[len(panels)-1]) + + panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_state_changes[30s])/30", chainID)) + utils.Outf("{{yellow}}state changes per second:{{/}} %s\n", panels[len(panels)-1]) + + panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_root_calculated_sum[30s])/1000000/30", chainID)) + utils.Outf("{{yellow}}root calcuation wait (ms/s):{{/}} %s\n", panels[len(panels)-1]) + + panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_wait_signatures_sum[30s])/1000000/30", chainID)) + utils.Outf("{{yellow}}signature verification wait (ms/s):{{/}} %s\n", panels[len(panels)-1]) + + panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_mempool_size", chainID)) + utils.Outf("{{yellow}}mempool size:{{/}} %s\n", panels[len(panels)-1]) + + panels = append(panels, "avalanche_resource_tracker_cpu_usage") + utils.Outf("{{yellow}}CPU usage:{{/}} %s\n", panels[len(panels)-1]) + + panels = append(panels, fmt.Sprintf("increase(avalanche_%s_handler_chits_sum[30s])/1000000/30 + increase(avalanche_%s_handler_notify_sum[30s])/1000000/30 + increase(avalanche_%s_handler_get_sum[30s])/1000000/30 + increase(avalanche_%s_handler_push_query_sum[30s])/1000000/30 + increase(avalanche_%s_handler_put_sum[30s])/1000000/30 + increase(avalanche_%s_handler_pull_query_sum[30s])/1000000/30 + increase(avalanche_%s_handler_query_failed_sum[30s])/1000000/30", chainID, chainID, chainID, chainID, chainID, chainID, chainID)) + utils.Outf("{{yellow}}consensus engine processing (ms/s):{{/}} %s\n", panels[len(panels)-1]) + + return panels + }) }, } diff --git a/examples/basevm/cmd/base-cli/cmd/root.go b/examples/basevm/cmd/base-cli/cmd/root.go index 4b09803629..1f43f0c7ca 100644 --- a/examples/basevm/cmd/base-cli/cmd/root.go +++ b/examples/basevm/cmd/base-cli/cmd/root.go @@ -31,7 +31,6 @@ var ( hideTxs bool randomRecipient bool maxTxBacklog int - deleteOtherChains bool checkAllChains bool prometheusFile string prometheusData string @@ -130,12 +129,6 @@ func init() { false, "hide txs", ) - importAvalancheOpsChainCmd.PersistentFlags().BoolVar( - &deleteOtherChains, - "delete-other-chains", - true, - "delete other chains", - ) chainCmd.AddCommand( importChainCmd, importANRChainCmd, diff --git a/examples/tokenvm/cmd/token-cli/cmd/key.go b/examples/tokenvm/cmd/token-cli/cmd/key.go index b89da64111..2be6e202db 100644 --- a/examples/tokenvm/cmd/token-cli/cmd/key.go +++ b/examples/tokenvm/cmd/token-cli/cmd/key.go @@ -68,10 +68,7 @@ func lookupKeyBalance(pk crypto.PublicKey, uri string, networkID uint32, chainID _, _, err := handler.GetAssetInfo( context.TODO(), trpc.NewJSONRPCClient(uri, networkID, chainID), pk, assetID, true) - if err != nil { - return err - } - return nil + return err } var balanceKeyCmd = &cobra.Command{ diff --git a/examples/tokenvm/cmd/token-cli/cmd/prometheus.go b/examples/tokenvm/cmd/token-cli/cmd/prometheus.go index 0374ed8e0e..c514fdd710 100644 --- a/examples/tokenvm/cmd/token-cli/cmd/prometheus.go +++ b/examples/tokenvm/cmd/token-cli/cmd/prometheus.go @@ -19,24 +19,6 @@ var prometheusCmd = &cobra.Command{ }, } -type PrometheusStaticConfig struct { - Targets []string `yaml:"targets"` -} - -type PrometheusScrapeConfig struct { - JobName string `yaml:"job_name"` - StaticConfigs []*PrometheusStaticConfig `yaml:"static_configs"` - MetricsPath string `yaml:"metrics_path"` -} - -type PrometheusConfig struct { - Global struct { - ScrapeInterval string `yaml:"scrape_interval"` - EvaluationInterval string `yaml:"evaluation_interval"` - } `yaml:"global"` - ScrapeConfigs []*PrometheusScrapeConfig `yaml:"scrape_configs"` -} - var generatePrometheusCmd = &cobra.Command{ Use: "generate", RunE: func(_ *cobra.Command, args []string) error { diff --git a/examples/tokenvm/cmd/token-cli/cmd/root.go b/examples/tokenvm/cmd/token-cli/cmd/root.go index c7fe69dd23..a41cf1d7f8 100644 --- a/examples/tokenvm/cmd/token-cli/cmd/root.go +++ b/examples/tokenvm/cmd/token-cli/cmd/root.go @@ -30,7 +30,6 @@ var ( hideTxs bool randomRecipient bool maxTxBacklog int - deleteOtherChains bool checkAllChains bool prometheusFile string prometheusData string @@ -129,12 +128,6 @@ func init() { false, "hide txs", ) - importAvalancheOpsChainCmd.PersistentFlags().BoolVar( - &deleteOtherChains, - "delete-other-chains", - true, - "delete other chains", - ) chainCmd.AddCommand( importChainCmd, importANRChainCmd,