53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package kubeprobes
|
|
|
|
import (
|
|
"errors"
|
|
"sync"
|
|
)
|
|
|
|
var errProbeDown = errors.New("DOWN")
|
|
|
|
// StatefulProbe represents the simple probe that can be either
|
|
// marked as "up" (healthy) or "down" (unhealthy).
|
|
type StatefulProbe struct {
|
|
status bool
|
|
mux sync.Mutex
|
|
}
|
|
|
|
// NewStatefulProbe returns a new instance of a stateful probe
|
|
// which can be either marked as "up" (healthy) or "down" (unhealthy).
|
|
// The probe is initially marked as "down".
|
|
func NewStatefulProbe() *StatefulProbe {
|
|
return &StatefulProbe{
|
|
status: false,
|
|
mux: sync.Mutex{},
|
|
}
|
|
}
|
|
|
|
// MarkAsUp marks the probe as healthy
|
|
func (sp *StatefulProbe) MarkAsUp() {
|
|
sp.mux.Lock()
|
|
defer sp.mux.Unlock()
|
|
sp.status = true
|
|
}
|
|
|
|
// MarkAsDown marks the probe as unhealthy
|
|
func (sp *StatefulProbe) MarkAsDown() {
|
|
sp.mux.Lock()
|
|
defer sp.mux.Unlock()
|
|
sp.status = false
|
|
}
|
|
|
|
// GetProbeFunction returns a function that can be used to check
|
|
// whether the probe is healthy or not.
|
|
func (sp *StatefulProbe) GetProbeFunction() ProbeFunction {
|
|
return func() error {
|
|
sp.mux.Lock()
|
|
defer sp.mux.Unlock()
|
|
if sp.status {
|
|
return nil
|
|
}
|
|
return errProbeDown
|
|
}
|
|
}
|