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 }