a/b testing framework written in go
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

68 lines
1.7 KiB

package main
import (
"flag"
"github.com/Sirupsen/logrus"
"github.com/brettlangdon/golab/server"
"github.com/garyburd/redigo/redis"
"net"
"strings"
"time"
)
func newPool(host string, idle int) *redis.Pool {
return &redis.Pool{
MaxIdle: idle,
IdleTimeout: 240 * time.Second,
Dial: func() (redis.Conn, error) {
server.Log.Debugln("Worker Connecting to Redis Host", host)
c, err := redis.Dial("tcp", host)
if err != nil {
return nil, err
}
return c, err
},
TestOnBorrow: func(c redis.Conn, t time.Time) error {
server.Log.Debugln("Worker PINGing Redis Host", host)
_, err := c.Do("PING")
return err
},
}
}
func main() {
var bind = flag.String("bind", ":11222", "Which [host]:port to bind to [default: ':11222']")
var level = flag.String("log", "INFO", "Set the log level [default: 'INFO']")
var rhost = flag.String("redis", ":6379", "Which redis [host]:port to connect to [default: ':6379']")
var rpool = flag.Int("pool", 3, "How many redis connections to have in the pool [default: 3]")
flag.Parse()
switch strings.ToLower(*level) {
case "debug":
server.Log.Level = logrus.DebugLevel
case "info":
server.Log.Level = logrus.InfoLevel
case "warn":
server.Log.Level = logrus.WarnLevel
case "error":
server.Log.Level = logrus.ErrorLevel
}
server.Log.Infoln("Starting Golab Server")
ln, err := net.Listen("tcp", *bind)
if err != nil {
return
}
server.Log.Debugln("Connecting to Redis Pool", *rhost, "with", *rpool, "Connections")
var pool *redis.Pool = newPool(*rhost, *rpool)
server.Log.Infoln("Accepting Connections on", *bind)
for {
conn, err := ln.Accept()
if err != nil {
continue
}
go server.HandleConnection(conn, pool)
}
}