github.com/chenbh/concourse/v6@v6.4.2/worker/healthchecker.go (about) 1 package worker 2 3 import ( 4 "context" 5 "net/http" 6 "time" 7 8 "code.cloudfoundry.org/lager" 9 ) 10 11 type healthChecker struct { 12 client *http.Client 13 baggageclaimAddr string 14 gardenAddr string 15 timeout time.Duration 16 logger lager.Logger 17 } 18 19 func NewHealthChecker(logger lager.Logger, baggageclaimAddr, gardenAddr string, checkTimeout time.Duration) healthChecker { 20 return healthChecker{ 21 logger: logger, 22 baggageclaimAddr: baggageclaimAddr, 23 gardenAddr: gardenAddr, 24 timeout: checkTimeout, 25 } 26 } 27 28 func doRequest(ctx context.Context, url string) error { 29 req, err := http.NewRequest("GET", url, nil) 30 if err != nil { 31 return err 32 } 33 34 req = req.WithContext(ctx) 35 36 resp, err := http.DefaultClient.Do(req) 37 if err != nil { 38 return err 39 } 40 41 _ = resp.Body.Close() 42 return nil 43 } 44 45 func (h *healthChecker) CheckHealth(w http.ResponseWriter, req *http.Request) { 46 var err error 47 48 ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(h.timeout)) 49 defer cancel() 50 51 err = doRequest(ctx, h.gardenAddr+"/ping") 52 if err != nil { 53 w.WriteHeader(503) 54 h.logger.Error("failed-to-ping-garden-server", err) 55 return 56 } 57 58 err = doRequest(ctx, h.baggageclaimAddr+"/volumes") 59 if err != nil { 60 w.WriteHeader(503) 61 h.logger.Error("failed-to-list-volumes-on-baggageclaim-server", err) 62 return 63 } 64 65 return 66 }