123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package redis
- import (
- "io"
- "net/http"
- "strings"
- "testing"
- "time"
- red "github.com/go-redis/redis/v8"
- "github.com/prometheus/client_golang/prometheus"
- "github.com/prometheus/client_golang/prometheus/testutil"
- "github.com/stretchr/testify/assert"
- "github.com/zeromicro/go-zero/core/conf"
- "github.com/zeromicro/go-zero/internal/devserver"
- )
- func TestRedisMetric(t *testing.T) {
- cfg := devserver.Config{}
- _ = conf.FillDefault(&cfg)
- server := devserver.NewServer(cfg)
- server.StartAsync()
- time.Sleep(time.Second)
- metricReqDur.Observe(8, "test-cmd")
- metricReqErr.Inc("test-cmd", "internal-error")
- metricSlowCount.Inc("test-cmd")
- url := "http://127.0.0.1:6060/metrics"
- resp, err := http.Get(url)
- assert.Nil(t, err)
- defer resp.Body.Close()
- s, err := io.ReadAll(resp.Body)
- assert.Nil(t, err)
- content := string(s)
- assert.Contains(t, content, "redis_client_requests_duration_ms_sum{command=\"test-cmd\"} 8\n")
- assert.Contains(t, content, "redis_client_requests_duration_ms_count{command=\"test-cmd\"} 1\n")
- assert.Contains(t, content, "redis_client_requests_error_total{command=\"test-cmd\",error=\"internal-error\"} 1\n")
- assert.Contains(t, content, "redis_client_requests_slow_total{command=\"test-cmd\"} 1\n")
- }
- func Test_newCollector(t *testing.T) {
- prometheus.Unregister(connCollector)
- c := newCollector()
- c.registerClient(&statGetter{
- clientType: "node",
- key: "test1",
- poolSize: 10,
- poolStats: func() *red.PoolStats {
- return &red.PoolStats{
- Hits: 10000,
- Misses: 10,
- Timeouts: 5,
- TotalConns: 100,
- IdleConns: 20,
- StaleConns: 1,
- }
- },
- })
- c.registerClient(&statGetter{
- clientType: "node",
- key: "test2",
- poolSize: 11,
- poolStats: func() *red.PoolStats {
- return &red.PoolStats{
- Hits: 10001,
- Misses: 11,
- Timeouts: 6,
- TotalConns: 101,
- IdleConns: 21,
- StaleConns: 2,
- }
- },
- })
- c.registerClient(&statGetter{
- clientType: "cluster",
- key: "test3",
- poolSize: 5,
- poolStats: func() *red.PoolStats {
- return &red.PoolStats{
- Hits: 20000,
- Misses: 20,
- Timeouts: 10,
- TotalConns: 200,
- IdleConns: 40,
- StaleConns: 2,
- }
- },
- })
- val := `
- # HELP redis_client_pool_conn_idle_current Current number of idle connections in the pool
- # TYPE redis_client_pool_conn_idle_current gauge
- redis_client_pool_conn_idle_current{client_type="cluster",key="test3"} 40
- redis_client_pool_conn_idle_current{client_type="node",key="test1"} 20
- redis_client_pool_conn_idle_current{client_type="node",key="test2"} 21
- # HELP redis_client_pool_conn_max Max number of connections in the pool
- # TYPE redis_client_pool_conn_max counter
- redis_client_pool_conn_max{client_type="cluster",key="test3"} 5
- redis_client_pool_conn_max{client_type="node",key="test1"} 10
- redis_client_pool_conn_max{client_type="node",key="test2"} 11
- # HELP redis_client_pool_conn_stale_total Number of times a connection was removed from the pool because it was stale
- # TYPE redis_client_pool_conn_stale_total counter
- redis_client_pool_conn_stale_total{client_type="cluster",key="test3"} 2
- redis_client_pool_conn_stale_total{client_type="node",key="test1"} 1
- redis_client_pool_conn_stale_total{client_type="node",key="test2"} 2
- # HELP redis_client_pool_conn_total_current Current number of connections in the pool
- # TYPE redis_client_pool_conn_total_current gauge
- redis_client_pool_conn_total_current{client_type="cluster",key="test3"} 200
- redis_client_pool_conn_total_current{client_type="node",key="test1"} 100
- redis_client_pool_conn_total_current{client_type="node",key="test2"} 101
- # HELP redis_client_pool_hit_total Number of times a connection was found in the pool
- # TYPE redis_client_pool_hit_total counter
- redis_client_pool_hit_total{client_type="cluster",key="test3"} 20000
- redis_client_pool_hit_total{client_type="node",key="test1"} 10000
- redis_client_pool_hit_total{client_type="node",key="test2"} 10001
- # HELP redis_client_pool_miss_total Number of times a connection was not found in the pool
- # TYPE redis_client_pool_miss_total counter
- redis_client_pool_miss_total{client_type="cluster",key="test3"} 20
- redis_client_pool_miss_total{client_type="node",key="test1"} 10
- redis_client_pool_miss_total{client_type="node",key="test2"} 11
- # HELP redis_client_pool_timeout_total Number of times a timeout occurred when looking for a connection in the pool
- # TYPE redis_client_pool_timeout_total counter
- redis_client_pool_timeout_total{client_type="cluster",key="test3"} 10
- redis_client_pool_timeout_total{client_type="node",key="test1"} 5
- redis_client_pool_timeout_total{client_type="node",key="test2"} 6
- `
- err := testutil.CollectAndCompare(c, strings.NewReader(val))
- assert.NoError(t, err)
- }
|