github.com/Finschia/finschia-sdk@v0.48.1/store/cache/metrics.go (about)

     1  package cache
     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 = "inter_block_cache"
    14  )
    15  
    16  // Metrics contains metrics exposed by this package.
    17  type Metrics struct {
    18  	InterBlockCacheHits    metrics.Counter
    19  	InterBlockCacheMisses  metrics.Counter
    20  	InterBlockCacheEntries metrics.Gauge
    21  	InterBlockCacheBytes   metrics.Gauge
    22  }
    23  
    24  // PrometheusMetrics returns Metrics build using Prometheus client library.
    25  // Optionally, labels can be provided along with their values ("foo",
    26  // "fooValue").
    27  func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics {
    28  	labels := []string{}
    29  	for i := 0; i < len(labelsAndValues); i += 2 {
    30  		labels = append(labels, labelsAndValues[i])
    31  	}
    32  	return &Metrics{
    33  		InterBlockCacheHits: prometheus.NewCounterFrom(stdprometheus.CounterOpts{
    34  			Namespace: namespace,
    35  			Subsystem: MetricsSubsystem,
    36  			Name:      "hits",
    37  			Help:      "Cache hits of the inter block cache",
    38  		}, labels).With(labelsAndValues...),
    39  		InterBlockCacheMisses: prometheus.NewCounterFrom(stdprometheus.CounterOpts{
    40  			Namespace: namespace,
    41  			Subsystem: MetricsSubsystem,
    42  			Name:      "misses",
    43  			Help:      "Cache misses of the inter block cache",
    44  		}, labels).With(labelsAndValues...),
    45  		InterBlockCacheEntries: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
    46  			Namespace: namespace,
    47  			Subsystem: MetricsSubsystem,
    48  			Name:      "entries",
    49  			Help:      "Cache entry count of the inter block cache",
    50  		}, labels).With(labelsAndValues...),
    51  		InterBlockCacheBytes: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
    52  			Namespace: namespace,
    53  			Subsystem: MetricsSubsystem,
    54  			Name:      "bytes_size",
    55  			Help:      "Cache bytes size of the inter block cache",
    56  		}, labels).With(labelsAndValues...),
    57  	}
    58  }
    59  
    60  // NopMetrics returns no-op Metrics.
    61  func NopMetrics() *Metrics {
    62  	return &Metrics{
    63  		InterBlockCacheHits:    discard.NewCounter(),
    64  		InterBlockCacheMisses:  discard.NewCounter(),
    65  		InterBlockCacheEntries: discard.NewGauge(),
    66  		InterBlockCacheBytes:   discard.NewGauge(),
    67  	}
    68  }
    69  
    70  type MetricsProvider func() *Metrics
    71  
    72  // PrometheusMetricsProvider returns PrometheusMetrics for each store
    73  func PrometheusMetricsProvider(namespace string, labelsAndValues ...string) func() *Metrics {
    74  	return func() *Metrics {
    75  		return PrometheusMetrics(namespace, labelsAndValues...)
    76  	}
    77  }
    78  
    79  // NopMetricsProvider returns NopMetrics for each store
    80  func NopMetricsProvider() func() *Metrics {
    81  	return func() *Metrics {
    82  		return NopMetrics()
    83  	}
    84  }