github.com/okex/exchain@v1.8.0/libs/tendermint/state/metrics.go (about) 1 package state 2 3 import ( 4 "time" 5 6 "github.com/go-kit/kit/metrics" 7 "github.com/go-kit/kit/metrics/discard" 8 "github.com/go-kit/kit/metrics/prometheus" 9 stdprometheus "github.com/prometheus/client_golang/prometheus" 10 ) 11 12 const ( 13 // MetricsSubsystem is a subsystem shared by all metrics exposed by this 14 // package. 15 MetricsSubsystem = "state" 16 ) 17 18 // Metrics contains metrics exposed by this package. 19 type Metrics struct { 20 // Time between BeginBlock and EndBlock. 21 BlockProcessingTime metrics.Histogram 22 23 // Time between last block and current block. 24 IntervalTime metrics.Gauge 25 lastBlockTime int64 26 // Time during executes abci 27 AbciTime metrics.Gauge 28 // Time during commiting app state 29 CommitTime metrics.Gauge 30 31 CommittedHeight metrics.Gauge 32 } 33 34 // PrometheusMetrics returns Metrics build using Prometheus client library. 35 // Optionally, labels can be provided along with their values ("foo", 36 // "fooValue"). 37 func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics { 38 labels := []string{} 39 for i := 0; i < len(labelsAndValues); i += 2 { 40 labels = append(labels, labelsAndValues[i]) 41 } 42 return &Metrics{ 43 BlockProcessingTime: prometheus.NewHistogramFrom(stdprometheus.HistogramOpts{ 44 Namespace: namespace, 45 Subsystem: MetricsSubsystem, 46 Name: "block_processing_time", 47 Help: "Time between BeginBlock and EndBlock in ms.", 48 Buckets: stdprometheus.LinearBuckets(1, 10, 10), 49 }, labels).With(labelsAndValues...), 50 IntervalTime: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ 51 Namespace: namespace, 52 Subsystem: MetricsSubsystem, 53 Name: "block_interval_time", 54 Help: "Time between last block and current block in ms.", 55 }, labels).With(labelsAndValues...), 56 lastBlockTime: time.Now().UnixNano(), 57 AbciTime: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ 58 Namespace: namespace, 59 Subsystem: MetricsSubsystem, 60 Name: "block_abci_time", 61 Help: "ime during executes abci in ms.", 62 }, labels).With(labelsAndValues...), 63 CommitTime: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ 64 Namespace: namespace, 65 Subsystem: MetricsSubsystem, 66 Name: "block_commit_time", 67 Help: "Time during commiting app state in ms.", 68 }, labels).With(labelsAndValues...), 69 CommittedHeight: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ 70 Namespace: namespace, 71 Subsystem: MetricsSubsystem, 72 Name: "monitor_block_height", 73 Help: "The block height.", 74 }, labels).With(labelsAndValues...), 75 } 76 } 77 78 // NopMetrics returns no-op Metrics. 79 func NopMetrics() *Metrics { 80 return &Metrics{ 81 BlockProcessingTime: discard.NewHistogram(), 82 IntervalTime: discard.NewGauge(), 83 lastBlockTime: time.Now().UnixNano(), 84 AbciTime: discard.NewGauge(), 85 CommitTime: discard.NewGauge(), 86 CommittedHeight: discard.NewGauge(), 87 } 88 }