Config/Engine: Add data directory to config.json (#549)

* add data directory to config.json

* fix quality check issues

* adjust data directory only when explicitly set

* unexport ValidateSettings
* process flags earlier so they can also be used when loading config
* fix test depends on flags

* rename config.DataDir to DataDirectory

* also don't omit in JSON if empty

* datadir flag induces dry run

* log warning
* enable parallel for sub tests
* leave data dir empty in example config

* remove parallel for loadConfigWithSettings

* create a new config object instead of using a shared one

* remove a test that potentially reads user file

* rename test methods to MixedCaps

* clean up test dir after engine tests

* use global config variable
This commit is contained in:
Rauno Ots
2020-09-17 03:11:17 +02:00
committed by GitHub
parent 25466b2c9d
commit a67b5cf715
6 changed files with 165 additions and 16 deletions

View File

@@ -70,16 +70,13 @@ func NewFromSettings(settings *Settings) (*Engine, error) {
if settings == nil {
return nil, errors.New("engine: settings is nil")
}
// collect flags
flag.Visit(func(f *flag.Flag) { flagSet[f.Name] = true })
var b Engine
b.Config = &config.Cfg
filePath, err := config.GetFilePath(settings.ConfigFile)
if err != nil {
return nil, err
}
var err error
log.Printf("Loading config file %s..\n", filePath)
err = b.Config.LoadConfig(filePath, settings.EnableDryRun)
b.Config, err = loadConfigWithSettings(settings)
if err != nil {
return nil, fmt.Errorf("failed to load config. Err: %s", err)
}
@@ -95,8 +92,8 @@ func NewFromSettings(settings *Settings) (*Engine, error) {
gctlog.Infoln(gctlog.Global, "Logger initialised.")
}
b.Settings.ConfigFile = filePath
b.Settings.DataDir = settings.DataDir
b.Settings.ConfigFile = settings.ConfigFile
b.Settings.DataDir = b.Config.GetDataPath()
b.Settings.CheckParamInteraction = settings.CheckParamInteraction
err = utils.AdjustGoMaxProcs(settings.GoMaxProcs)
@@ -104,14 +101,38 @@ func NewFromSettings(settings *Settings) (*Engine, error) {
return nil, fmt.Errorf("unable to adjust runtime GOMAXPROCS value. Err: %s", err)
}
ValidateSettings(&b, settings)
validateSettings(&b, settings)
return &b, nil
}
// ValidateSettings validates and sets all bot settings
func ValidateSettings(b *Engine, s *Settings) {
flag.Visit(func(f *flag.Flag) { flagSet[f.Name] = true })
// loadConfigWithSettings creates configuration based on the provided settings
func loadConfigWithSettings(settings *Settings) (*config.Config, error) {
filePath, err := config.GetFilePath(settings.ConfigFile)
if err != nil {
return nil, err
}
log.Printf("Loading config file %s..\n", filePath)
conf := &config.Cfg
err = conf.ReadConfig(filePath, settings.EnableDryRun)
if err != nil {
return nil, fmt.Errorf(config.ErrFailureOpeningConfig, filePath, err)
}
// Apply overrides from settings
if flagSet["datadir"] {
// warn if dryrun isn't enabled
if !settings.EnableDryRun {
log.Println("Command line argument '-datadir' induces dry run mode.")
}
settings.EnableDryRun = true
conf.DataDirectory = settings.DataDir
}
return conf, conf.CheckConfig()
}
// validateSettings validates and sets all bot settings
func validateSettings(b *Engine, s *Settings) {
b.Settings.Verbose = s.Verbose
b.Settings.EnableDryRun = s.EnableDryRun
b.Settings.EnableAllExchanges = s.EnableAllExchanges