11package iprepd
22
33import (
4+ "fmt"
45 "math/rand"
56 "time"
67
@@ -47,6 +48,15 @@ func (r *redisLink) set(k string, v interface{}, e time.Duration) *redis.StatusC
4748 return r .master .Set (k , v , e )
4849}
4950
51+ func instrumentRedisCmd (old func (cmd redis.Cmder ) error ) func (cmd redis.Cmder ) error {
52+ return func (cmd redis.Cmder ) error {
53+ s := time .Now ()
54+ err := old (cmd )
55+ sruntime .statsd .Timing (fmt .Sprintf ("redis.%s.timing" , cmd .Name ()), time .Since (s ))
56+ return err
57+ }
58+ }
59+
5060func newRedisLink (cfg serverCfg ) (ret redisLink , err error ) {
5161 ret .master = redis .NewClient (& redis.Options {
5262 Addr : cfg .Redis .Addr ,
@@ -55,6 +65,7 @@ func newRedisLink(cfg serverCfg) (ret redisLink, err error) {
5565 WriteTimeout : time .Millisecond * time .Duration (cfg .Redis .WriteTimeout ),
5666 DialTimeout : time .Millisecond * time .Duration (cfg .Redis .DialTimeout ),
5767 })
68+ ret .master .WrapProcess (instrumentRedisCmd )
5869 _ , err = ret .ping ().Result ()
5970 if err != nil {
6071 return
@@ -72,6 +83,7 @@ func newRedisLink(cfg serverCfg) (ret redisLink, err error) {
7283 ReadTimeout : time .Millisecond * time .Duration (cfg .Redis .ReadTimeout ),
7384 DialTimeout : time .Millisecond * time .Duration (cfg .Redis .DialTimeout ),
7485 })
86+ y .WrapProcess (instrumentRedisCmd )
7587 ret .readClients = append (ret .readClients , y )
7688 }
7789 // Also use the master for reads
0 commit comments