Skip to content

Commit 5c1ce87

Browse files
committed
Use prometheus collector pattern for metrics
Signed-off-by: Jing Liu <[email protected]>
1 parent 186521e commit 5c1ce87

File tree

7 files changed

+465
-283
lines changed

7 files changed

+465
-283
lines changed

manager/manager.go

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import (
3434
cminformers "github.com/cert-manager/cert-manager/pkg/client/informers/externalversions"
3535
cmlisters "github.com/cert-manager/cert-manager/pkg/client/listers/certmanager/v1"
3636
"github.com/go-logr/logr"
37-
"github.com/prometheus/client_golang/prometheus"
3837
apierrors "k8s.io/apimachinery/pkg/api/errors"
3938
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4039
"k8s.io/apimachinery/pkg/labels"
@@ -131,9 +130,6 @@ func NewManager(opts Options) (*Manager, error) {
131130
if opts.Log == nil {
132131
return nil, errors.New("log must be set")
133132
}
134-
if opts.Metrics == nil {
135-
opts.Metrics = metrics.New(opts.Log, prometheus.NewRegistry())
136-
}
137133
if opts.MetadataReader == nil {
138134
return nil, errors.New("MetadataReader must be set")
139135
}
@@ -400,7 +396,9 @@ func (m *Manager) issue(ctx context.Context, volumeID string) error {
400396
log.Info("Processing issuance")
401397

402398
// Increase issue count
403-
m.metrics.IncrementIssueCallCountTotal(m.nodeNameHash, volumeID)
399+
if m.metrics != nil {
400+
m.metrics.IncrementIssueCallCountTotal(m.nodeNameHash, volumeID)
401+
}
404402

405403
if err := m.cleanupStaleRequests(ctx, log, volumeID); err != nil {
406404
return fmt.Errorf("cleaning up stale requests: %w", err)
@@ -609,7 +607,7 @@ func (m *Manager) handleRequest(ctx context.Context, volumeID string, meta metad
609607
// Calculate the default next issuance time.
610608
// The implementation's writeKeypair function may override this value before
611609
// writing to the storage layer.
612-
expiryPoint, renewalPoint, err := getExpiryAndDefaultNextIssuanceTime(req.Status.Certificate)
610+
renewalPoint, err := calculateNextIssuanceTime(req.Status.Certificate)
613611
if err != nil {
614612
return fmt.Errorf("calculating next issuance time: %w", err)
615613
}
@@ -621,10 +619,6 @@ func (m *Manager) handleRequest(ctx context.Context, volumeID string, meta metad
621619
}
622620
log.V(2).Info("Wrote new keypair to storage")
623621

624-
// Update the request metrics.
625-
// Using meta.NextIssuanceTime instead of renewalPoint here, in case writeKeypair overrides the value.
626-
m.metrics.UpdateCertificateRequest(req, expiryPoint, *meta.NextIssuanceTime)
627-
628622
// We must explicitly delete the private key from the pending requests map so that the existing Completed
629623
// request will not be re-used upon renewal.
630624
// Without this, the renewal would pick up the existing issued certificate and re-issue, rather than requesting
@@ -676,9 +670,6 @@ func (m *Manager) cleanupStaleRequests(ctx context.Context, log logr.Logger, vol
676670
}
677671
}
678672

679-
// Remove the CertificateRequest from the metrics.
680-
m.metrics.RemoveCertificateRequest(toDelete.Name, toDelete.Namespace)
681-
682673
log.Info("Deleted CertificateRequest resource", "name", toDelete.Name, "namespace", toDelete.Namespace)
683674
}
684675

@@ -779,7 +770,9 @@ func (m *Manager) ManageVolumeImmediate(ctx context.Context, volumeID string) (m
779770
// how to proceed depending on the context this method was called within.
780771
if err := m.issue(ctx, volumeID); err != nil {
781772
// Increase issue error count
782-
m.metrics.IncrementIssueErrorCountTotal(m.nodeNameHash, volumeID)
773+
if m.metrics != nil {
774+
m.metrics.IncrementIssueErrorCountTotal(m.nodeNameHash, volumeID)
775+
}
783776
return true, err
784777
}
785778
}
@@ -807,8 +800,6 @@ func (m *Manager) manageVolumeIfNotManaged(volumeID string) (managed bool) {
807800
// construct a new channel used to stop management of the volume
808801
stopCh := make(chan struct{})
809802
m.managedVolumes[volumeID] = stopCh
810-
// Increase managed volume count for this driver
811-
m.metrics.IncrementManagedVolumeCountTotal(m.nodeNameHash)
812803

813804
return true
814805
}
@@ -826,10 +817,6 @@ func (m *Manager) startRenewalRoutine(volumeID string) (started bool) {
826817
return false
827818
}
828819

829-
// Increase managed certificate count for this driver.
830-
// We assume each volume will have one certificate to be managed.
831-
m.metrics.IncrementManagedCertificateCountTotal(m.nodeNameHash)
832-
833820
// Create a context that will be cancelled when the stopCh is closed
834821
ctx, cancel := context.WithCancel(context.Background())
835822
go func() {
@@ -866,7 +853,9 @@ func (m *Manager) startRenewalRoutine(volumeID string) (started bool) {
866853
if err := m.issue(issueCtx, volumeID); err != nil {
867854
log.Error(err, "Failed to issue certificate, retrying after applying exponential backoff")
868855
// Increase issue error count
869-
m.metrics.IncrementIssueErrorCountTotal(m.nodeNameHash, volumeID)
856+
if m.metrics != nil {
857+
m.metrics.IncrementIssueErrorCountTotal(m.nodeNameHash, volumeID)
858+
}
870859
return false, nil
871860
}
872861
return true, nil
@@ -906,14 +895,6 @@ func (m *Manager) UnmanageVolume(volumeID string) {
906895
if stopCh, ok := m.managedVolumes[volumeID]; ok {
907896
close(stopCh)
908897
delete(m.managedVolumes, volumeID)
909-
if reqs, err := m.listAllRequestsForVolume(volumeID); err == nil {
910-
// Remove the CertificateRequest from the metrics with the best effort.
911-
for _, req := range reqs {
912-
if req != nil {
913-
m.metrics.RemoveCertificateRequest(req.Name, req.Namespace)
914-
}
915-
}
916-
}
917898
}
918899
}
919900

@@ -959,19 +940,19 @@ func (m *Manager) Stop() {
959940
}
960941
}
961942

962-
// getExpiryAndDefaultNextIssuanceTime will return the certificate expiry time, together with
963-
// default time at which the certificate should be renewed by the driver- 2/3rds through its
964-
// lifetime (NotAfter - NotBefore).
965-
func getExpiryAndDefaultNextIssuanceTime(chain []byte) (time.Time, time.Time, error) {
943+
// calculateNextIssuanceTime will return the default time at which the certificate
944+
// should be renewed by the driver- 2/3rds through its lifetime (NotAfter -
945+
// NotBefore).
946+
func calculateNextIssuanceTime(chain []byte) (time.Time, error) {
966947
block, _ := pem.Decode(chain)
967948
crt, err := x509.ParseCertificate(block.Bytes)
968949
if err != nil {
969-
return time.Time{}, time.Time{}, fmt.Errorf("parsing issued certificate: %w", err)
950+
return time.Time{}, fmt.Errorf("parsing issued certificate: %w", err)
970951
}
971952

972953
actualDuration := crt.NotAfter.Sub(crt.NotBefore)
973954

974955
renewBeforeNotAfter := actualDuration / 3
975956

976-
return crt.NotAfter, crt.NotAfter.Add(-renewBeforeNotAfter), nil
957+
return crt.NotAfter.Add(-renewBeforeNotAfter), nil
977958
}

manager/manager_test.go

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ func TestManager_cleanupStaleRequests(t *testing.T) {
470470
}
471471
}
472472

473-
func Test_getExpiryAndDefaultNextIssuanceTime(t *testing.T) {
473+
func Test_calculateNextIssuanceTime(t *testing.T) {
474474
notBefore := time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC)
475475
notAfter := time.Date(1970, time.January, 4, 0, 0, 0, 0, time.UTC)
476476
pk, err := rsa.GenerateKey(rand.Reader, 2048)
@@ -490,23 +490,20 @@ func Test_getExpiryAndDefaultNextIssuanceTime(t *testing.T) {
490490
certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: derBytes})
491491

492492
tests := map[string]struct {
493-
expTime time.Time
494-
renewTime time.Time
495-
expErr bool
493+
expTime time.Time
494+
expErr bool
496495
}{
497496
"if no attributes given, return 2/3rd certificate lifetime": {
498-
expTime: notAfter,
499-
renewTime: notBefore.AddDate(0, 0, 2),
500-
expErr: false,
497+
expTime: notBefore.AddDate(0, 0, 2),
498+
expErr: false,
501499
},
502500
}
503501

504502
for name, test := range tests {
505503
t.Run(name, func(t *testing.T) {
506-
expTime, renewTime, err := getExpiryAndDefaultNextIssuanceTime(certPEM)
504+
renewTime, err := calculateNextIssuanceTime(certPEM)
507505
assert.Equal(t, test.expErr, err != nil)
508-
assert.Equal(t, test.expTime, expTime)
509-
assert.Equal(t, test.renewTime, renewTime)
506+
assert.Equal(t, test.expTime, renewTime)
510507
})
511508
}
512509
}

metrics/certificaterequest.go

Lines changed: 0 additions & 102 deletions
This file was deleted.

0 commit comments

Comments
 (0)