From 6b6f010851c2a4aff96a31cccffd290b91be8354 Mon Sep 17 00:00:00 2001 From: Julien Salleyron Date: Mon, 6 Feb 2017 22:59:50 +0100 Subject: [PATCH] Add healthcheck interval --- healthcheck/healthcheck.go | 7 ++++--- server.go | 20 ++++++++++++++++++-- types/types.go | 3 ++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/healthcheck/healthcheck.go b/healthcheck/healthcheck.go index cbae33cc4..30b4af495 100644 --- a/healthcheck/healthcheck.go +++ b/healthcheck/healthcheck.go @@ -26,6 +26,7 @@ func GetHealthCheck() *HealthCheck { // BackendHealthCheck HealthCheck configuration for a backend type BackendHealthCheck struct { URL string + Interval time.Duration DisabledURLs []*url.URL lb loadBalancer } @@ -49,8 +50,8 @@ func newHealthCheck() *HealthCheck { } // NewBackendHealthCheck Instantiate a new BackendHealthCheck -func NewBackendHealthCheck(URL string, lb loadBalancer) *BackendHealthCheck { - return &BackendHealthCheck{URL, nil, lb} +func NewBackendHealthCheck(URL string, interval time.Duration, lb loadBalancer) *BackendHealthCheck { + return &BackendHealthCheck{URL, interval, nil, lb} } //SetBackendsConfiguration set backends configuration @@ -70,7 +71,7 @@ func (hc *HealthCheck) execute(ctx context.Context) { currentBackendID := backendID safe.Go(func() { for { - ticker := time.NewTicker(time.Second * 30) + ticker := time.NewTicker(currentBackend.Interval) select { case <-ctx.Done(): log.Debugf("Stopping all current Healthcheck goroutines") diff --git a/server.go b/server.go index a2d3a406f..457093eb2 100644 --- a/server.go +++ b/server.go @@ -658,7 +658,15 @@ func (server *Server) loadConfig(configurations configs, globalConfiguration Glo continue frontend } if configuration.Backends[frontend.Backend].HealthCheck != nil { - backendsHealthcheck[frontend.Backend] = healthcheck.NewBackendHealthCheck(configuration.Backends[frontend.Backend].HealthCheck.URL, rebalancer) + var interval time.Duration + if configuration.Backends[frontend.Backend].HealthCheck.Interval != "" { + interval, err = time.ParseDuration(configuration.Backends[frontend.Backend].HealthCheck.Interval) + if err != nil { + log.Errorf("Wrong healthcheck interval: %s", err) + interval = time.Second * 30 + } + } + backendsHealthcheck[frontend.Backend] = healthcheck.NewBackendHealthCheck(configuration.Backends[frontend.Backend].HealthCheck.URL, interval, rebalancer) } } case types.Wrr: @@ -684,7 +692,15 @@ func (server *Server) loadConfig(configurations configs, globalConfiguration Glo } } if configuration.Backends[frontend.Backend].HealthCheck != nil { - backendsHealthcheck[frontend.Backend] = healthcheck.NewBackendHealthCheck(configuration.Backends[frontend.Backend].HealthCheck.URL, rr) + var interval time.Duration + if configuration.Backends[frontend.Backend].HealthCheck.Interval != "" { + interval, err = time.ParseDuration(configuration.Backends[frontend.Backend].HealthCheck.Interval) + if err != nil { + log.Errorf("Wrong healthcheck interval: %s", err) + interval = time.Second * 30 + } + } + backendsHealthcheck[frontend.Backend] = healthcheck.NewBackendHealthCheck(configuration.Backends[frontend.Backend].HealthCheck.URL, interval, rr) } } maxConns := configuration.Backends[frontend.Backend].MaxConn diff --git a/types/types.go b/types/types.go index 630263164..308a71e25 100644 --- a/types/types.go +++ b/types/types.go @@ -39,7 +39,8 @@ type CircuitBreaker struct { // HealthCheck holds HealthCheck configuration type HealthCheck struct { - URL string `json:"url,omitempty"` + URL string `json:"url,omitempty"` + Interval string `json:"interval,omitempty"` } // Server holds server configuration.