From 90c95329fa373e97a1cb3113ff479d2bd8fd9d22 Mon Sep 17 00:00:00 2001
From: ensiouel <ensiouel@gmail.com>
Date: Fri, 22 Dec 2023 13:57:09 +0300
Subject: [PATCH] =?UTF-8?q?cache.MetricsMiddleware=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?=20cache.TelemetryMiddleware=20=D0=B8=20=D0=B1=D0=BE=D0=BB?=
 =?UTF-8?q?=D1=8C=D1=88=D0=B5=20=D0=BD=D0=B5=20=D0=BF=D1=80=D0=B8=D0=BD?=
 =?UTF-8?q?=D0=B8=D0=BC=D0=B0=D0=B5=D1=82=20*metrics.CacheMetrics,=20?=
 =?UTF-8?q?=D0=B0=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B8=D1=80=D1=83=D0=B5?=
 =?UTF-8?q?=D1=82=20=D0=B5=D0=B3=D0=BE=20=D0=B2=D0=BD=D1=83=D1=82=D1=80?=
 =?UTF-8?q?=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/cache/metrics_middleware.go | 19 ++++++++++++-------
 pkg/metrics/cache.go            | 27 ++++++++++++---------------
 2 files changed, 24 insertions(+), 22 deletions(-)

diff --git a/pkg/cache/metrics_middleware.go b/pkg/cache/metrics_middleware.go
index a9104490..2f3f6fe5 100644
--- a/pkg/cache/metrics_middleware.go
+++ b/pkg/cache/metrics_middleware.go
@@ -8,26 +8,31 @@ import (
 	otelmetric "go.opentelemetry.io/otel/metric"
 )
 
-type metricsMiddleware struct {
+type telemetryMiddleware struct {
 	next         Cache
 	cacheMetrics *metrics.CacheMetrics
 	attributes   otelmetric.MeasurementOption
 }
 
-// MetricsMiddleware возвращает обертку над кэшем, которая используется для отслеживания количества хитов и промахов в кэше.
-func MetricsMiddleware(next Cache, cacheMetrics *metrics.CacheMetrics, keyValues ...attribute.KeyValue) Cache {
-	return &metricsMiddleware{
+// TelemetryMiddleware возвращает обертку над кэшем, которая используется для отслеживания количества хитов и промахов в кэше.
+func TelemetryMiddleware(next Cache, scope string, keyValues ...attribute.KeyValue) Cache {
+	cacheMetrics, err := metrics.NewCacheMetrics(scope)
+	if err != nil {
+		panic(err)
+	}
+
+	return &telemetryMiddleware{
 		next:         next,
 		cacheMetrics: cacheMetrics,
 		attributes:   otelmetric.WithAttributes(keyValues...),
 	}
 }
 
-func (c *metricsMiddleware) Set(key, value any) error {
+func (c *telemetryMiddleware) Set(key, value any) error {
 	return c.next.Set(key, value)
 }
 
-func (c *metricsMiddleware) Get(key any) (any, error) {
+func (c *telemetryMiddleware) Get(key any) (any, error) {
 	value, err := c.next.Get(key)
 	if err != nil {
 		c.cacheMetrics.MissesTotal.Add(context.TODO(), 1, c.attributes)
@@ -37,7 +42,7 @@ func (c *metricsMiddleware) Get(key any) (any, error) {
 	return value, nil
 }
 
-func (c *metricsMiddleware) Remove(key any) error {
+func (c *telemetryMiddleware) Remove(key any) error {
 	c.cacheMetrics.InvalidatesTotal.Add(context.TODO(), 1, c.attributes)
 	return c.next.Remove(key)
 }
diff --git a/pkg/metrics/cache.go b/pkg/metrics/cache.go
index 11cec0bd..b7e92382 100644
--- a/pkg/metrics/cache.go
+++ b/pkg/metrics/cache.go
@@ -12,32 +12,29 @@ type CacheMetrics struct {
 }
 
 func NewCacheMetrics(scope string) (*CacheMetrics, error) {
-	meter := otel.Meter(scope)
+	var (
+		meter        = otel.Meter(scope)
+		cacheMetrics *CacheMetrics
+		err          error
+	)
 
-	hitsTotal, err := meter.Int64Counter("cache_hits",
+	if cacheMetrics.HitsTotal, err = meter.Int64Counter("cache_hits",
 		otelmetric.WithDescription("Количество найденных в кэше значений"),
-	)
-	if err != nil {
+	); err != nil {
 		return nil, err
 	}
 
-	missesTotal, err := meter.Int64Counter("cache_misses",
+	if cacheMetrics.MissesTotal, err = meter.Int64Counter("cache_misses",
 		otelmetric.WithDescription("Количество не найденных в кэше значений"),
-	)
-	if err != nil {
+	); err != nil {
 		return nil, err
 	}
 
-	invalidatesTotal, err := meter.Int64Counter("cache_invalidates",
+	if cacheMetrics.InvalidatesTotal, err = meter.Int64Counter("cache_invalidates",
 		otelmetric.WithDescription("Количество инвалидаций кэша"),
-	)
-	if err != nil {
+	); err != nil {
 		return nil, err
 	}
 
-	return &CacheMetrics{
-		HitsTotal:        hitsTotal,
-		MissesTotal:      missesTotal,
-		InvalidatesTotal: invalidatesTotal,
-	}, nil
+	return cacheMetrics, nil
 }
-- 
GitLab