github.com/vipernet-xyz/tm@v0.34.24/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  }