stats-import: It's fine, make the module 'whole' again

This commit is contained in:
Hamcha 2016-02-14 10:44:00 +01:00
parent e2e2e5aae0
commit bf7f2b6b55
1 changed files with 114 additions and 114 deletions

View File

@ -7,7 +7,9 @@ import (
"flag" "flag"
"log" "log"
"os" "os"
"strconv"
"strings" "strings"
"time"
"github.com/boltdb/bolt" "github.com/boltdb/bolt"
) )
@ -87,37 +89,36 @@ func main() {
} }
func processMessage(msg Message, data *Stats) { func processMessage(msg Message, data *Stats) {
/* data.Total++
data.Total++
if msg.ReplyID != nil { if msg.ReplyID != nil {
data.Replies++ data.Replies++
} }
if msg.FwdUser != nil { if msg.FwdUser != nil {
data.Forward++ data.Forward++
} }
date := time.Unix(int64(msg.Date), 0) date := time.Unix(int64(msg.Date), 0)
data.ByHour[date.Hour()]++ data.ByHour[date.Hour()]++
data.ByWeekday[date.Weekday()]++ data.ByWeekday[date.Weekday()]++
val, exists := data.ByUser[msg.From.Username] val, exists := data.ByUser[msg.From.Username]
if !exists { if !exists {
val = 0 val = 0
} }
data.ByUser[msg.From.Username] = val + 1 data.ByUser[msg.From.Username] = val + 1
datekey := date.Format("2006-1-2") datekey := date.Format("2006-1-2")
val, exists = data.ByDate[datekey] val, exists = data.ByDate[datekey]
if !exists { if !exists {
val = 0 val = 0
} }
data.ByDate[datekey] = val + 1 data.ByDate[datekey] = val + 1
data.Username[msg.From.Username] = msg.From.FirstName
data.Username[msg.From.Username] = msg.From.FirstName
*/
if len(msg.Text) > 2 { if len(msg.Text) > 2 {
wordList := strings.Split(msg.Text, " ") wordList := strings.Split(msg.Text, " ")
for _, word := range wordList { for _, word := range wordList {
@ -169,119 +170,118 @@ func PutUint(value uint64) []byte {
func update(db *bolt.DB, data Stats) error { func update(db *bolt.DB, data Stats) error {
return db.Update(func(tx *bolt.Tx) error { return db.Update(func(tx *bolt.Tx) error {
/* b, err := tx.CreateBucketIfNotExists([]byte("global"))
b, err := tx.CreateBucketIfNotExists([]byte("global")) if err != nil {
return err
}
// Update total
total := MakeUint(b.Get([]byte("count")), "global", "count")
total += data.Total
err = b.Put([]byte("count"), PutUint(total))
if err != nil {
return err
}
// Update replies
replies := MakeUint(b.Get([]byte("replies")), "global", "replies")
replies += data.Replies
err = b.Put([]byte("replies"), PutUint(total))
if err != nil {
return err
}
// Update forward
forward := MakeUint(b.Get([]byte("forward")), "global", "forward")
forward += data.Forward
err = b.Put([]byte("forward"), PutUint(total))
if err != nil {
return err
}
// Update hour counters
b, err = tx.CreateBucketIfNotExists([]byte("hour"))
if err != nil {
return err
}
for i := 0; i < 24; i++ {
curhour := MakeUint(b.Get([]byte{byte(i)}), "hour", strconv.Itoa(i))
curhour += data.ByHour[i]
err = b.Put([]byte{byte(i)}, PutUint(curhour))
if err != nil { if err != nil {
return err return err
} }
}
// Update total // Update weekday counters
total := MakeUint(b.Get([]byte("count")), "global", "count") b, err = tx.CreateBucketIfNotExists([]byte("weekday"))
total += data.Total if err != nil {
err = b.Put([]byte("count"), PutUint(total)) return err
}
for i := 0; i < 7; i++ {
curwday := MakeUint(b.Get([]byte{byte(i)}), "weekday", strconv.Itoa(i))
curwday += data.ByWeekday[i]
err = b.Put([]byte{byte(i)}, PutUint(curwday))
if err != nil { if err != nil {
return err return err
} }
}
// Update replies // Update date counters
replies := MakeUint(b.Get([]byte("replies")), "global", "replies") b, err = tx.CreateBucketIfNotExists([]byte("date"))
replies += data.Replies if err != nil {
err = b.Put([]byte("replies"), PutUint(total)) return err
}
for day, count := range data.ByDate {
count += MakeUint(b.Get([]byte(day)), "date", day)
err = b.Put([]byte(day), PutUint(count))
if err != nil { if err != nil {
return err return err
} }
}
// Update forward // Update user counters
forward := MakeUint(b.Get([]byte("forward")), "global", "forward") b, err = tx.CreateBucketIfNotExists([]byte("users-count"))
forward += data.Forward if err != nil {
err = b.Put([]byte("forward"), PutUint(total)) return err
}
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)
err = b.Put([]byte(user), PutUint(count))
if err != nil { if err != nil {
return err return err
} }
}
// Update hour counters // Add to username table exclusively if not already present
b, err = tx.CreateBucketIfNotExists([]byte("hour")) b, err = tx.CreateBucketIfNotExists([]byte("usernames"))
if err != nil { if err != nil {
return err 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))
for i := 0; i < 24; i++ { if val == nil {
curhour := MakeUint(b.Get([]byte{byte(i)}), "hour", strconv.Itoa(i)) err = b.Put([]byte(user), []byte(first))
curhour += data.ByHour[i]
err = b.Put([]byte{byte(i)}, PutUint(curhour))
if err != nil { if err != nil {
return err return err
} }
} }
}
// Update weekday counters
b, err = tx.CreateBucketIfNotExists([]byte("weekday"))
if err != nil {
return err
}
for i := 0; i < 7; i++ {
curwday := MakeUint(b.Get([]byte{byte(i)}), "weekday", strconv.Itoa(i))
curwday += data.ByWeekday[i]
err = b.Put([]byte{byte(i)}, PutUint(curwday))
if err != nil {
return err
}
}
// Update date counters
b, err = tx.CreateBucketIfNotExists([]byte("date"))
if err != nil {
return err
}
for day, count := range data.ByDate {
count += MakeUint(b.Get([]byte(day)), "date", day)
err = b.Put([]byte(day), PutUint(count))
if err != nil {
return err
}
}
// Update user counters
b, err = tx.CreateBucketIfNotExists([]byte("users-count"))
if err != nil {
return err
}
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)
err = b.Put([]byte(user), PutUint(count))
if err != nil {
return err
}
}
// 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
}
}
}
*/
// Add word frequency // Add word frequency
b, err := tx.CreateBucketIfNotExists([]byte("words")) b, err = tx.CreateBucketIfNotExists([]byte("words"))
if err != nil { if err != nil {
return err return err
} }