web.go 895 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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 mainTempl *template.Template
  11. var mainPage *MainPage
  12. type MainPage struct {
  13. Leader string
  14. Address string
  15. }
  16. func mainHandler(c http.ResponseWriter, req *http.Request) {
  17. p := mainPage
  18. mainTempl.Execute(c, p)
  19. }
  20. func Start(raftServer raft.Server, webURL string) {
  21. u, _ := url.Parse(webURL)
  22. webMux := http.NewServeMux()
  23. server := &http.Server{
  24. Handler: webMux,
  25. Addr: u.Host,
  26. }
  27. mainPage = &MainPage{
  28. Leader: raftServer.Leader(),
  29. Address: u.Host,
  30. }
  31. mainTempl = template.Must(template.New("index.html").Parse(index_html))
  32. go h.run()
  33. webMux.HandleFunc("/", mainHandler)
  34. webMux.Handle("/ws", websocket.Handler(wsHandler))
  35. fmt.Printf("etcd web server [%s] listening on %s\n", raftServer.Name(), u)
  36. server.ListenAndServe()
  37. }