Add sanity check and username importing
This commit is contained in:
parent
e907f31cda
commit
ac39359607
1 changed files with 28 additions and 1 deletions
|
@ -15,6 +15,7 @@ import (
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
Username string `json:"username"`
|
Username string `json:"username"`
|
||||||
|
FirstName string `json:"first_name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Message struct {
|
type Message struct {
|
||||||
|
@ -34,6 +35,7 @@ type Stats struct {
|
||||||
ByDate map[string]uint64
|
ByDate map[string]uint64
|
||||||
Replies uint64
|
Replies uint64
|
||||||
Forward uint64
|
Forward uint64
|
||||||
|
Username map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
func assert(err error) {
|
func assert(err error) {
|
||||||
|
@ -108,6 +110,8 @@ func processMessage(msg Message, data *Stats) {
|
||||||
val = 0
|
val = 0
|
||||||
}
|
}
|
||||||
data.ByDate[datekey] = val + 1
|
data.ByDate[datekey] = val + 1
|
||||||
|
|
||||||
|
data.Username[msg.From.Username] = msg.From.FirstName
|
||||||
}
|
}
|
||||||
|
|
||||||
func MakeUint(bval []byte, bucketName string, key string) uint64 {
|
func MakeUint(bval []byte, bucketName string, key string) uint64 {
|
||||||
|
@ -213,6 +217,10 @@ func update(db *bolt.DB, data Stats) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
for user, count := range data.ByUser {
|
for user, count := range data.ByUser {
|
||||||
|
// Why do I even need this?
|
||||||
|
if len(user) < 1 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
count += MakeUint(b.Get([]byte(user)), "users-count", user)
|
count += MakeUint(b.Get([]byte(user)), "users-count", user)
|
||||||
err = b.Put([]byte(user), PutUint(count))
|
err = b.Put([]byte(user), PutUint(count))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -220,6 +228,25 @@ func update(db *bolt.DB, data Stats) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add to username table exclusively if not already present
|
||||||
|
b, err = tx.CreateBucketIfNotExists([]byte("usernames"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for user, first := range data.Username {
|
||||||
|
// Why do I even need this? (2)
|
||||||
|
if len(user) < 1 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
val := b.Get([]byte(user))
|
||||||
|
if val == nil {
|
||||||
|
err = b.Put([]byte(user), []byte(first))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue