llmongodb/producer.go

56 lines
1.2 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 {
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)
}
done <- true
}
// 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))
}
fmt.Printf("PROD: user=%s in %v - conn=%d\n\r", user, time.Since(start), dbs.rdb.ActiveCount())
consume <- produced{
user: user,
logins: logs,
}
}
}