func (c *VcapComponent) ListenAndServe() { hs := http.NewServeMux() hs.HandleFunc("/healthz", func(w http.ResponseWriter, req *http.Request) { w.Header().Set("Content-Type", "text/plain") w.WriteHeader(http.StatusOK) fmt.Fprintf(w, UpdateHealthz().Value()) }) hs.HandleFunc("/varz", func(w http.ResponseWriter, req *http.Request) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) enc := json.NewEncoder(w) enc.Encode(UpdateVarz()) }) for path, marshaler := range c.InfoRoutes { hs.HandleFunc(path, func(w http.ResponseWriter, req *http.Request) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) enc := json.NewEncoder(w) enc.Encode(marshaler) }) } f := func(user, password string) bool { return user == c.Credentials[0] && password == c.Credentials[1] } s := &http.Server{ Addr: c.Host, Handler: &BasicAuth{hs, f}, } err := s.ListenAndServe() if err != nil { panic(err) } }
func (c *VcapComponent) ListenAndServe() { hs := http.NewServeMux() hs.HandleFunc("/healthz", func(w http.ResponseWriter, req *http.Request) { w.Header().Set("Connection", "close") w.Header().Set("Content-Type", "text/plain") w.WriteHeader(http.StatusOK) fmt.Fprintf(w, c.Healthz.Value()) }) hs.HandleFunc("/varz", func(w http.ResponseWriter, req *http.Request) { w.Header().Set("Connection", "close") w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) enc := json.NewEncoder(w) c.UpdateVarz() enc.Encode(c.Varz) }) for path, marshaler := range c.InfoRoutes { hs.HandleFunc(path, func(w http.ResponseWriter, req *http.Request) { w.Header().Set("Connection", "close") w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) enc := json.NewEncoder(w) enc.Encode(marshaler) }) } f := func(user, password string) bool { return user == c.Credentials[0] && password == c.Credentials[1] } s := &http.Server{ Addr: c.Host, Handler: &BasicAuth{hs, f}, ReadTimeout: 10 * time.Second, WriteTimeout: 10 * time.Second, } c.statusCh = make(chan error, 1) l, err := net.Listen("tcp", c.Host) if err != nil { c.statusCh <- err return } c.listener = l go func() { err = s.Serve(l) select { case <-c.quitCh: c.statusCh <- nil default: c.statusCh <- err } }() }