|
|
@ -15,24 +15,32 @@ type HealthChecker struct { |
|
|
|
upstream Upstream |
|
|
|
Ticker *time.Ticker |
|
|
|
HTTPClient *http.Client |
|
|
|
StopChan chan bool |
|
|
|
} |
|
|
|
|
|
|
|
// ScheduleChecks periodically runs health checks against an upstream host.
|
|
|
|
func (h *HealthChecker) ScheduleChecks(url string) { |
|
|
|
// check if a host is healthy on start vs waiting for timer
|
|
|
|
h.upstream.SetHealthiness(h.IsHealthy(url)) |
|
|
|
stop := make(chan bool) |
|
|
|
h.StopChan = stop |
|
|
|
|
|
|
|
go func() { |
|
|
|
for { |
|
|
|
select { |
|
|
|
case <-h.Ticker.C: |
|
|
|
h.upstream.SetHealthiness(h.IsHealthy(url)) |
|
|
|
case <-stop: |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
}() |
|
|
|
} |
|
|
|
|
|
|
|
// Stop stops the healthchecker from makeing further requests.
|
|
|
|
func (h *HealthChecker) Stop() { |
|
|
|
h.Ticker.Stop() |
|
|
|
close(h.StopChan) |
|
|
|
} |
|
|
|
|
|
|
|
// IsHealthy attempts to check if a upstream host is healthy.
|
|
|
|