aggiunta la possibilita' di scrivere su un diverso mongodb
This commit is contained in:
parent
f92aed4a8a
commit
09b534af31
1 changed files with 40 additions and 15 deletions
|
@ -14,24 +14,28 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
_VERSION = "v0.1"
|
||||
_VERSION = "v0.5"
|
||||
_tformat = "2006-01-02"
|
||||
)
|
||||
|
||||
var (
|
||||
opts = Options{
|
||||
MongoUri: "mongodb://10.39.81.85:27018",
|
||||
// MongoSrc: "mongodb://10.39.81.85:27018",
|
||||
LogFile: "log/llmongo.log",
|
||||
StartDate: time.Now().Add(-24 * time.Hour).Format(_tformat),
|
||||
Duration: (time.Hour * 23) + (time.Minute * 59) + (time.Second * 59),
|
||||
}
|
||||
)
|
||||
|
||||
type Options struct {
|
||||
MongoUri string
|
||||
mdb *mgo.Session
|
||||
MongoSrc string
|
||||
MongoDst string
|
||||
mdbSrc *mgo.Session
|
||||
mdbDst *mgo.Session
|
||||
ll *mgo.Collection
|
||||
lc *mgo.Collection
|
||||
StartDate string
|
||||
Duration time.Duration
|
||||
LogFile string
|
||||
Version bool
|
||||
}
|
||||
|
@ -44,7 +48,7 @@ type LastLogin struct {
|
|||
ID string `json: "_id"`
|
||||
}
|
||||
|
||||
type LastloginDay struct {
|
||||
type LastLoginDay struct {
|
||||
User string `json:"user"`
|
||||
Date time.Time `json:"date"`
|
||||
Protocols Protocols `json:"protocols"`
|
||||
|
@ -68,7 +72,7 @@ type Index struct {
|
|||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
|
@ -80,21 +84,39 @@ func init() {
|
|||
|
||||
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.StartDate, "d", opts.StartDate, "Date")
|
||||
flag.DurationVar(&opts.Duration, "dd", opts.Duration, "Duration")
|
||||
flag.BoolVar(&opts.Version, "v", false, "Version")
|
||||
}
|
||||
|
||||
func connectMongo() {
|
||||
|
||||
if opts.MongoSrc == "" {
|
||||
log.Fatalf("Mongodb URI invalid: '%s'\n", opts.MongoSrc)
|
||||
}
|
||||
var err error
|
||||
opts.mdb, err = mgo.Dial(opts.MongoUri)
|
||||
opts.mdbSrc, err = mgo.Dial(opts.MongoSrc)
|
||||
if err != nil {
|
||||
log.Println("Mongodb connect Error: ", err.Error())
|
||||
os.Exit(-3)
|
||||
}
|
||||
opts.ll = opts.mdb.DB("dovecot").C("lastlogin")
|
||||
opts.lc = opts.mdb.DB("dovecot").C("lastlogin_day")
|
||||
opts.ll = opts.mdbSrc.DB("dovecot").C("lastlogin")
|
||||
|
||||
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() {
|
||||
|
@ -121,7 +143,8 @@ func main() {
|
|||
log.Printf("Start: %+v\n", opts)
|
||||
|
||||
connectMongo()
|
||||
defer opts.mdb.Close()
|
||||
defer opts.mdbSrc.Close()
|
||||
defer opts.mdbDst.Clone()
|
||||
|
||||
y, err := time.Parse(_tformat, opts.StartDate)
|
||||
if err != nil {
|
||||
|
@ -132,7 +155,8 @@ func main() {
|
|||
fmt.Println(y)
|
||||
|
||||
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)
|
||||
|
||||
|
@ -142,7 +166,7 @@ func main() {
|
|||
q.Distinct("user", &ar)
|
||||
|
||||
for u := range ar {
|
||||
ll := LastloginDay{}
|
||||
ll := LastLoginDay{}
|
||||
ll.User = ar[u]
|
||||
ll.Date = ys
|
||||
fmt.Println(ar[u])
|
||||
|
@ -151,7 +175,7 @@ func main() {
|
|||
result := LastLogin{}
|
||||
ips := []IPs{}
|
||||
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})
|
||||
switch result.Protocol {
|
||||
case "pop3", "pop":
|
||||
|
@ -166,8 +190,9 @@ func main() {
|
|||
fmt.Println("Iter: ", err)
|
||||
}
|
||||
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.Insert(ll)
|
||||
if err != nil {
|
||||
fmt.Println("Insert error: ", err)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue