aggiunta la possibilita' di scrivere su un diverso mongodb

This commit is contained in:
Michele Fadda 2015-07-20 16:58:00 +02:00
parent f92aed4a8a
commit 09b534af31

View file

@ -14,24 +14,28 @@ import (
) )
const ( const (
_VERSION = "v0.1" _VERSION = "v0.5"
_tformat = "2006-01-02" _tformat = "2006-01-02"
) )
var ( var (
opts = Options{ opts = Options{
MongoUri: "mongodb://10.39.81.85:27018", // MongoSrc: "mongodb://10.39.81.85:27018",
LogFile: "log/llmongo.log", LogFile: "log/llmongo.log",
StartDate: time.Now().Add(-24 * time.Hour).Format(_tformat), StartDate: time.Now().Add(-24 * time.Hour).Format(_tformat),
Duration: (time.Hour * 23) + (time.Minute * 59) + (time.Second * 59),
} }
) )
type Options struct { type Options struct {
MongoUri string MongoSrc string
mdb *mgo.Session MongoDst string
mdbSrc *mgo.Session
mdbDst *mgo.Session
ll *mgo.Collection ll *mgo.Collection
lc *mgo.Collection lc *mgo.Collection
StartDate string StartDate string
Duration time.Duration
LogFile string LogFile string
Version bool Version bool
} }
@ -44,7 +48,7 @@ type LastLogin struct {
ID string `json: "_id"` ID string `json: "_id"`
} }
type LastloginDay struct { type LastLoginDay struct {
User string `json:"user"` User string `json:"user"`
Date time.Time `json:"date"` Date time.Time `json:"date"`
Protocols Protocols `json:"protocols"` Protocols Protocols `json:"protocols"`
@ -68,7 +72,7 @@ type Index struct {
} }
func usage() { func usage() {
fmt.Println("Usage: llmongo -m <mongo uri> -l <logfile> -d <date> -v\n") fmt.Println("Usage: llmongo -ms <mongo source uri> -md <mongo destination uri> -l <logfile> -d <date> -v\n")
os.Exit(0) os.Exit(0)
} }
@ -80,21 +84,39 @@ func init() {
opts.LogFile = path.Join(current, opts.LogFile) opts.LogFile = path.Join(current, opts.LogFile)
flag.StringVar(&opts.MongoUri, "m", opts.MongoUri, "Mongodb") flag.StringVar(&opts.MongoSrc, "ms", "", "Mongodb Source")
flag.StringVar(&opts.MongoDst, "md", "", "Mongodb Destination")
flag.StringVar(&opts.LogFile, "l", opts.LogFile, "Logs filename") flag.StringVar(&opts.LogFile, "l", opts.LogFile, "Logs filename")
flag.StringVar(&opts.StartDate, "d", opts.StartDate, "Date") flag.StringVar(&opts.StartDate, "d", opts.StartDate, "Date")
flag.DurationVar(&opts.Duration, "dd", opts.Duration, "Duration")
flag.BoolVar(&opts.Version, "v", false, "Version") flag.BoolVar(&opts.Version, "v", false, "Version")
} }
func connectMongo() { func connectMongo() {
if opts.MongoSrc == "" {
log.Fatalf("Mongodb URI invalid: '%s'\n", opts.MongoSrc)
}
var err error var err error
opts.mdb, err = mgo.Dial(opts.MongoUri) opts.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.ll = opts.mdb.DB("dovecot").C("lastlogin") opts.ll = opts.mdbSrc.DB("dovecot").C("lastlogin")
opts.lc = opts.mdb.DB("dovecot").C("lastlogin_day")
if opts.MongoDst == "" {
opts.mdbDst = opts.mdbSrc
opts.lc = opts.mdbSrc.DB("dovecot").C("lastlogin_day")
} else {
opts.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_day").C("lastlogin_day")
}
} }
func main() { func main() {
@ -121,7 +143,8 @@ func main() {
log.Printf("Start: %+v\n", opts) log.Printf("Start: %+v\n", opts)
connectMongo() connectMongo()
defer opts.mdb.Close() defer opts.mdbSrc.Close()
defer opts.mdbDst.Clone()
y, err := time.Parse(_tformat, opts.StartDate) y, err := time.Parse(_tformat, opts.StartDate)
if err != nil { if err != nil {
@ -132,7 +155,8 @@ func main() {
fmt.Println(y) fmt.Println(y)
ys := time.Date(y.Year(), y.Month(), y.Day(), 0, 0, 0, 0, time.UTC) ys := time.Date(y.Year(), y.Month(), y.Day(), 0, 0, 0, 0, time.UTC)
ye := time.Date(y.Year(), y.Month(), y.Day(), 23, 59, 59, 0, time.UTC) ye := ys.Add(opts.Duration)
// ye := time.Date(y.Year(), y.Month(), y.Day(), 23, 59, 59, 0, time.UTC)
fmt.Println(ys, ye) fmt.Println(ys, ye)
@ -142,7 +166,7 @@ func main() {
q.Distinct("user", &ar) q.Distinct("user", &ar)
for u := range ar { for u := range ar {
ll := LastloginDay{} ll := LastLoginDay{}
ll.User = ar[u] ll.User = ar[u]
ll.Date = ys ll.Date = ys
fmt.Println(ar[u]) fmt.Println(ar[u])
@ -151,7 +175,7 @@ func main() {
result := LastLogin{} result := LastLogin{}
ips := []IPs{} ips := []IPs{}
for iter.Next(&result) { for iter.Next(&result) {
fmt.Printf("Ip: %s - %s\n", result.IP, result.Date) // fmt.Printf("Ip: %s - %s\n", result.IP, result.Date)
ips = append(ips, IPs{IP: result.IP, Date: result.Date}) ips = append(ips, IPs{IP: result.IP, Date: result.Date})
switch result.Protocol { switch result.Protocol {
case "pop3", "pop": case "pop3", "pop":
@ -166,8 +190,9 @@ func main() {
fmt.Println("Iter: ", err) fmt.Println("Iter: ", err)
} }
ll.IPs = ips ll.IPs = ips
fmt.Printf("%+v\n", ll) // fmt.Printf("%+v\n", ll)
_, err := opts.lc.Upsert(Index{User: ll.User, Date: ll.Date}, ll) _, err := opts.lc.Upsert(Index{User: ll.User, Date: ll.Date}, ll)
// err := opts.lc.Insert(ll)
if err != nil { if err != nil {
fmt.Println("Insert error: ", err) fmt.Println("Insert error: ", err)
} }