llmongodb/producer.go
Miki e258d8951c sistemato il timer di uscita.
prima di uscire attende che tutti i processi running abbiano finito.
2015-11-20 16:17:31 +01:00

60 lines
1.3 KiB
Go

// iterator
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
"log"
"time"
)
type produced struct {
user string
logins []string
}
func producer(consume chan produced, done chan bool) {
conn := dbs.rdb.Get()
defer conn.Close()
for loop {
start := time.Now()
// estrae un userid dalla lista degli utenti che hanno fatto login
user, err := redis.String(conn.Do("spop", "llindex"))
if opts.Debug {
log.Printf("SPOP: %+v - %+v\n\r", user, err)
fmt.Printf("SPOP: %+v - %+v\n\r", user, err)
}
// se non ci sono piu' userid esce
if err != nil {
if opts.Debug {
log.Printf("LLINDEX empty: %v\n\r", err)
fmt.Printf("LLINDEX empty: %v\n\r", err)
}
loop = false
done <- true
break
}
// estrae tutti i login dell'utente "user"
logs, err := redis.Strings(conn.Do("lrange", user, "0", "-1"))
if err != nil {
fmt.Printf("LRANGE: %+v - %+v\n\r", err, logs)
log.Printf("LRANGE: %+v - %+v\n\r", err, logs)
}
if opts.Debug {
fmt.Printf("LRANGE: %s - %d\n\r", user, len(logs))
log.Printf("LRANGE: %s - %d\n\r", user, len(logs))
}
if opts.Debug {
fmt.Printf("PROD: user=%s in %v - conn=%d\n\r", user, time.Since(start), dbs.rdb.ActiveCount())
}
consume <- produced{
user: user,
logins: logs,
}
}
}