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 }