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