web.go 747 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package web
  2. import (
  3. "code.google.com/p/go.net/websocket"
  4. "fmt"
  5. "github.com/coreos/go-raft"
  6. "html/template"
  7. "net/http"
  8. "net/url"
  9. )
  10. var s *raft.Server
  11. var mainTempl *template.Template
  12. type MainPage struct {
  13. Leader string
  14. Address string
  15. }
  16. func mainHandler(c http.ResponseWriter, req *http.Request) {
  17. p := &MainPage{Leader: s.Leader(),
  18. Address: s.Name()}
  19. mainTempl.Execute(c, p)
  20. }
  21. func Start(server *raft.Server, webURL string) {
  22. u, _ := url.Parse(webURL)
  23. mainTempl = template.Must(template.New("index.html").Parse(index_html))
  24. s = server
  25. go h.run()
  26. http.HandleFunc("/", mainHandler)
  27. http.Handle("/ws", websocket.Handler(wsHandler))
  28. fmt.Printf("etcd web server listening on %s\n", u)
  29. http.ListenAndServe(u.Host, nil)
  30. }