Documentation ¶
Overview ¶
Package health is a library that enables *async* dependency health checking for services running on an orchestrated container platform such as kubernetes or mesos.
For additional overview, documentation and contribution guidelines, refer to the project's "README.md".
For example usage, refer to https://github.com/InVisionApp/go-health/tree/master/examples/simple-http-server.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrNoAddCfgWhenActive is returned when you attempt to add check(s) to an already active healthcheck instance ErrNoAddCfgWhenActive = errors.New("Unable to add new check configuration(s) while healthcheck is active") // ErrAlreadyRunning is returned when you attempt to "h.Start()" an already running healthcheck ErrAlreadyRunning = errors.New("Healthcheck is already running - nothing to start") // ErrAlreadyStopped is returned when you attempt to "h.Stop()" a non-running healthcheck instance ErrAlreadyStopped = errors.New("Healthcheck is not running - nothing to stop") // ErrEmptyConfigs is returned when you attempt to add an empty slice of configs via "h.AddChecks()" ErrEmptyConfigs = errors.New("Configs appears to be empty - nothing to add") )
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct { // Name of the check Name string // Checker instance used to perform health check Checker ICheckable // Interval between health checks Interval time.Duration // Fatal marks a failing health check so that the // entire health check request fails with a 500 error Fatal bool // Hook that gets called when this health check is complete OnComplete func(state *State) }
Config is a struct used for defining and configuring checks.
type Health ¶
type Health struct { Logger log.Logger // StatusListener will report failures and recoveries StatusListener IStatusListener // contains filtered or unexported fields }
Health contains internal go-health internal structures.
func (*Health) AddCheck ¶
AddCheck is used for adding a single check definition to the current health instance.
func (*Health) AddChecks ¶
AddChecks is used for adding multiple check definitions at once (as opposed to adding them sequentially via "AddCheck()").
func (*Health) DisableLogging ¶
func (h *Health) DisableLogging()
DisableLogging will disable all logging by inserting the noop logger.
func (*Health) Failed ¶
Failed will return the basic state of overall health. This should be used when details about the failure are not needed
func (*Health) Start ¶
Start will start all of the defined health checks. Each of the checks run in their own goroutines (as "time.Ticker").
func (*Health) State ¶
State will return a map of all current healthcheck states (thread-safe), a bool indicating whether the healthcheck has fully failed and a potential error.
The returned structs can be used for figuring out additional analytics or used for building your own status handler (as opposed to using the built-in "hc.HandlerBasic" or "hc.HandlerJSON").
The map key is the name of the check.
type ICheckable ¶
type ICheckable interface { // Status allows you to return additional data as an "interface{}" and "error" // to signify that the check has failed. If "interface{}" is non-nil, it will // be exposed under "State.Details" for that particular check. Status() (interface{}, error) }
ICheckable is an interface implemented by a number of bundled checkers such as "MySQLChecker", "RedisChecker" and "HTTPChecker". By implementing the interface, you can feed your own custom checkers into the health library.
type IHealth ¶
type IHealth interface { AddChecks(cfgs []*Config) error AddCheck(cfg *Config) error Start() error Stop() error State() (map[string]State, bool, error) Failed() bool }
The IHealth interface can be useful if you plan on replacing the actual health checker with a mock during testing. Otherwise, you can set "hc.Disable = true" after instantiation.
type IStatusListener ¶
type IStatusListener interface { // HealthCheckFailed is a function that handles the failure of a health // check event. This function is called when a health check state // transitions from passing to failing. // * entry - The recorded state of the health check that triggered the failure HealthCheckFailed(entry *State) // HealthCheckRecovered is a function that handles the recovery of a failed // health check. // * entry - The recorded state of the health check that triggered the recovery // * recordedFailures - the total failed health checks that lapsed // between the failure and recovery // * failureDurationSeconds - the lapsed time, in seconds, of the recovered failure HealthCheckRecovered(entry *State, recordedFailures int64, failureDurationSeconds float64) }
IStatusListener is an interface that handles health check failures and recoveries, primarily for stats recording purposes
type State ¶
type State struct { // Name of the health check Name string `json:"name"` // Status of the health check state ("ok" or "failed") Status string `json:"status"` // Err is the error returned from a failed health check Err string `json:"error,omitempty"` // Fatal shows if the check will affect global result Fatal bool `json:"fatal,omitempty"` // Details contains more contextual detail about a // failing health check. Details interface{} `json:"details,omitempty"` // contains JSON message (that can be marshaled) // CheckTime is the time of the last health check CheckTime time.Time `json:"check_time"` ContiguousFailures int64 `json:"num_failures"` // the number of failures that occurred in a row TimeOfFirstFailure time.Time `json:"first_failure_at"` // the time of the initial transitional failure for any given health check }
State is a struct that contains the results of the latest run of a particular check.