in agent/agentserver/server.go [215:256]
func (s *Server) readinessCheckHandler(w http.ResponseWriter, r *http.Request) error {
if s.config.readinessCacheTTL != 0 {
rCacheValid := s.lastReady.Add(s.config.readinessCacheTTL).After(time.Now())
if rCacheValid {
io.WriteString(w, "OK")
return nil
}
}
var schedErr, buildIndexErr, trackerErr error
var wg sync.WaitGroup
wg.Add(3)
go func() {
schedErr = s.sched.Probe()
wg.Done()
}()
go func() {
buildIndexErr = s.tags.CheckReadiness()
wg.Done()
}()
go func() {
trackerErr = s.ac.CheckReadiness()
wg.Done()
}()
wg.Wait()
// TODO(akalpakchiev): Replace with errors.Join once upgraded to Go 1.20+.
errMsgs := []string{}
for _, err := range []error{schedErr, buildIndexErr, trackerErr} {
if err != nil {
errMsgs = append(errMsgs, err.Error())
}
}
if len(errMsgs) != 0 {
return handler.Errorf("agent not ready: %v", strings.Join(errMsgs, "\n")).Status(http.StatusServiceUnavailable)
}
s.lastReady = time.Now()
io.WriteString(w, "OK")
return nil
}