| 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 |
| } |