From d5f1daad3e38c63289a059199a36abd0c7162ba4 Mon Sep 17 00:00:00 2001 From: ensiouel <ensiouel@gmail.com> Date: Thu, 14 Dec 2023 15:11:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D0=B1=D0=B5=D1=80=D1=82=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20Cache,=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=BE=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D1=82?= =?UTF-8?q?=20=D0=BC=D0=B5=D1=82=D1=80=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/cache/metrics_cache.go | 57 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 pkg/cache/metrics_cache.go diff --git a/pkg/cache/metrics_cache.go b/pkg/cache/metrics_cache.go new file mode 100644 index 00000000..d93cc4ac --- /dev/null +++ b/pkg/cache/metrics_cache.go @@ -0,0 +1,57 @@ +package cache + +import ( + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" +) + +var ( + cacheRequestsTotal = promauto.With(prometheus.DefaultRegisterer).NewCounterVec(prometheus.CounterOpts{ + Name: "cache_requests_total", + Help: "Количество обращений к кэшу", + }, []string{"cache_id"}) + cacheHitsTotal = promauto.With(prometheus.DefaultRegisterer).NewCounterVec(prometheus.CounterOpts{ + Name: "cache_hits_total", + Help: "Количество попаданий в кэш", + }, []string{"cache_id"}) + cacheMissesTotal = promauto.With(prometheus.DefaultRegisterer).NewCounterVec(prometheus.CounterOpts{ + Name: "cache_misses_total", + Help: "Количество пропусков в кэш", + }, []string{"cache_id"}) +) + +var _ Cache = &MetricsCache{} + +type MetricsCache struct { + cacheID string + cache Cache +} + +func WrapMetrics(cacheID string, cache Cache) *MetricsCache { + return &MetricsCache{ + cacheID: cacheID, + cache: cache, + } +} + +func (c *MetricsCache) Set(key, value any) error { + return c.cache.Set(key, value) +} + +func (c *MetricsCache) Get(key any) (any, error) { + cacheRequestsTotal.WithLabelValues(c.cacheID).Inc() + + value, err := c.cache.Get(key) + if err != nil { + cacheMissesTotal.WithLabelValues(c.cacheID).Inc() + return nil, err + } + + cacheHitsTotal.WithLabelValues(c.cacheID).Inc() + + return value, nil +} + +func (c *MetricsCache) Remove(key any) error { + return c.cache.Remove(key) +} -- GitLab