diff --git a/metrics.go b/metrics.go index a398cf4..6c13b83 100644 --- a/metrics.go +++ b/metrics.go @@ -15,6 +15,7 @@ const ( // Metrics contains metrics exposed by this package. type Metrics struct { + NodeCacheSize metrics.Gauge NodeCacheHits metrics.Counter NodeCacheMisses metrics.Counter } @@ -28,6 +29,12 @@ func PrometheusMetrics(namespace string, storeName string, labelsAndValues ...st labels = append(labels, labelsAndValues[i]) } return &Metrics{ + NodeCacheSize: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ + Namespace: namespace, + Subsystem: MetricsSubsystem, + Name: storeName + "_node_cache_size", + Help: "The maximum number of entries in the iavl node db cache", + }, labels).With(labelsAndValues...), NodeCacheHits: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ Namespace: namespace, Subsystem: MetricsSubsystem, @@ -46,6 +53,7 @@ func PrometheusMetrics(namespace string, storeName string, labelsAndValues ...st // NopMetrics returns no-op Metrics. func NopMetrics() *Metrics { return &Metrics{ + NodeCacheSize: discard.NewGauge(), NodeCacheHits: discard.NewCounter(), NodeCacheMisses: discard.NewCounter(), } diff --git a/nodedb.go b/nodedb.go index e36c1a2..e0b1240 100644 --- a/nodedb.go +++ b/nodedb.go @@ -56,6 +56,10 @@ func newNodeDB(db dbm.DB, cacheSize int, opts *Options) *nodeDB { if opts.Metrics == nil { opts.Metrics = NopMetrics() } + if cacheSize < 0 { + cacheSize = 0 + } + opts.Metrics.NodeCacheSize.Set(float64(cacheSize)) return &nodeDB{ db: db, batch: db.NewBatch(),