// iterator package main import ( "fmt" "log" "strconv" "time" "github.com/garyburd/redigo/redis" ) type produced struct { user string logins []string } func producer() { conn := dbs.rdb.Get() defer conn.Close() for loop { wg.Wait() status = _Producer 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", user, err) // fmt.Printf("SPOP: %+v - %+v\n", user, err) // } // se non ci sono piu' userid esce if err != nil { if opts.Debug { fmt.Printf("LLINDEX empty: %v\n", err) } log.Printf("LLINDEX empty: %v\n", err) //loop[id] = false //done[id] <- true break } // estrae login dell'utente "user" logs, err := redis.Strings(conn.Do("lrange", user, "1", strconv.Itoa(opts.MaxLogins))) if err != nil { if opts.Debug { fmt.Printf("LRANGE: %+v - %+v\n", err, logs) } log.Printf("LRANGE: %+v - %+v\n", err, logs) } // if opts.Debug { // fmt.Printf("LRANGE: %s - %d\n", user, len(logs)) // log.Printf("LRANGE: %s - %d\n", user, len(logs)) // } if opts.Debug { fmt.Printf("PROD: user=%s login=%d in %v - conn=%d\n", user, len(logs), time.Since(start), dbs.rdb.ActiveCount()) // log.Printf("PROD (%d): user=%s login=%d in %v - conn=%d\n", id, user, len(logs), time.Since(start), dbs.rdb.ActiveCount()) } count.AddUser() wg.Add(1) count.AddWG() consume <- produced{ user: user, logins: logs, } } done <- true }