// lastlogin_consolidate package main import ( "flag" "fmt" "log" "os" "sync" "time" "github.com/mikif70/pidlib" ) const ( _VERSION = "v1.3.7" _tformat = "2006-01-02" _24h = (time.Hour * 23) + (time.Minute * 59) + (time.Second * 59) + (time.Millisecond * 999) _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, Batch: 10000, DstDB: "dovecot", } wg sync.WaitGroup dbs = Dbs{} idb *InfluxdbOutput ) func main() { flag.Usage = usage flag.Parse() if opts.Version { fmt.Println(os.Args[0], _VERSION) os.Exit(0) } if opts.Hostname == "" { var err error opts.Hostname, err = os.Hostname() if err != nil { fmt.Println("Hostname error: ", err.Error()) } } setTerm() 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) pid := pidlib.New() pid.Write() defer pid.Remove() start := time.Now() fmt.Printf("Start: %+v\n", opts) log.Printf("Start: %+v\n", opts) connectMongo() defer dbs.mdbSrc.Close() defer dbs.mdbDst.Close() y, err := time.Parse(_tformat, opts.StartDate) if err != nil { log.Println("Date Error: ", err) os.Exit(-1) } var ys time.Time var ye time.Time ys = time.Date(y.Year(), y.Month(), y.Day(), 0, 0, 0, 0, time.UTC) ye = ys.Add(opts.Duration) idb = Influxdb(start, ys) // DEBUG if opts.Debug { fmt.Printf("Start: %+v, Stop: %+v\n\r", ys, ye) } pStart := time.Now() agg := Consolidate(ys, ye) agg.Start() fmt.Printf("Stop %s: %s\n", ys, time.Since(pStart)) log.Printf("Stop %s: %s\n", ys, time.Since(pStart)) idb.Stop = time.Since(start) idb.InsUsers = agg.Verify() fmt.Printf("Stop: OK: %d - TOT: %d - Time: %s\n\r", idb.InsUsers, idb.TotUsers, idb.Stop) log.Printf("Stop: OK: %d - TOT: %d - Time: %s\n\r", idb.InsUsers, idb.TotUsers, idb.Stop) if opts.Influxdb != "" { idb.writeStats() } }