/
drinks_tracker.go
77 lines (70 loc) · 1.78 KB
/
drinks_tracker.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package main
import (
"bytes"
"fmt"
"github.com/hoisie/web"
"github.com/titanous/go-riak"
"io"
"log"
)
func getlist(ctx *web.Context) {
rclient := riak.New("127.0.0.1:8087")
err := rclient.Connect()
if err != nil {
log.Fatal("Cannot connect, is Riak running?")
return
}
bucket, err := rclient.Bucket("users")
if err != nil {
log.Fatal("Cannot connect to bucket: ", err)
}
list, err := bucket.ListKeys()
if err != nil {
log.Fatal("Failed to list keys: %s", err)
}
//Create buffer to write html to
var buf bytes.Buffer
//numdrinks := 1
//Fill buffer with html
buf.WriteString("<table><tr><th>Employee</th><th>Drinks</th><th>Owed</th></tr>")
for _, user := range list {
count, err := rclient.CounterGet("users", string(user))
if err != nil {
log.Fatal("Failed to retrieve counter: ", err)
}
buf.WriteString(fmt.Sprintf("<tr><td>%s</td><td>%d</td><td>%.2f</td></tr>\n", user, count, float64(count)*float64(1.4)))
}
buf.WriteString("</table>")
//copy buf directly into the HTTP response
io.Copy(ctx, &buf)
}
func addDrink(ctx *web.Context, user string) {
rclient := riak.New("127.0.0.1:8087")
err := rclient.Connect()
if err != nil {
log.Fatal("Cannot connect, is Riak running?")
return
}
errr := rclient.CounterUpdate("users", user, 1)
if errr != nil {
log.Fatal("Failed to increment counter: ", err)
}
}
func delDrink(ctx *web.Context, user string) {
rclient := riak.New("127.0.0.1:8087")
err := rclient.Connect()
if err != nil {
log.Fatal("Cannot connect, is Riak running?")
return
}
errr := rclient.CounterUpdate("users", user, -1)
if errr != nil {
log.Fatal("Failed to increment counter: ", err)
}
}
func main() {
web.Get("/getuserinfo", getlist)
web.Get("/add/(.*)", addDrink)
web.Get("/del/(.*)", delDrink)
web.Run("127.0.0.1:9999")
}