From b0b4312d8399b3933af35b88bad301a89488f353 Mon Sep 17 00:00:00 2001
From: ensiouel <ensiouel@gmail.com>
Date: Tue, 19 Dec 2023 16:09:29 +0300
Subject: [PATCH] =?UTF-8?q?feature:=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8?=
 =?UTF-8?q?=D1=8F=20argsToLabels=20=D0=B1=D1=8B=D0=BB=D0=B0=20=D0=B2=D1=8B?=
 =?UTF-8?q?=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=B0=20=D0=B2=20=D0=BF=D0=B0?=
 =?UTF-8?q?=D0=BA=D0=B5=D1=82=20metrics=20=D0=B8=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=D0=B0=20?=
 =?UTF-8?q?=D0=B2=20GetLabelsFromKV.=20=D0=A2=D0=B5=D0=BF=D0=B5=D1=80?=
 =?UTF-8?q?=D1=8C=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20=D0=B8?=
 =?UTF-8?q?=D0=B3=D0=BD=D0=BE=D1=80=D0=B8=D1=80=D1=83=D0=B5=D1=82=20=D0=B7?=
 =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B1=D0=B5=D0=B7?=
 =?UTF-8?q?=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/cache/metrics_middleware.go               | 24 ++-----------------
 pkg/metrics/utils.go                          | 21 ++++++++++++++++
 .../utils_test.go}                            | 10 ++++----
 3 files changed, 28 insertions(+), 27 deletions(-)
 create mode 100644 pkg/metrics/utils.go
 rename pkg/{cache/metrics_middleware_test.go => metrics/utils_test.go} (81%)

diff --git a/pkg/cache/metrics_middleware.go b/pkg/cache/metrics_middleware.go
index 42d7f3d8..de60dde1 100644
--- a/pkg/cache/metrics_middleware.go
+++ b/pkg/cache/metrics_middleware.go
@@ -1,11 +1,10 @@
 package cache
 
 import (
+	"git.perx.ru/perxis/perxis-go/pkg/metrics"
 	"github.com/prometheus/client_golang/prometheus"
 )
 
-const badKey = "BADKEY"
-
 type metricsMiddleware struct {
 	cache            Cache
 	hitsTotal        prometheus.Counter
@@ -44,7 +43,7 @@ func MetricsMiddleware(cache Cache, subsystem string, labels ...string) Cache {
 			Help:      "Количество инвалидаций кэша.",
 		}),
 	}
-	prometheus.WrapRegistererWith(argsToLabels(labels), prometheus.DefaultRegisterer).MustRegister(
+	prometheus.WrapRegistererWith(metrics.GetLabelsFromKV(labels), prometheus.DefaultRegisterer).MustRegister(
 		middleware.hitsTotal,
 		middleware.missesTotal,
 		middleware.invalidatesTotal,
@@ -70,22 +69,3 @@ func (c *metricsMiddleware) Remove(key any) error {
 	c.invalidatesTotal.Inc()
 	return c.cache.Remove(key)
 }
-
-// argsToLabels преобразует массив строк args в метки типа prometheus.Labels.
-//
-// Функция ожидает, что каждое значение будет следовать за соответствующим ключом в массиве args,
-// и возвращает метки, соответствующие парам ключ-значение.
-func argsToLabels(args []string) prometheus.Labels {
-	labels := make(prometheus.Labels, len(args)/2)
-	for len(args) > 0 {
-		// если в массиве args остался только один элемент, он будет рассмотрен как значение с недопустимым ключом.
-		if len(args) == 1 {
-			labels[badKey] = args[0]
-			break
-		}
-
-		labels[args[0]] = args[1]
-		args = args[2:]
-	}
-	return labels
-}
diff --git a/pkg/metrics/utils.go b/pkg/metrics/utils.go
new file mode 100644
index 00000000..746eb002
--- /dev/null
+++ b/pkg/metrics/utils.go
@@ -0,0 +1,21 @@
+package metrics
+
+import "github.com/prometheus/client_golang/prometheus"
+
+// GetLabelsFromKV преобразует массив строк args в метки типа prometheus.Labels.
+//
+// Функция ожидает, что каждое значение будет следовать за соответствующим ключом в массиве args,
+// и возвращает метки, соответствующие парам ключ-значение.
+func GetLabelsFromKV(args []string) prometheus.Labels {
+	labels := make(prometheus.Labels, len(args)/2)
+	for len(args) > 0 {
+		// если в массиве args остался только один элемент, он будет проигнорирован
+		if len(args) == 1 {
+			break
+		}
+
+		labels[args[0]] = args[1]
+		args = args[2:]
+	}
+	return labels
+}
diff --git a/pkg/cache/metrics_middleware_test.go b/pkg/metrics/utils_test.go
similarity index 81%
rename from pkg/cache/metrics_middleware_test.go
rename to pkg/metrics/utils_test.go
index 3d2abf73..bfc6f101 100644
--- a/pkg/cache/metrics_middleware_test.go
+++ b/pkg/metrics/utils_test.go
@@ -1,4 +1,4 @@
-package cache
+package metrics
 
 import (
 	"reflect"
@@ -8,7 +8,7 @@ import (
 	"github.com/stretchr/testify/require"
 )
 
-func TestMetricsMiddleware_argsToLabels(t *testing.T) {
+func TestArgsToLabels(t *testing.T) {
 	testcases := []struct {
 		name  string
 		input []string
@@ -37,18 +37,18 @@ func TestMetricsMiddleware_argsToLabels(t *testing.T) {
 		{
 			name:  "bad key",
 			input: []string{"value"},
-			want:  prometheus.Labels{badKey: "value"},
+			want:  prometheus.Labels{},
 		},
 		{
 			name:  "multi bad key",
 			input: []string{"key", "value", "value1"},
-			want:  prometheus.Labels{"key": "value", badKey: "value1"},
+			want:  prometheus.Labels{"key": "value"},
 		},
 	}
 
 	for _, tc := range testcases {
 		t.Run(tc.name, func(t *testing.T) {
-			got := argsToLabels(tc.input)
+			got := GetLabelsFromKV(tc.input)
 			require.True(t, reflect.DeepEqual(tc.want, got))
 		})
 	}
-- 
GitLab