// dbs package main import ( "log" "os" "time" "gopkg.in/mgo.v2" ) type Dbs struct { mdbSrc *mgo.Session mdbDst *mgo.Session ll *mgo.Collection lc *mgo.Collection bulk *mgo.Bulk } type LastLogin struct { User string `json: "user" bson:"user"` Protocol string `json: "protocol" bson:"protocol"` IP string `json: "ip" bson:"ip"` Date time.Time `json: "date" bson:"date"` ID string `json: "_id" bson:"_id"` } type LastLoginDay struct { User string `json:"user" bson:"user"` Date time.Time `json:"date" bson:"date"` Protocols Protocols `json:"protocols" bson:"protocols"` IPs []IPs `json:"ips" bson:"ips"` } type IPs struct { IP string `json:"ip" bson:"ip"` Date time.Time `json:"date" bson:"date"` Protocol string `json:"protocol" bson:"protocol"` } type Protocols struct { Pop int `json:"pop" bson:"pop"` Imap int `json:"imap" bson:"imap"` Web int `json:"web" bson:"web"` } type Index struct { User string `json:"user" bson:"user"` Date time.Time `json:"date" bson:"date"` } type Users struct { User string `json:"_id" bson:"_id"` Logins []IPs `json:"logins" bson:"logins"` } func connectMongo() { if opts.MongoSrc == "" { log.Fatalf("Mongodb URI invalid: '%s'\n", opts.MongoSrc) } var err error //opts.mdbSrc, err = mgo.DialWithTimeout(opts.MongoSrc, time.Minute*5) dbs.mdbSrc, err = mgo.Dial(opts.MongoSrc) if err != nil { log.Println("Mongodb connect Error: ", err.Error()) os.Exit(-3) } dbs.mdbSrc.SetSocketTimeout(0) dbs.ll = dbs.mdbSrc.DB("dovecot").C("lastlogin") if opts.MongoDst == "" { dbs.mdbDst = dbs.mdbSrc dbs.lc = dbs.mdbSrc.DB("dovecot").C("lastlogin_day") } else { dbs.mdbDst, err = mgo.Dial(opts.MongoDst) if err != nil { log.Println("Mongodb connect Error: ", err.Error()) os.Exit(-3) } dbs.lc = dbs.mdbDst.DB("dovecot").C("lastlogin_day") } }