2017-03-10 13:40:26 +01:00
|
|
|
// iterator
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2017-03-21 10:34:37 +01:00
|
|
|
"log"
|
2017-03-10 13:40:26 +01:00
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/garyburd/redigo/redis"
|
|
|
|
)
|
|
|
|
|
|
|
|
type userQuota struct {
|
|
|
|
user string
|
|
|
|
storage int
|
|
|
|
messages int
|
|
|
|
}
|
|
|
|
|
|
|
|
type produced struct {
|
|
|
|
user string
|
|
|
|
logins []string
|
|
|
|
}
|
|
|
|
|
|
|
|
func producer() {
|
|
|
|
conn := dbs.rdb.Get()
|
|
|
|
defer conn.Close()
|
|
|
|
|
2017-03-13 15:28:20 +01:00
|
|
|
val := "0"
|
|
|
|
|
|
|
|
loop := true
|
|
|
|
|
2017-03-20 17:20:26 +01:00
|
|
|
startp := time.Now()
|
2017-03-13 15:28:20 +01:00
|
|
|
users := make(map[string]bool)
|
|
|
|
for loop {
|
|
|
|
|
|
|
|
status = _Producer
|
|
|
|
|
|
|
|
retval, err := redis.Values(conn.Do("SCAN", val, "COUNT", strconv.Itoa(opts.MaxBulk)))
|
2017-03-21 10:34:37 +01:00
|
|
|
if err != nil {
|
|
|
|
log.Printf("Scan err: %+v\n", err)
|
|
|
|
if opts.Debug {
|
|
|
|
fmt.Printf("Scan err: %+v\n", err)
|
|
|
|
}
|
|
|
|
break
|
|
|
|
}
|
2017-03-13 15:28:20 +01:00
|
|
|
|
|
|
|
keys, _ := redis.Strings(retval[1], err)
|
|
|
|
|
|
|
|
for _, key := range keys {
|
|
|
|
user := key[:strings.Index(key, "@")]
|
|
|
|
users[user] = true
|
|
|
|
}
|
|
|
|
|
|
|
|
val, _ = redis.String(retval[0], err)
|
|
|
|
|
|
|
|
if opts.Debug {
|
|
|
|
fmt.Println(val, len(users))
|
|
|
|
}
|
|
|
|
|
|
|
|
if val == "0" {
|
|
|
|
loop = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if opts.Debug {
|
2017-03-20 17:20:26 +01:00
|
|
|
fmt.Printf("\nKEYS: %+v\n", time.Since(startp))
|
2017-03-13 15:28:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
max := 0
|
|
|
|
block := make([]string, 0)
|
|
|
|
for user, _ := range users {
|
|
|
|
block = append(block, user)
|
|
|
|
if max >= opts.MaxBulk {
|
|
|
|
wg.Add(1)
|
|
|
|
mget_chan <- block
|
|
|
|
max = 0
|
|
|
|
block = make([]string, 0)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
max += 1
|
|
|
|
}
|
|
|
|
|
|
|
|
done <- true
|
|
|
|
}
|