web.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package web
  2. import (
  3. "code.google.com/p/go.net/websocket"
  4. "fmt"
  5. "github.com/xiangli-cmu/go-raft"
  6. "github.com/xiangli-cmu/raft-etcd/store"
  7. "html/template"
  8. "net/http"
  9. "time"
  10. )
  11. var s *raft.Server
  12. type MainPage struct {
  13. Leader string
  14. Address string
  15. }
  16. func handler(w http.ResponseWriter, r *http.Request) {
  17. fmt.Fprintf(w, "Leader:\n%s\n", s.Leader())
  18. fmt.Fprintf(w, "Peers:\n")
  19. for peerName, _ := range s.Peers() {
  20. fmt.Fprintf(w, "%s\n", peerName)
  21. }
  22. fmt.Fprintf(w, "Data\n")
  23. s := store.GetStore()
  24. for key, node := range s.Nodes {
  25. if node.ExpireTime.Equal(time.Unix(0, 0)) {
  26. fmt.Fprintf(w, "%s %s\n", key, node.Value)
  27. } else {
  28. fmt.Fprintf(w, "%s %s %s\n", key, node.Value, node.ExpireTime)
  29. }
  30. }
  31. }
  32. var mainTempl = template.Must(template.ParseFiles("home.html"))
  33. func mainHandler(c http.ResponseWriter, req *http.Request) {
  34. p := &MainPage{Leader: s.Leader(),
  35. Address: s.Name()}
  36. mainTempl.Execute(c, p)
  37. }
  38. func Start(server *raft.Server, port int) {
  39. s = server
  40. go h.run()
  41. http.HandleFunc("/", mainHandler)
  42. http.Handle("/ws", websocket.Handler(wsHandler))
  43. //http.HandleFunc("/", handler)
  44. fmt.Println("web listening at port ", port)
  45. http.ListenAndServe(fmt.Sprintf(":%v", port), nil)
  46. }