quota_mongodb/producer.go

86 lines
1.2 KiB
Go
Raw Normal View History

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
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 {
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
}