// 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, } } }