From f0e0a6668f5c44e384c26d5afb3b70c816e3fbff Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Fri, 15 May 2020 11:27:10 +0100 Subject: [PATCH] Prometheus metrics for LRU cache (#1039) * Add prom metrics for the in-memory LRU cache * Increase cache sizes --- common/caching/immutablecache.go | 8 +++++--- common/caching/immutableinmemorylru.go | 28 ++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/common/caching/immutablecache.go b/common/caching/immutablecache.go index 362e4349a..fea05dd1b 100644 --- a/common/caching/immutablecache.go +++ b/common/caching/immutablecache.go @@ -1,10 +1,12 @@ package caching -import "github.com/matrix-org/gomatrixserverlib" +import ( + "github.com/matrix-org/gomatrixserverlib" +) const ( - RoomVersionMaxCacheEntries = 128 - ServerKeysMaxCacheEntries = 128 + RoomVersionMaxCacheEntries = 1024 + ServerKeysMaxCacheEntries = 1024 ) type ImmutableCache interface { diff --git a/common/caching/immutableinmemorylru.go b/common/caching/immutableinmemorylru.go index 6d2a785f3..36cd56dc2 100644 --- a/common/caching/immutableinmemorylru.go +++ b/common/caching/immutableinmemorylru.go @@ -5,6 +5,8 @@ import ( lru "github.com/hashicorp/golang-lru" "github.com/matrix-org/gomatrixserverlib" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" ) type ImmutableInMemoryLRUCache struct { @@ -21,10 +23,32 @@ func NewImmutableInMemoryLRUCache() (*ImmutableInMemoryLRUCache, error) { if rvErr != nil { return nil, rvErr } - return &ImmutableInMemoryLRUCache{ + cache := &ImmutableInMemoryLRUCache{ roomVersions: roomVersionCache, serverKeys: serverKeysCache, - }, nil + } + cache.configureMetrics() + return cache, nil +} + +func (c *ImmutableInMemoryLRUCache) configureMetrics() { + promauto.NewGaugeFunc(prometheus.GaugeOpts{ + Namespace: "dendrite", + Subsystem: "caching", + Name: "number_room_version_entries", + Help: "The number of room version entries cached.", + }, func() float64 { + return float64(c.roomVersions.Len()) + }) + + promauto.NewGaugeFunc(prometheus.GaugeOpts{ + Namespace: "dendrite", + Subsystem: "caching", + Name: "number_server_key_entries", + Help: "The number of server key entries cached.", + }, func() float64 { + return float64(c.serverKeys.Len()) + }) } func checkForInvalidMutation(cache *lru.Cache, key string, value interface{}) {