forked from golang-cjr/xep
-
Notifications
You must be signed in to change notification settings - Fork 0
/
stat.go
61 lines (52 loc) · 1.03 KB
/
stat.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package main
import (
"github.com/fjl/go-couchdb"
"github.com/kpmy/ypk/halt"
"log"
)
const dbUrl = "http://127.0.0.1:5984"
const dbName = "stats"
const docId = "total"
type CStatDoc struct {
Total int
Data map[string]int
}
var db *couchdb.DB
func GetStat() (ret *CStatDoc, err error) {
ret = &CStatDoc{}
if err = db.Get(docId, ret, nil); err == nil {
if ret.Data == nil {
ret.Data = make(map[string]int)
}
} else if couchdb.NotFound(err) {
if _, err = db.Put(docId, ret, ""); err == nil {
ret, err = GetStat()
}
}
return
}
func SetStat(old *CStatDoc) {
if rev, err := db.Rev(docId); err == nil {
if _, err = db.Put(docId, old, rev); err != nil {
log.Println(err)
}
}
}
func IncStat(user string) {
if s, err := GetStat(); err == nil {
if _, ok := s.Data[user]; ok {
s.Data[user] = s.Data[user] + 1
} else {
s.Data[user] = 1
}
s.Total++
SetStat(s)
}
}
func init() {
if client, err := couchdb.NewClient(dbUrl, nil); err == nil {
db, _ = client.CreateDB(dbName)
} else {
halt.As(100, err)
}
}