imp_mongodb/main.go

141 lines
2.9 KiB
Go
Raw Normal View History

2015-07-16 11:29:28 +02:00
// 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() {
2015-07-16 12:59:17 +02:00
fmt.Println("Usage: imp_mongo -d <date (yyyy-mm-dd:hh)> -r <date range (HHh)> -m <mongodb uri> -l <logfile>\n")
2015-07-16 11:29:28 +02:00
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 <YYYY-MM-DD:HH>")
flag.DurationVar(&opts.DateStop, "r", opts.DateStop, "Duration <HH>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))
}