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  }