From 3cb190c2c76d6eca1ce7784495486017a8610500 Mon Sep 17 00:00:00 2001 From: c9s Date: Thu, 2 Mar 2023 16:16:14 +0800 Subject: [PATCH] bbgo: apply logger into the order executor --- pkg/bbgo/order_execution.go | 12 ++++++++---- pkg/bbgo/order_executor_general.go | 8 +++++++- pkg/grpc/server.go | 2 +- pkg/strategy/grid2/strategy.go | 4 ++++ 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/pkg/bbgo/order_execution.go b/pkg/bbgo/order_execution.go index 695c2067b..feaf13180 100644 --- a/pkg/bbgo/order_execution.go +++ b/pkg/bbgo/order_execution.go @@ -310,7 +310,11 @@ func BatchPlaceOrder(ctx context.Context, exchange types.Exchange, submitOrders type OrderCallback func(order types.Order) // BatchRetryPlaceOrder places the orders and retries the failed orders -func BatchRetryPlaceOrder(ctx context.Context, exchange types.Exchange, errIdx []int, orderCallback OrderCallback, submitOrders ...types.SubmitOrder) (types.OrderSlice, []int, error) { +func BatchRetryPlaceOrder(ctx context.Context, exchange types.Exchange, errIdx []int, orderCallback OrderCallback, logger log.FieldLogger, submitOrders ...types.SubmitOrder) (types.OrderSlice, []int, error) { + if logger == nil { + logger = log.StandardLogger() + } + var createdOrders types.OrderSlice var werr error @@ -349,14 +353,14 @@ func BatchRetryPlaceOrder(ctx context.Context, exchange types.Exchange, errIdx [ batchRetryOrder: for retryRound := 0; len(errIdx) > 0 && retryRound < 10; retryRound++ { // sleep for 200 millisecond between each retry - log.Warnf("retry round #%d, cooling down for %s", retryRound+1, coolDownTime) + logger.Warnf("retry round #%d, cooling down for %s", retryRound+1, coolDownTime) time.Sleep(coolDownTime) // reset error index since it's a new retry errIdxNext = nil // iterate the error index and re-submit the order - log.Warnf("starting retry round #%d...", retryRound+1) + logger.Warnf("starting retry round #%d...", retryRound+1) for _, idx := range errIdx { submitOrder := submitOrders[idx] @@ -386,7 +390,7 @@ batchRetryOrder: // bo = backoff.WithContext(bo, timeoutCtx) if err2 := backoff.Retry(op, bo); err2 != nil { if err2 == context.Canceled { - log.Warnf("context canceled error, stop retry") + logger.Warnf("context canceled error, stop retry") break batchRetryOrder } diff --git a/pkg/bbgo/order_executor_general.go b/pkg/bbgo/order_executor_general.go index 916efcf0e..ab0eab7c2 100644 --- a/pkg/bbgo/order_executor_general.go +++ b/pkg/bbgo/order_executor_general.go @@ -36,6 +36,8 @@ type GeneralOrderExecutor struct { orderStore *OrderStore tradeCollector *TradeCollector + logger log.FieldLogger + marginBaseMaxBorrowable, marginQuoteMaxBorrowable fixedpoint.Value disableNotify bool @@ -211,6 +213,10 @@ func (e *GeneralOrderExecutor) FastSubmitOrders(ctx context.Context, submitOrder } +func (e *GeneralOrderExecutor) SetLogger(logger log.FieldLogger) { + e.logger = logger +} + func (e *GeneralOrderExecutor) SubmitOrders(ctx context.Context, submitOrders ...types.SubmitOrder) (types.OrderSlice, error) { formattedOrders, err := e.session.FormatOrders(submitOrders) if err != nil { @@ -223,7 +229,7 @@ func (e *GeneralOrderExecutor) SubmitOrders(ctx context.Context, submitOrders .. e.tradeCollector.Process() } - createdOrders, _, err := BatchRetryPlaceOrder(ctx, e.session.Exchange, nil, orderCreateCallback, formattedOrders...) + createdOrders, _, err := BatchRetryPlaceOrder(ctx, e.session.Exchange, nil, orderCreateCallback, log.StandardLogger(), formattedOrders...) return createdOrders, err } diff --git a/pkg/grpc/server.go b/pkg/grpc/server.go index 7f22eed00..3998c1709 100644 --- a/pkg/grpc/server.go +++ b/pkg/grpc/server.go @@ -47,7 +47,7 @@ func (s *TradingService) SubmitOrder(ctx context.Context, request *pb.SubmitOrde } // we will return this error later because some orders could be succeeded - createdOrders, _, err := bbgo.BatchRetryPlaceOrder(ctx, session.Exchange, nil, nil, submitOrders...) + createdOrders, _, err := bbgo.BatchRetryPlaceOrder(ctx, session.Exchange, nil, nil, log.StandardLogger(), submitOrders...) // convert response resp := &pb.SubmitOrderResponse{ diff --git a/pkg/strategy/grid2/strategy.go b/pkg/strategy/grid2/strategy.go index c65541666..0b42ade44 100644 --- a/pkg/strategy/grid2/strategy.go +++ b/pkg/strategy/grid2/strategy.go @@ -1641,6 +1641,10 @@ func (s *Strategy) Run(ctx context.Context, _ bbgo.OrderExecutor, session *bbgo. }) orderExecutor.ActiveMakerOrders().OnFilled(s.newOrderUpdateHandler(ctx, session)) + if s.logger != nil { + orderExecutor.SetLogger(s.logger) + } + s.orderExecutor = orderExecutor s.OnGridProfit(func(stats *GridProfitStats, profit *GridProfit) {