github.com/Finschia/ostracon@v1.1.5/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/go-kit/kit/metrics/prometheus"
     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  
    22  	// Histogram of transaction sizes, in bytes.
    23  	TxSizeBytes metrics.Histogram
    24  
    25  	// Number of failed transactions.
    26  	FailedTxs metrics.Counter
    27  
    28  	// RejectedTxs defines the number of rejected transactions. These are
    29  	// transactions that passed CheckTx but failed to make it into the mempool
    30  	// due to resource limits, e.g. mempool is full and no lower priority
    31  	// transactions exist in the mempool.
    32  	RejectedTxs metrics.Counter
    33  
    34  	// EvictedTxs defines the number of evicted transactions. These are valid
    35  	// transactions that passed CheckTx and existed in the mempool but were later
    36  	// evicted to make room for higher priority valid transactions that passed
    37  	// CheckTx.
    38  	EvictedTxs metrics.Counter
    39  
    40  	// Number of times transactions are rechecked in the mempool.
    41  	RecheckTimes metrics.Counter
    42  	// Time of recheck transactions in the mempool.
    43  	RecheckTime metrics.Gauge
    44  }
    45  
    46  // PrometheusMetrics returns Metrics build using Prometheus client library.
    47  // Optionally, labels can be provided along with their values ("foo",
    48  // "fooValue").
    49  func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics {
    50  	labels := []string{}
    51  	for i := 0; i < len(labelsAndValues); i += 2 {
    52  		labels = append(labels, labelsAndValues[i])
    53  	}
    54  	return &Metrics{
    55  		Size: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
    56  			Namespace: namespace,
    57  			Subsystem: MetricsSubsystem,
    58  			Name:      "size",
    59  			Help:      "Size of the mempool (number of uncommitted transactions).",
    60  		}, labels).With(labelsAndValues...),
    61  
    62  		TxSizeBytes: prometheus.NewHistogramFrom(stdprometheus.HistogramOpts{
    63  			Namespace: namespace,
    64  			Subsystem: MetricsSubsystem,
    65  			Name:      "tx_size_bytes",
    66  			Help:      "Transaction sizes in bytes.",
    67  			Buckets:   stdprometheus.ExponentialBuckets(1, 3, 17),
    68  		}, labels).With(labelsAndValues...),
    69  
    70  		FailedTxs: prometheus.NewCounterFrom(stdprometheus.CounterOpts{
    71  			Namespace: namespace,
    72  			Subsystem: MetricsSubsystem,
    73  			Name:      "failed_txs",
    74  			Help:      "Number of failed transactions.",
    75  		}, labels).With(labelsAndValues...),
    76  		RejectedTxs: prometheus.NewCounterFrom(stdprometheus.CounterOpts{
    77  			Namespace: namespace,
    78  			Subsystem: MetricsSubsystem,
    79  			Name:      "rejected_txs",
    80  			Help:      "Number of rejected transactions.",
    81  		}, labels).With(labelsAndValues...),
    82  
    83  		EvictedTxs: prometheus.NewCounterFrom(stdprometheus.CounterOpts{
    84  			Namespace: namespace,
    85  			Subsystem: MetricsSubsystem,
    86  			Name:      "evicted_txs",
    87  			Help:      "Number of evicted transactions.",
    88  		}, labels).With(labelsAndValues...),
    89  
    90  		RecheckTimes: prometheus.NewCounterFrom(stdprometheus.CounterOpts{
    91  			Namespace: namespace,
    92  			Subsystem: MetricsSubsystem,
    93  			Name:      "recheck_times",
    94  			Help:      "Number of times transactions are rechecked in the mempool.",
    95  		}, labels).With(labelsAndValues...),
    96  
    97  		// Add by Ostracon
    98  		RecheckTime: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
    99  			Namespace: namespace,
   100  			Subsystem: MetricsSubsystem,
   101  			Name:      "recheck_time",
   102  			Help:      "Time of recheck transactions in the mempool in ms.",
   103  		}, labels).With(labelsAndValues...),
   104  	}
   105  }
   106  
   107  // NopMetrics returns no-op Metrics.
   108  func NopMetrics() *Metrics {
   109  	return &Metrics{
   110  		Size:         discard.NewGauge(),
   111  		TxSizeBytes:  discard.NewHistogram(),
   112  		FailedTxs:    discard.NewCounter(),
   113  		RejectedTxs:  discard.NewCounter(),
   114  		EvictedTxs:   discard.NewCounter(),
   115  		RecheckTimes: discard.NewCounter(),
   116  		RecheckTime:  discard.NewGauge(),
   117  	}
   118  }