initial redis work, storage.Storage->storage.Conn,
among other new options in the config file for storage timeouts
This commit is contained in:
parent
79a6c79067
commit
56132e3d64
5 changed files with 60 additions and 10 deletions
|
@ -33,12 +33,16 @@ type Client struct {
|
||||||
|
|
||||||
type Storage struct {
|
type Storage struct {
|
||||||
Driver string `json:"driver"`
|
Driver string `json:"driver"`
|
||||||
Protocol string `json:"protocol"`
|
Network string `json:"network`
|
||||||
Addr string `json:"addr"`
|
Addr string `json:"addr"`
|
||||||
Username string `json:"user"`
|
Username string `json:"user"`
|
||||||
Password string `json:"pass"`
|
Password string `json:"pass"`
|
||||||
Schema string `json:"schema"`
|
Schema string `json:"schema,omitempty"`
|
||||||
Encoding string `json:"encoding"`
|
Encoding string `json:"encoding,omitempty"`
|
||||||
|
|
||||||
|
ConnectTimeout *Duration `json:"conn_timeout,omitempty"`
|
||||||
|
ReadTimeout *Duration `json:"read_timeout,omitempty"`
|
||||||
|
WriteTimeout *Duration `json:"write_timeout,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
{
|
{
|
||||||
|
|
||||||
|
"network": "tcp",
|
||||||
"addr": ":34000",
|
"addr": ":34000",
|
||||||
"storage": {
|
"storage": {
|
||||||
"driver": "redis",
|
"driver": "redis",
|
||||||
"addr": "127.0.0.1:6379",
|
"addr": "127.0.0.1:6379",
|
||||||
"user": "root",
|
"user": "root",
|
||||||
"pass": ""
|
"pass": "",
|
||||||
|
|
||||||
|
"conn_timeout": "5s",
|
||||||
|
"read_timeout": "5s",
|
||||||
|
"write_timeout": "5s"
|
||||||
},
|
},
|
||||||
|
|
||||||
"private": true,
|
"private": true,
|
||||||
|
|
|
@ -25,7 +25,7 @@ import (
|
||||||
type Server struct {
|
type Server struct {
|
||||||
conf *config.Config
|
conf *config.Config
|
||||||
listener net.Listener
|
listener net.Listener
|
||||||
storage storage.Storage
|
storage storage.Conn
|
||||||
|
|
||||||
serving bool
|
serving bool
|
||||||
startTime time.Time
|
startTime time.Time
|
||||||
|
@ -39,7 +39,7 @@ type Server struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(conf *config.Config) (*Server, error) {
|
func New(conf *config.Config) (*Server, error) {
|
||||||
store, err := storage.New(&conf.Storage)
|
store, err := storage.Open(&conf.Storage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ func fail(err error, w http.ResponseWriter, r *http.Request) {
|
||||||
w.(http.Flusher).Flush()
|
w.(http.Flusher).Flush()
|
||||||
}
|
}
|
||||||
|
|
||||||
func validatePasskey(dir string, s storage.Storage) (*storage.User, error) {
|
func validatePasskey(dir string, s storage.Conn) (*storage.User, error) {
|
||||||
if len(dir) != 34 {
|
if len(dir) != 34 {
|
||||||
return nil, errors.New("Your passkey is invalid")
|
return nil, errors.New("Your passkey is invalid")
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,5 +5,46 @@
|
||||||
package redis
|
package redis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/garyburd/redigo/redis"
|
||||||
|
|
||||||
|
"github.com/pushrax/chihaya/config"
|
||||||
"github.com/pushrax/chihaya/storage"
|
"github.com/pushrax/chihaya/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type driver struct{}
|
||||||
|
|
||||||
|
func (d *driver) New(conf *config.Storage) (storage.Conn, error) {
|
||||||
|
var (
|
||||||
|
conn redis.Conn
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
if conf.ConnectTimeout != nil &&
|
||||||
|
conf.ReadTimeout != nil &&
|
||||||
|
conf.WriteTimeout != nil {
|
||||||
|
|
||||||
|
conn, err = redis.DialTimeout(
|
||||||
|
conf.Network,
|
||||||
|
conf.Addr,
|
||||||
|
conf.ConnectTimeout.Duration,
|
||||||
|
conf.ReadTimeout.Duration,
|
||||||
|
conf.WriteTimeout.Duration,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
conn, err = redis.Dial(conf.Network, conf.Addr)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Conn{
|
||||||
|
conn,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Conn struct {
|
||||||
|
conn redis.Conn
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
storage.Register("redis", &driver{})
|
||||||
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ import (
|
||||||
var drivers = make(map[string]StorageDriver)
|
var drivers = make(map[string]StorageDriver)
|
||||||
|
|
||||||
type StorageDriver interface {
|
type StorageDriver interface {
|
||||||
New(*config.Storage) (Storage, error)
|
New(*config.Storage) (Conn, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Register(name string, driver StorageDriver) {
|
func Register(name string, driver StorageDriver) {
|
||||||
|
@ -28,7 +28,7 @@ func Register(name string, driver StorageDriver) {
|
||||||
drivers[name] = driver
|
drivers[name] = driver
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(conf *config.Storage) (Storage, error) {
|
func Open(conf *config.Storage) (Conn, error) {
|
||||||
driver, ok := drivers[conf.Driver]
|
driver, ok := drivers[conf.Driver]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf(
|
return nil, fmt.Errorf(
|
||||||
|
@ -43,7 +43,7 @@ func New(conf *config.Storage) (Storage, error) {
|
||||||
return store, nil
|
return store, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type Storage interface {
|
type Conn interface {
|
||||||
Close() error
|
Close() error
|
||||||
|
|
||||||
FindUser(passkey string) (*User, bool, error)
|
FindUser(passkey string) (*User, bool, error)
|
||||||
|
|
Loading…
Reference in a new issue