producer:
	rimuove tutti i record tranne il primo ( il piu' recente )
	lrange(1, -1)
main:
options:
xymon:
	manda stato a xymon
This commit is contained in:
Miki 2015-12-18 17:16:51 +01:00
parent 4c160678b3
commit a0753ca9ea
6 changed files with 89 additions and 12 deletions

View file

@ -117,7 +117,7 @@ func consumer(id int) {
log.Printf("%+v - %+v\n", ml) log.Printf("%+v - %+v\n", ml)
} }
if i < (len(prod.logins) - 1) { // if i < (len(prod.logins) - 1) {
cons.logins = append(cons.logins, login) cons.logins = append(cons.logins, login)
// cancella da Redis la riga di login inserita // cancella da Redis la riga di login inserita
// retval, _ := conn.Do("lrem", user, "0", login) // retval, _ := conn.Do("lrem", user, "0", login)
@ -125,7 +125,7 @@ func consumer(id int) {
// log.Println("LREM retval: ", retval, user, login) // log.Println("LREM retval: ", retval, user, login)
// fmt.Println("LREM retval: ", retval, user, login) // fmt.Println("LREM retval: ", retval, user, login)
// } // }
} // }
} }
count.AddLog(len(prod.logins)) count.AddLog(len(prod.logins))

View file

@ -11,7 +11,7 @@ import (
) )
const ( const (
_VERSION = "v2.3.1" _VERSION = "v2.4.0"
) )
var ( 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()) 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()) 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()
}
} }

15
main_test.go Normal file
View file

@ -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)
}

View file

@ -2,8 +2,10 @@
package main package main
import ( import (
// "encoding/json"
"flag" "flag"
"fmt" "fmt"
// "io/ioutil"
"log" "log"
"os" "os"
"path" "path"
@ -16,15 +18,18 @@ type Options struct {
CurrentPath string CurrentPath string
Exe string Exe string
LogFile string LogFile string
ConfigFile string
Timeout time.Duration Timeout time.Duration
Debug bool Debug bool
Version bool Version bool
Concurrent int Concurrent int
MaxError int MaxError int
Xymon string
Hostname string
} }
func usage() { func usage() {
fmt.Println("Usage: llmongo -m <mongo uri> -r <redis uri> -t <redis keys ttl> -l <logfile> -b <concurrent thread> -T <running ttl> -v\n") fmt.Println("Usage: llmongo -m <mongo uri> -r <redis uri> -t <redis keys ttl> -l <logfile> -b <concurrent thread> -T <running ttl> -x <xymon server> -H <hostname> -v\n")
os.Exit(0) os.Exit(0)
} }
@ -39,6 +44,8 @@ func init() {
pid.PIDFile = path.Join(opts.CurrentPath, "run", path.Base(os.Args[0])+".pid") pid.PIDFile = path.Join(opts.CurrentPath, "run", path.Base(os.Args[0])+".pid")
opts.Exe = path.Base(os.Args[0]) 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.MongoUri, "m", dbs.MongoUri, "Mongodb")
flag.StringVar(&dbs.RedisUri, "r", dbs.RedisUri, "Redis") flag.StringVar(&dbs.RedisUri, "r", dbs.RedisUri, "Redis")
flag.StringVar(&opts.LogFile, "l", opts.LogFile, "Logs filename") flag.StringVar(&opts.LogFile, "l", opts.LogFile, "Logs filename")

View file

@ -38,7 +38,7 @@ func producer(id int) {
} }
// estrae tutti i login dell'utente "user" // 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 err != nil {
if opts.Debug { if opts.Debug {
fmt.Printf("LRANGE: %+v - %+v\n", err, logs) fmt.Printf("LRANGE: %+v - %+v\n", err, logs)

51
xymon.go Normal file
View file

@ -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
}