Compare commits

..

No commits in common. "master" and "v1.2.0" have entirely different histories.

5 changed files with 21 additions and 36 deletions

1
.gitignore vendored
View File

@ -1 +0,0 @@
tags

3
go.mod
View File

@ -3,11 +3,10 @@ module git.bit5.ru/backend/rdb
go 1.13 go 1.13
require ( require (
git.bit5.ru/backend/colog v1.0.0
git.bit5.ru/backend/redigo v1.0.1 git.bit5.ru/backend/redigo v1.0.1
git.bit5.ru/backend/redsync v1.0.1 git.bit5.ru/backend/redsync v1.0.1
git.bit5.ru/backend/res_tracker v1.0.0 git.bit5.ru/backend/res_tracker v1.0.0
github.com/go-logr/logr v1.2.3
github.com/go-logr/stdr v1.2.2
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
github.com/stretchr/testify v1.7.0 github.com/stretchr/testify v1.7.0
) )

7
go.sum
View File

@ -1,3 +1,5 @@
git.bit5.ru/backend/colog v1.0.0 h1:FLykTQuRfnhWYQ+dZhoaOfkxjHNEfWp4AwP/KD+ob+M=
git.bit5.ru/backend/colog v1.0.0/go.mod h1:fiOrMQ7SPBD5Pn/Tb7rG1phsDQbZaA7S0vtdnlM6BK4=
git.bit5.ru/backend/redigo v1.0.1 h1:1LyyjHWfeed+0LEjMYqFnTuyr5ri2f+UDCV3vdAMh4Q= git.bit5.ru/backend/redigo v1.0.1 h1:1LyyjHWfeed+0LEjMYqFnTuyr5ri2f+UDCV3vdAMh4Q=
git.bit5.ru/backend/redigo v1.0.1/go.mod h1:nGfr55wovFNsbAleS5hMmtD/X3X5FZ52HJdbRses5WA= git.bit5.ru/backend/redigo v1.0.1/go.mod h1:nGfr55wovFNsbAleS5hMmtD/X3X5FZ52HJdbRses5WA=
git.bit5.ru/backend/redsync v1.0.1 h1:NcXwMw36riODqi6sMyvRCFVpIfRY63oNIGJ2szdaLoI= git.bit5.ru/backend/redsync v1.0.1 h1:NcXwMw36riODqi6sMyvRCFVpIfRY63oNIGJ2szdaLoI=
@ -6,11 +8,6 @@ git.bit5.ru/backend/res_tracker v1.0.0 h1:0FWwzP3yGOe9L39VuH9LIqyQABo/P+rd3kA112
git.bit5.ru/backend/res_tracker v1.0.0/go.mod h1:ffjnItxqkGc6rxOK9XgrQDirGhmIBwoqibmyLJ4TZtQ= git.bit5.ru/backend/res_tracker v1.0.0/go.mod h1:ffjnItxqkGc6rxOK9XgrQDirGhmIBwoqibmyLJ4TZtQ=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/gomodule/redigo v1.8.9 h1:Sl3u+2BI/kk+VEatbj0scLdrFhjPmbxOc1myhDP41ws= github.com/gomodule/redigo v1.8.9 h1:Sl3u+2BI/kk+VEatbj0scLdrFhjPmbxOc1myhDP41ws=
github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=

26
rdb.go
View File

@ -6,11 +6,11 @@ import (
"strconv" "strconv"
"time" "time"
"git.bit5.ru/backend/colog"
"git.bit5.ru/backend/redigo/redis" "git.bit5.ru/backend/redigo/redis"
"git.bit5.ru/backend/redsync" "git.bit5.ru/backend/redsync"
"git.bit5.ru/backend/res_tracker" "git.bit5.ru/backend/res_tracker"
"github.com/go-logr/logr"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -38,7 +38,7 @@ type Pool struct {
RP *redis.Pool RP *redis.Pool
} }
func OpenPool(s RdSettings, logger logr.Logger) *Pool { func OpenPool(s RdSettings, logger *colog.CoLog) *Pool {
p := &Pool{S: s, RP: newRedisPool(s, logger)} p := &Pool{S: s, RP: newRedisPool(s, logger)}
return p return p
} }
@ -70,7 +70,7 @@ func (p *Pool) Do(cmd string, args ...interface{}) (interface{}, error) {
type rdb struct { type rdb struct {
orig redis.Conn orig redis.Conn
name string name string
logger logr.Logger logger *colog.CoLog
s RdSettings s RdSettings
} }
@ -93,7 +93,7 @@ func (rd *rdb) Do(command string, args ...interface{}) (interface{}, error) {
for i := 0; i < len(args); i++ { for i := 0; i < len(args); i++ {
s += fmt.Sprintf("%v ", args[i]) s += fmt.Sprintf("%v ", args[i])
} }
rd.logger.WithCallDepth(2).V(1).Info(command + " " + s) rd.logger.Output(colog.LDebug, 5, fmt.Sprintf("%s %s", command, s))
} }
} else if rd.s.LogLevel > 0 { } else if rd.s.LogLevel > 0 {
//for this level not logging too verbose commands //for this level not logging too verbose commands
@ -105,7 +105,7 @@ func (rd *rdb) Do(command string, args ...interface{}) (interface{}, error) {
if len(args) > 5 { if len(args) > 5 {
s += " ..." s += " ..."
} }
rd.logger.WithCallDepth(2).V(1).Info(command + " " + s) rd.logger.Output(colog.LDebug, 5, fmt.Sprintf("%s %s", command, s))
} }
} }
return rd.orig.Do(command, args...) return rd.orig.Do(command, args...)
@ -118,7 +118,7 @@ func (rd *rdb) Send(command string, args ...interface{}) error {
for i := 0; i < len(args); i++ { for i := 0; i < len(args); i++ {
s += fmt.Sprintf("%v ", args[i]) s += fmt.Sprintf("%v ", args[i])
} }
rd.logger.WithCallDepth(2).V(1).Info(command + " " + s) rd.logger.Output(colog.LDebug, 5, fmt.Sprintf("%s %s", command, s))
} }
} }
return rd.orig.Send(command, args...) return rd.orig.Send(command, args...)
@ -128,7 +128,7 @@ func (rd *rdb) Receive() (interface{}, error) {
return rd.orig.Receive() return rd.orig.Receive()
} }
func newRedisPool(s RdSettings, logger logr.Logger) *redis.Pool { func newRedisPool(s RdSettings, logger *colog.CoLog) *redis.Pool {
maxIdle := s.MaxIdle maxIdle := s.MaxIdle
if maxIdle == 0 { if maxIdle == 0 {
@ -140,25 +140,19 @@ func newRedisPool(s RdSettings, logger logr.Logger) *redis.Pool {
idleTimeoutSec = 240 idleTimeoutSec = 240
} }
connStr := s.ConnStr()
if len(s.Prefix) > 0 {
logger = logger.WithValues("rd", s.Prefix)
}
return &redis.Pool{ return &redis.Pool{
Wait: false, Wait: false,
MaxIdle: maxIdle, MaxIdle: maxIdle,
IdleTimeout: time.Second * time.Duration(idleTimeoutSec), IdleTimeout: time.Second * time.Duration(idleTimeoutSec),
Dial: func() (redis.Conn, error) { Dial: func() (redis.Conn, error) {
orig, err := redis.Dial("tcp", connStr) orig, err := redis.Dial("tcp", s.ConnStr())
if err != nil { if err != nil {
return nil, errors.WithStack(err) return nil, errors.WithStack(err)
} }
c := &rdb{ c := &rdb{
orig: orig, orig: orig,
name: s.Prefix, name: s.Prefix,
logger: logger, logger: logger.Clone().AddPrefix("[" + s.Prefix + "] "),
s: s, s: s,
} }
@ -178,7 +172,7 @@ func newRedisPool(s RdSettings, logger logr.Logger) *redis.Pool {
return c, err return c, err
}, },
TestOnBorrow: func(c redis.Conn, _ time.Time) error { TestOnBorrow: func(c redis.Conn, t time.Time) error {
_, err := c.Do("PING") _, err := c.Do("PING")
return err return err
}, },

View File

@ -1,29 +1,25 @@
package rdb_test package rdb_test
import ( import (
"log"
"os" "os"
"testing" "testing"
"git.bit5.ru/backend/colog"
"git.bit5.ru/backend/rdb" "git.bit5.ru/backend/rdb"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/go-logr/logr"
"github.com/go-logr/stdr"
) )
const verbosity = 0
func getPool() *rdb.Pool { func getPool() *rdb.Pool {
//TODO: use ENV settings as well pool := rdb.OpenPool(rdb.RdSettings{Host: "localhost", Port: 6379, Db: 10, ClientName: "test"}, getLogger())
pool := rdb.OpenPool(rdb.RdSettings{Host: "localhost", Port: 6379, Db: 10, ClientName: "test", LogLevel: verbosity}, getLogger())
return pool return pool
} }
func getLogger() logr.Logger { func getLogger() *colog.CoLog {
//TODO: use ENV settings as well tlog := colog.NewCoLog(os.Stderr, "", 0)
stdr.SetVerbosity(verbosity) ft := &colog.StdFormatter{Flag: 0}
return stdr.New(log.New(os.Stdout, "", log.Lshortfile)) ft.ColorSupported(true)
tlog.SetFormatter(ft)
return tlog
} }
func TestBadConnection(t *testing.T) { func TestBadConnection(t *testing.T) {