From 1d512dba7b21748cc071e4340f1a4fa35772f7f7 Mon Sep 17 00:00:00 2001 From: ftocal <46001274+ftocal@users.noreply.github.com> Date: Mon, 24 Jul 2023 10:45:19 -0300 Subject: [PATCH] Add requests per second configuration in environment variables for contract-watcher (#554) Co-authored-by: walker-16 --- contract-watcher/cmd/service/run.go | 42 +++++++++---------- contract-watcher/config/config.go | 39 ++++++++++------- .../contract-watcher-service.yaml | 14 +++++++ deploy/contract-watcher/env/production.env | 7 ++++ deploy/contract-watcher/env/staging.env | 7 ++++ deploy/contract-watcher/env/test.env | 7 ++++ 6 files changed, 79 insertions(+), 37 deletions(-) diff --git a/contract-watcher/cmd/service/run.go b/contract-watcher/cmd/service/run.go index f0e70051f..6ac80758e 100644 --- a/contract-watcher/cmd/service/run.go +++ b/contract-watcher/cmd/service/run.go @@ -50,7 +50,7 @@ type watchersConfig struct { } type rateLimitConfig struct { - evm int + ankr int solana int terra int aptos int @@ -137,9 +137,9 @@ func newWatchers(config *config.ServiceConfiguration, repo *storage.Repository, var watchers *watchersConfig switch config.P2pNetwork { case domain.P2pMainNet: - watchers = newWatchersForMainnet() + watchers = newWatchersForMainnet(config) case domain.P2pTestNet: - watchers = newWatchersForTestnet() + watchers = newWatchersForTestnet(config) default: watchers = &watchersConfig{} } @@ -147,7 +147,7 @@ func newWatchers(config *config.ServiceConfiguration, repo *storage.Repository, result := make([]watcher.ContractWatcher, 0) // add evm watchers - evmLimiter := ratelimit.New(watchers.rateLimit.evm, ratelimit.Per(time.Second)) + evmLimiter := ratelimit.New(watchers.rateLimit.ankr, ratelimit.Per(time.Second)) ankrClient := ankr.NewAnkrSDK(config.AnkrUrl, evmLimiter, metrics) for _, w := range watchers.evms { params := watcher.EVMParams{ChainID: w.ChainID, Blockchain: w.Name, SizeBlocks: w.SizeBlocks, @@ -186,13 +186,13 @@ func newWatchers(config *config.ServiceConfiguration, repo *storage.Repository, } if watchers.celo != nil { - celoWatcher := builder.CreateCeloWatcher(watchers.rateLimit.evm, config.CeloUrl, *watchers.celo, logger, repo, metrics) + celoWatcher := builder.CreateCeloWatcher(watchers.rateLimit.celo, config.CeloUrl, *watchers.celo, logger, repo, metrics) result = append(result, celoWatcher) } return result } -func newWatchersForMainnet() *watchersConfig { +func newWatchersForMainnet(cfg *config.ServiceConfiguration) *watchersConfig { return &watchersConfig{ evms: []config.WatcherBlockchainAddresses{ config.ETHEREUM_MAINNET, @@ -208,18 +208,18 @@ func newWatchersForMainnet() *watchersConfig { moonbeam: &config.MOONBEAM_MAINNET, celo: &config.CELO_MAINNET, rateLimit: rateLimitConfig{ - evm: 1000, - solana: 20, - terra: 10, - aptos: 20, - oasis: 3, - moonbeam: 5, - celo: 3, + ankr: cfg.AnkrRequestsPerSecond, + solana: cfg.SolanaRequestsPerSecond, + terra: cfg.TerraRequestsPerSecond, + aptos: cfg.AptosRequestsPerSecond, + oasis: cfg.OasisRequestsPerSecond, + moonbeam: cfg.MoonbeamRequestsPerSecond, + celo: cfg.CeloRequestsPerSecond, }, } } -func newWatchersForTestnet() *watchersConfig { +func newWatchersForTestnet(cfg *config.ServiceConfiguration) *watchersConfig { return &watchersConfig{ evms: []config.WatcherBlockchainAddresses{ config.ETHEREUM_TESTNET, @@ -234,13 +234,13 @@ func newWatchersForTestnet() *watchersConfig { moonbeam: &config.MOONBEAM_TESTNET, celo: &config.CELO_TESTNET, rateLimit: rateLimitConfig{ - evm: 10, - solana: 2, - terra: 5, - aptos: 1, - oasis: 1, - moonbeam: 2, - celo: 3, + ankr: cfg.AnkrRequestsPerSecond, + solana: cfg.SolanaRequestsPerSecond, + terra: cfg.TerraRequestsPerSecond, + aptos: cfg.AptosRequestsPerSecond, + oasis: cfg.OasisRequestsPerSecond, + moonbeam: cfg.MoonbeamRequestsPerSecond, + celo: cfg.CeloRequestsPerSecond, }, } } diff --git a/contract-watcher/config/config.go b/contract-watcher/config/config.go index c15ae3700..9010be92f 100644 --- a/contract-watcher/config/config.go +++ b/contract-watcher/config/config.go @@ -9,22 +9,29 @@ import ( // ServiceConfiguration represents the application configuration when running as service with the default values. type ServiceConfiguration struct { - Environment string `env:"ENVIRONMENT,required"` - LogLevel string `env:"LOG_LEVEL,default=INFO"` - Port string `env:"PORT,default=8000"` - MongoURI string `env:"MONGODB_URI,required"` - MongoDatabase string `env:"MONGODB_DATABASE,required"` - AnkrUrl string `env:"ANKR_URL,required"` - SolanaUrl string `env:"SOLANA_URL,required"` - TerraUrl string `env:"TERRA_URL,required"` - AptosUrl string `env:"APTOS_URL,required"` - OasisUrl string `env:"OASIS_URL,required"` - MoonbeamUrl string `env:"MOONBEAM_URL,required"` - CeloUrl string `env:"CELO_URL,required"` - PprofEnabled bool `env:"PPROF_ENABLED,default=false"` - P2pNetwork string `env:"P2P_NETWORK,required"` - AlertEnabled bool `env:"ALERT_ENABLED,required"` - AlertApiKey string `env:"ALERT_API_KEY"` + Environment string `env:"ENVIRONMENT,required"` + LogLevel string `env:"LOG_LEVEL,default=INFO"` + Port string `env:"PORT,default=8000"` + MongoURI string `env:"MONGODB_URI,required"` + MongoDatabase string `env:"MONGODB_DATABASE,required"` + AnkrUrl string `env:"ANKR_URL,required"` + AnkrRequestsPerSecond int `env:"ANKR_REQUESTS_PER_SECOND,required"` + SolanaUrl string `env:"SOLANA_URL,required"` + SolanaRequestsPerSecond int `env:"SOLANA_REQUESTS_PER_SECOND,required"` + TerraUrl string `env:"TERRA_URL,required"` + TerraRequestsPerSecond int `env:"TERRA_REQUESTS_PER_SECOND,required"` + AptosUrl string `env:"APTOS_URL,required"` + AptosRequestsPerSecond int `env:"APTOS_REQUESTS_PER_SECOND,required"` + OasisUrl string `env:"OASIS_URL,required"` + OasisRequestsPerSecond int `env:"OASIS_REQUESTS_PER_SECOND,required"` + MoonbeamUrl string `env:"MOONBEAM_URL,required"` + MoonbeamRequestsPerSecond int `env:"MOONBEAM_REQUESTS_PER_SECOND,required"` + CeloUrl string `env:"CELO_URL,required"` + CeloRequestsPerSecond int `env:"CELO_REQUESTS_PER_SECOND,required"` + PprofEnabled bool `env:"PPROF_ENABLED,default=false"` + P2pNetwork string `env:"P2P_NETWORK,required"` + AlertEnabled bool `env:"ALERT_ENABLED,required"` + AlertApiKey string `env:"ALERT_API_KEY"` } // BackfillerConfiguration represents the application configuration when running as backfiller. diff --git a/deploy/contract-watcher/contract-watcher-service.yaml b/deploy/contract-watcher/contract-watcher-service.yaml index dac904d4a..20abcb1b7 100644 --- a/deploy/contract-watcher/contract-watcher-service.yaml +++ b/deploy/contract-watcher/contract-watcher-service.yaml @@ -65,36 +65,50 @@ spec: secretKeyRef: name: blockchain key: ankr-url + - name: ANKR_REQUESTS_PER_SECOND + value: "{{ .ANKR_REQUESTS_PER_SECOND }}" - name: SOLANA_URL valueFrom: secretKeyRef: name: blockchain key: solana-url + - name: SOLANA_REQUESTS_PER_SECOND + value: "{{ .SOLANA_REQUESTS_PER_SECOND }}" - name: TERRA_URL valueFrom: secretKeyRef: name: blockchain key: terra-url + - name: TERRA_REQUESTS_PER_SECOND + value: "{{ .TERRA_REQUESTS_PER_SECOND }}" - name: APTOS_URL valueFrom: secretKeyRef: name: blockchain key: aptos-url + - name: APTOS_REQUESTS_PER_SECOND + value: "{{ .APTOS_REQUESTS_PER_SECOND }}" - name: OASIS_URL valueFrom: secretKeyRef: name: blockchain key: oasis-url + - name: OASIS_REQUESTS_PER_SECOND + value: "{{ .OASIS_REQUESTS_PER_SECOND }}" - name: MOONBEAM_URL valueFrom: secretKeyRef: name: blockchain key: moonbeam-url + - name: MOONBEAM_REQUESTS_PER_SECOND + value: "{{ .MOONBEAM_REQUESTS_PER_SECOND }}" - name: CELO_URL valueFrom: secretKeyRef: name: blockchain key: celo-url + - name: CELO_REQUESTS_PER_SECOND + value: "{{ .CELO_REQUESTS_PER_SECOND }}" - name: ALERT_API_KEY valueFrom: secretKeyRef: diff --git a/deploy/contract-watcher/env/production.env b/deploy/contract-watcher/env/production.env index 24ee2200d..c09527d5a 100644 --- a/deploy/contract-watcher/env/production.env +++ b/deploy/contract-watcher/env/production.env @@ -10,10 +10,17 @@ RESOURCES_REQUESTS_CPU=250m P2P_NETWORK=mainnet PPROF_ENABLED=false ANKR_URL= +ANKR_REQUESTS_PER_SECOND=1000 SOLANA_URL= +SOLANA_REQUESTS_PER_SECOND=20 TERRA_URL= +TERRA_REQUESTS_PER_SECOND=10 APTOS_URL= +APTOS_REQUESTS_PER_SECOND=20 OASIS_URL= +OASIS_REQUESTS_PER_SECOND=3 MOONBEAM_URL= +MOONBEAM_REQUESTS_PER_SECOND=5 CELO_URL= +CELO_REQUESTS_PER_SECOND=20 ALERT_ENABLED=true \ No newline at end of file diff --git a/deploy/contract-watcher/env/staging.env b/deploy/contract-watcher/env/staging.env index a806ada0b..49ed566ae 100644 --- a/deploy/contract-watcher/env/staging.env +++ b/deploy/contract-watcher/env/staging.env @@ -10,10 +10,17 @@ RESOURCES_REQUESTS_CPU=250m P2P_NETWORK=mainnet PPROF_ENABLED=true ANKR_URL= +ANKR_REQUESTS_PER_SECOND=1000 SOLANA_URL= +SOLANA_REQUESTS_PER_SECOND=20 TERRA_URL= +TERRA_REQUESTS_PER_SECOND=10 APTOS_URL= +APTOS_REQUESTS_PER_SECOND=20 OASIS_URL= +OASIS_REQUESTS_PER_SECOND=3 MOONBEAM_URL= +MOONBEAM_REQUESTS_PER_SECOND=5 CELO_URL= +CELO_REQUESTS_PER_SECOND=20 ALERT_ENABLED=false \ No newline at end of file diff --git a/deploy/contract-watcher/env/test.env b/deploy/contract-watcher/env/test.env index 393bbf92f..5adcef0f8 100644 --- a/deploy/contract-watcher/env/test.env +++ b/deploy/contract-watcher/env/test.env @@ -10,10 +10,17 @@ RESOURCES_REQUESTS_CPU=10m P2P_NETWORK=testnet PPROF_ENABLED=false ANKR_URL= +ANKR_REQUESTS_PER_SECOND=10 SOLANA_URL= +SOLANA_REQUESTS_PER_SECOND=2 TERRA_URL= +TERRA_REQUESTS_PER_SECOND=5 APTOS_URL= +APTOS_REQUESTS_PER_SECOND=1 OASIS_URL= +OASIS_REQUESTS_PER_SECOND=1 MOONBEAM_URL= +MOONBEAM_REQUESTS_PER_SECOND=2 CELO_URL= +CELO_REQUESTS_PER_SECOND=20 ALERT_ENABLED=false \ No newline at end of file