// main.go package main import ( "flag" "fmt" "io/ioutil" "log" "net/http" "os" "path" "path/filepath" "time" "gopkg.in/mgo.v2" ) type Options struct { MongoUri string Influxdb string mdb *mgo.Session ll *mgo.Collection LogFile string DateStart string TimeStart time.Time DateStop time.Duration Out bool Version bool Debug bool } const ( _VERSION = "v1.1.0" _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{"cmgw-1", "cmgw-2", "cmgw-3", "cmgw-4"} _out = [...]string{"michael", "santino"} opts = Options{ MongoUri: "mongodb://127.0.0.1:27018", LogFile: "log/imp.log", DateStart: time.Now().UTC().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) } if opts.Out { opts.ll = opts.mdb.DB("antispam").C("output") } else { opts.ll = opts.mdb.DB("antispam").C("counters") } } func usage() { fmt.Println("Usage: imp_mongo -d -r -m -l -i -v -D\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", "", "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") flag.StringVar(&opts.Influxdb, "i", "", "Influxdb") flag.BoolVar(&opts.Out, "O", false, "Out") flag.BoolVar(&opts.Debug, "D", false, "Debug") flag.BoolVar(&opts.Version, "v", false, "Version") } 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() if opts.Version { fmt.Println(os.Args[0], _VERSION) os.Exit(0) } if opts.MongoUri == "" && opts.Influxdb == "" { usage() } 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) if opts.MongoUri != "" { 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) if opts.Out { for ind := range _out { uri := "http://" + _out[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) } } else { 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("Stop: %v\n", time.Since(start)) log.Printf("Stop: %v\n", time.Since(start)) }