Skip to content

Commit 76af829

Browse files
committed
Consolidate metrics new function
Signed-off-by: Jing Liu <[email protected]>
1 parent 2e85438 commit 76af829

File tree

6 files changed

+45
-37
lines changed

6 files changed

+45
-37
lines changed

examples/simple/deploy/01_simple-csi-driver.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ spec:
5959
allowPrivilegeEscalation: false
6060
capabilities: { drop: [ "ALL" ] }
6161
readOnlyRootFilesystem: true
62-
image: registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.13.0
62+
image: registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.14.0
6363
args:
6464
- --v=5
6565
- --csi-address=/plugin/csi.sock
@@ -94,6 +94,10 @@ spec:
9494
fieldPath: spec.nodeName
9595
- name: CSI_ENDPOINT
9696
value: unix://plugin/csi.sock
97+
ports:
98+
- containerPort: 9402
99+
name: http-metrics
100+
protocol: TCP
97101
volumeMounts:
98102
- name: plugin-dir
99103
mountPath: /plugin

examples/simple/deploy/02_example-app.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ spec:
4848
runAsUser: 2000
4949
containers:
5050
- name: my-frontend
51-
image: busybox:1.35.0
51+
image: busybox:1.36.1
5252
volumeMounts:
5353
- mountPath: "/tls"
5454
name: tls

examples/simple/main.go

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import (
4343
"github.com/cert-manager/csi-lib/metadata"
4444
"github.com/cert-manager/csi-lib/metrics"
4545
"github.com/cert-manager/csi-lib/storage"
46+
"github.com/go-logr/logr"
4647
"github.com/prometheus/client_golang/prometheus"
4748
"golang.org/x/sync/errgroup"
4849
"k8s.io/client-go/rest"
@@ -113,10 +114,16 @@ func main() {
113114
ctx, cancel := context.WithCancel(context.Background())
114115
defer cancel()
115116

116-
metricsHandler, err := startMetricsServer(ctx, *nodeID, log, cmClient, store)
117-
if err != nil {
118-
panic("failed to setup metrics server: " + err.Error())
119-
}
117+
certRequestInformerFactory := externalversions.NewSharedInformerFactory(cmClient, 5*time.Second)
118+
certRequestInformer := certRequestInformerFactory.Certmanager().V1().CertificateRequests()
119+
metricsHandler := metrics.New(*nodeID, &log, prometheus.NewRegistry(), store, certRequestInformer.Lister())
120+
121+
go func() {
122+
err := startMetricsServer(ctx, log, metricsHandler, certRequestInformerFactory)
123+
if err != nil {
124+
panic("failed to setup metrics server: " + err.Error())
125+
}
126+
}()
120127

121128
d, err := driver.New(ctx, *endpoint, log, driver.Options{
122129
DriverName: "csi.cert-manager.io",
@@ -367,32 +374,20 @@ func keyUsagesFromAttributes(usagesCSV string) []cmapi.KeyUsage {
367374
return keyUsages
368375
}
369376

370-
// startMetricsServer starts a server listening on port 6443, until the supplied context is cancelled,
377+
// startMetricsServer starts a server listening on port 9402, until the supplied context is cancelled,
371378
// after which the server will gracefully shutdown (within 5 seconds).
372379
func startMetricsServer(
373380
rootCtx context.Context,
374-
nodeId string,
375381
logger logr.Logger,
376-
cmClient *cmclient.Clientset,
377-
metadataReader storage.MetadataReader,
378-
) (*metrics.Metrics, error) {
382+
metricsHandler *metrics.Metrics,
383+
certRequestInformerFactory externalversions.SharedInformerFactory,
384+
) error {
379385
g, ctx := errgroup.WithContext(rootCtx)
380-
defer func() {
381-
if err := g.Wait(); err != nil {
382-
logger.Error(err, "fail to stop metric server")
383-
}
384-
}()
385-
386-
metricsHandler := metrics.New(&logger, prometheus.NewRegistry())
387-
388-
certRequestInformerFactory := externalversions.NewSharedInformerFactory(cmClient, 5*time.Second)
389-
certRequestInformer := certRequestInformerFactory.Certmanager().V1().CertificateRequests()
390-
metricsHandler.SetupCertificateRequestCollector(nodeId, metadataReader, certRequestInformer.Lister())
391386

392387
listenConfig := &net.ListenConfig{}
393-
metricsLn, err := listenConfig.Listen(ctx, "tcp", "127.0.0.1:6443")
388+
metricsLn, err := listenConfig.Listen(ctx, "tcp", ":9402")
394389
if err != nil {
395-
return nil, err
390+
return err
396391
}
397392
metricsServer := &http.Server{
398393
Addr: metricsLn.Addr().String(),
@@ -423,5 +418,5 @@ func startMetricsServer(
423418
}
424419
return nil
425420
})
426-
return metricsHandler, nil
421+
return g.Wait()
427422
}

metrics/certificaterequest_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,6 @@ func TestCertificateRequestMetrics(t *testing.T) {
215215
for n, test := range tests {
216216
t.Run(n, func(t *testing.T) {
217217
testLog := testr.New(t)
218-
m := New(&testLog, prometheus.NewRegistry())
219218

220219
fakeClient := fake.NewSimpleClientset()
221220
factory := externalversions.NewSharedInformerFactory(fakeClient, 0)
@@ -228,7 +227,7 @@ func TestCertificateRequestMetrics(t *testing.T) {
228227
assert.NoError(t, err)
229228
fakeMetadata := storage.NewMemoryFS()
230229
fakeMetadata.RegisterMetadata(test.meta)
231-
m.SetupCertificateRequestCollector(testNodeName, fakeMetadata, certRequestInformer.Lister())
230+
m := New(testNodeName, &testLog, prometheus.NewRegistry(), fakeMetadata, certRequestInformer.Lister())
232231

233232
if err := testutil.CollectAndCompare(m.certificateRequestCollector,
234233
strings.NewReader(expiryMetadata+test.expectedExpiry),
@@ -354,8 +353,7 @@ func TestCertificateRequestCache(t *testing.T) {
354353
assert.NoError(t, err)
355354

356355
testLog := testr.New(t)
357-
m := New(&testLog, prometheus.NewRegistry())
358-
m.SetupCertificateRequestCollector(testNodeName, fakeMetadata, certRequestInformer.Lister())
356+
m := New(testNodeName, &testLog, prometheus.NewRegistry(), fakeMetadata, certRequestInformer.Lister())
359357

360358
// Check all three metrics exist
361359
if err := testutil.CollectAndCompare(m.certificateRequestCollector,

metrics/metrics.go

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,13 @@ type Metrics struct {
4545
}
4646

4747
// New creates a Metrics struct and populates it with prometheus metric types.
48-
func New(logger *logr.Logger, registry *prometheus.Registry) *Metrics {
48+
func New(
49+
nodeId string,
50+
logger *logr.Logger,
51+
registry *prometheus.Registry,
52+
metadataReader storage.MetadataReader,
53+
certificateRequestLister cmlisters.CertificateRequestLister,
54+
) *Metrics {
4955
var (
5056
// driverIssueCallCountTotal is a Prometheus counter for the number of issue() calls made by the driver.
5157
driverIssueCallCountTotal = prometheus.NewCounterVec(
@@ -71,20 +77,26 @@ func New(logger *logr.Logger, registry *prometheus.Registry) *Metrics {
7177
)
7278
)
7379

74-
registry.MustRegister(
75-
driverIssueCallCountTotal,
76-
driverIssueErrorCountTotal,
77-
)
78-
7980
// Create server and register Prometheus metrics handler
8081
m := &Metrics{
8182
log: logger.WithName("metrics"),
8283
registry: registry,
8384

8485
driverIssueCallCountTotal: driverIssueCallCountTotal,
8586
driverIssueErrorCountTotal: driverIssueErrorCountTotal,
87+
certificateRequestCollector: NewCertificateRequestCollector(
88+
internalapiutil.HashIdentifier(nodeId),
89+
metadataReader,
90+
certificateRequestLister,
91+
),
8692
}
8793

94+
m.registry.MustRegister(
95+
driverIssueCallCountTotal,
96+
driverIssueErrorCountTotal,
97+
m.certificateRequestCollector,
98+
)
99+
88100
return m
89101
}
90102

test/integration/metrics_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,13 @@ func TestMetricsServer(t *testing.T) {
100100
testNodeId := "test-node"
101101

102102
// Build metrics handler, and start metrics server with a random available port
103-
metricsHandler := metrics.New(&testLog, prometheus.NewRegistry())
104103
store := storage.NewMemoryFS()
105104
fakeClient := fake.NewSimpleClientset()
106105
// client-go imposes a minimum resync period of 1 second, so that is the lowest we can go
107106
// https://github.com/kubernetes/client-go/blob/5a019202120ab4dd7dfb3788e5cb87269f343ebe/tools/cache/shared_informer.go#L575
108107
factory := externalversions.NewSharedInformerFactory(fakeClient, time.Second)
109108
certRequestInformer := factory.Certmanager().V1().CertificateRequests()
110-
metricsHandler.SetupCertificateRequestCollector(testNodeId, store, certRequestInformer.Lister())
109+
metricsHandler := metrics.New(testNodeId, &testLog, prometheus.NewRegistry(), store, certRequestInformer.Lister())
111110
factory.Start(ctx.Done())
112111
factory.WaitForCacheSync(ctx.Done())
113112

0 commit comments

Comments
 (0)