11package iprepd
22
33import (
4+ "fmt"
45 "math/rand"
56 "runtime"
67 "time"
@@ -48,6 +49,15 @@ func (r *redisLink) set(k string, v interface{}, e time.Duration) *redis.StatusC
4849 return r .master .Set (k , v , e )
4950}
5051
52+ func instrumentRedisCmd (old func (cmd redis.Cmder ) error ) func (cmd redis.Cmder ) error {
53+ return func (cmd redis.Cmder ) error {
54+ s := time .Now ()
55+ err := old (cmd )
56+ sruntime .statsd .Timing (fmt .Sprintf ("redis.%s.timing" , cmd .Name ()), time .Since (s ))
57+ return err
58+ }
59+ }
60+
5161func newRedisLink (cfg serverCfg ) (ret redisLink , err error ) {
5262 minIdleConns := cfg .Redis .MinIdleConn
5363 if cfg .Redis .MaxPoolSize != 0 && cfg .Redis .MaxPoolSize < 20 {
@@ -65,6 +75,7 @@ func newRedisLink(cfg serverCfg) (ret redisLink, err error) {
6575 PoolSize : cfg .Redis .MaxPoolSize ,
6676 MinIdleConns : minIdleConns ,
6777 })
78+ ret .master .WrapProcess (instrumentRedisCmd )
6879 _ , err = ret .ping ().Result ()
6980 if err != nil {
7081 return
@@ -84,6 +95,7 @@ func newRedisLink(cfg serverCfg) (ret redisLink, err error) {
8495 PoolSize : cfg .Redis .MaxPoolSize ,
8596 MinIdleConns : minIdleConns ,
8697 })
98+ y .WrapProcess (instrumentRedisCmd )
8799 ret .readClients = append (ret .readClients , y )
88100 }
89101 // Also use the master for reads
0 commit comments