2020-08-24 09:54:38 +03:00
package lncfg
import (
2020-08-24 09:54:39 +03:00
"errors"
2020-08-24 09:54:38 +03:00
"fmt"
"time"
)
var (
// MinHealthCheckInterval is the minimum interval we allow between
// health checks.
MinHealthCheckInterval = time . Minute
// MinHealthCheckTimeout is the minimum timeout we allow for health
// check calls.
MinHealthCheckTimeout = time . Second
// MinHealthCheckBackoff is the minimum back off we allow between health
// check retries.
MinHealthCheckBackoff = time . Second
)
// HealthCheckConfig contains the configuration for the different health checks
// the lnd runs.
type HealthCheckConfig struct {
ChainCheck * CheckConfig ` group:"chainbackend" namespace:"chainbackend" `
2020-08-24 09:54:39 +03:00
DiskCheck * DiskCheckConfig ` group:"diskspace" namespace:"diskspace" `
2020-12-02 05:34:19 +03:00
TLSCheck * CheckConfig ` group:"tls" namespace:"tls" `
2020-08-24 09:54:38 +03:00
}
// Validate checks the values configured for our health checks.
func ( h * HealthCheckConfig ) Validate ( ) error {
2020-08-24 09:54:39 +03:00
if err := h . ChainCheck . validate ( "chain backend" ) ; err != nil {
return err
}
if err := h . DiskCheck . validate ( "disk space" ) ; err != nil {
return err
}
2020-12-02 05:34:19 +03:00
if err := h . TLSCheck . validate ( "tls" ) ; err != nil {
return err
}
2020-08-24 09:54:39 +03:00
if h . DiskCheck . RequiredRemaining < 0 ||
h . DiskCheck . RequiredRemaining >= 1 {
return errors . New ( "disk required ratio must be in [0:1)" )
}
return nil
2020-08-24 09:54:38 +03:00
}
type CheckConfig struct {
Interval time . Duration ` long:"interval" description:"How often to run a health check." `
Attempts int ` long:"attempts" description:"The number of calls we will make for the check before failing. Set this value to 0 to disable a check." `
Timeout time . Duration ` long:"timeout" description:"The amount of time we allow the health check to take before failing due to timeout." `
Backoff time . Duration ` long:"backoff" description:"The amount of time to back-off between failed health checks." `
}
// validate checks the values in a health check config entry if it is enabled.
func ( c * CheckConfig ) validate ( name string ) error {
if c . Attempts == 0 {
return nil
}
if c . Backoff < MinHealthCheckBackoff {
return fmt . Errorf ( "%v backoff: %v below minimum: %v" , name ,
c . Backoff , MinHealthCheckBackoff )
}
if c . Timeout < MinHealthCheckTimeout {
return fmt . Errorf ( "%v timeout: %v below minimum: %v" , name ,
c . Timeout , MinHealthCheckTimeout )
}
if c . Interval < MinHealthCheckInterval {
return fmt . Errorf ( "%v interval: %v below minimum: %v" , name ,
c . Interval , MinHealthCheckInterval )
}
return nil
}
2020-08-24 09:54:39 +03:00
// DiskCheckConfig contains configuration for ensuring that our node has
// sufficient disk space.
type DiskCheckConfig struct {
RequiredRemaining float64 ` long:"diskrequired" description:"The minimum ratio of free disk space to total capacity that we allow before shutting lnd down safely." `
* CheckConfig
}