github.com/number571/tendermint@v0.34.11-gost/internal/blockchain/v2/metrics.go (about) 1 package v2 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 = "blockchain" 14 ) 15 16 // Metrics contains metrics exposed by this package. 17 type Metrics struct { 18 // events_in 19 EventsIn metrics.Counter 20 // events_in 21 EventsHandled metrics.Counter 22 // events_out 23 EventsOut metrics.Counter 24 // errors_in 25 ErrorsIn metrics.Counter 26 // errors_handled 27 ErrorsHandled metrics.Counter 28 // errors_out 29 ErrorsOut metrics.Counter 30 // events_shed 31 EventsShed metrics.Counter 32 // events_sent 33 EventsSent metrics.Counter 34 // errors_sent 35 ErrorsSent metrics.Counter 36 // errors_shed 37 ErrorsShed metrics.Counter 38 } 39 40 // PrometheusMetrics returns metrics for in and out events, errors, etc. handled by routines. 41 // Can we burn in the routine name here? 42 func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics { 43 labels := []string{} 44 for i := 0; i < len(labelsAndValues); i += 2 { 45 labels = append(labels, labelsAndValues[i]) 46 } 47 return &Metrics{ 48 EventsIn: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ 49 Namespace: namespace, 50 Subsystem: MetricsSubsystem, 51 Name: "events_in", 52 Help: "Events read from the channel.", 53 }, labels).With(labelsAndValues...), 54 EventsHandled: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ 55 Namespace: namespace, 56 Subsystem: MetricsSubsystem, 57 Name: "events_handled", 58 Help: "Events handled", 59 }, labels).With(labelsAndValues...), 60 EventsOut: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ 61 Namespace: namespace, 62 Subsystem: MetricsSubsystem, 63 Name: "events_out", 64 Help: "Events output from routine.", 65 }, labels).With(labelsAndValues...), 66 ErrorsIn: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ 67 Namespace: namespace, 68 Subsystem: MetricsSubsystem, 69 Name: "errors_in", 70 Help: "Errors read from the channel.", 71 }, labels).With(labelsAndValues...), 72 ErrorsHandled: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ 73 Namespace: namespace, 74 Subsystem: MetricsSubsystem, 75 Name: "errors_handled", 76 Help: "Errors handled.", 77 }, labels).With(labelsAndValues...), 78 ErrorsOut: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ 79 Namespace: namespace, 80 Subsystem: MetricsSubsystem, 81 Name: "errors_out", 82 Help: "Errors output from routine.", 83 }, labels).With(labelsAndValues...), 84 ErrorsSent: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ 85 Namespace: namespace, 86 Subsystem: MetricsSubsystem, 87 Name: "errors_sent", 88 Help: "Errors sent to routine.", 89 }, labels).With(labelsAndValues...), 90 ErrorsShed: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ 91 Namespace: namespace, 92 Subsystem: MetricsSubsystem, 93 Name: "errors_shed", 94 Help: "Errors dropped from sending.", 95 }, labels).With(labelsAndValues...), 96 EventsSent: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ 97 Namespace: namespace, 98 Subsystem: MetricsSubsystem, 99 Name: "events_sent", 100 Help: "Events sent to routine.", 101 }, labels).With(labelsAndValues...), 102 EventsShed: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ 103 Namespace: namespace, 104 Subsystem: MetricsSubsystem, 105 Name: "events_shed", 106 Help: "Events dropped from sending.", 107 }, labels).With(labelsAndValues...), 108 } 109 } 110 111 // NopMetrics returns no-op Metrics. 112 func NopMetrics() *Metrics { 113 return &Metrics{ 114 EventsIn: discard.NewCounter(), 115 EventsHandled: discard.NewCounter(), 116 EventsOut: discard.NewCounter(), 117 ErrorsIn: discard.NewCounter(), 118 ErrorsHandled: discard.NewCounter(), 119 ErrorsOut: discard.NewCounter(), 120 EventsShed: discard.NewCounter(), 121 EventsSent: discard.NewCounter(), 122 ErrorsSent: discard.NewCounter(), 123 ErrorsShed: discard.NewCounter(), 124 } 125 }