// lastlogin_consolidate package main import ( "flag" "fmt" // "gopkg.in/mgo.v2" // "gopkg.in/mgo.v2/bson" "log" "os" "time" ) const ( _VERSION = "v1.1.0" _tformat = "2006-01-02" _24h = (time.Hour * 23) + (time.Minute * 59) + (time.Second * 59) _10m = (time.Minute * 10) _15m = (time.Minute * 15) ) var ( opts = Options{ MongoSrc: "mongodb://127.0.0.1:27018", LogFile: "log/llconsolidate.log", StartDate: time.Now().Add(-24 * time.Hour).Format(_tformat), Duration: _24h, Interval: _15m, } countTOT = 0 countOK = 0 ) func main() { flag.Usage = usage flag.Parse() if opts.Version { fmt.Println(os.Args[0], _VERSION) os.Exit(0) } fs, err := os.OpenFile(opts.LogFile, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666) if err != nil { fmt.Println("Log file error: ", err.Error()) os.Exit(-4) } log.SetOutput(fs) start := time.Now() fmt.Printf("Start: %+v\n", opts) log.Printf("Start: %+v\n", opts) connectMongo() defer opts.mdbSrc.Close() defer opts.mdbDst.Clone() y, err := time.Parse(_tformat, opts.StartDate) if err != nil { log.Println("Date Error: ", err) os.Exit(-1) } // DEBUG //fmt.Printf("Start %+v\n\r", y) var ys []time.Time var ye []time.Time if opts.Duration <= (time.Hour * 24) { ys = append(ys, time.Date(y.Year(), y.Month(), y.Day(), 0, 0, 0, 0, time.UTC)) ye = append(ye, ys[0].Add(opts.Duration)) } else { for i := 0; i < int(opts.Duration/(time.Hour*24)); i++ { // fmt.Println(i) yt := y.Add(time.Hour * time.Duration(24*i)) // fmt.Println(yt) ys = append(ys, time.Date(yt.Year(), yt.Month(), yt.Day(), 0, 0, 0, 0, time.UTC)) ye = append(ye, ys[i].Add(_24h)) } } // DEBUG if opts.Debug { fmt.Printf("Start: %+v, Stop: %+v\n\r", ys, ye) } for i := range ys { pStart := time.Now() aggregate(ys[i], ye[i]) fmt.Printf("Stop %s: %s\n", ys[i], time.Since(pStart)) log.Printf("Stop %s: %s\n", ys[i], time.Since(pStart)) } fmt.Printf("Stop: OK: %d - TOT: %d - Time: %s\n\r", countOK, countTOT, time.Since(start)) log.Printf("Stop: OK: %d - TOT: %d - Time: %s\n\r", countOK, countTOT, time.Since(start)) }