diff --git a/etcd.go b/etcd.go index d03a1ef57..bc4731743 100644 --- a/etcd.go +++ b/etcd.go @@ -265,23 +265,14 @@ func startEtcdTransport(info Info, scheme string, tlsConf tls.Config) { } infof("etcd server [%s:%s]", info.Name, u) - etcdMux := http.NewServeMux() - - server := &http.Server{ - Handler: etcdMux, - TLSConfig: &tlsConf, - Addr: u.Host, + server := &Etcd{ + Server: http.Server{ + Handler: NewEtcdMuxer(), + TLSConfig: &tlsConf, + Addr: u.Host, + }, } - // external commands - etcdMux.HandleFunc("/"+version+"/keys/", Multiplexer) - etcdMux.HandleFunc("/"+version+"/watch/", WatchHttpHandler) - etcdMux.HandleFunc("/leader", LeaderHttpHandler) - etcdMux.HandleFunc("/machines", MachinesHttpHandler) - etcdMux.HandleFunc("/", VersionHttpHandler) - etcdMux.HandleFunc("/stats", StatsHttpHandler) - etcdMux.HandleFunc("/test/", TestHttpHandler) - if scheme == "http" { fatal(server.ListenAndServe()) } else { diff --git a/etcd_handlers.go b/etcd_handlers.go index 1c45d3487..e5fbd3c76 100644 --- a/etcd_handlers.go +++ b/etcd_handlers.go @@ -12,6 +12,19 @@ import ( // Handlers to handle etcd-store related request via etcd url //------------------------------------------------------------------- +func NewEtcdMuxer() *http.ServeMux { + // external commands + etcdMux := http.NewServeMux() + etcdMux.HandleFunc("/"+version+"/keys/", Multiplexer) + etcdMux.HandleFunc("/"+version+"/watch/", WatchHttpHandler) + etcdMux.HandleFunc("/leader", LeaderHttpHandler) + etcdMux.HandleFunc("/machines", MachinesHttpHandler) + etcdMux.HandleFunc("/", VersionHttpHandler) + etcdMux.HandleFunc("/stats", StatsHttpHandler) + etcdMux.HandleFunc("/test/", TestHttpHandler) + return etcdMux +} + // Multiplex GET/POST/DELETE request to corresponding handlers func Multiplexer(w http.ResponseWriter, req *http.Request) {