// main.go package main import ( "flag" "fmt" "gopkg.in/mgo.v2" "io/ioutil" "log" "net/http" "os" "path" "path/filepath" "time" ) type Options struct { MongoUri string mdb *mgo.Session ll *mgo.Collection LogFile string DateStart string TimeStart time.Time DateStop time.Duration } const ( _dashboard = "/dashboard?suser=admin&spass=FreakKitchen&type=counters&view=hour&date=" _domain = ".mail.tiscali.sys" _port = "8082" _tformat = "2006-01-02:15" ) var ( _imp = [...]string{"imp-1", "imp-2", "imp-3", "imp-6"} opts = Options{ MongoUri: "mongodb://127.0.0.1:27018", LogFile: "log/imp.log", DateStart: time.Now().Add(-time.Hour).Format(_tformat), DateStop: time.Hour, } mimp = MongoImp{} ) func connectMongo() { var err error opts.mdb, err = mgo.Dial(opts.MongoUri) if err != nil { log.Println("Mongodb connect Error: ", err.Error()) os.Exit(-3) } opts.ll = opts.mdb.DB("antispam").C("counters") } func usage() { fmt.Println("Usage: imp_mongo -d -r -m -l \n") os.Exit(0) } func init() { current, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { log.Fatal(err) } opts.LogFile = path.Join(current, opts.LogFile) flag.StringVar(&opts.MongoUri, "m", opts.MongoUri, "Mongodb") flag.StringVar(&opts.LogFile, "l", opts.LogFile, "Logs filename") flag.StringVar(&opts.DateStart, "d", opts.DateStart, "From Date ") flag.DurationVar(&opts.DateStop, "r", opts.DateStop, "Duration h") } func parseDate(date string) string { if date != "" { t, err := time.Parse(_tformat, date) if err != nil { log.Fatalln("Time error: ", err) } retval := t.Format("2006010215") + "00" // fmt.Println("Time retval: ", retval) return retval } else { return "" } } func main() { flag.Usage = usage flag.Parse() 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) opts.TimeStart, err = time.Parse(_tformat, opts.DateStart) if err != nil { log.Fatal("Date Error: ", err) } start := time.Now() fmt.Printf("Start: %+v\n", opts) log.Printf("Start: %+v\n", opts) connectMongo() defer opts.mdb.Close() for h := 0; h < int(opts.DateStop.Hours()); h++ { stime := opts.TimeStart.Add(time.Hour * time.Duration(h)) // fmt.Println("Time: ", stime) for ind := range _imp { uri := "http://" + _imp[ind] + _domain + ":" + _port + _dashboard + stime.Format("2006010215") + "00" // fmt.Println(uri) resp, err := http.Get(uri) if err != nil { log.Fatal(err) } body, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { log.Fatal(err) } parse(string(body), stime) } } // fmt.Printf("%+v\n", mimp) fmt.Printf("Stop: %v\n", time.Since(start)) log.Printf("Stop: %v\n", time.Since(start)) }