github.com/qorio/etcd@v0.1.2-0.20131003183127-5cc585af9618/web/web.go (about) 1 package web 2 3 import ( 4 "code.google.com/p/go.net/websocket" 5 "fmt" 6 "github.com/coreos/go-raft" 7 "html/template" 8 "net/http" 9 "net/url" 10 ) 11 12 var mainTempl *template.Template 13 var mainPage *MainPage 14 15 type MainPage struct { 16 Leader string 17 Address string 18 } 19 20 func mainHandler(c http.ResponseWriter, req *http.Request) { 21 p := mainPage 22 23 mainTempl.Execute(c, p) 24 } 25 26 func Start(raftServer *raft.Server, webURL string) { 27 u, _ := url.Parse(webURL) 28 29 webMux := http.NewServeMux() 30 31 server := &http.Server{ 32 Handler: webMux, 33 Addr: u.Host, 34 } 35 36 mainPage = &MainPage{ 37 Leader: raftServer.Leader(), 38 Address: u.Host, 39 } 40 41 mainTempl = template.Must(template.New("index.html").Parse(index_html)) 42 43 go h.run() 44 webMux.HandleFunc("/", mainHandler) 45 webMux.Handle("/ws", websocket.Handler(wsHandler)) 46 47 fmt.Printf("etcd web server [%s] listening on %s\n", raftServer.Name(), u) 48 49 server.ListenAndServe() 50 }