web.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package web
  2. import (
  3. "code.google.com/p/go.net/websocket"
  4. "fmt"
  5. "github.com/coreos/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. var mainTempl *template.Template
  13. type MainPage struct {
  14. Leader string
  15. Address string
  16. }
  17. func handler(w http.ResponseWriter, r *http.Request) {
  18. fmt.Fprintf(w, "Leader:\n%s\n", s.Leader())
  19. fmt.Fprintf(w, "Peers:\n")
  20. for peerName, _ := range s.Peers() {
  21. fmt.Fprintf(w, "%s\n", peerName)
  22. }
  23. fmt.Fprintf(w, "Data\n")
  24. //s := store.GetStore()
  25. // for key, node := range s.Nodes {
  26. // if node.ExpireTime.Equal(time.Unix(0, 0)) {
  27. // fmt.Fprintf(w, "%s %s\n", key, node.Value)
  28. // } else {
  29. // fmt.Fprintf(w, "%s %s %s\n", key, node.Value, node.ExpireTime)
  30. // }
  31. // }
  32. }
  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. mainTempl = template.Must(template.ParseFiles("home.html"))
  40. s = server
  41. go h.run()
  42. http.HandleFunc("/", mainHandler)
  43. http.Handle("/ws", websocket.Handler(wsHandler))
  44. //http.HandleFunc("/", handler)
  45. fmt.Println("web listening at port ", port)
  46. http.ListenAndServe(fmt.Sprintf(":%v", port), nil)
  47. }