141 lines
2.9 KiB
Go
141 lines
2.9 KiB
Go
|
// 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 <date> -r <date range> -m <mongodb uri> -l <logfile>\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 <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))
|
||
|
}
|