Skip to content

Commit abf1563

Browse files
committed
Resolve comments for metrics package
fixes: #60 Signed-off-by: Jing Liu <[email protected]>
1 parent 5f85df6 commit abf1563

File tree

4 files changed

+24
-34
lines changed

4 files changed

+24
-34
lines changed

manager/manager.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ 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"
3738
apierrors "k8s.io/apimachinery/pkg/api/errors"
3839
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3940
"k8s.io/apimachinery/pkg/labels"
@@ -131,7 +132,7 @@ func NewManager(opts Options) (*Manager, error) {
131132
return nil, errors.New("log must be set")
132133
}
133134
if opts.Metrics == nil {
134-
opts.Metrics = metrics.New(opts.Log)
135+
opts.Metrics = metrics.New(opts.Log, prometheus.NewRegistry())
135136
}
136137
if opts.MetadataReader == nil {
137138
return nil, errors.New("MetadataReader must be set")

metrics/certificaterequest_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"time"
2323

2424
"github.com/go-logr/logr/testr"
25+
"github.com/prometheus/client_golang/prometheus"
2526
"github.com/prometheus/client_golang/prometheus/testutil"
2627
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2728

@@ -188,7 +189,7 @@ func TestCertificateRequestMetrics(t *testing.T) {
188189
for n, test := range tests {
189190
t.Run(n, func(t *testing.T) {
190191
testLog := testr.New(t)
191-
m := New(&testLog)
192+
m := New(&testLog, prometheus.NewRegistry())
192193
m.UpdateCertificateRequest(test.cr, test.notAfter, test.renewBefore)
193194

194195
if err := testutil.CollectAndCompare(m.certificateRequestExpiryTimeSeconds,
@@ -217,7 +218,7 @@ func TestCertificateRequestMetrics(t *testing.T) {
217218

218219
func TestCertificateRequestCache(t *testing.T) {
219220
testLog := testr.New(t)
220-
m := New(&testLog)
221+
m := New(&testLog, prometheus.NewRegistry())
221222

222223
// private key to be used to generate X509 certificate
223224
privKey := testcrypto.MustCreatePEMPrivateKey(t)

metrics/metrics.go

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,17 @@ limitations under the License.
1717
package metrics
1818

1919
import (
20-
"net"
2120
"net/http"
22-
"time"
2321

2422
"github.com/go-logr/logr"
2523
"github.com/prometheus/client_golang/prometheus"
26-
"github.com/prometheus/client_golang/prometheus/collectors"
2724
"github.com/prometheus/client_golang/prometheus/promhttp"
2825
)
2926

3027
const (
3128
// Namespace is the namespace for csi-lib metric names
32-
namespace = "certmanager"
33-
subsystem = "csi"
34-
prometheusMetricsServerReadTimeout = 8 * time.Second
35-
prometheusMetricsServerWriteTimeout = 8 * time.Second
36-
prometheusMetricsServerMaxHeaderBytes = 1 << 20 // 1 MiB
29+
namespace = "certmanager"
30+
subsystem = "csi"
3731
)
3832

3933
// Metrics is designed to be a shared object for updating the metrics exposed by csi-lib
@@ -51,7 +45,7 @@ type Metrics struct {
5145
}
5246

5347
// New creates a Metrics struct and populates it with prometheus metric types.
54-
func New(logger *logr.Logger) *Metrics {
48+
func New(logger *logr.Logger, registry *prometheus.Registry) *Metrics {
5549
var (
5650
certificateRequestExpiryTimeSeconds = prometheus.NewGaugeVec(
5751
prometheus.GaugeOpts{
@@ -124,12 +118,6 @@ func New(logger *logr.Logger) *Metrics {
124118
)
125119
)
126120

127-
// Create Registry and register the recommended collectors
128-
registry := prometheus.NewRegistry()
129-
registry.MustRegister(
130-
collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}),
131-
collectors.NewGoCollector(),
132-
)
133121
// Create server and register Prometheus metrics handler
134122
m := &Metrics{
135123
log: logger.WithName("metrics"),
@@ -144,11 +132,6 @@ func New(logger *logr.Logger) *Metrics {
144132
managedCertificateCount: managedCertificateCount,
145133
}
146134

147-
return m
148-
}
149-
150-
// NewServer registers Prometheus metrics and returns a new Prometheus metrics HTTP server.
151-
func (m *Metrics) NewServer(ln net.Listener) *http.Server {
152135
m.registry.MustRegister(m.certificateRequestExpiryTimeSeconds)
153136
m.registry.MustRegister(m.certificateRequestRenewalTimeSeconds)
154137
m.registry.MustRegister(m.certificateRequestReadyStatus)
@@ -157,18 +140,15 @@ func (m *Metrics) NewServer(ln net.Listener) *http.Server {
157140
m.registry.MustRegister(m.managedVolumeCount)
158141
m.registry.MustRegister(m.managedCertificateCount)
159142

143+
return m
144+
}
145+
146+
// DefaultHandler returns a default prometheus metrics HTTP handler
147+
func (m *Metrics) DefaultHandler() http.Handler {
160148
mux := http.NewServeMux()
161149
mux.Handle("/metrics", promhttp.HandlerFor(m.registry, promhttp.HandlerOpts{}))
162150

163-
server := &http.Server{
164-
Addr: ln.Addr().String(),
165-
ReadTimeout: prometheusMetricsServerReadTimeout,
166-
WriteTimeout: prometheusMetricsServerWriteTimeout,
167-
MaxHeaderBytes: prometheusMetricsServerMaxHeaderBytes,
168-
Handler: mux,
169-
}
170-
171-
return server
151+
return mux
172152
}
173153

174154
// IncrementIssueCallCount will increase the issue call counter for the driver.

test/integration/metrics_test.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515

1616
"github.com/container-storage-interface/spec/lib/go/csi"
1717
"github.com/go-logr/logr/testr"
18+
"github.com/prometheus/client_golang/prometheus"
1819
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1920
"k8s.io/apimachinery/pkg/util/wait"
2021
fakeclock "k8s.io/utils/clock/testing"
@@ -80,12 +81,19 @@ func TestMetricsServer(t *testing.T) {
8081
testNamespace := "test-ns"
8182

8283
// Build metrics handler, and start metrics server with a random available port
83-
metricsHandler := metrics.New(&testLog)
84+
metricsHandler := metrics.New(&testLog, prometheus.NewRegistry())
8485
metricsLn, err := net.Listen("tcp", "127.0.0.1:0")
8586
if err != nil {
8687
t.Fatal(err)
8788
}
88-
metricsServer := metricsHandler.NewServer(metricsLn)
89+
metricsServer := &http.Server{
90+
Addr: metricsLn.Addr().String(),
91+
ReadTimeout: 8 * time.Second,
92+
WriteTimeout: 8 * time.Second,
93+
MaxHeaderBytes: 1 << 20, // 1 MiB
94+
Handler: metricsHandler.DefaultHandler(),
95+
}
96+
8997
errCh := make(chan error)
9098
go func() {
9199
defer close(errCh)

0 commit comments

Comments
 (0)