diff --git a/.gitignore b/.gitignore index 28635ec..2613513 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,7 @@ *.out # Dependency directories (remove the comment below to include it) -# vendor/ +vendor/ # Go workspace file go.work diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..06e4ef5 --- /dev/null +++ b/Makefile @@ -0,0 +1,27 @@ +.PHONY: run build test tidy deps-upgrade deps-clean-cache + +# ============================================================================== +# Start Rest +run: + go run main.go + +build: + go build main.go + +# ============================================================================== +# Modules support +test: + go test -cover ./... + +tidy: + go mod tidy + go mod vendor + +deps-upgrade: + # go get $(go list -f '{{if not (or .Main .Indirect)}}{{.Path}}{{end}}' -m all) + go get -u -t -d -v ./... + go mod tidy + go mod vendor + +deps-clean-cache: + go clean -modcache diff --git a/go.mod b/go.mod index d36af29..93f3d88 100644 --- a/go.mod +++ b/go.mod @@ -2,22 +2,22 @@ module github.com/sivaosorg/redisconn go 1.20 -require github.com/sivaosorg/govm v1.2.6 +require github.com/sivaosorg/govm v1.2.8 require ( - github.com/fatih/color v1.15.0 // indirect + github.com/fatih/color v1.16.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/natefinch/lumberjack v2.0.0+incompatible // indirect github.com/onsi/ginkgo v1.16.5 // indirect github.com/onsi/gomega v1.27.8 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - golang.org/x/sys v0.12.0 // indirect + golang.org/x/sys v0.15.0 // indirect ) require ( github.com/go-redis/redis v6.15.9+incompatible github.com/json-iterator/go v1.1.12 // indirect - github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect ) diff --git a/go.sum b/go.sum index cd8aa54..cbce1c5 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -28,10 +28,11 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= @@ -51,10 +52,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/sivaosorg/govm v1.2.3 h1:Hwt6SQjwW5XADWqvfwzlf3t9kr5seoPpMk8EE9MO+6I= -github.com/sivaosorg/govm v1.2.3/go.mod h1:rXfPCNGc4ddPf1+VRX8Ytw/5xqehfPRrCr53Oi+cwpw= -github.com/sivaosorg/govm v1.2.6 h1:BCUCNk/yy/rFZ+clMF7ftfw99ZQFO+4QSFV/xe2mWfA= -github.com/sivaosorg/govm v1.2.6/go.mod h1:rXfPCNGc4ddPf1+VRX8Ytw/5xqehfPRrCr53Oi+cwpw= +github.com/sivaosorg/govm v1.2.8 h1:SyVwq7PNUKQQNqI9PbjZ6zY9b33lks75y/qzAzxDNyI= +github.com/sivaosorg/govm v1.2.8/go.mod h1:rXfPCNGc4ddPf1+VRX8Ytw/5xqehfPRrCr53Oi+cwpw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= @@ -85,8 +84,9 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= diff --git a/redisconn/redisconn.go b/redisconn/redisconn.go index 95d6924..ff72f23 100644 --- a/redisconn/redisconn.go +++ b/redisconn/redisconn.go @@ -8,23 +8,53 @@ import ( "github.com/sivaosorg/govm/dbx" "github.com/sivaosorg/govm/logger" "github.com/sivaosorg/govm/redisx" + "github.com/sivaosorg/govm/utils" ) var ( - instance *redis.Client + instance *Redis _logger = logger.NewLogger() ) -func NewClient(config redisx.RedisConfig) (*redis.Client, dbx.Dbx) { +func NewRedis() *Redis { + return &Redis{} +} + +func (r *Redis) SetConn(value *redis.Client) *Redis { + r.conn = value + return r +} + +func (r *Redis) SetConfig(value redisx.RedisConfig) *Redis { + r.Config = value + return r +} + +func (r *Redis) SetState(value dbx.Dbx) *Redis { + r.State = value + return r +} + +func (r *Redis) Json() string { + return utils.ToJson(r) +} + +func (r *Redis) GetConn() *redis.Client { + return r.conn +} + +func NewClient(config redisx.RedisConfig) (*Redis, dbx.Dbx) { s := dbx.NewDbx().SetDatabase(config.Database) if !config.IsEnabled { s.SetConnected(false). SetMessage("Redis unavailable"). SetError(fmt.Errorf(s.Message)) - return &redis.Client{}, *s + instance = NewRedis().SetState(*s) + return instance, *s } if instance != nil { - s.SetConnected(true) + s.SetConnected(true).SetNewInstance(false) + instance.SetState(*s) return instance, *s } client := redis.NewClient(&redis.Options{ @@ -36,14 +66,14 @@ func NewClient(config redisx.RedisConfig) (*redis.Client, dbx.Dbx) { err := client.Ping().Err() if err != nil { s.SetConnected(false).SetError(err).SetMessage(err.Error()) - return &redis.Client{}, *s + instance = NewRedis().SetState(*s) + return instance, *s } if config.DebugMode { _logger.Info(fmt.Sprintf("Redis client connection:: %s", config.Json())) _logger.Info(fmt.Sprintf("Connected successfully to redis cache:: %s/%s", config.UrlConn, config.Database)) } - instance = client - pid := os.Getpid() - s.SetConnected(true).SetMessage("Connection established").SetPid(pid).SetNewInstance(true) + s.SetConnected(true).SetMessage("Connected successfully").SetPid(os.Getpid()).SetNewInstance(true) + instance = NewRedis().SetConn(client).SetState(*s) return instance, *s } diff --git a/redisconn/redisconn_model.go b/redisconn/redisconn_model.go index 31e016d..ab90ba8 100644 --- a/redisconn/redisconn_model.go +++ b/redisconn/redisconn_model.go @@ -4,6 +4,8 @@ import ( "sync" "github.com/go-redis/redis" + "github.com/sivaosorg/govm/dbx" + "github.com/sivaosorg/govm/redisx" ) type RedisPubSubClient struct { @@ -14,3 +16,9 @@ type RedisPubSubClient struct { type RedisMutex struct { mutexes map[string]*sync.Mutex } + +type Redis struct { + conn *redis.Client `json:"-"` + Config redisx.RedisConfig `json:"config,omitempty"` + State dbx.Dbx `json:"state,omitempty"` +}