Maint: improve health code

This commit is contained in:
Quentin McGaw (desktop)
2021-07-22 20:18:52 +00:00
parent 6acb7caf5b
commit 6f58f84151
3 changed files with 15 additions and 14 deletions

View File

@@ -12,7 +12,7 @@ import (
func (s *server) runHealthcheckLoop(ctx context.Context, done chan<- struct{}) { func (s *server) runHealthcheckLoop(ctx context.Context, done chan<- struct{}) {
defer close(done) defer close(done)
s.openvpn.healthyTimer = time.NewTimer(s.openvpn.currentHealthyWait) s.openvpn.healthyTimer = time.NewTimer(s.openvpn.healthyWait)
for { for {
previousErr := s.handler.getErr() previousErr := s.handler.getErr()
@@ -23,10 +23,11 @@ func (s *server) runHealthcheckLoop(ctx context.Context, done chan<- struct{}) {
if previousErr != nil && err == nil { if previousErr != nil && err == nil {
s.logger.Info("healthy!") s.logger.Info("healthy!")
s.openvpn.healthyTimer.Stop() s.openvpn.healthyTimer.Stop()
s.openvpn.currentHealthyWait = s.openvpn.healthyWaitConfig.Initial s.openvpn.healthyWait = s.config.OpenVPN.Initial
} else if previousErr == nil && err != nil { } else if previousErr == nil && err != nil {
s.logger.Info("unhealthy: " + err.Error()) s.logger.Info("unhealthy: " + err.Error())
s.openvpn.healthyTimer = time.NewTimer(s.openvpn.currentHealthyWait) s.openvpn.healthyTimer.Stop()
s.openvpn.healthyTimer = time.NewTimer(s.openvpn.healthyWait)
} }
if err != nil { // try again after 1 second if err != nil { // try again after 1 second

View File

@@ -9,9 +9,9 @@ import (
func (s *server) onUnhealthyOpenvpn(ctx context.Context) { func (s *server) onUnhealthyOpenvpn(ctx context.Context) {
s.logger.Info("program has been unhealthy for " + s.logger.Info("program has been unhealthy for " +
s.openvpn.currentHealthyWait.String() + ": restarting OpenVPN") s.openvpn.healthyWait.String() + ": restarting OpenVPN")
_, _ = s.openvpn.looper.ApplyStatus(ctx, constants.Stopped) _, _ = s.openvpn.looper.ApplyStatus(ctx, constants.Stopped)
_, _ = s.openvpn.looper.ApplyStatus(ctx, constants.Running) _, _ = s.openvpn.looper.ApplyStatus(ctx, constants.Running)
s.openvpn.currentHealthyWait += s.openvpn.healthyWaitConfig.Addition s.openvpn.healthyWait += s.config.OpenVPN.Addition
s.openvpn.healthyTimer = time.NewTimer(s.openvpn.currentHealthyWait) s.openvpn.healthyTimer = time.NewTimer(s.openvpn.healthyWait)
} }

View File

@@ -21,27 +21,27 @@ type server struct {
logger logging.Logger logger logging.Logger
handler *handler handler *handler
resolver *net.Resolver resolver *net.Resolver
config configuration.Health
openvpn openvpnHealth openvpn openvpnHealth
} }
type openvpnHealth struct { type openvpnHealth struct {
looper openvpn.Looper looper openvpn.Looper
healthyWaitConfig configuration.HealthyWait healthyWait time.Duration
currentHealthyWait time.Duration healthyTimer *time.Timer
healthyTimer *time.Timer
} }
func NewServer(address string, settings configuration.Health, func NewServer(address string, config configuration.Health,
logger logging.Logger, openvpnLooper openvpn.Looper) Server { logger logging.Logger, openvpnLooper openvpn.Looper) Server {
return &server{ return &server{
address: address, address: address,
logger: logger, logger: logger,
handler: newHandler(logger), handler: newHandler(logger),
resolver: net.DefaultResolver, resolver: net.DefaultResolver,
config: config,
openvpn: openvpnHealth{ openvpn: openvpnHealth{
looper: openvpnLooper, looper: openvpnLooper,
currentHealthyWait: settings.OpenVPN.Initial, healthyWait: config.OpenVPN.Initial,
healthyWaitConfig: settings.OpenVPN,
}, },
} }
} }