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  }