Implement in-memory silences provider

This commit is contained in:
Fabian Reinartz 2015-09-27 13:18:13 +02:00
parent e10ae037d0
commit 0597c1757b
2 changed files with 59 additions and 5 deletions

10
main.go
View File

@ -35,6 +35,7 @@ func main() {
}
memAlerts := provider.NewMemAlerts()
memSilences := provider.NewMemSilences()
inhibitor := &Inhibitor{alerts: memAlerts}
inhibitor.ApplyConfig(conf)
@ -48,11 +49,10 @@ func main() {
Notifier: notifier,
silencer: inhibitor,
}
// TODO(fabxc)
// notifier = &mutingNotifier{
// Notifier: notifier,
// silencer: provider.Silences
// }
notifier = &mutingNotifier{
Notifier: notifier,
silencer: memSilences,
}
disp := NewDispatcher(memAlerts, notifier)

View File

@ -119,3 +119,57 @@ func (a *MemAlerts) Get(fp model.Fingerprint) (*types.Alert, error) {
}
return nil, ErrNotFound
}
type MemSilences struct {
mtx sync.RWMutex
silences map[model.Fingerprint]*types.Silence
}
func NewMemSilences() *MemSilences {
return &MemSilences{
silences: map[model.Fingerprint]*types.Silence{},
}
}
func (s *MemSilences) Mutes(lset model.LabelSet) bool {
s.mtx.RLock()
defer s.mtx.RUnlock()
for _, sil := range s.silences {
if sil.Mutes(lset) {
return true
}
}
return false
}
func (s *MemSilences) All() ([]*types.Silence, error) {
return nil, nil
}
func (s *MemSilences) Set(sil *types.Silence) error {
s.mtx.Lock()
defer s.mtx.Unlock()
s.silences[sil.ID] = sil
return nil
}
func (s *MemSilences) Del(id model.Fingerprint) error {
s.mtx.Lock()
defer s.mtx.Unlock()
delete(s.silences, id)
return nil
}
func (s *MemSilences) Get(id model.Fingerprint) (*types.Silence, error) {
s.mtx.RLock()
defer s.mtx.RUnlock()
sil, ok := s.silences[id]
if !ok {
return nil, ErrNotFound
}
return sil, nil
}