2017-05-22 20:07:40 +00:00
|
|
|
package mock
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
"github.com/hashicorp/consul/types"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Notify struct {
|
2017-07-12 14:01:42 +00:00
|
|
|
updated chan int
|
2017-05-22 20:07:40 +00:00
|
|
|
|
|
|
|
// A guard to protect an access to the internal attributes
|
|
|
|
// of the notification mock in order to prevent panics
|
|
|
|
// raised by the race conditions detector.
|
|
|
|
sync.RWMutex
|
2017-07-12 14:01:42 +00:00
|
|
|
state map[types.CheckID]string
|
|
|
|
updates map[types.CheckID]int
|
|
|
|
output map[types.CheckID]string
|
2017-05-22 20:07:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func NewNotify() *Notify {
|
|
|
|
return &Notify{
|
|
|
|
state: make(map[types.CheckID]string),
|
|
|
|
updates: make(map[types.CheckID]int),
|
|
|
|
output: make(map[types.CheckID]string),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-07-12 14:01:42 +00:00
|
|
|
func NewNotifyChan() (*Notify, chan int) {
|
|
|
|
n := &Notify{
|
|
|
|
updated: make(chan int),
|
|
|
|
state: make(map[types.CheckID]string),
|
|
|
|
updates: make(map[types.CheckID]int),
|
|
|
|
output: make(map[types.CheckID]string),
|
|
|
|
}
|
|
|
|
return n, n.updated
|
|
|
|
}
|
|
|
|
|
2017-05-22 20:07:40 +00:00
|
|
|
func (m *Notify) sprintf(v interface{}) string {
|
|
|
|
m.RLock()
|
|
|
|
defer m.RUnlock()
|
|
|
|
return fmt.Sprintf("%v", v)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Notify) StateMap() string { return m.sprintf(m.state) }
|
|
|
|
func (m *Notify) UpdatesMap() string { return m.sprintf(m.updates) }
|
|
|
|
func (m *Notify) OutputMap() string { return m.sprintf(m.output) }
|
|
|
|
|
|
|
|
func (m *Notify) UpdateCheck(id types.CheckID, status, output string) {
|
|
|
|
m.Lock()
|
|
|
|
m.state[id] = status
|
|
|
|
old := m.updates[id]
|
|
|
|
m.updates[id] = old + 1
|
|
|
|
m.output[id] = output
|
2017-07-12 14:01:42 +00:00
|
|
|
m.Unlock()
|
|
|
|
|
|
|
|
if m.updated != nil {
|
|
|
|
m.updated <- 1
|
|
|
|
}
|
2017-05-22 20:07:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// State returns the state of the specified health-check.
|
|
|
|
func (m *Notify) State(id types.CheckID) string {
|
|
|
|
m.RLock()
|
|
|
|
defer m.RUnlock()
|
|
|
|
return m.state[id]
|
|
|
|
}
|
|
|
|
|
|
|
|
// Updates returns the count of updates of the specified health-check.
|
|
|
|
func (m *Notify) Updates(id types.CheckID) int {
|
|
|
|
m.RLock()
|
|
|
|
defer m.RUnlock()
|
|
|
|
return m.updates[id]
|
|
|
|
}
|
|
|
|
|
|
|
|
// Output returns an output string of the specified health-check.
|
|
|
|
func (m *Notify) Output(id types.CheckID) string {
|
|
|
|
m.RLock()
|
|
|
|
defer m.RUnlock()
|
|
|
|
return m.output[id]
|
|
|
|
}
|