From a44f49c048fefd481c6e562e3071a65542097db6 Mon Sep 17 00:00:00 2001
From: ensiouel <ensiouel@gmail.com>
Date: Tue, 19 Dec 2023 10:55:10 +0300
Subject: [PATCH] =?UTF-8?q?refactor:=20MetricsCache=20=D0=BF=D0=B5=D1=80?=
 =?UTF-8?q?=D0=B5=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=B2?=
 =?UTF-8?q?=20MetricsMiddleware,=20=D1=84=D0=B0=D0=B9=D0=BB=20metrics=5Fca?=
 =?UTF-8?q?che.go=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE?=
 =?UTF-8?q?=D0=B2=D0=B0=D0=BD=20=D0=B2=20metrics=5Fmiddleware.go.=20=D0=A3?=
 =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=BD=D1=8B=20=D0=B3=D0=BB=D0=BE=D0=B1=D0=B0?=
 =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC?=
 =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=BC=D0=B5=D1=82=D1=80=D0=B8?=
 =?UTF-8?q?=D0=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/cache/metrics_cache.go      | 56 ---------------------------------
 pkg/cache/metrics_middleware.go | 56 +++++++++++++++++++++++++++++++++
 2 files changed, 56 insertions(+), 56 deletions(-)
 delete mode 100644 pkg/cache/metrics_cache.go
 create mode 100644 pkg/cache/metrics_middleware.go

diff --git a/pkg/cache/metrics_cache.go b/pkg/cache/metrics_cache.go
deleted file mode 100644
index 12e8fd27..00000000
--- a/pkg/cache/metrics_cache.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package cache
-
-import (
-	"github.com/prometheus/client_golang/prometheus"
-	"github.com/prometheus/client_golang/prometheus/promauto"
-)
-
-var (
-	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 {
-	cache   Cache
-	cacheID string
-}
-
-// WithMetrics возвращает обертку над кэшем, которая используется для отслеживания количества хитов и промахов в кэше.
-// Помимо этого, в функцию WithMetrics передается параметр cacheID, который используется в метке метрик для идентификации конкретного кэша.
-//
-// Метрики записываются в prometheus.DefaultRegisterer
-func WithMetrics(cache Cache, cacheID string) *MetricsCache {
-	if cache == nil {
-		panic("cannot wrap metrics in cache, cache is nil")
-	}
-	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) {
-	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)
-}
diff --git a/pkg/cache/metrics_middleware.go b/pkg/cache/metrics_middleware.go
new file mode 100644
index 00000000..90966127
--- /dev/null
+++ b/pkg/cache/metrics_middleware.go
@@ -0,0 +1,56 @@
+package cache
+
+import (
+	"github.com/prometheus/client_golang/prometheus"
+)
+
+type metricsMiddleware struct {
+	cache       Cache
+	hitsTotal   prometheus.Counter
+	missesTotal prometheus.Counter
+}
+
+// MetricsMiddleware возвращает обертку над кэшем, которая используется для отслеживания количества хитов и промахов в кэше.
+//
+// Метрики записываются в prometheus.DefaultRegisterer
+func MetricsMiddleware(cache Cache, serviceName string) Cache {
+	if cache == nil {
+		panic("cannot wrap metrics in cache, cache is nil")
+	}
+	middleware := &metricsMiddleware{
+		cache: cache,
+		hitsTotal: prometheus.NewCounter(prometheus.CounterOpts{
+			Name:        "cache_hits_total",
+			Help:        "Количество попаданий в кэш.",
+			ConstLabels: prometheus.Labels{"service_name": serviceName},
+		}),
+		missesTotal: prometheus.NewCounter(prometheus.CounterOpts{
+			Name:        "cache_misses_total",
+			Help:        "Количество пропусков в кэш.",
+			ConstLabels: prometheus.Labels{"service_name": serviceName},
+		}),
+	}
+	prometheus.MustRegister(
+		middleware.hitsTotal,
+		middleware.missesTotal,
+	)
+	return middleware
+}
+
+func (c *metricsMiddleware) Set(key, value any) error {
+	return c.cache.Set(key, value)
+}
+
+func (c *metricsMiddleware) Get(key any) (any, error) {
+	value, err := c.cache.Get(key)
+	if err != nil {
+		c.missesTotal.Inc()
+		return nil, err
+	}
+	c.hitsTotal.Inc()
+	return value, nil
+}
+
+func (c *metricsMiddleware) Remove(key any) error {
+	return c.cache.Remove(key)
+}
-- 
GitLab