From bbdaae0485df5e2c41cff990ae4eee5c64da8be8 Mon Sep 17 00:00:00 2001 From: Ryan O'Hara-Reid Date: Wed, 23 Jun 2021 10:44:47 +1000 Subject: [PATCH] engine: Set full state on settings struct (#697) * engine: Set full state on settings validation before flag check to minimise future work when settings are added. * engine: purge sillyness comment * engine: address logic issues with change * engine: invert boolean check --- engine/apiserver_types.go | 17 ++++--- engine/engine.go | 98 ++++++++------------------------------- 2 files changed, 27 insertions(+), 88 deletions(-) diff --git a/engine/apiserver_types.go b/engine/apiserver_types.go index 177f7748..4fc52b14 100644 --- a/engine/apiserver_types.go +++ b/engine/apiserver_types.go @@ -22,15 +22,14 @@ const ( ) var ( - wsHub *websocketHub - wsHubStarted bool - errNilRemoteConfig = errors.New("received nil remote config") - errNilPProfConfig = errors.New("received nil pprof config") - errNilBot = errors.New("received nil engine bot") - errEmptyConfigPath = errors.New("received empty config path") - errServerDisabled = errors.New("server disabled") - errInvalidListenAddress = errors.New("invalid listen address") - errAlreadyRunning = errors.New("already running") + wsHub *websocketHub + wsHubStarted bool + errNilRemoteConfig = errors.New("received nil remote config") + errNilPProfConfig = errors.New("received nil pprof config") + errNilBot = errors.New("received nil engine bot") + errEmptyConfigPath = errors.New("received empty config path") + errServerDisabled = errors.New("server disabled") + errAlreadyRunning = errors.New("already running") // ErrWebsocketServiceNotRunning occurs when a message is sent to be broadcast via websocket // and its not running ErrWebsocketServiceNotRunning = errors.New("websocket service not started") diff --git a/engine/engine.go b/engine/engine.go index a1686914..84019f02 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -137,99 +137,52 @@ func loadConfigWithSettings(settings *Settings, flagSet map[string]bool) (*confi // validateSettings validates and sets all bot settings func validateSettings(b *Engine, s *Settings, flagSet map[string]bool) { - b.Settings.Verbose = s.Verbose - b.Settings.EnableDryRun = s.EnableDryRun - b.Settings.EnableAllExchanges = s.EnableAllExchanges - b.Settings.EnableAllPairs = s.EnableAllPairs - b.Settings.EnableCoinmarketcapAnalysis = s.EnableCoinmarketcapAnalysis - b.Settings.EnableDatabaseManager = s.EnableDatabaseManager - b.Settings.EnableGCTScriptManager = s.EnableGCTScriptManager && (flagSet["gctscriptmanager"] || b.Config.GCTScript.Enabled) - b.Settings.MaxVirtualMachines = s.MaxVirtualMachines - b.Settings.EnableDispatcher = s.EnableDispatcher - b.Settings.EnablePortfolioManager = s.EnablePortfolioManager - b.Settings.WithdrawCacheSize = s.WithdrawCacheSize + b.Settings = *s + + b.Settings.EnableGCTScriptManager = b.Settings.EnableGCTScriptManager && + (flagSet["gctscriptmanager"] || b.Config.GCTScript.Enabled) + if b.Settings.EnablePortfolioManager { - if b.Settings.PortfolioManagerDelay == time.Duration(0) && s.PortfolioManagerDelay > 0 { - b.Settings.PortfolioManagerDelay = s.PortfolioManagerDelay - } else { + if b.Settings.PortfolioManagerDelay <= 0 { b.Settings.PortfolioManagerDelay = PortfolioSleepDelay } } - if flagSet["grpc"] { - b.Settings.EnableGRPC = s.EnableGRPC - } else { + if !flagSet["grpc"] { b.Settings.EnableGRPC = b.Config.RemoteControl.GRPC.Enabled } - if flagSet["grpcproxy"] { - b.Settings.EnableGRPCProxy = s.EnableGRPCProxy - } else { + if !flagSet["grpcproxy"] { b.Settings.EnableGRPCProxy = b.Config.RemoteControl.GRPC.GRPCProxyEnabled } - if flagSet["websocketrpc"] { - b.Settings.EnableWebsocketRPC = s.EnableWebsocketRPC - } else { + if !flagSet["websocketrpc"] { b.Settings.EnableWebsocketRPC = b.Config.RemoteControl.WebsocketRPC.Enabled } - if flagSet["deprecatedrpc"] { - b.Settings.EnableDeprecatedRPC = s.EnableDeprecatedRPC - } else { + if !flagSet["deprecatedrpc"] { b.Settings.EnableDeprecatedRPC = b.Config.RemoteControl.DeprecatedRPC.Enabled } if flagSet["maxvirtualmachines"] { - maxMachines := uint8(s.MaxVirtualMachines) + maxMachines := uint8(b.Settings.MaxVirtualMachines) b.gctScriptManager.MaxVirtualMachines = &maxMachines } if flagSet["withdrawcachesize"] { - withdraw.CacheSize = s.WithdrawCacheSize + withdraw.CacheSize = b.Settings.WithdrawCacheSize } - b.Settings.EnableCommsRelayer = s.EnableCommsRelayer - b.Settings.EnableEventManager = s.EnableEventManager - - if b.Settings.EnableEventManager { - if b.Settings.EventManagerDelay != time.Duration(0) && s.EventManagerDelay > 0 { - b.Settings.EventManagerDelay = s.EventManagerDelay - } else { - b.Settings.EventManagerDelay = EventSleepDelay - } + if b.Settings.EnableEventManager && b.Settings.EventManagerDelay <= 0 { + b.Settings.EventManagerDelay = EventSleepDelay } - b.Settings.EnableConnectivityMonitor = s.EnableConnectivityMonitor - b.Settings.EnableNTPClient = s.EnableNTPClient - b.Settings.EnableOrderManager = s.EnableOrderManager - b.Settings.EnableExchangeSyncManager = s.EnableExchangeSyncManager - b.Settings.EnableTickerSyncing = s.EnableTickerSyncing - b.Settings.EnableOrderbookSyncing = s.EnableOrderbookSyncing - b.Settings.EnableTradeSyncing = s.EnableTradeSyncing - b.Settings.SyncWorkers = s.SyncWorkers - b.Settings.SyncTimeoutREST = s.SyncTimeoutREST - b.Settings.SyncTimeoutWebsocket = s.SyncTimeoutWebsocket - b.Settings.SyncContinuously = s.SyncContinuously - b.Settings.EnableDepositAddressManager = s.EnableDepositAddressManager - b.Settings.EnableExchangeAutoPairUpdates = s.EnableExchangeAutoPairUpdates - b.Settings.EnableExchangeWebsocketSupport = s.EnableExchangeWebsocketSupport - b.Settings.EnableExchangeRESTSupport = s.EnableExchangeRESTSupport - b.Settings.EnableExchangeVerbose = s.EnableExchangeVerbose - b.Settings.EnableExchangeHTTPRateLimiter = s.EnableExchangeHTTPRateLimiter - b.Settings.EnableExchangeHTTPDebugging = s.EnableExchangeHTTPDebugging - b.Settings.DisableExchangeAutoPairUpdates = s.DisableExchangeAutoPairUpdates - b.Settings.ExchangePurgeCredentials = s.ExchangePurgeCredentials - b.Settings.EnableWebsocketRoutine = s.EnableWebsocketRoutine - // Checks if the flag values are different from the defaults - b.Settings.MaxHTTPRequestJobsLimit = s.MaxHTTPRequestJobsLimit if b.Settings.MaxHTTPRequestJobsLimit != int(request.DefaultMaxRequestJobs) && - s.MaxHTTPRequestJobsLimit > 0 { + b.Settings.MaxHTTPRequestJobsLimit > 0 { request.MaxRequestJobs = int32(b.Settings.MaxHTTPRequestJobsLimit) } - b.Settings.TradeBufferProcessingInterval = s.TradeBufferProcessingInterval if b.Settings.TradeBufferProcessingInterval != trade.DefaultProcessorIntervalTime { if b.Settings.TradeBufferProcessingInterval >= time.Second { trade.BufferProcessorIntervalTime = b.Settings.TradeBufferProcessingInterval @@ -240,36 +193,23 @@ func validateSettings(b *Engine, s *Settings, flagSet map[string]bool) { } } - b.Settings.RequestMaxRetryAttempts = s.RequestMaxRetryAttempts - if b.Settings.RequestMaxRetryAttempts != request.DefaultMaxRetryAttempts && s.RequestMaxRetryAttempts > 0 { + if b.Settings.RequestMaxRetryAttempts != request.DefaultMaxRetryAttempts && + b.Settings.RequestMaxRetryAttempts > 0 { request.MaxRetryAttempts = b.Settings.RequestMaxRetryAttempts } - b.Settings.HTTPTimeout = s.HTTPTimeout - if s.HTTPTimeout != time.Duration(0) && s.HTTPTimeout > 0 { - b.Settings.HTTPTimeout = s.HTTPTimeout - } else { + if b.Settings.HTTPTimeout <= 0 { b.Settings.HTTPTimeout = b.Config.GlobalHTTPTimeout } - b.Settings.HTTPUserAgent = s.HTTPUserAgent - b.Settings.HTTPProxy = s.HTTPProxy - - if s.GlobalHTTPTimeout != time.Duration(0) && s.GlobalHTTPTimeout > 0 { - b.Settings.GlobalHTTPTimeout = s.GlobalHTTPTimeout - } else { + if b.Settings.GlobalHTTPTimeout <= 0 { b.Settings.GlobalHTTPTimeout = b.Config.GlobalHTTPTimeout } common.HTTPClient = common.NewHTTPClientWithTimeout(b.Settings.GlobalHTTPTimeout) - b.Settings.GlobalHTTPUserAgent = s.GlobalHTTPUserAgent if b.Settings.GlobalHTTPUserAgent != "" { common.HTTPUserAgent = b.Settings.GlobalHTTPUserAgent } - - b.Settings.GlobalHTTPProxy = s.GlobalHTTPProxy - b.Settings.DispatchMaxWorkerAmount = s.DispatchMaxWorkerAmount - b.Settings.DispatchJobsLimit = s.DispatchJobsLimit } // PrintSettings returns the engine settings