creata una struttura DBS per contenere i puntatori delle connessioni al DB

This commit is contained in:
Miki 2015-11-26 09:19:16 +01:00
parent 0de9b415b8
commit 494696c336
4 changed files with 24 additions and 18 deletions

View file

@ -12,7 +12,7 @@ func aggregate(ys time.Time, ye time.Time) {
qStart := time.Now()
p := opts.ll.Pipe([]bson.M{{"$match": bson.M{"date": bson.M{"$gte": ys, "$lte": ye}}}, {"$group": bson.M{"_id": "$user"}}, {"$project": bson.M{"user": "$_id"}}})
p := dbs.ll.Pipe([]bson.M{{"$match": bson.M{"date": bson.M{"$gte": ys, "$lte": ye}}}, {"$group": bson.M{"_id": "$user"}}, {"$project": bson.M{"user": "$_id"}}})
if opts.Debug {
fmt.Printf("Aggregate user: %s\n\r", time.Since(qStart))
@ -36,7 +36,7 @@ func aggregate(ys time.Time, ye time.Time) {
}
qStart = time.Now()
nq := opts.ll.Find(bson.M{"date": bson.M{"$gte": ys, "$lte": ye}, "user": ar.User}).Sort("date")
nq := dbs.ll.Find(bson.M{"date": bson.M{"$gte": ys, "$lte": ye}, "user": ar.User}).Sort("date")
//fmt.Printf("User: %s -> %s\n\r", ar[u], time.Since(qStart) )
iter := nq.Iter()
result := LastLogin{}
@ -64,7 +64,7 @@ func aggregate(ys time.Time, ye time.Time) {
}
ll.IPs = ips
//fmt.Printf("Upsert %+v\n\r", ll)
_, err := opts.lc.Upsert(Index{User: ll.User, Date: ll.Date}, ll)
_, err := dbs.lc.Upsert(Index{User: ll.User, Date: ll.Date}, ll)
if err != nil {
log.Println("Insert error: ", err)
}

21
dbs.go
View file

@ -8,6 +8,13 @@ import (
"time"
)
type Dbs struct {
mdbSrc *mgo.Session
mdbDst *mgo.Session
ll *mgo.Collection
lc *mgo.Collection
}
type LastLogin struct {
User string `json: "user"`
Protocol string `json: "protocol"`
@ -51,24 +58,24 @@ func connectMongo() {
}
var err error
//opts.mdbSrc, err = mgo.DialWithTimeout(opts.MongoSrc, time.Minute*5)
opts.mdbSrc, err = mgo.Dial(opts.MongoSrc)
dbs.mdbSrc, err = mgo.Dial(opts.MongoSrc)
if err != nil {
log.Println("Mongodb connect Error: ", err.Error())
os.Exit(-3)
}
opts.mdbSrc.SetSocketTimeout(0)
opts.ll = opts.mdbSrc.DB("dovecot").C("lastlogin")
dbs.mdbSrc.SetSocketTimeout(0)
dbs.ll = dbs.mdbSrc.DB("dovecot").C("lastlogin")
if opts.MongoDst == "" {
opts.mdbDst = opts.mdbSrc
opts.lc = opts.mdbSrc.DB("dovecot").C("lastlogin_day")
dbs.mdbDst = dbs.mdbSrc
dbs.lc = dbs.mdbSrc.DB("dovecot").C("lastlogin_day")
} else {
opts.mdbDst, err = mgo.Dial(opts.MongoDst)
dbs.mdbDst, err = mgo.Dial(opts.MongoDst)
if err != nil {
log.Println("Mongodb connect Error: ", err.Error())
os.Exit(-3)
}
opts.lc = opts.mdbDst.DB("dovecot").C("lastlogin_day")
dbs.lc = dbs.mdbDst.DB("dovecot").C("lastlogin_day")
}
}

View file

@ -12,7 +12,7 @@ import (
)
const (
_VERSION = "v1.1.0"
_VERSION = "v1.1.1"
_tformat = "2006-01-02"
_24h = (time.Hour * 23) + (time.Minute * 59) + (time.Second * 59)
_10m = (time.Minute * 10)
@ -27,6 +27,9 @@ var (
Duration: _24h,
Interval: _15m,
}
dbs = Dbs{}
countTOT = 0
countOK = 0
)
@ -54,8 +57,8 @@ func main() {
log.Printf("Start: %+v\n", opts)
connectMongo()
defer opts.mdbSrc.Close()
defer opts.mdbDst.Clone()
defer dbs.mdbSrc.Close()
defer dbs.mdbDst.Clone()
y, err := time.Parse(_tformat, opts.StartDate)
if err != nil {

View file

@ -4,7 +4,7 @@ package main
import (
"flag"
"fmt"
"gopkg.in/mgo.v2"
// "gopkg.in/mgo.v2"
"log"
"os"
"path"
@ -15,10 +15,6 @@ import (
type Options struct {
MongoSrc string
MongoDst string
mdbSrc *mgo.Session
mdbDst *mgo.Session
ll *mgo.Collection
lc *mgo.Collection
StartDate string
Duration time.Duration
Interval time.Duration