ae9f97221a
* go-metrics: fork library and introduce ResettingTimer and InfluxDB reporter. * vendor: change nonsense/go-metrics to ethersphere/go-metrics * go-metrics: add tests. move ResettingTimer logic from reporter to type. * all, metrics: pull in metrics package in go-ethereum * metrics/test: make sure metrics are enabled for tests * metrics: apply gosimple rules * metrics/exp, internal/debug: init expvar endpoint when starting pprof server * internal/debug: tiny comment formatting fix
62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
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 !Enabled {
|
|
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
|
|
}
|