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() 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 { if opts.Debug {
fmt.Printf("Aggregate user: %s\n\r", time.Since(qStart)) 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() 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) ) //fmt.Printf("User: %s -> %s\n\r", ar[u], time.Since(qStart) )
iter := nq.Iter() iter := nq.Iter()
result := LastLogin{} result := LastLogin{}
@ -64,7 +64,7 @@ func aggregate(ys time.Time, ye time.Time) {
} }
ll.IPs = ips ll.IPs = ips
//fmt.Printf("Upsert %+v\n\r", ll) //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 { if err != nil {
log.Println("Insert error: ", err) log.Println("Insert error: ", err)
} }

21
dbs.go
View file

@ -8,6 +8,13 @@ import (
"time" "time"
) )
type Dbs struct {
mdbSrc *mgo.Session
mdbDst *mgo.Session
ll *mgo.Collection
lc *mgo.Collection
}
type LastLogin struct { type LastLogin struct {
User string `json: "user"` User string `json: "user"`
Protocol string `json: "protocol"` Protocol string `json: "protocol"`
@ -51,24 +58,24 @@ func connectMongo() {
} }
var err error var err error
//opts.mdbSrc, err = mgo.DialWithTimeout(opts.MongoSrc, time.Minute*5) //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 { if err != nil {
log.Println("Mongodb connect Error: ", err.Error()) log.Println("Mongodb connect Error: ", err.Error())
os.Exit(-3) os.Exit(-3)
} }
opts.mdbSrc.SetSocketTimeout(0) dbs.mdbSrc.SetSocketTimeout(0)
opts.ll = opts.mdbSrc.DB("dovecot").C("lastlogin") dbs.ll = dbs.mdbSrc.DB("dovecot").C("lastlogin")
if opts.MongoDst == "" { if opts.MongoDst == "" {
opts.mdbDst = opts.mdbSrc dbs.mdbDst = dbs.mdbSrc
opts.lc = opts.mdbSrc.DB("dovecot").C("lastlogin_day") dbs.lc = dbs.mdbSrc.DB("dovecot").C("lastlogin_day")
} else { } else {
opts.mdbDst, err = mgo.Dial(opts.MongoDst) dbs.mdbDst, err = mgo.Dial(opts.MongoDst)
if err != nil { if err != nil {
log.Println("Mongodb connect Error: ", err.Error()) log.Println("Mongodb connect Error: ", err.Error())
os.Exit(-3) 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 ( const (
_VERSION = "v1.1.0" _VERSION = "v1.1.1"
_tformat = "2006-01-02" _tformat = "2006-01-02"
_24h = (time.Hour * 23) + (time.Minute * 59) + (time.Second * 59) _24h = (time.Hour * 23) + (time.Minute * 59) + (time.Second * 59)
_10m = (time.Minute * 10) _10m = (time.Minute * 10)
@ -27,6 +27,9 @@ var (
Duration: _24h, Duration: _24h,
Interval: _15m, Interval: _15m,
} }
dbs = Dbs{}
countTOT = 0 countTOT = 0
countOK = 0 countOK = 0
) )
@ -54,8 +57,8 @@ func main() {
log.Printf("Start: %+v\n", opts) log.Printf("Start: %+v\n", opts)
connectMongo() connectMongo()
defer opts.mdbSrc.Close() defer dbs.mdbSrc.Close()
defer opts.mdbDst.Clone() defer dbs.mdbDst.Clone()
y, err := time.Parse(_tformat, opts.StartDate) y, err := time.Parse(_tformat, opts.StartDate)
if err != nil { if err != nil {

View file

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