// dbs package main import ( "github.com/garyburd/redigo/redis" // "github.com/fzzy/radix/redis" "fmt" "log" "os" "strings" "time" // rt "gopkg.in/dancannon/gorethink.v2" "gopkg.in/mgo.v2" ) var ( dbs = Dbs{ RedisURI: "127.0.0.1:6379", Database: "lastlogin", } ) // Dbs structure type Dbs struct { MongoURI string Database string RedisURI string RethinkURI string rdb *redis.Pool //*redis.Client rtdb *Rethink mdb *mgo.Session ll *mgo.Collection // us *mgo.Collection } // MongoLogin structure type MongoLogin struct { ID string `json:"_id" bson:"_id" gorethink:"id"` User string `json:"user" bson:"user" gorethink:"user"` Protocol string `json:"protocol" bson:"protocol" gorethink:"protocol"` IP string `json:"ip" bson:"ip" gorethink:"ip"` Date time.Time `json:"date" bson:"date" gorethink:"date"` Insert time.Time `json:"insert" bson:"insert" gorethink:"insert"` } // Ips structure type Ips struct { IP string `json:"ip"` } // UserLogin structure type UserLogin struct { User string `json:"user"` Date time.Time `json:"date"` Lock bool `json:"lock"` } // Index structure type Index struct { User string `json:"user"` Date time.Time `json:"date"` } func (db *Dbs) isRethink() bool { if db.RethinkURI != "" { return true } return false } func (db *Dbs) isMongodb() bool { if db.MongoURI != "" { return true } return false } func (db *Dbs) poolRethink() { var err error if opts.Debug { fmt.Printf("DBS: %+v\n", db) } if db.RethinkURI != "" { uri := strings.Split(dbs.RethinkURI, ",") if opts.Debug { fmt.Printf("RT_URI: %s\n", uri) } db.rtdb, err = NewRethinkDB(uri) if err != nil { fmt.Println("RethinkDB connect Error: ", err.Error()) os.Exit(-4) } } if opts.Debug { fmt.Printf("DBS: %+v\n", db) } } func (db *Dbs) poolRedis() { dbs.rdb = &redis.Pool{ MaxIdle: 128, MaxActive: 1000, Wait: true, IdleTimeout: 1 * time.Second, Dial: func() (redis.Conn, error) { c, err := redis.Dial("tcp", db.RedisURI) if err != nil { return nil, err } return c, err }, TestOnBorrow: func(c redis.Conn, t time.Time) error { _, err := c.Do("PING") return err }, } } func (db *Dbs) connectMongo() { var err error db.mdb, err = mgo.Dial(db.MongoURI) if err != nil { log.Println("Mongodb connect Error: ", err.Error()) os.Exit(-3) } db.ll = db.mdb.DB(db.Database).C(fmt.Sprintf("lastlogin_%s", opts.Month)) }