Maint: improve health code
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user