2015-11-19 10:06:50 +01:00
|
|
|
// iterator
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"log"
|
2016-05-27 12:04:12 +02:00
|
|
|
"strconv"
|
2015-11-19 17:12:53 +01:00
|
|
|
"time"
|
2016-05-27 12:04:12 +02:00
|
|
|
|
|
|
|
"github.com/garyburd/redigo/redis"
|
2015-11-19 10:06:50 +01:00
|
|
|
)
|
|
|
|
|
2015-11-20 15:23:12 +01:00
|
|
|
type produced struct {
|
|
|
|
user string
|
|
|
|
logins []string
|
|
|
|
}
|
|
|
|
|
2016-11-03 17:42:37 +01:00
|
|
|
func producer() {
|
2015-11-19 10:06:50 +01:00
|
|
|
conn := dbs.rdb.Get()
|
|
|
|
defer conn.Close()
|
|
|
|
|
2016-11-03 17:42:37 +01:00
|
|
|
for loop {
|
2015-11-20 15:23:12 +01:00
|
|
|
|
2016-11-04 11:50:27 +01:00
|
|
|
wg.Wait()
|
|
|
|
status = _Producer
|
|
|
|
|
2015-11-19 17:12:53 +01:00
|
|
|
start := time.Now()
|
2015-11-19 10:06:50 +01:00
|
|
|
// estrae un userid dalla lista degli utenti che hanno fatto login
|
|
|
|
user, err := redis.String(conn.Do("spop", "llindex"))
|
2015-11-23 17:39:17 +01:00
|
|
|
// if opts.Debug {
|
2015-11-24 16:18:39 +01:00
|
|
|
// log.Printf("SPOP: %+v - %+v\n", user, err)
|
|
|
|
// fmt.Printf("SPOP: %+v - %+v\n", user, err)
|
2015-11-23 17:39:17 +01:00
|
|
|
// }
|
2015-11-19 10:06:50 +01:00
|
|
|
// se non ci sono piu' userid esce
|
|
|
|
if err != nil {
|
|
|
|
if opts.Debug {
|
2015-11-24 16:18:39 +01:00
|
|
|
fmt.Printf("LLINDEX empty: %v\n", err)
|
2015-11-19 10:06:50 +01:00
|
|
|
}
|
2015-11-24 16:18:39 +01:00
|
|
|
log.Printf("LLINDEX empty: %v\n", err)
|
2015-11-23 17:39:17 +01:00
|
|
|
//loop[id] = false
|
2015-11-24 12:54:04 +01:00
|
|
|
//done[id] <- true
|
2015-11-20 16:17:31 +01:00
|
|
|
break
|
2015-11-20 15:23:12 +01:00
|
|
|
}
|
|
|
|
|
2016-10-05 11:55:50 +02:00
|
|
|
// estrae <MaxLogins> login dell'utente "user"
|
2016-05-27 12:04:12 +02:00
|
|
|
logs, err := redis.Strings(conn.Do("lrange", user, "1", strconv.Itoa(opts.MaxLogins)))
|
2015-11-20 15:23:12 +01:00
|
|
|
if err != nil {
|
2015-11-23 18:07:07 +01:00
|
|
|
if opts.Debug {
|
2015-11-24 16:18:39 +01:00
|
|
|
fmt.Printf("LRANGE: %+v - %+v\n", err, logs)
|
2015-11-23 18:07:07 +01:00
|
|
|
}
|
2015-11-24 16:18:39 +01:00
|
|
|
log.Printf("LRANGE: %+v - %+v\n", err, logs)
|
2015-11-19 10:06:50 +01:00
|
|
|
}
|
2015-11-23 17:39:17 +01:00
|
|
|
// if opts.Debug {
|
2015-11-24 16:18:39 +01:00
|
|
|
// fmt.Printf("LRANGE: %s - %d\n", user, len(logs))
|
|
|
|
// log.Printf("LRANGE: %s - %d\n", user, len(logs))
|
2015-11-23 17:39:17 +01:00
|
|
|
// }
|
2015-11-20 15:23:12 +01:00
|
|
|
|
2015-11-20 16:17:31 +01:00
|
|
|
if opts.Debug {
|
2016-11-03 17:42:37 +01:00
|
|
|
fmt.Printf("PROD: user=%s login=%d in %v - conn=%d\n", user, len(logs), time.Since(start), dbs.rdb.ActiveCount())
|
2015-11-24 16:18:39 +01:00
|
|
|
// log.Printf("PROD (%d): user=%s login=%d in %v - conn=%d\n", id, user, len(logs), time.Since(start), dbs.rdb.ActiveCount())
|
2015-11-20 16:17:31 +01:00
|
|
|
}
|
2015-11-20 15:23:12 +01:00
|
|
|
|
2015-11-23 17:39:17 +01:00
|
|
|
count.AddUser()
|
|
|
|
wg.Add(1)
|
2016-11-03 17:42:37 +01:00
|
|
|
count.AddWG()
|
2015-11-23 17:39:17 +01:00
|
|
|
|
2016-11-03 17:42:37 +01:00
|
|
|
consume <- produced{
|
2015-11-20 15:23:12 +01:00
|
|
|
user: user,
|
|
|
|
logins: logs,
|
|
|
|
}
|
2015-11-19 10:06:50 +01:00
|
|
|
}
|
2015-11-24 12:28:22 +01:00
|
|
|
|
2016-11-03 17:42:37 +01:00
|
|
|
done <- true
|
2015-11-19 10:06:50 +01:00
|
|
|
}
|