-
Notifications
You must be signed in to change notification settings - Fork 24
/
cluster_alerts.go
73 lines (65 loc) · 1.96 KB
/
cluster_alerts.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package operator
import (
"reflect"
"github.com/appscode/go/log"
"github.com/appscode/kutil/tools/queue"
api "github.com/appscode/searchlight/apis/monitoring/v1alpha1"
"github.com/appscode/searchlight/pkg/eventer"
"github.com/golang/glog"
core "k8s.io/api/core/v1"
"k8s.io/client-go/tools/cache"
)
func (op *Operator) initClusterAlertWatcher() {
op.caInformer = op.monInformerFactory.Monitoring().V1alpha1().ClusterAlerts().Informer()
op.caQueue = queue.New("ClusterAlert", op.MaxNumRequeues, op.NumThreads, op.reconcileClusterAlert)
op.caInformer.AddEventHandler(&cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {
alert := obj.(*api.ClusterAlert)
if op.isValid(alert) {
queue.Enqueue(op.caQueue.GetQueue(), obj)
}
},
UpdateFunc: func(oldObj interface{}, newObj interface{}) {
old := oldObj.(*api.ClusterAlert)
nu := newObj.(*api.ClusterAlert)
if reflect.DeepEqual(old.Spec, nu.Spec) {
return
}
if op.isValid(nu) {
queue.Enqueue(op.caQueue.GetQueue(), nu)
}
},
DeleteFunc: func(obj interface{}) {
queue.Enqueue(op.caQueue.GetQueue(), obj)
},
})
op.caLister = op.monInformerFactory.Monitoring().V1alpha1().ClusterAlerts().Lister()
}
func (op *Operator) reconcileClusterAlert(key string) error {
obj, exists, err := op.caInformer.GetIndexer().GetByKey(key)
if err != nil {
glog.Errorf("Fetching object with key %s from store failed with %v", key, err)
return err
}
if !exists {
log.Debugf("ClusterAlert %s does not exist anymore\n", key)
namespace, name, err := cache.SplitMetaNamespaceKey(key)
if err != nil {
return err
}
return op.clusterHost.Delete(namespace, name)
}
alert := obj.(*api.ClusterAlert).DeepCopy()
log.Infof("Sync/Add/Update for ClusterAlert %s\n", alert.GetName())
err = op.clusterHost.Apply(alert)
if err != nil {
op.recorder.Eventf(
alert.ObjectReference(),
core.EventTypeWarning,
eventer.EventReasonFailedToSync,
`Reason: %v`,
err,
)
}
return err
}