engine: Adds shutdown method to exchange manager and unload all exchanges when engine is stopped (#1112)

* engine: shutdown and unload exchange when engine is stopped

* linter: fixes

* engine/exchMan: add nil check

* engine/exchanges: add shutdown method to exchanges, rm len check lock not needed, expanded code coverage, address some nits

* exchMan: report all failed shutdowns across exchanges, implement timer and monitoring routines.

* exchMan: improve shutdown sequence and aloc.

* further improvement

* exchman: log from warn to error

* websockconnection: Suppress error return when closure is caused by library

* linter: fix

* fix racies

* add note on why not parallel tests

* glorious: nits

* spelling kween

* thrasher: nits

* engine: change print of setting using reflection, I keep forgetting to implement this so program around forgetfulness

* engine/exchange_management: remove wait group and just rely on intermediary lock

* glorious: nits

* Update common/common.go

Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>

* Update main.go

Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>

---------

Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io>
Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>
This commit is contained in:
Ryan O'Hara-Reid
2023-04-05 13:07:35 +10:00
committed by GitHub
parent 4a50a72e4a
commit d23898e63a
35 changed files with 803 additions and 356 deletions

View File

@@ -34,8 +34,8 @@ const (
var (
settings = engine.Settings{
CoreSettings: engine.CoreSettings{EnableDryRun: true},
ConfigFile: filepath.Join("..", "..", "..", "..", "testdata", "configtest.json"),
EnableDryRun: true,
DataDir: filepath.Join("..", "..", "..", "..", "testdata", "gocryptotrader"),
}
exchangeTest = Exchange{}
@@ -201,7 +201,7 @@ func setupEngine() (err error) {
return err
}
em := engine.SetupExchangeManager()
em := engine.NewExchangeManager()
engine.Bot.ExchangeManager = em
return engine.Bot.LoadExchange(exchName, nil)

View File

@@ -19,10 +19,12 @@ import (
func TestMain(m *testing.M) {
settings := engine.Settings{
ConfigFile: filepath.Join("..", "..", "..", "testdata", "configtest.json"),
EnableDryRun: true,
DataDir: filepath.Join("..", "..", "..", "testdata", "gocryptotrader"),
EnableDepositAddressManager: true,
CoreSettings: engine.CoreSettings{
EnableDryRun: true,
EnableDepositAddressManager: true,
},
ConfigFile: filepath.Join("..", "..", "..", "testdata", "configtest.json"),
DataDir: filepath.Join("..", "..", "..", "testdata", "gocryptotrader"),
}
var err error
engine.Bot, err = engine.NewFromSettings(&settings, nil)
@@ -30,7 +32,7 @@ func TestMain(m *testing.M) {
log.Print(err)
os.Exit(1)
}
em := engine.SetupExchangeManager()
em := engine.NewExchangeManager()
exch, err := em.NewExchangeByName(exch.Value)
if err != nil {
log.Print(err)
@@ -45,7 +47,10 @@ func TestMain(m *testing.M) {
if err != nil {
log.Fatal(err)
}
em.Add(exch)
err = em.Add(exch)
if !errors.Is(err, nil) {
log.Fatalf("received: '%v' but expected: '%v'", err, nil)
}
engine.Bot.ExchangeManager = em
engine.Bot.WithdrawManager, err = engine.SetupWithdrawManager(em, nil, true)
if err != nil {