github.com/arcology-network/consensus-engine@v1.9.0/state/metrics.go (about) 1 package state 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 = "state" 14 ) 15 16 // Metrics contains metrics exposed by this package. 17 type Metrics struct { 18 // Time between BeginBlock and EndBlock. 19 BlockProcessingTime metrics.Histogram 20 } 21 22 // PrometheusMetrics returns Metrics build using Prometheus client library. 23 // Optionally, labels can be provided along with their values ("foo", 24 // "fooValue"). 25 func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics { 26 labels := []string{} 27 for i := 0; i < len(labelsAndValues); i += 2 { 28 labels = append(labels, labelsAndValues[i]) 29 } 30 return &Metrics{ 31 BlockProcessingTime: prometheus.NewHistogramFrom(stdprometheus.HistogramOpts{ 32 Namespace: namespace, 33 Subsystem: MetricsSubsystem, 34 Name: "block_processing_time", 35 Help: "Time between BeginBlock and EndBlock in ms.", 36 Buckets: stdprometheus.LinearBuckets(1, 10, 10), 37 }, labels).With(labelsAndValues...), 38 } 39 } 40 41 // NopMetrics returns no-op Metrics. 42 func NopMetrics() *Metrics { 43 return &Metrics{ 44 BlockProcessingTime: discard.NewHistogram(), 45 } 46 }