aggiunta l'opzione DEBUG; log meno verboso.
This commit is contained in:
parent
28521afda2
commit
6d2901027e
1 changed files with 34 additions and 14 deletions
48
main.go
48
main.go
|
@ -18,11 +18,13 @@ type Options struct {
|
||||||
CurrentPath string
|
CurrentPath string
|
||||||
Exe string
|
Exe string
|
||||||
LogFile string
|
LogFile string
|
||||||
|
Timeout bool
|
||||||
|
Debug bool
|
||||||
Version bool
|
Version bool
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
_VERSION = "v1.1.4"
|
_VERSION = "v1.2.1"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -30,10 +32,13 @@ var (
|
||||||
RedisTTL: time.Hour * 11688, // 16 mesi
|
RedisTTL: time.Hour * 11688, // 16 mesi
|
||||||
LogFile: "log/llmongo.log",
|
LogFile: "log/llmongo.log",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loop = true
|
||||||
|
ttl = time.Second * 55
|
||||||
)
|
)
|
||||||
|
|
||||||
func usage() {
|
func usage() {
|
||||||
fmt.Println("Usage: llmongo -m <mongo uri> -r <redis uri> -t <ttl> -l <logfile> -v\n")
|
fmt.Println("Usage: llmongo -m <mongo uri> -r <redis uri> -t <ttl> -l <logfile> -T -D -v\n")
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +58,12 @@ func init() {
|
||||||
flag.StringVar(&opts.LogFile, "l", opts.LogFile, "Logs filename")
|
flag.StringVar(&opts.LogFile, "l", opts.LogFile, "Logs filename")
|
||||||
flag.DurationVar(&opts.RedisTTL, "t", opts.RedisTTL, "Redis TTL")
|
flag.DurationVar(&opts.RedisTTL, "t", opts.RedisTTL, "Redis TTL")
|
||||||
flag.BoolVar(&opts.Version, "v", false, "Version")
|
flag.BoolVar(&opts.Version, "v", false, "Version")
|
||||||
|
flag.BoolVar(&opts.Timeout, "T", false, "Timeout")
|
||||||
|
flag.BoolVar(&opts.Debug, "D", false, "Debug")
|
||||||
|
}
|
||||||
|
|
||||||
|
func stopLoop() {
|
||||||
|
loop = false
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -86,12 +97,19 @@ func main() {
|
||||||
dbs.connectMongo()
|
dbs.connectMongo()
|
||||||
defer dbs.mdb.Close()
|
defer dbs.mdb.Close()
|
||||||
|
|
||||||
|
if opts.Timeout {
|
||||||
|
time.AfterFunc(ttl, stopLoop)
|
||||||
|
}
|
||||||
|
|
||||||
count := 0
|
count := 0
|
||||||
for {
|
errCount := 0
|
||||||
|
for loop {
|
||||||
// estrae un userid dalla lista degli utenti che hanno fatto login
|
// estrae un userid dalla lista degli utenti che hanno fatto login
|
||||||
spop := dbs.rdb.Cmd("spop", "llindex")
|
spop := dbs.rdb.Cmd("spop", "llindex")
|
||||||
user, err := spop.Str()
|
user, err := spop.Str()
|
||||||
log.Printf("SPOP: %+v %+v\n", spop, user)
|
if opts.Debug {
|
||||||
|
log.Printf("SPOP: %+v %+v\n", spop, user)
|
||||||
|
}
|
||||||
// se non ci sono piu' userid esce
|
// se non ci sono piu' userid esce
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("LLINDEX empty: %v\n", err)
|
log.Printf("LLINDEX empty: %v\n", err)
|
||||||
|
@ -103,13 +121,17 @@ func main() {
|
||||||
// Estrae l'ultimo login dell'utente 'user'
|
// Estrae l'ultimo login dell'utente 'user'
|
||||||
val, err = dbs.rdb.Cmd("lindex", user, "-1").Str()
|
val, err = dbs.rdb.Cmd("lindex", user, "-1").Str()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("LINDEX error: %+v\n", err)
|
if opts.Debug {
|
||||||
|
log.Printf("LINDEX error: %+v\n", err)
|
||||||
|
}
|
||||||
// se ha trovato user e righe di login
|
// se ha trovato user e righe di login
|
||||||
if lastval != "" {
|
if lastval != "" {
|
||||||
// reinserisce l'ultimo login e imposta il ttl su Redis
|
// reinserisce l'ultimo login e imposta il ttl su Redis
|
||||||
retval := dbs.rdb.Cmd("lpush", user, lastval)
|
retval := dbs.rdb.Cmd("lpush", user, lastval)
|
||||||
ttl := dbs.rdb.Cmd("expire", user, opts.RedisTTL.Seconds())
|
ttl := dbs.rdb.Cmd("expire", user, opts.RedisTTL.Seconds())
|
||||||
log.Println("LPUSH retval: ", retval, ttl, user, lastval, opts.RedisTTL.Seconds())
|
if opts.Debug {
|
||||||
|
log.Println("LPUSH retval: ", retval, ttl, user, lastval, opts.RedisTTL.Seconds())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -140,11 +162,6 @@ func main() {
|
||||||
Ip: sval[2],
|
Ip: sval[2],
|
||||||
Date: time.Unix(date, 0),
|
Date: time.Unix(date, 0),
|
||||||
}
|
}
|
||||||
// ul := UserLogin{
|
|
||||||
// User: user,
|
|
||||||
// Date: time.Unix(date, 0),
|
|
||||||
// Lock: false,
|
|
||||||
// }
|
|
||||||
ind := Index{
|
ind := Index{
|
||||||
User: user,
|
User: user,
|
||||||
Date: time.Unix(date, 0),
|
Date: time.Unix(date, 0),
|
||||||
|
@ -156,6 +173,7 @@ func main() {
|
||||||
log.Printf("Insert error: %+v\n", err)
|
log.Printf("Insert error: %+v\n", err)
|
||||||
// se l'errore non e' "duplicate key error" salta al prossimo senza cancellare niente
|
// se l'errore non e' "duplicate key error" salta al prossimo senza cancellare niente
|
||||||
if !strings.Contains(err.Error(), "E11000") {
|
if !strings.Contains(err.Error(), "E11000") {
|
||||||
|
errCount += 1
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -163,11 +181,13 @@ func main() {
|
||||||
// _ err := dbs.us.Upsert(ind, ul)
|
// _ err := dbs.us.Upsert(ind, ul)
|
||||||
// cancella da Redis la riga di login inserita
|
// cancella da Redis la riga di login inserita
|
||||||
retval := dbs.rdb.Cmd("lrem", user, "-1", val)
|
retval := dbs.rdb.Cmd("lrem", user, "-1", val)
|
||||||
log.Println("LREM retval: ", retval, user, val)
|
if opts.Debug {
|
||||||
|
log.Println("LREM retval: ", retval, user, val)
|
||||||
|
}
|
||||||
lastval = val
|
lastval = val
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("Stop %v - %d\n", time.Since(start), count)
|
fmt.Printf("Stop %v - login: %d - errors: %d\n\r", time.Since(start), count, errCount)
|
||||||
log.Printf("Stop %v - %d\n", time.Since(start), count)
|
log.Printf("Stop %v - login: %d - errors: %d\n\r", time.Since(start), count, errCount)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue