quota_mongodb/consumer.go

82 lines
1.2 KiB
Go
Raw Normal View History

2017-03-10 13:40:26 +01:00
// consumer
package main
import (
"crypto/sha256"
"encoding/hex"
"fmt"
"log"
// "strconv"
// "strings"
"time"
// "gopkg.in/mgo.v2"
)
type consumed struct {
user string
error bool
logins []string
}
func hash(val []byte) string {
h := sha256.New()
h.Write(val)
return hex.EncodeToString(h.Sum(nil))
}
func consumer() {
for {
prod := <-consume
start := time.Now()
status = _Consumer
if opts.Test {
fmt.Printf("CONS: users - %d\n", len(prod))
}
// for j := range dbs.mdb {
2017-03-13 15:28:20 +01:00
bulk := dbs.mdb.DB(dbs.Database).C(dbs.Collection).Bulk()
2017-03-10 13:40:26 +01:00
bulk.Unordered()
for p := range prod {
2017-03-13 15:28:20 +01:00
mlID := hash([]byte(fmt.Sprintf("%s%s", prod[p].user, start.Format("20060102T15"))))
2017-03-10 13:40:26 +01:00
mquota := MongoQuota{
2017-03-13 15:28:20 +01:00
ID: mlID,
2017-03-10 13:40:26 +01:00
User: prod[p].user,
Messages: prod[p].messages,
Storage: prod[p].storage,
2017-03-13 15:28:20 +01:00
Insert: start,
2017-03-10 13:40:26 +01:00
}
bulk.Insert(mquota)
if opts.Test {
log.Printf("OK: %s\n", prod[p].user)
}
}
_, err := bulk.Run()
if err != nil {
fmt.Printf("Err: %+v\n", err)
counter <- Counterchan{
tipo: "err",
val: 1,
}
continue
}
if opts.Debug {
fmt.Printf("CONS: users=%d in %v - active=%d\n", len(prod), time.Since(start), dbs.rdb.ActiveCount())
}
2017-03-13 15:28:20 +01:00
wg.Done()
2017-03-10 13:40:26 +01:00
}
}