etcd/proxy/proxy.go
2014-09-18 15:05:30 -07:00

50 lines
951 B
Go

package proxy
import (
"net"
"net/http"
"time"
)
const (
dialTimeout = 30 * time.Second
responseHeaderTimeout = 30 * time.Second
)
func NewHandler(endpoints []string) (http.Handler, error) {
d, err := newDirector(endpoints)
if err != nil {
return nil, err
}
tr := http.Transport{
Dial: func(network, address string) (net.Conn, error) {
return net.DialTimeout(network, address, dialTimeout)
},
ResponseHeaderTimeout: responseHeaderTimeout,
}
rp := reverseProxy{
director: d,
transport: &tr,
}
return &rp, nil
}
func readonlyHandlerFunc(next http.Handler) func(http.ResponseWriter, *http.Request) {
return func(w http.ResponseWriter, req *http.Request) {
if req.Method != "GET" {
w.WriteHeader(http.StatusNotImplemented)
return
}
next.ServeHTTP(w, req)
}
}
func NewReadonlyHandler(hdlr http.Handler) http.Handler {
readonly := readonlyHandlerFunc(hdlr)
return http.HandlerFunc(readonly)
}