58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package redis
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/redis/go-redis/v9"
|
|
)
|
|
|
|
var (
|
|
PoolHitsTotal = "pool_hits_total"
|
|
PoolMissesTotal = "pool_misses_total"
|
|
PoolTimeoutTotal = "pool_timeout_total"
|
|
PoolConnTotalCurrent = "pool_conn_total_current"
|
|
PoolConnIdleCurrent = "pool_conn_idle_current"
|
|
PoolConnStaleTotal = "pool_conn_stale_total"
|
|
|
|
meterRequestTotal = "request_total"
|
|
meterRequestLatencyMicroseconds = "latency_microseconds"
|
|
meterRequestDurationSeconds = "request_duration_seconds"
|
|
)
|
|
|
|
type Statser interface {
|
|
PoolStats() *redis.PoolStats
|
|
}
|
|
|
|
func (r *Store) statsMeter() {
|
|
var st Statser
|
|
|
|
if r.cli.Client != nil {
|
|
st = r.cli.Client
|
|
} else if r.cli.ClusterClient != nil {
|
|
st = r.cli.ClusterClient
|
|
} else {
|
|
return
|
|
}
|
|
|
|
go func() {
|
|
ticker := time.NewTicker(DefaultMeterStatsInterval)
|
|
defer ticker.Stop()
|
|
|
|
for {
|
|
select {
|
|
case <-ticker.C:
|
|
if st == nil {
|
|
return
|
|
}
|
|
stats := st.PoolStats()
|
|
r.opts.Meter.Counter(PoolHitsTotal).Set(uint64(stats.Hits))
|
|
r.opts.Meter.Counter(PoolMissesTotal).Set(uint64(stats.Misses))
|
|
r.opts.Meter.Counter(PoolTimeoutTotal).Set(uint64(stats.Timeouts))
|
|
r.opts.Meter.Counter(PoolConnTotalCurrent).Set(uint64(stats.TotalConns))
|
|
r.opts.Meter.Counter(PoolConnIdleCurrent).Set(uint64(stats.IdleConns))
|
|
r.opts.Meter.Counter(PoolConnStaleTotal).Set(uint64(stats.StaleConns))
|
|
}
|
|
}
|
|
}()
|
|
}
|