package pprofserver import ( "net/http" "go.uber.org/zap" ) type Options struct { BindAddr string LogLevelHandler http.Handler Logger *zap.Logger } type server struct { addr string logger *zap.Logger ready bool } func New(options Options) *server { s := &server{ addr: options.BindAddr, logger: options.Logger, } http.Handle("/log/level", options.LogLevelHandler) http.HandleFunc("/readyz", s.handleReady) return s } func (s *server) ListenAndServe() error { return http.ListenAndServe(s.addr, nil) } func (s *server) handleReady(w http.ResponseWriter, _ *http.Request) { s.logger.Debug("Handling healthcheck request", zap.Bool("ready", s.ready)) if s.ready { w.WriteHeader(http.StatusOK) return } w.WriteHeader(http.StatusServiceUnavailable) _, err := w.Write([]byte("shutting down")) if err != nil { s.logger.Error("Could not write ready response", zap.Error(err)) } } func (s *server) SetReady() { s.ready = true } func (s *server) SetNotReady() { s.ready = false }