github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/common/monitor/order.go (about)

     1  package monitor
     2  
     3  import (
     4  	"github.com/go-kit/kit/metrics"
     5  	"github.com/go-kit/kit/metrics/discard"
     6  	"github.com/go-kit/kit/metrics/prometheus"
     7  	stdprometheus "github.com/prometheus/client_golang/prometheus"
     8  )
     9  
    10  // OrderMetric is the struct of metric in order module
    11  type OrderMetric struct {
    12  	FullFilledNum    metrics.Gauge
    13  	PendingNum       metrics.Gauge
    14  	CanceledNum      metrics.Gauge
    15  	ExpiredNum       metrics.Gauge
    16  	PartialFilledNum metrics.Gauge
    17  }
    18  
    19  // DefaultOrderMetrics returns Metrics build using Prometheus client library if Prometheus is enabled
    20  // Otherwise, it returns no-op Metrics
    21  func DefaultOrderMetrics(config *prometheusConfig) *OrderMetric {
    22  	if config.Prometheus {
    23  		return NewOrderMetrics()
    24  	}
    25  	return NopOrderMetrics()
    26  }
    27  
    28  // NewOrderMetrics returns a pointer of a new OrderMetric object
    29  func NewOrderMetrics(labelsAndValues ...string) *OrderMetric {
    30  	var labels []string
    31  	for i := 0; i < len(labelsAndValues); i += 2 {
    32  		labels = append(labels, labelsAndValues[i])
    33  	}
    34  	return &OrderMetric{
    35  		FullFilledNum: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
    36  			Namespace: xNameSpace,
    37  			Subsystem: orderSubSystem,
    38  			Name:      "fulfilled",
    39  			Help:      "the number of fulfilled order",
    40  		}, labels).With(labelsAndValues...),
    41  		PendingNum: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
    42  			Namespace: xNameSpace,
    43  			Subsystem: orderSubSystem,
    44  			Name:      "pending",
    45  			Help:      "the number of pending order",
    46  		}, labels).With(labelsAndValues...),
    47  		CanceledNum: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
    48  			Namespace: xNameSpace,
    49  			Subsystem: orderSubSystem,
    50  			Name:      "canceled",
    51  			Help:      "the number of canceled order",
    52  		}, labels).With(labelsAndValues...),
    53  		ExpiredNum: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
    54  			Namespace: xNameSpace,
    55  			Subsystem: orderSubSystem,
    56  			Name:      "expired",
    57  			Help:      "the number of expired order",
    58  		}, labels).With(labelsAndValues...),
    59  		PartialFilledNum: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
    60  			Namespace: xNameSpace,
    61  			Subsystem: orderSubSystem,
    62  			Name:      "partial_filled",
    63  			Help:      "the number of partial_filled order",
    64  		}, labels).With(labelsAndValues...),
    65  	}
    66  }
    67  
    68  // NopOrderMetrics returns a pointer of a no-op Metrics
    69  func NopOrderMetrics() *OrderMetric {
    70  	return &OrderMetric{
    71  		FullFilledNum:    discard.NewGauge(),
    72  		PendingNum:       discard.NewGauge(),
    73  		CanceledNum:      discard.NewGauge(),
    74  		ExpiredNum:       discard.NewGauge(),
    75  		PartialFilledNum: discard.NewGauge(),
    76  	}
    77  }