-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
72 lines (55 loc) · 2.44 KB
/
main.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
package main
import (
"bootic_stats_aggregates/handlers"
"bootic_stats_aggregates/redis_stats"
"flag"
"github.com/bootic/bootic_zmq"
"github.com/gorilla/mux"
"log"
"net/http"
)
func main() {
var (
topic string
zmqAddress string
redisAddress string
httpHost string
pathprefix string
)
flag.StringVar(&topic, "topic", "", "ZMQ topic to subscribe to") // event type. ie "order", "pageview"
flag.StringVar(&zmqAddress, "zmqsocket", "tcp://127.0.0.1:6000", "ZMQ socket address to bind to")
flag.StringVar(&redisAddress, "redishost", "localhost:6379", "Redis host:port")
flag.StringVar(&httpHost, "httphost", "localhost:8001", "HTTP host:port for JSON API")
flag.StringVar(&pathprefix, "pathprefix", "/stats", "Path prefix for HTTP API")
flag.Parse()
// Setup ZMQ subscriber +++++++++++++++++++++++++++++++
daemon, _ := booticzmq.NewZMQSubscriber(zmqAddress, topic)
log.Println("ZMQ socket started on", zmqAddress, "topic '", topic, "'")
// Setup Rediss trackr ++++++++++++++++++++++++++++++++
tracker, err := redis_stats.NewTracker(redisAddress)
log.Println("Redis tracker started on", redisAddress)
if err != nil {
panic(err)
}
// Redis subscribe to these events
daemon.SubscribeToType(tracker.Notifier, "pageview")
daemon.SubscribeToType(tracker.Funnels, "order")
log.Println("Redis tracking 'pageview' and 'order' events")
// Declare HTTP API routes ++++++++++++++++++++++++++++
router := mux.NewRouter()
rootHandler := handlers.RootHandler(tracker.Conn, pathprefix)
keyHandler := handlers.KeyHandler(tracker.Conn, pathprefix)
allKeysHandler := handlers.AllKeysHandler(tracker.Conn, pathprefix)
router.HandleFunc("/", rootHandler).Methods("GET")
router.HandleFunc("/favicon.ico", handlers.Favicon).Methods("GET")
router.HandleFunc("/{chartType}", allKeysHandler).Methods("GET")
router.HandleFunc("/{chartType}/{key}", allKeysHandler).Methods("GET")
router.HandleFunc("/{chartType}/{key}/{evt}", allKeysHandler).Methods("GET")
router.HandleFunc("/{chartType}/{key}/{evt}/{year}", keyHandler).Methods("GET")
router.HandleFunc("/{chartType}/{key}/{evt}/{year}/{month}", keyHandler).Methods("GET")
router.HandleFunc("/{chartType}/{key}/{evt}/{year}/{month}/{day}", keyHandler).Methods("GET")
http.Handle("/", http.StripPrefix(pathprefix, router))
// Start HTTP server
log.Println("Starting HTTP server on", httpHost)
log.Fatal(http.ListenAndServe(httpHost, nil))
}