You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.7 KiB
96 lines
2.7 KiB
package lncfg |
|
|
|
import ( |
|
"errors" |
|
"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"` |
|
|
|
DiskCheck *DiskCheckConfig `group:"diskspace" namespace:"diskspace"` |
|
|
|
TLSCheck *CheckConfig `group:"tls" namespace:"tls"` |
|
} |
|
|
|
// Validate checks the values configured for our health checks. |
|
func (h *HealthCheckConfig) Validate() error { |
|
if err := h.ChainCheck.validate("chain backend"); err != nil { |
|
return err |
|
} |
|
|
|
if err := h.DiskCheck.validate("disk space"); err != nil { |
|
return err |
|
} |
|
|
|
if err := h.TLSCheck.validate("tls"); err != nil { |
|
return err |
|
} |
|
|
|
if h.DiskCheck.RequiredRemaining < 0 || |
|
h.DiskCheck.RequiredRemaining >= 1 { |
|
|
|
return errors.New("disk required ratio must be in [0:1)") |
|
} |
|
|
|
return nil |
|
} |
|
|
|
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 |
|
} |
|
|
|
// 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 |
|
}
|
|
|