github.com/Finschia/finschia-sdk@v0.48.1/telemetry/metrics_test.go (about)

     1  package telemetry
     2  
     3  import (
     4  	"encoding/json"
     5  	"strings"
     6  	"testing"
     7  	"time"
     8  
     9  	metrics "github.com/armon/go-metrics"
    10  	"github.com/prometheus/common/expfmt"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestMetrics_Disabled(t *testing.T) {
    15  	m, err := New(Config{Enabled: false})
    16  	require.Nil(t, m)
    17  	require.Nil(t, err)
    18  }
    19  
    20  func TestMetrics_InMem(t *testing.T) {
    21  	m, err := New(Config{
    22  		Enabled:        true,
    23  		EnableHostname: false,
    24  		ServiceName:    "test",
    25  	})
    26  	require.NoError(t, err)
    27  	require.NotNil(t, m)
    28  
    29  	emitMetrics()
    30  
    31  	gr, err := m.Gather(FormatText)
    32  	require.NoError(t, err)
    33  	require.Equal(t, gr.ContentType, "application/json")
    34  
    35  	jsonMetrics := make(map[string]interface{})
    36  	require.NoError(t, json.Unmarshal(gr.Metrics, &jsonMetrics))
    37  
    38  	counters := jsonMetrics["Counters"].([]interface{})
    39  	require.Equal(t, counters[0].(map[string]interface{})["Count"].(float64), 10.0)
    40  	require.Equal(t, counters[0].(map[string]interface{})["Name"].(string), "test.dummy_counter")
    41  }
    42  
    43  func TestMetrics_Prom(t *testing.T) {
    44  	m, err := New(Config{
    45  		Enabled:                 true,
    46  		EnableHostname:          false,
    47  		ServiceName:             "test",
    48  		PrometheusRetentionTime: 60,
    49  		EnableHostnameLabel:     false,
    50  	})
    51  	require.NoError(t, err)
    52  	require.NotNil(t, m)
    53  	require.True(t, m.prometheusEnabled)
    54  
    55  	emitMetrics()
    56  
    57  	gr, err := m.Gather(FormatPrometheus)
    58  	require.NoError(t, err)
    59  	require.Equal(t, gr.ContentType, string(expfmt.FmtText))
    60  
    61  	require.True(t, strings.Contains(string(gr.Metrics), "test_dummy_counter 30"))
    62  }
    63  
    64  func emitMetrics() {
    65  	ticker := time.NewTicker(time.Second)
    66  	timeout := time.After(30 * time.Second)
    67  
    68  	for {
    69  		select {
    70  		case <-ticker.C:
    71  			metrics.IncrCounter([]string{"dummy_counter"}, 1.0)
    72  		case <-timeout:
    73  			return
    74  		}
    75  	}
    76  }