mirror of
https://github.com/coredns/coredns.git
synced 2025-10-27 08:14:18 -04:00
Switched health and autopath plugin to allow any plugins to be used instead of a hardcoded list. I did not switch federation over since it wasn't obvious that anything other than kubernetes could be used with it. Fixes #1291
39 lines
1.0 KiB
Go
39 lines
1.0 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)
|
|
}
|