36 lines
915 B
Go
36 lines
915 B
Go
package health
|
|
|
|
// Healther interface needs to be implemented by each plugin willing to provide
|
|
// healthhceck information to the health plugin. Note this method should return
|
|
// quickly, i.e. just checking a boolean status, as it is called every second
|
|
// from the health plugin.
|
|
type Healther interface {
|
|
// Health returns a boolean indicating the health status of a plugin.
|
|
// False indicates unhealthy.
|
|
Health() bool
|
|
}
|
|
|
|
// Ok returns the global health status of all plugin configured in this server.
|
|
func (h *health) Ok() bool {
|
|
h.RLock()
|
|
defer h.RUnlock()
|
|
return h.ok
|
|
}
|
|
|
|
// SetOk sets the global health status of all plugin configured in this server.
|
|
func (h *health) SetOk(ok bool) {
|
|
h.Lock()
|
|
defer h.Unlock()
|
|
h.ok = ok
|
|
}
|
|
|
|
// poll polls all healthers and sets the global state.
|
|
func (h *health) poll() {
|
|
for _, m := range h.h {
|
|
if !m.Health() {
|
|
h.SetOk(false)
|
|
return
|
|
}
|
|
}
|
|
h.SetOk(true)
|
|
}
|