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) } }