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.
61 lines
1.5 KiB
61 lines
1.5 KiB
package metrics |
|
|
|
// Healthchecks hold an error value describing an arbitrary up/down status. |
|
type Healthcheck interface { |
|
Check() |
|
Error() error |
|
Healthy() |
|
Unhealthy(error) |
|
} |
|
|
|
// NewHealthcheck constructs a new Healthcheck which will use the given |
|
// function to update its status. |
|
func NewHealthcheck(f func(Healthcheck)) Healthcheck { |
|
if UseNilMetrics { |
|
return NilHealthcheck{} |
|
} |
|
return &StandardHealthcheck{nil, f} |
|
} |
|
|
|
// NilHealthcheck is a no-op. |
|
type NilHealthcheck struct{} |
|
|
|
// Check is a no-op. |
|
func (NilHealthcheck) Check() {} |
|
|
|
// Error is a no-op. |
|
func (NilHealthcheck) Error() error { return nil } |
|
|
|
// Healthy is a no-op. |
|
func (NilHealthcheck) Healthy() {} |
|
|
|
// Unhealthy is a no-op. |
|
func (NilHealthcheck) Unhealthy(error) {} |
|
|
|
// StandardHealthcheck is the standard implementation of a Healthcheck and |
|
// stores the status and a function to call to update the status. |
|
type StandardHealthcheck struct { |
|
err error |
|
f func(Healthcheck) |
|
} |
|
|
|
// Check runs the healthcheck function to update the healthcheck's status. |
|
func (h *StandardHealthcheck) Check() { |
|
h.f(h) |
|
} |
|
|
|
// Error returns the healthcheck's status, which will be nil if it is healthy. |
|
func (h *StandardHealthcheck) Error() error { |
|
return h.err |
|
} |
|
|
|
// Healthy marks the healthcheck as healthy. |
|
func (h *StandardHealthcheck) Healthy() { |
|
h.err = nil |
|
} |
|
|
|
// Unhealthy marks the healthcheck as unhealthy. The error is stored and |
|
// may be retrieved by the Error method. |
|
func (h *StandardHealthcheck) Unhealthy(err error) { |
|
h.err = err |
|
}
|
|
|