diff --git a/consumer.go b/consumer.go index 2b4afd7..2a7c30b 100644 --- a/consumer.go +++ b/consumer.go @@ -117,15 +117,15 @@ func consumer(id int) { log.Printf("%+v - %+v\n", ml) } - if i < (len(prod.logins) - 1) { - cons.logins = append(cons.logins, login) - // cancella da Redis la riga di login inserita - // retval, _ := conn.Do("lrem", user, "0", login) - // if opts.Debug { - // log.Println("LREM retval: ", retval, user, login) - // fmt.Println("LREM retval: ", retval, user, login) - // } - } + // if i < (len(prod.logins) - 1) { + cons.logins = append(cons.logins, login) + // cancella da Redis la riga di login inserita + // retval, _ := conn.Do("lrem", user, "0", login) + // if opts.Debug { + // log.Println("LREM retval: ", retval, user, login) + // fmt.Println("LREM retval: ", retval, user, login) + // } + // } } count.AddLog(len(prod.logins)) diff --git a/main.go b/main.go index 85dd13e..07dea79 100644 --- a/main.go +++ b/main.go @@ -11,7 +11,7 @@ import ( ) const ( - _VERSION = "v2.3.1" + _VERSION = "v2.4.0" ) var ( @@ -95,4 +95,8 @@ func main() { fmt.Printf("Stop %v - user: %d - login: %d - errors: %d - rem: %d - duplicate: %d\n\r", time.Since(start), count.GetUser(), count.GetLog(), count.GetErr(), count.GetRem(), count.GetDup()) log.Printf("Stop %v - user: %d - login: %d - errors: %d - rem: %d - duplicate: %d\n\r", time.Since(start), count.GetUser(), count.GetLog(), count.GetErr(), count.GetRem(), count.GetDup()) + + if opts.Xymon != "" { + sendStatus() + } } diff --git a/main_test.go b/main_test.go new file mode 100644 index 0000000..4bcb79e --- /dev/null +++ b/main_test.go @@ -0,0 +1,15 @@ +// Testmain.go +package main + +import ( + "flag" + "fmt" + "testing" +) + +func TestOptions(t *testing.T) { + flag.Usage = usage + flag.Parse() + + fmt.Printf("Config: %+v\n", opts) +} diff --git a/options.go b/options.go index 5ec5234..d8ed4f8 100644 --- a/options.go +++ b/options.go @@ -2,8 +2,10 @@ package main import ( + // "encoding/json" "flag" "fmt" + // "io/ioutil" "log" "os" "path" @@ -16,15 +18,18 @@ type Options struct { CurrentPath string Exe string LogFile string + ConfigFile string Timeout time.Duration Debug bool Version bool Concurrent int MaxError int + Xymon string + Hostname string } func usage() { - fmt.Println("Usage: llmongo -m -r -t -l -b -T -v\n") + fmt.Println("Usage: llmongo -m -r -t -l -b -T -x -H -v\n") os.Exit(0) } @@ -39,6 +44,8 @@ func init() { pid.PIDFile = path.Join(opts.CurrentPath, "run", path.Base(os.Args[0])+".pid") opts.Exe = path.Base(os.Args[0]) + flag.StringVar(&opts.Xymon, "x", "", "xymon server") + flag.StringVar(&opts.Hostname, "H", "", "hostname") flag.StringVar(&dbs.MongoUri, "m", dbs.MongoUri, "Mongodb") flag.StringVar(&dbs.RedisUri, "r", dbs.RedisUri, "Redis") flag.StringVar(&opts.LogFile, "l", opts.LogFile, "Logs filename") diff --git a/producer.go b/producer.go index 982889f..d25fe00 100644 --- a/producer.go +++ b/producer.go @@ -38,7 +38,7 @@ func producer(id int) { } // estrae tutti i login dell'utente "user" - logs, err := redis.Strings(conn.Do("lrange", user, "0", "-1")) + logs, err := redis.Strings(conn.Do("lrange", user, "1", "-1")) if err != nil { if opts.Debug { fmt.Printf("LRANGE: %+v - %+v\n", err, logs) diff --git a/xymon.go b/xymon.go new file mode 100644 index 0000000..d7b9a8d --- /dev/null +++ b/xymon.go @@ -0,0 +1,51 @@ +// xymon.go +package main + +import ( + "fmt" + "log" + "net" + "strings" +) + +func sendStatus() { + + var msg string + + host := strings.Replace(opts.Hostname, ".", ",", -1) + + if count.GetErr() > 0 { + msg = fmt.Sprintf("status %s.llmongo %s %s %d", host, "yellow", "errors", count.GetErr()) + } else { + msg = fmt.Sprintf("status %s.llmongo %s %s %d", host, "green", "logins", count.GetLog()) + } + + if opts.Debug { + fmt.Println("Sending: ", msg) + } + + xymonSend([]byte(msg)) +} + +func xymonSend(msg []byte) error { + cl, err := net.Dial("tcp", opts.Xymon) + defer cl.Close() + if err != nil { + fmt.Printf("xymon connect error: ", err) + log.Printf("xymon connect error: ", err) + return err + } + + // fmt.Printf("xymon: %s - localhost: %s\n", cl.RemoteAddr(), cl.LocalAddr()) + + _, err = cl.Write(msg) + if err != nil { + fmt.Printf("xymon write error: ", err) + log.Printf("xymon write error: ", err) + return err + } + + // fmt.Printf("written: %d\n", tot) + + return nil +}