From 66e056c44e43c06c63db7c1a39d0682f3c961cf9 Mon Sep 17 00:00:00 2001 From: Marvin Steadfast Date: Thu, 2 Apr 2020 16:03:38 +0200 Subject: [PATCH] removes not needed metrics when error --- jitsiexporter.go | 5 +++-- jitsiexporter_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/jitsiexporter.go b/jitsiexporter.go index 0dd823c..affcacd 100644 --- a/jitsiexporter.go +++ b/jitsiexporter.go @@ -38,8 +38,9 @@ func (m *Metrics) Update() error { if err != nil { m.Errors.Inc() - for _, i := range m.Metrics { - prometheus.Unregister(i.Gauge) + for k, v := range m.Metrics { + prometheus.Unregister(v.Gauge) + delete(m.Metrics, k) } return err diff --git a/jitsiexporter_test.go b/jitsiexporter_test.go index e8329e4..a0e1acc 100644 --- a/jitsiexporter_test.go +++ b/jitsiexporter_test.go @@ -1,6 +1,8 @@ package jitsiexporter import ( + "errors" + "fmt" "testing" "github.com/prometheus/client_golang/prometheus" @@ -32,3 +34,31 @@ func TestUpdate(t *testing.T) { assert.Equal(m.Metrics["jitsi_bar"], Metric{Name: "", Gauge: prometheus.Gauge(nil)}) assert.Equal(len(m.Metrics), 1) } + +func TestUpdateOnError(t *testing.T) { + assert := assert.New(t) + + mockStater := &MockStater{} + mockStater.On("Now", "http://foo.tld").Return(nil, errors.New("something went foo")) + + e := prometheus.NewCounter(prometheus.CounterOpts{Name: "jitsi_fetch_errors"}) + metricsMap := make(map[string]Metric) + metricsMap["testmetric"] = Metric{ + Name: "testmetric", + Gauge: prometheus.NewGauge(prometheus.GaugeOpts{Name: "jitsi_testmetric"}), + } + m := &Metrics{ + URL: "http://foo.tld", + Metrics: metricsMap, + Stater: mockStater, + Errors: e, + } + + assert.Equal(1, len(m.Metrics)) + + err := m.Update() + fmt.Println(err) + assert.NotEmpty(err) + + assert.Equal(0, len(m.Metrics)) +}