github.com/okex/exchain@v1.8.0/libs/tendermint/mempool/metrics.go (about)

     1  package mempool
     2  
     3  import (
     4  	"github.com/go-kit/kit/metrics"
     5  	"github.com/go-kit/kit/metrics/discard"
     6  	"github.com/okex/exchain/libs/tendermint/libs/fastmetrics"
     7  	stdprometheus "github.com/prometheus/client_golang/prometheus"
     8  )
     9  
    10  const (
    11  	// MetricsSubsystem is a subsystem shared by all metrics exposed by this
    12  	// package.
    13  	MetricsSubsystem = "mempool"
    14  )
    15  
    16  // Metrics contains metrics exposed by this package.
    17  // see MetricsProvider for descriptions.
    18  type Metrics struct {
    19  	// Size of the mempool.
    20  	Size metrics.Gauge
    21  	// Histogram of transaction sizes, in bytes.
    22  	TxSizeBytes metrics.Histogram
    23  	// Number of failed transactions.
    24  	FailedTxs metrics.Counter
    25  	// Number of times transactions are rechecked in the mempool.
    26  	RecheckTimes metrics.Counter
    27  	// Size of the pending pool
    28  	PendingPoolSize metrics.Gauge
    29  	// Size of the pending pool
    30  	GasUsed metrics.Gauge
    31  }
    32  
    33  // PrometheusMetrics returns Metrics build using Prometheus client library.
    34  // Optionally, labels can be provided along with their values ("foo",
    35  // "fooValue").
    36  func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics {
    37  	labels := []string{}
    38  	for i := 0; i < len(labelsAndValues); i += 2 {
    39  		labels = append(labels, labelsAndValues[i])
    40  	}
    41  	return &Metrics{
    42  		Size: fastmetrics.NewGaugeFrom(stdprometheus.GaugeOpts{
    43  			Namespace: namespace,
    44  			Subsystem: MetricsSubsystem,
    45  			Name:      "size",
    46  			Help:      "Size of the mempool (number of uncommitted transactions).",
    47  		}, labels).With(labelsAndValues...),
    48  		TxSizeBytes: fastmetrics.NewHistogramFrom(stdprometheus.HistogramOpts{
    49  			Namespace: namespace,
    50  			Subsystem: MetricsSubsystem,
    51  			Name:      "tx_size_bytes",
    52  			Help:      "Transaction sizes in bytes.",
    53  			Buckets:   stdprometheus.ExponentialBuckets(1, 3, 17),
    54  		}, labels).With(labelsAndValues...),
    55  		FailedTxs: fastmetrics.NewCounterFrom(stdprometheus.CounterOpts{
    56  			Namespace: namespace,
    57  			Subsystem: MetricsSubsystem,
    58  			Name:      "failed_txs",
    59  			Help:      "Number of failed transactions.",
    60  		}, labels).With(labelsAndValues...),
    61  		RecheckTimes: fastmetrics.NewCounterFrom(stdprometheus.CounterOpts{
    62  			Namespace: namespace,
    63  			Subsystem: MetricsSubsystem,
    64  			Name:      "recheck_times",
    65  			Help:      "Number of times transactions are rechecked in the mempool.",
    66  		}, labels).With(labelsAndValues...),
    67  		PendingPoolSize: fastmetrics.NewGaugeFrom(stdprometheus.GaugeOpts{
    68  			Namespace: namespace,
    69  			Subsystem: MetricsSubsystem,
    70  			Name:      "pending_pool_size",
    71  			Help:      "Size of the pending pool (number of transactions in pending pool).",
    72  		}, labels).With(labelsAndValues...),
    73  		GasUsed: fastmetrics.NewGaugeFrom(stdprometheus.GaugeOpts{
    74  			Namespace: namespace,
    75  			Subsystem: MetricsSubsystem,
    76  			Name:      "gas_used",
    77  			Help:      "Total amount of gas used in one block",
    78  		}, labels).With(labelsAndValues...),
    79  	}
    80  }
    81  
    82  // NopMetrics returns no-op Metrics.
    83  func NopMetrics() *Metrics {
    84  	return &Metrics{
    85  		Size:            discard.NewGauge(),
    86  		TxSizeBytes:     discard.NewHistogram(),
    87  		FailedTxs:       discard.NewCounter(),
    88  		RecheckTimes:    discard.NewCounter(),
    89  		PendingPoolSize: discard.NewGauge(),
    90  		GasUsed:         discard.NewGauge(),
    91  	}
    92  }