github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/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 32 // PrometheusMetrics returns Metrics build using Prometheus client library. 33 // Optionally, labels can be provided along with their values ("foo", 34 // "fooValue"). 35 func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics { 36 labels := []string{} 37 for i := 0; i < len(labelsAndValues); i += 2 { 38 labels = append(labels, labelsAndValues[i]) 39 } 40 return &Metrics{ 41 BlockProcessingTime: prometheus.NewHistogramFrom(stdprometheus.HistogramOpts{ 42 Namespace: namespace, 43 Subsystem: MetricsSubsystem, 44 Name: "block_processing_time", 45 Help: "Time between BeginBlock and EndBlock in ms.", 46 Buckets: stdprometheus.LinearBuckets(1, 10, 10), 47 }, labels).With(labelsAndValues...), 48 IntervalTime: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ 49 Namespace: namespace, 50 Subsystem: MetricsSubsystem, 51 Name: "block_interval_time", 52 Help: "Time between last block and current block in ms.", 53 }, labels).With(labelsAndValues...), 54 lastBlockTime: time.Now().UnixNano(), 55 AbciTime: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ 56 Namespace: namespace, 57 Subsystem: MetricsSubsystem, 58 Name: "block_abci_time", 59 Help: "ime during executes abci in ms.", 60 }, labels).With(labelsAndValues...), 61 CommitTime: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ 62 Namespace: namespace, 63 Subsystem: MetricsSubsystem, 64 Name: "block_commit_time", 65 Help: "Time during commiting app state in ms.", 66 }, labels).With(labelsAndValues...), 67 } 68 } 69 70 // NopMetrics returns no-op Metrics. 71 func NopMetrics() *Metrics { 72 return &Metrics{ 73 BlockProcessingTime: discard.NewHistogram(), 74 IntervalTime: discard.NewGauge(), 75 lastBlockTime: time.Now().UnixNano(), 76 AbciTime: discard.NewGauge(), 77 CommitTime: discard.NewGauge(), 78 } 79 }