Add UpdateCertificateStatus call, comment implementation

Signed-off-by: Michael Tsang <michael.tsang@jetstack.io>
This commit is contained in:
Michael Tsang 2019-06-20 15:06:16 +01:00
parent 19eeb210c7
commit f3baab085e
2 changed files with 38 additions and 19 deletions

View File

@ -585,6 +585,8 @@ func generateLocallySignedTemporaryCertificate(crt *v1alpha1.Certificate, pk []b
}
func (c *controller) updateCertificateStatus(ctx context.Context, old, new *v1alpha1.Certificate) (*v1alpha1.Certificate, error) {
defer c.metrics.UpdateCertificateStatus(new)
log := logf.FromContext(ctx, "updateStatus")
oldBytes, _ := json.Marshal(old.Status)
newBytes, _ := json.Marshal(new.Status)

View File

@ -236,11 +236,7 @@ func updateX509Expiry(crt *v1alpha1.Certificate, cert *x509.Certificate) {
CertificateExpiryTimeSeconds.With(prometheus.Labels{
"name": crt.Name,
"namespace": crt.Namespace}).Set(float64(expiryTime.Unix()))
registeredCertificates.certificates[key] = struct{}{}
}
func (m *Metrics) SetActiveCertificates(cl cmlisters.CertificateLister) {
m.activeCertificates = cl
registerCertificateKey(key)
}
func (m *Metrics) UpdateCertificateStatus(crt *v1alpha1.Certificate) {
@ -275,9 +271,23 @@ func updateCertificateReadyStatus(crt *v1alpha1.Certificate, current v1alpha1.Co
"condition": string(condition),
}).Set(value)
}
registerCertificateKey(key)
}
// registerCertificateKey adds an entry in registeredCertificates to track
// which certificates have metrics stored in prometheus, allowing for easier
// clean-up.
// You MUST lock the mutex before calling this function, this ensures no other
// function is cleaning up while we are registering a certificate
func registerCertificateKey(key string) {
registeredCertificates.certificates[key] = struct{}{}
}
func (m *Metrics) SetActiveCertificates(cl cmlisters.CertificateLister) {
m.activeCertificates = cl
}
// cleanUp removes any metrics which reference resources which no longer exist
func (m *Metrics) cleanUp() {
log := logf.FromContext(m.ctx)
log.V(logf.DebugLevel).Info("attempting to clean up metrics for recently deleted certificates")
@ -296,6 +306,7 @@ func (m *Metrics) cleanUp() {
cleanUpCertificates(activeCrts)
}
// cleanUpCertificates removes metrics for recently deleted certificates
func cleanUpCertificates(activeCrts []*v1alpha1.Certificate) {
activeMap := make(map[string]struct{}, len(activeCrts))
for _, crt := range activeCrts {
@ -317,25 +328,31 @@ func cleanUpCertificates(activeCrts []*v1alpha1.Certificate) {
}
for _, key := range toCleanUp {
namespace, name, err := cache.SplitMetaNamespaceKey(key)
if err != nil {
continue
}
cleanUpCertificateByKey(key)
}
}
CertificateExpiryTimeSeconds.Delete(prometheus.Labels{
// cleanUpCertificateByKey removes metrics which refer to a certificate,
// given the key of the certificate.
func cleanUpCertificateByKey(key string) {
namespace, name, err := cache.SplitMetaNamespaceKey(key)
if err != nil {
return
}
CertificateExpiryTimeSeconds.Delete(prometheus.Labels{
"name": name,
"namespace": namespace,
})
for _, condition := range readyConditionStatuses {
CertificateReadyStatus.Delete(prometheus.Labels{
"name": name,
"namespace": namespace,
"condition": string(condition),
})
for _, condition := range readyConditionStatuses {
CertificateReadyStatus.Delete(prometheus.Labels{
"name": name,
"namespace": namespace,
"condition": string(condition),
})
}
delete(registeredCertificates.certificates, key)
}
delete(registeredCertificates.certificates, key)
}
func (m *Metrics) IncrementSyncCallCount(controllerName string) {