1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/pkg/webhooks/checker.go

92 lines
2 KiB
Go
Raw Normal View History

2019-10-25 16:55:48 -05:00
package webhooks
import (
"sync"
"time"
"github.com/golang/glog"
kyverno "github.com/nirmata/kyverno/pkg/api/kyverno/v1alpha1"
kyvernoclient "github.com/nirmata/kyverno/pkg/client/clientset/versioned"
)
const MaxRetryCount int = 3
// Last Request Time
type LastReqTime struct {
t time.Time
mu sync.RWMutex
RetryCount int
}
func (t *LastReqTime) Time() time.Time {
t.mu.RLock()
defer t.mu.RUnlock()
return t.t
}
func (t *LastReqTime) SetTime(tm time.Time) {
t.mu.Lock()
defer t.mu.Unlock()
t.t = tm
t.RetryCount = MaxRetryCount
}
func (t *LastReqTime) DecrementRetryCounter() {
t.mu.Lock()
defer t.mu.Unlock()
t.RetryCount--
}
func NewLastReqTime() *LastReqTime {
return &LastReqTime{
t: time.Now(),
}
}
func (t *LastReqTime) checker(kyvernoClient *kyvernoclient.Clientset, defaultResync time.Duration, deadline time.Duration, stopCh <-chan struct{}) {
sendDummyRequest := func(kyvernoClient *kyvernoclient.Clientset) {
dummyPolicy := kyverno.ClusterPolicy{
Spec: kyverno.Spec{
Rules: []kyverno.Rule{
kyverno.Rule{
Name: "dummyPolicy",
MatchResources: kyverno.MatchResources{
ResourceDescription: kyverno.ResourceDescription{
Kinds: []string{"Deployment"},
},
},
Validation: kyverno.Validation{
Message: "dummy validation policy rule",
Pattern: "dummypattern",
},
},
},
},
}
// this
kyvernoClient.KyvernoV1alpha1().ClusterPolicies().Create(&dummyPolicy)
}
glog.V(2).Infof("starting default resync for webhook checker with resync time %d", defaultResync)
ticker := time.NewTicker(defaultResync)
defer ticker.Stop()
for {
select {
case <-ticker.C:
// get current time
timeDiff := time.Since(t.Time())
if timeDiff > deadline {
if t.RetryCount == 0 {
// set the status unavailable
}
t.DecrementRetryCounter()
// send request again
}
case <-stopCh:
// handler termination signal
break
}
}
glog.V(2).Info("stopping default resync for webhook checker")
}