mirror of
https://github.com/coredns/coredns.git
synced 2025-10-27 08:14:18 -04:00
Implement health.Healther in erratic and kubernetes plugin. The kubernetes' healtcheck is only performed on startup - i.e. turn healthy after the initial loading. Erratic follow the drop count: every query%drop turns the healthcheck unhealthy. Fixes: #985
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package health
|
|
|
|
// 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
|
|
// 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
|
|
// 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)
|
|
}
|
|
|
|
// Plugins that implements the Healther interface.
|
|
var healthers = map[string]bool{
|
|
"erratic": true,
|
|
"kubernetes": true,
|
|
}
|