github.com/Jeffail/benthos/v3@v3.65.0/public/service/metrics_test.go (about) 1 package service 2 3 import ( 4 "io" 5 "net/http/httptest" 6 "testing" 7 8 "github.com/Jeffail/benthos/v3/lib/metrics" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestMetricsNil(t *testing.T) { 14 var m *Metrics 15 16 m.NewCounter("foo").Incr(1) 17 m.NewGauge("bar").Set(10) 18 m.NewTimer("baz").Timing(10) 19 } 20 21 func TestMetricsNoLabels(t *testing.T) { 22 conf := metrics.NewConfig() 23 conf.Prometheus.Prefix = "" 24 conf.Type = metrics.TypePrometheus 25 26 prom, err := metrics.New(conf) 27 require.NoError(t, err) 28 29 wHandler, ok := prom.(metrics.WithHandlerFunc) 30 require.True(t, ok) 31 32 nm := newReverseAirGapMetrics(prom) 33 34 ctr := nm.NewCounter("counterone") 35 ctr.Incr(10) 36 ctr.Incr(11) 37 38 gge := nm.NewGauge("gaugeone") 39 gge.Set(12) 40 41 tmr := nm.NewTimer("timerone") 42 tmr.Timing(13) 43 44 req := httptest.NewRequest("GET", "http://example.com/foo", nil) 45 w := httptest.NewRecorder() 46 wHandler.HandlerFunc()(w, req) 47 48 body, err := io.ReadAll(w.Result().Body) 49 require.NoError(t, err) 50 51 assert.Contains(t, string(body), "counterone 21") 52 assert.Contains(t, string(body), "gaugeone 12") 53 assert.Contains(t, string(body), "timerone_sum 13") 54 } 55 56 func TestMetricsWithLabels(t *testing.T) { 57 conf := metrics.NewConfig() 58 conf.Prometheus.Prefix = "" 59 conf.Type = metrics.TypePrometheus 60 61 prom, err := metrics.New(conf) 62 require.NoError(t, err) 63 64 wHandler, ok := prom.(metrics.WithHandlerFunc) 65 require.True(t, ok) 66 67 nm := newReverseAirGapMetrics(prom) 68 69 ctr := nm.NewCounter("countertwo", "label1") 70 ctr.Incr(10, "value1") 71 ctr.Incr(11, "value2") 72 73 gge := nm.NewGauge("gaugetwo", "label2") 74 gge.Set(12, "value3") 75 76 tmr := nm.NewTimer("timertwo", "label3", "label4") 77 tmr.Timing(13, "value4", "value5") 78 79 req := httptest.NewRequest("GET", "http://example.com/foo", nil) 80 w := httptest.NewRecorder() 81 wHandler.HandlerFunc()(w, req) 82 83 body, err := io.ReadAll(w.Result().Body) 84 require.NoError(t, err) 85 86 assert.Contains(t, string(body), "countertwo{label1=\"value1\"} 10") 87 assert.Contains(t, string(body), "countertwo{label1=\"value2\"} 11") 88 assert.Contains(t, string(body), "gaugetwo{label2=\"value3\"} 12") 89 assert.Contains(t, string(body), "timertwo_sum{label3=\"value4\",label4=\"value5\"} 13") 90 }