2017-08-27 21:33:38 +01:00
|
|
|
package health
|
|
|
|
|
|
2017-09-14 09:36:06 +01:00
|
|
|
// Healther interface needs to be implemented by each plugin willing to
|
|
|
|
|
// provide healthhceck information to the health plugin. As a second step
|
|
|
|
|
// the plugin needs to registered against the health plugin, by addding
|
2017-08-27 21:33:38 +01:00
|
|
|
// it to healthers map. Note this method should return quickly, i.e. just
|
|
|
|
|
// checking a boolean status, as it is called every second from the health
|
2017-09-14 09:36:06 +01:00
|
|
|
// plugin.
|
2017-08-27 21:33:38 +01:00
|
|
|
type Healther interface {
|
2017-09-14 09:36:06 +01:00
|
|
|
// Health returns a boolean indicating the health status of a plugin.
|
2017-08-27 21:33:38 +01:00
|
|
|
// False indicates unhealthy.
|
|
|
|
|
Health() bool
|
|
|
|
|
}
|
|
|
|
|
|
2017-09-14 09:36:06 +01:00
|
|
|
// Ok returns the global health status of all plugin configured in this server.
|
2017-08-27 21:33:38 +01:00
|
|
|
func (h *health) Ok() bool {
|
|
|
|
|
h.RLock()
|
|
|
|
|
defer h.RUnlock()
|
|
|
|
|
return h.ok
|
|
|
|
|
}
|
|
|
|
|
|
2017-09-14 09:36:06 +01:00
|
|
|
// SetOk sets the global health status of all plugin configured in this server.
|
2017-08-27 21:33:38 +01:00
|
|
|
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)
|
|
|
|
|
}
|
|
|
|
|
|
2017-09-16 14:13:28 +01:00
|
|
|
// Plugins that implements the Healther interface.
|
2017-11-13 09:52:40 +00:00
|
|
|
var healthers = map[string]bool{
|
|
|
|
|
"erratic": true,
|
|
|
|
|
"kubernetes": true,
|
|
|
|
|
}
|