From fead99aaa6fe85a8a1330bfac32aa90980fd596b Mon Sep 17 00:00:00 2001 From: c9s Date: Wed, 21 Aug 2024 15:33:27 +0800 Subject: [PATCH] add more balance metrics --- pkg/bbgo/metrics.go | 126 ++++++++++++++++++++++++++++++++------------ pkg/bbgo/session.go | 109 ++++++++++++++++++++------------------ 2 files changed, 149 insertions(+), 86 deletions(-) diff --git a/pkg/bbgo/metrics.go b/pkg/bbgo/metrics.go index 998ee71a9..55f4cfab8 100644 --- a/pkg/bbgo/metrics.go +++ b/pkg/bbgo/metrics.go @@ -9,35 +9,87 @@ var ( Help: "bbgo exchange session connection status", }, []string{ - "exchange", // exchange name - "channel", // channel: user or market - "margin", // margin type: none, margin or isolated - "symbol", // margin symbol of the connection. + "exchange", // exchange name + "channel", // channel: user or market + "margin_type", // margin type: none, margin or isolated + "symbol", // margin symbol of the connection. }, ) - metricsLockedBalances = prometheus.NewGaugeVec( + metricsBalanceLockedMetrics = prometheus.NewGaugeVec( prometheus.GaugeOpts{ Name: "bbgo_balances_locked", Help: "bbgo exchange locked balances", }, []string{ - "exchange", // exchange name - "margin", // margin of connection. 1 or 0 - "symbol", // margin symbol of the connection. + "exchange", // exchange name + "margin_type", // margin of connection. 1 or 0 + "symbol", // margin symbol of the connection. "currency", }, ) - metricsAvailableBalances = prometheus.NewGaugeVec( + metricsBalanceAvailableMetrics = prometheus.NewGaugeVec( prometheus.GaugeOpts{ Name: "bbgo_balances_available", Help: "bbgo exchange available balances", }, []string{ - "exchange", // exchange name - "margin", // margin of connection. none, margin or isolated - "symbol", // margin symbol of the connection. + "exchange", // exchange name + "margin_type", // margin of connection. none, margin or isolated + "symbol", // margin symbol of the connection. + "currency", + }, + ) + + metricsBalanceDebtMetrics = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "bbgo_balances_debt", + Help: "bbgo exchange balance debt", + }, + []string{ + "exchange", // exchange name + "margin_type", // margin of connection. none, margin or isolated + "symbol", // margin symbol of the connection. + "currency", + }, + ) + + metricsBalanceBorrowedMetrics = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "bbgo_balances_borrowed", + Help: "bbgo exchange balance borrowed", + }, + []string{ + "exchange", // exchange name + "margin_type", // margin of connection. none, margin or isolated + "symbol", // margin symbol of the connection. + "currency", + }, + ) + + metricsBalanceInterestMetrics = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "bbgo_balances_interest", + Help: "bbgo exchange balance interest", + }, + []string{ + "exchange", // exchange name + "margin_type", // margin of connection. none, margin or isolated + "symbol", // margin symbol of the connection. + "currency", + }, + ) + + metricsBalanceNetMetrics = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "bbgo_balances_net", + Help: "bbgo exchange session total net balances", + }, + []string{ + "exchange", // exchange name + "margin_type", // margin of connection. none, margin or isolated + "symbol", // margin symbol of the connection. "currency", }, ) @@ -48,9 +100,9 @@ var ( Help: "bbgo exchange session total balances", }, []string{ - "exchange", // exchange name - "margin", // margin of connection. none, margin or isolated - "symbol", // margin symbol of the connection. + "exchange", // exchange name + "margin_type", // margin of connection. none, margin or isolated + "symbol", // margin symbol of the connection. "currency", }, ) @@ -61,11 +113,11 @@ var ( Help: "bbgo exchange session trades", }, []string{ - "exchange", // exchange name - "margin", // margin of connection. none, margin or isolated - "symbol", // margin symbol of the connection. - "side", // side: buy or sell - "liquidity", // maker or taker + "exchange", // exchange name + "margin_type", // margin of connection. none, margin or isolated + "symbol", // margin symbol of the connection. + "side", // side: buy or sell + "liquidity", // maker or taker }, ) @@ -75,26 +127,26 @@ var ( Help: "bbgo trading volume", }, []string{ - "exchange", // exchange name - "margin", // margin of connection. none, margin or isolated - "symbol", // margin symbol of the connection. - "side", // side: buy or sell - "liquidity", // maker or taker + "exchange", // exchange name + "margin_type", // margin of connection. none, margin or isolated + "symbol", // margin symbol of the connection. + "side", // side: buy or sell + "liquidity", // maker or taker }, ) - metricsLastUpdateTimeBalance = prometheus.NewGaugeVec( + metricsLastUpdateTimeMetrics = prometheus.NewGaugeVec( prometheus.GaugeOpts{ Name: "bbgo_last_update_time", Help: "bbgo last update time of different channel", }, []string{ - "exchange", // exchange name - "margin", // margin of connection. none, margin or isolated - "channel", // channel: user, market - "data_type", // type: balance, ticker, kline, orderbook, trade, order - "symbol", // for market data, trade and order - "currency", // for balance + "exchange", // exchange name + "margin_type", // margin of connection. none, margin or isolated + "channel", // channel: user, market + "data_type", // type: balance, ticker, kline, orderbook, trade, order + "symbol", // for market data, trade and order + "currency", // for balance }, ) ) @@ -103,10 +155,14 @@ func init() { prometheus.MustRegister( metricsConnectionStatus, metricsTotalBalances, - metricsLockedBalances, - metricsAvailableBalances, + metricsBalanceNetMetrics, + metricsBalanceLockedMetrics, + metricsBalanceAvailableMetrics, + metricsBalanceDebtMetrics, + metricsBalanceBorrowedMetrics, + metricsBalanceInterestMetrics, metricsTradesTotal, metricsTradingVolume, - metricsLastUpdateTimeBalance, + metricsLastUpdateTimeMetrics, ) } diff --git a/pkg/bbgo/session.go b/pkg/bbgo/session.go index c6647bc4f..94279eb2d 100644 --- a/pkg/bbgo/session.go +++ b/pkg/bbgo/session.go @@ -902,76 +902,83 @@ func (session *ExchangeSession) metricsBalancesUpdater(balances types.BalanceMap for currency, balance := range balances { labels := prometheus.Labels{ "exchange": session.ExchangeName.String(), - "margin": session.MarginType(), + "margin": string(session.MarginType()), "symbol": session.IsolatedMarginSymbol, "currency": currency, } metricsTotalBalances.With(labels).Set(balance.Total().Float64()) - metricsLockedBalances.With(labels).Set(balance.Locked.Float64()) - metricsAvailableBalances.With(labels).Set(balance.Available.Float64()) - metricsLastUpdateTimeBalance.With(prometheus.Labels{ - "exchange": session.ExchangeName.String(), - "margin": session.MarginType(), - "channel": "user", - "data_type": "balance", - "symbol": "", - "currency": currency, + metricsBalanceNetMetrics.With(labels).Set(balance.Net().Float64()) + metricsBalanceAvailableMetrics.With(labels).Set(balance.Available.Float64()) + metricsBalanceLockedMetrics.With(labels).Set(balance.Locked.Float64()) + + // margin metrics + metricsBalanceDebtMetrics.With(labels).Set(balance.Debt().Float64()) + metricsBalanceBorrowedMetrics.With(labels).Set(balance.Borrowed.Float64()) + metricsBalanceInterestMetrics.With(labels).Set(balance.Interest.Float64()) + + metricsLastUpdateTimeMetrics.With(prometheus.Labels{ + "exchange": session.ExchangeName.String(), + "margin_type": string(session.MarginType()), + "channel": "user", + "data_type": "balance", + "symbol": "", + "currency": currency, }).SetToCurrentTime() } } func (session *ExchangeSession) metricsOrderUpdater(order types.Order) { - metricsLastUpdateTimeBalance.With(prometheus.Labels{ - "exchange": session.ExchangeName.String(), - "margin": session.MarginType(), - "channel": "user", - "data_type": "order", - "symbol": order.Symbol, - "currency": "", + metricsLastUpdateTimeMetrics.With(prometheus.Labels{ + "exchange": session.ExchangeName.String(), + "margin_type": string(session.MarginType()), + "channel": "user", + "data_type": "order", + "symbol": order.Symbol, + "currency": "", }).SetToCurrentTime() } func (session *ExchangeSession) metricsTradeUpdater(trade types.Trade) { labels := prometheus.Labels{ - "exchange": session.ExchangeName.String(), - "margin": session.MarginType(), - "side": trade.Side.String(), - "symbol": trade.Symbol, - "liquidity": trade.Liquidity(), + "exchange": session.ExchangeName.String(), + "margin_type": string(session.MarginType()), + "side": trade.Side.String(), + "symbol": trade.Symbol, + "liquidity": trade.Liquidity(), } metricsTradingVolume.With(labels).Add(trade.Quantity.Mul(trade.Price).Float64()) metricsTradesTotal.With(labels).Inc() - metricsLastUpdateTimeBalance.With(prometheus.Labels{ - "exchange": session.ExchangeName.String(), - "margin": session.MarginType(), - "channel": "user", - "data_type": "trade", - "symbol": trade.Symbol, - "currency": "", + metricsLastUpdateTimeMetrics.With(prometheus.Labels{ + "exchange": session.ExchangeName.String(), + "margin_type": string(session.MarginType()), + "channel": "user", + "data_type": "trade", + "symbol": trade.Symbol, + "currency": "", }).SetToCurrentTime() } func (session *ExchangeSession) bindMarketDataStreamMetrics(stream types.Stream) { stream.OnBookUpdate(func(book types.SliceOrderBook) { - metricsLastUpdateTimeBalance.With(prometheus.Labels{ - "exchange": session.ExchangeName.String(), - "margin": session.MarginType(), - "channel": "market", - "data_type": "book", - "symbol": book.Symbol, - "currency": "", + metricsLastUpdateTimeMetrics.With(prometheus.Labels{ + "exchange": session.ExchangeName.String(), + "margin_type": string(session.MarginType()), + "channel": "market", + "data_type": "book", + "symbol": book.Symbol, + "currency": "", }).SetToCurrentTime() }) stream.OnKLineClosed(func(kline types.KLine) { - metricsLastUpdateTimeBalance.With(prometheus.Labels{ - "exchange": session.ExchangeName.String(), - "margin": session.MarginType(), - "channel": "market", - "data_type": "kline", - "symbol": kline.Symbol, - "currency": "", + metricsLastUpdateTimeMetrics.With(prometheus.Labels{ + "exchange": session.ExchangeName.String(), + "margin_type": string(session.MarginType()), + "channel": "market", + "data_type": "kline", + "symbol": kline.Symbol, + "currency": "", }).SetToCurrentTime() }) } @@ -983,18 +990,18 @@ func (session *ExchangeSession) bindUserDataStreamMetrics(stream types.Stream) { stream.OnOrderUpdate(session.metricsOrderUpdater) stream.OnDisconnect(func() { metricsConnectionStatus.With(prometheus.Labels{ - "channel": "user", - "exchange": session.ExchangeName.String(), - "margin": session.MarginType(), - "symbol": session.IsolatedMarginSymbol, + "channel": "user", + "exchange": session.ExchangeName.String(), + "margin_type": string(session.MarginType()), + "symbol": session.IsolatedMarginSymbol, }).Set(0.0) }) stream.OnConnect(func() { metricsConnectionStatus.With(prometheus.Labels{ - "channel": "user", - "exchange": session.ExchangeName.String(), - "margin": session.MarginType(), - "symbol": session.IsolatedMarginSymbol, + "channel": "user", + "exchange": session.ExchangeName.String(), + "margin_type": string(session.MarginType()), + "symbol": session.IsolatedMarginSymbol, }).Set(1.0) }) }