mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-25 16:25:16 +00:00
bbgo: add log fields support to the core
This commit is contained in:
parent
e86a75c406
commit
550b010499
|
@ -94,6 +94,7 @@ type NotificationConfig struct {
|
||||||
type LoggingConfig struct {
|
type LoggingConfig struct {
|
||||||
Trade bool `json:"trade,omitempty"`
|
Trade bool `json:"trade,omitempty"`
|
||||||
Order bool `json:"order,omitempty"`
|
Order bool `json:"order,omitempty"`
|
||||||
|
Fields map[string]interface{} `json:"fields,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Session struct {
|
type Session struct {
|
||||||
|
|
|
@ -126,6 +126,14 @@ func NewEnvironment() *Environment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (environ *Environment) Logger() log.FieldLogger {
|
||||||
|
if environ.loggingConfig != nil && len(environ.loggingConfig.Fields) > 0 {
|
||||||
|
return log.WithFields(environ.loggingConfig.Fields)
|
||||||
|
}
|
||||||
|
|
||||||
|
return log.StandardLogger()
|
||||||
|
}
|
||||||
|
|
||||||
func (environ *Environment) Session(name string) (*ExchangeSession, bool) {
|
func (environ *Environment) Session(name string) (*ExchangeSession, bool) {
|
||||||
s, ok := environ.sessions[name]
|
s, ok := environ.sessions[name]
|
||||||
return s, ok
|
return s, ok
|
||||||
|
@ -857,7 +865,9 @@ func (environ *Environment) setupSlack(userConfig *Config, slackToken string, pe
|
||||||
interact.AddMessenger(messenger)
|
interact.AddMessenger(messenger)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (environ *Environment) setupTelegram(userConfig *Config, telegramBotToken string, persistence service.PersistenceService) error {
|
func (environ *Environment) setupTelegram(
|
||||||
|
userConfig *Config, telegramBotToken string, persistence service.PersistenceService,
|
||||||
|
) error {
|
||||||
tt := strings.Split(telegramBotToken, ":")
|
tt := strings.Split(telegramBotToken, ":")
|
||||||
telegramID := tt[0]
|
telegramID := tt[0]
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,7 @@ type ExchangeSession struct {
|
||||||
usedSymbols map[string]struct{}
|
usedSymbols map[string]struct{}
|
||||||
initializedSymbols map[string]struct{}
|
initializedSymbols map[string]struct{}
|
||||||
|
|
||||||
logger *log.Entry
|
logger log.FieldLogger
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewExchangeSession(name string, exchange types.Exchange) *ExchangeSession {
|
func NewExchangeSession(name string, exchange types.Exchange) *ExchangeSession {
|
||||||
|
@ -182,10 +182,14 @@ func (session *ExchangeSession) Init(ctx context.Context, environ *Environment)
|
||||||
return ErrSessionAlreadyInitialized
|
return ErrSessionAlreadyInitialized
|
||||||
}
|
}
|
||||||
|
|
||||||
var log = log.WithField("session", session.Name)
|
var logger = environ.Logger()
|
||||||
|
logger = logger.WithField("session", session.Name)
|
||||||
|
|
||||||
|
// override the default logger
|
||||||
|
session.logger = logger
|
||||||
|
|
||||||
// load markets first
|
// load markets first
|
||||||
log.Infof("querying market info from %s...", session.Name)
|
logger.Infof("querying market info from %s...", session.Name)
|
||||||
|
|
||||||
var disableMarketsCache = false
|
var disableMarketsCache = false
|
||||||
var markets types.MarketMap
|
var markets types.MarketMap
|
||||||
|
@ -233,7 +237,7 @@ func (session *ExchangeSession) Init(ctx context.Context, environ *Environment)
|
||||||
|
|
||||||
// query and initialize the balances
|
// query and initialize the balances
|
||||||
if !session.PublicOnly {
|
if !session.PublicOnly {
|
||||||
log.Infof("querying account balances...")
|
logger.Infof("querying account balances...")
|
||||||
|
|
||||||
account, err := session.Exchange.QueryAccount(ctx)
|
account, err := session.Exchange.QueryAccount(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -244,8 +248,7 @@ func (session *ExchangeSession) Init(ctx context.Context, environ *Environment)
|
||||||
session.Account = account
|
session.Account = account
|
||||||
session.accountMutex.Unlock()
|
session.accountMutex.Unlock()
|
||||||
|
|
||||||
log.Infof("account %s balances:", session.Name)
|
logger.Infof("account %s balances:\n%s", session.Name, account.Balances().String())
|
||||||
account.Balances().Print()
|
|
||||||
|
|
||||||
// forward trade updates and order updates to the order executor
|
// forward trade updates and order updates to the order executor
|
||||||
session.UserDataStream.OnTradeUpdate(session.OrderExecutor.EmitTradeUpdate)
|
session.UserDataStream.OnTradeUpdate(session.OrderExecutor.EmitTradeUpdate)
|
||||||
|
@ -275,29 +278,29 @@ func (session *ExchangeSession) Init(ctx context.Context, environ *Environment)
|
||||||
if environ.loggingConfig != nil {
|
if environ.loggingConfig != nil {
|
||||||
if environ.loggingConfig.Trade {
|
if environ.loggingConfig.Trade {
|
||||||
session.UserDataStream.OnTradeUpdate(func(trade types.Trade) {
|
session.UserDataStream.OnTradeUpdate(func(trade types.Trade) {
|
||||||
log.Info(trade.String())
|
logger.Info(trade.String())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if environ.loggingConfig.Order {
|
if environ.loggingConfig.Order {
|
||||||
session.UserDataStream.OnOrderUpdate(func(order types.Order) {
|
session.UserDataStream.OnOrderUpdate(func(order types.Order) {
|
||||||
log.Info(order.String())
|
logger.Info(order.String())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// if logging config is nil, then apply default logging setup
|
// if logging config is nil, then apply default logging setup
|
||||||
// add trade logger
|
// add trade logger
|
||||||
session.UserDataStream.OnTradeUpdate(func(trade types.Trade) {
|
session.UserDataStream.OnTradeUpdate(func(trade types.Trade) {
|
||||||
log.Info(trade.String())
|
logger.Info(trade.String())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if viper.GetBool("debug-kline") {
|
if viper.GetBool("debug-kline") {
|
||||||
session.MarketDataStream.OnKLine(func(kline types.KLine) {
|
session.MarketDataStream.OnKLine(func(kline types.KLine) {
|
||||||
log.WithField("marketData", "kline").Infof("kline: %+v", kline)
|
logger.WithField("marketData", "kline").Infof("kline: %+v", kline)
|
||||||
})
|
})
|
||||||
session.MarketDataStream.OnKLineClosed(func(kline types.KLine) {
|
session.MarketDataStream.OnKLineClosed(func(kline types.KLine) {
|
||||||
log.WithField("marketData", "kline").Infof("kline closed: %+v", kline)
|
logger.WithField("marketData", "kline").Infof("kline closed: %+v", kline)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -558,7 +561,9 @@ func (session *ExchangeSession) MarketDataStore(symbol string) (s *MarketDataSto
|
||||||
}
|
}
|
||||||
|
|
||||||
// KLine updates will be received in the order listend in intervals array
|
// KLine updates will be received in the order listend in intervals array
|
||||||
func (session *ExchangeSession) SerialMarketDataStore(ctx context.Context, symbol string, intervals []types.Interval, useAggTrade ...bool) (store *SerialMarketDataStore, ok bool) {
|
func (session *ExchangeSession) SerialMarketDataStore(
|
||||||
|
ctx context.Context, symbol string, intervals []types.Interval, useAggTrade ...bool,
|
||||||
|
) (store *SerialMarketDataStore, ok bool) {
|
||||||
st, ok := session.MarketDataStore(symbol)
|
st, ok := session.MarketDataStore(symbol)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, false
|
return nil, false
|
||||||
|
@ -628,7 +633,9 @@ func (session *ExchangeSession) OrderStores() map[string]*core.OrderStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Subscribe save the subscription info, later it will be assigned to the stream
|
// Subscribe save the subscription info, later it will be assigned to the stream
|
||||||
func (session *ExchangeSession) Subscribe(channel types.Channel, symbol string, options types.SubscribeOptions) *ExchangeSession {
|
func (session *ExchangeSession) Subscribe(
|
||||||
|
channel types.Channel, symbol string, options types.SubscribeOptions,
|
||||||
|
) *ExchangeSession {
|
||||||
if channel == types.KLineChannel && len(options.Interval) == 0 {
|
if channel == types.KLineChannel && len(options.Interval) == 0 {
|
||||||
panic("subscription interval for kline can not be empty")
|
panic("subscription interval for kline can not be empty")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user