github.com/cosmos/cosmos-sdk@v0.50.10/telemetry/metrics_test.go (about)

     1  package telemetry
     2  
     3  import (
     4  	"encoding/json"
     5  	"strings"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/hashicorp/go-metrics"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestMetrics_Disabled(t *testing.T) {
    14  	m, err := New(Config{Enabled: false})
    15  	require.Nil(t, m)
    16  	require.Nil(t, err)
    17  }
    18  
    19  func TestMetrics_InMem(t *testing.T) {
    20  	m, err := New(Config{
    21  		MetricsSink:    MetricSinkInMem,
    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  		MetricsSink:             MetricSinkInMem,
    46  		Enabled:                 true,
    47  		EnableHostname:          false,
    48  		ServiceName:             "test",
    49  		PrometheusRetentionTime: 60,
    50  		EnableHostnameLabel:     false,
    51  	})
    52  	require.NoError(t, err)
    53  	require.NotNil(t, m)
    54  	require.True(t, m.prometheusEnabled)
    55  
    56  	emitMetrics()
    57  
    58  	gr, err := m.Gather(FormatPrometheus)
    59  	require.NoError(t, err)
    60  	require.Equal(t, gr.ContentType, ContentTypeText)
    61  
    62  	require.True(t, strings.Contains(string(gr.Metrics), "test_dummy_counter 30"))
    63  }
    64  
    65  func emitMetrics() {
    66  	ticker := time.NewTicker(time.Second)
    67  	timeout := time.After(30 * time.Second)
    68  
    69  	for {
    70  		select {
    71  		case <-ticker.C:
    72  			metrics.IncrCounter([]string{"dummy_counter"}, 1.0)
    73  		case <-timeout:
    74  			return
    75  		}
    76  	}
    77  }