diff options
Diffstat (limited to 'modules/caddyhttp')
-rwxr-xr-x | modules/caddyhttp/reverseproxy/healthchecker.go | 18 | ||||
-rwxr-xr-x | modules/caddyhttp/reverseproxy/upstream.go | 2 |
2 files changed, 14 insertions, 6 deletions
diff --git a/modules/caddyhttp/reverseproxy/healthchecker.go b/modules/caddyhttp/reverseproxy/healthchecker.go index add3aa0..39dca1b 100755 --- a/modules/caddyhttp/reverseproxy/healthchecker.go +++ b/modules/caddyhttp/reverseproxy/healthchecker.go @@ -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 - for { - select { - case <-h.Ticker.C: - h.upstream.SetHealthiness(h.IsHealthy(url)) + 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. diff --git a/modules/caddyhttp/reverseproxy/upstream.go b/modules/caddyhttp/reverseproxy/upstream.go index b8a0330..db03954 100755 --- a/modules/caddyhttp/reverseproxy/upstream.go +++ b/modules/caddyhttp/reverseproxy/upstream.go @@ -140,7 +140,7 @@ func NewLoadBalancedReverseProxy(lb *LoadBalanced, ctx caddy2.Context) error { // TODO :- if path is empty why does this empty the entire Target? // nu.Target.Path = uc.HealthCheckPath - go nu.healthChecker.ScheduleChecks(nu.Target.String()) + nu.healthChecker.ScheduleChecks(nu.Target.String()) lb.HealthCheckers = append(lb.HealthCheckers, nu.healthChecker) us = append(us, nu) |