From 6845af08acf839e9658862e26ebdca82c6745578 Mon Sep 17 00:00:00 2001 From: ensiouel <ensiouel@gmail.com> Date: Fri, 22 Dec 2023 13:58:34 +0300 Subject: [PATCH] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D1=8B=20prometheus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/metrics/example_test.go | 123 ------------------------------------ 1 file changed, 123 deletions(-) delete mode 100644 pkg/metrics/example_test.go diff --git a/pkg/metrics/example_test.go b/pkg/metrics/example_test.go deleted file mode 100644 index d08e75e6..00000000 --- a/pkg/metrics/example_test.go +++ /dev/null @@ -1,123 +0,0 @@ -package metrics - -import ( - "fmt" - "io" - "net" - "net/http" - "testing" - - "git.perx.ru/perxis/perxis-go/pkg/id" - "git.perx.ru/perxis/perxis-go/pkg/optional" - "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promhttp" - dto "github.com/prometheus/client_model/go" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func serveMetricsHTTP(t *testing.T) net.Listener { - mux := http.NewServeMux() - mux.Handle("/metrics", promhttp.Handler()) - srv := &http.Server{Addr: "localhost:30341", Handler: mux} - listener, err := net.Listen("tcp", "localhost:0") - require.NoError(t, err) - go func() { _ = srv.Serve(listener) }() - return listener -} - -func TestMetrics_Example(t *testing.T) { - t.Run("Metrics do not allow dynamically assigned labels", func(t *testing.T) { - m := prometheus.NewCounterVec(prometheus.CounterOpts{Name: "test_counter_" + id.GenerateNewID()}, nil) - prometheus.MustRegister(m) - assert.Panics(t, func() { m.With(prometheus.Labels{"a": "v_a1", "b": "v_b1"}).Inc() }) - }) - - t.Run("Metrics allow dynamically assigned label values", func(t *testing.T) { - l := serveMetricsHTTP(t) - defer func() { _ = l.Close() }() - - name := "test_counter_" + id.GenerateNewID() - m := prometheus.NewCounterVec(prometheus.CounterOpts{Name: name}, []string{"a", "b"}) - prometheus.MustRegister(m) - m.With(prometheus.Labels{"a": "v_a1", "b": "v_b1"}).Inc() - - resp, err := http.Get(fmt.Sprintf("http://%s/metrics", l.Addr().String())) - require.NoError(t, err) - defer resp.Body.Close() - b, err := io.ReadAll(resp.Body) - require.NoError(t, err) - // fmt.Println(string(b)) - assert.Contains(t, string(b), name+"{a=\"v_a1\",b=\"v_b1\"} 1") - }) - - t.Run("Metrics with constant label values", func(t *testing.T) { - l := serveMetricsHTTP(t) - defer func() { _ = l.Close() }() - - name := "test_counter_" + id.GenerateNewID() - m := prometheus.NewCounterVec(prometheus.CounterOpts{ - Namespace: "test_namespace", - Subsystem: "test_subsystem", - Name: name, - Help: "Test Help", - ConstLabels: prometheus.Labels{"const_1": "val_1"}, - }, []string{"a", "b"}) - prometheus.MustRegister(m) - m.With(prometheus.Labels{"a": "v_a1", "b": "v_b1"}).Inc() - - resp, err := http.Get(fmt.Sprintf("http://%s/metrics", l.Addr().String())) - require.NoError(t, err) - defer resp.Body.Close() - b, err := io.ReadAll(resp.Body) - require.NoError(t, err) - // fmt.Println(string(b)) - assert.Contains(t, string(b), name+"{a=\"v_a1\",b=\"v_b1\",const_1=\"val_1\"} 1") - }) - - t.Run("Multiple metrics registered with the same name and labels combine into metric family", func(t *testing.T) { - registry := prometheus.NewRegistry() - - name := "test_counter_" + id.GenerateNewID() - m1 := prometheus.NewCounterVec(prometheus.CounterOpts{Name: name, ConstLabels: prometheus.Labels{"const_1": "val_1"}}, []string{"a1", "b1"}) - registry.MustRegister(m1) - m1.With(prometheus.Labels{"a1": "v_a1", "b1": "v_b1"}).Inc() - - m2 := prometheus.NewCounterVec(prometheus.CounterOpts{Name: name, ConstLabels: prometheus.Labels{"const_1": "val_2"}}, []string{"a1", "b1"}) - registry.MustRegister(m2) - m2.With(prometheus.Labels{"a1": "v_a2", "b1": "v_b2"}).Inc() - assert.Panics(t, func() { m2.With(prometheus.Labels{"c": "v3"}).Inc() }, "Невозможно добавить метку, которая не была зарегистрирована при создании метрики") - - assert.Panics(t, func() { - m3 := prometheus.NewCounterVec(prometheus.CounterOpts{Name: name, ConstLabels: prometheus.Labels{"const_2": "val_2"}}, []string{"a3", "b3"}) - registry.MustRegister(m3) - }, "Невозможно зарегистрировать метрики с одним названием, но разными метками") - - metricsFamily, err := registry.Gather() - require.NoError(t, err) - require.Len(t, metricsFamily, 1) - - assert.Equal(t, name, *metricsFamily[0].Name) - require.Len(t, metricsFamily[0].Metric, 2) - - registeredMetric1 := metricsFamily[0].Metric[0] - assert.Equal(t, - []*dto.LabelPair{ - {Name: optional.Ptr("a1"), Value: optional.Ptr("v_a1")}, - {Name: optional.Ptr("b1"), Value: optional.Ptr("v_b1")}, - {Name: optional.Ptr("const_1"), Value: optional.Ptr("val_1")}, - }, - registeredMetric1.Label, - ) - - registeredMetric2 := metricsFamily[0].Metric[1] - assert.Equal(t, - []*dto.LabelPair{ - {Name: optional.Ptr("a1"), Value: optional.Ptr("v_a2")}, - {Name: optional.Ptr("b1"), Value: optional.Ptr("v_b2")}, - {Name: optional.Ptr("const_1"), Value: optional.Ptr("val_2")}, - }, - registeredMetric2.Label, - ) - }) -} -- GitLab