Skip to content

Commit 899939b

Browse files
authored
Merge pull request #1398 from marquiz/devel/metrics
Refactor metrics
2 parents 83c7096 + 5171ae0 commit 899939b

File tree

7 files changed

+76
-101
lines changed

7 files changed

+76
-101
lines changed

pkg/nfd-master/metrics.go

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,7 @@ limitations under the License.
1717
package nfdmaster
1818

1919
import (
20-
"fmt"
21-
"net/http"
22-
2320
"github.com/prometheus/client_golang/prometheus"
24-
"github.com/prometheus/client_golang/prometheus/promhttp"
25-
"k8s.io/klog/v2"
2621
"sigs.k8s.io/node-feature-discovery/pkg/version"
2722
)
2823

@@ -40,8 +35,6 @@ const (
4035
)
4136

4237
var (
43-
srv *http.Server
44-
4538
buildInfo = prometheus.NewGauge(prometheus.GaugeOpts{
4639
Name: buildInfoQuery,
4740
Help: "Version from which Node Feature Discovery was built.",
@@ -94,33 +87,3 @@ var (
9487
func registerVersion(version string) {
9588
buildInfo.SetToCurrentTime()
9689
}
97-
98-
// runMetricsServer starts a http server to expose metrics
99-
func runMetricsServer(port int) {
100-
r := prometheus.NewRegistry()
101-
r.MustRegister(
102-
buildInfo,
103-
nodeUpdateRequests,
104-
nodeUpdates,
105-
nodeUpdateFailures,
106-
nodeLabelsRejected,
107-
nodeERsRejected,
108-
nodeTaintsRejected,
109-
nfrProcessingTime,
110-
nfrProcessingErrors)
111-
112-
mux := http.NewServeMux()
113-
mux.Handle("/metrics", promhttp.HandlerFor(r, promhttp.HandlerOpts{}))
114-
115-
klog.InfoS("metrics server starting", "port", port)
116-
srv = &http.Server{Addr: fmt.Sprintf(":%d", port), Handler: mux}
117-
klog.InfoS("metrics server stopped", "exitCode", srv.ListenAndServe())
118-
}
119-
120-
// stopMetricsServer stops the metrics server
121-
func stopMetricsServer() {
122-
if srv != nil {
123-
klog.InfoS("stopping metrics server", "port", srv.Addr)
124-
srv.Close()
125-
}
126-
}

pkg/nfd-master/nfd-master.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,9 +250,19 @@ func (m *nfdMaster) Run() error {
250250

251251
// Register to metrics server
252252
if m.args.MetricsPort > 0 {
253-
go runMetricsServer(m.args.MetricsPort)
253+
m := utils.CreateMetricsServer(m.args.MetricsPort,
254+
buildInfo,
255+
nodeUpdateRequests,
256+
nodeUpdates,
257+
nodeUpdateFailures,
258+
nodeLabelsRejected,
259+
nodeERsRejected,
260+
nodeTaintsRejected,
261+
nfrProcessingTime,
262+
nfrProcessingErrors)
263+
go m.Run()
254264
registerVersion(version.Get())
255-
defer stopMetricsServer()
265+
defer m.Stop()
256266
}
257267

258268
// Run gRPC server

pkg/nfd-topology-updater/metrics.go

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,7 @@ limitations under the License.
1717
package nfdtopologyupdater
1818

1919
import (
20-
"fmt"
21-
"net/http"
22-
2320
"github.com/prometheus/client_golang/prometheus"
24-
"github.com/prometheus/client_golang/prometheus/promhttp"
25-
"k8s.io/klog/v2"
2621
"sigs.k8s.io/node-feature-discovery/pkg/version"
2722
)
2823

@@ -33,8 +28,6 @@ const (
3328
)
3429

3530
var (
36-
srv *http.Server
37-
3831
buildInfo = prometheus.NewGauge(prometheus.GaugeOpts{
3932
Name: buildInfoQuery,
4033
Help: "Version from which Node Feature Discovery was built.",
@@ -52,24 +45,3 @@ var (
5245
func registerVersion(version string) {
5346
buildInfo.SetToCurrentTime()
5447
}
55-
56-
// runMetricsServer starts a http server to expose metrics
57-
func runMetricsServer(port int) {
58-
r := prometheus.NewRegistry()
59-
r.MustRegister(buildInfo,
60-
scanErrors)
61-
mux := http.NewServeMux()
62-
mux.Handle("/metrics", promhttp.HandlerFor(r, promhttp.HandlerOpts{}))
63-
64-
klog.InfoS("metrics server starting", "port", port)
65-
srv = &http.Server{Addr: fmt.Sprintf(":%d", port), Handler: mux}
66-
klog.InfoS("metrics server stopped", "exitCode", srv.ListenAndServe())
67-
}
68-
69-
// stopMetricsServer stops the metrics server
70-
func stopMetricsServer() {
71-
if srv != nil {
72-
klog.InfoS("stopping metrics server", "port", srv.Addr)
73-
srv.Close()
74-
}
75-
}

pkg/nfd-topology-updater/nfd-topology-updater.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,12 @@ func (w *nfdTopologyUpdater) Run() error {
144144

145145
// Register to metrics server
146146
if w.args.MetricsPort > 0 {
147-
go runMetricsServer(w.args.MetricsPort)
147+
m := utils.CreateMetricsServer(w.args.MetricsPort,
148+
buildInfo,
149+
scanErrors)
150+
go m.Run()
148151
registerVersion(version.Get())
149-
defer stopMetricsServer()
152+
defer m.Stop()
150153
}
151154

152155
var resScan resourcemonitor.ResourcesScanner

pkg/nfd-worker/metrics.go

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,17 @@ limitations under the License.
1717
package nfdworker
1818

1919
import (
20-
"fmt"
21-
"net/http"
22-
2320
"github.com/prometheus/client_golang/prometheus"
24-
"github.com/prometheus/client_golang/prometheus/promhttp"
25-
"k8s.io/klog/v2"
2621
"sigs.k8s.io/node-feature-discovery/pkg/version"
2722
)
2823

29-
// When adding metric names, see https://prometheus.io/docs/practices/naming/#metric-names
3024
// When adding metric names, see https://prometheus.io/docs/practices/naming/#metric-names
3125
const (
3226
buildInfoQuery = "nfd_worker_build_info"
3327
featureDiscoveryDurationQuery = "nfd_feature_discovery_duration_seconds"
3428
)
3529

3630
var (
37-
srv *http.Server
38-
3931
featureDiscoveryDuration = prometheus.NewHistogramVec(
4032
prometheus.HistogramOpts{
4133
Name: featureDiscoveryDurationQuery,
@@ -57,25 +49,3 @@ var (
5749
func registerVersion(version string) {
5850
buildInfo.SetToCurrentTime()
5951
}
60-
61-
// runMetricsServer starts a http server to expose metrics
62-
func runMetricsServer(port int) {
63-
r := prometheus.NewRegistry()
64-
r.MustRegister(featureDiscoveryDuration)
65-
r.MustRegister(buildInfo)
66-
67-
mux := http.NewServeMux()
68-
mux.Handle("/metrics", promhttp.HandlerFor(r, promhttp.HandlerOpts{}))
69-
70-
klog.InfoS("metrics server starting", "port", port)
71-
srv = &http.Server{Addr: fmt.Sprintf(":%d", port), Handler: mux}
72-
klog.InfoS("metrics server stopped", "exit code", srv.ListenAndServe())
73-
}
74-
75-
// stopMetricsServer stops the metrics server
76-
func stopMetricsServer() {
77-
if srv != nil {
78-
klog.InfoS("stopping metrics server", "port", srv.Addr)
79-
srv.Close()
80-
}
81-
}

pkg/nfd-worker/nfd-worker.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,9 +243,12 @@ func (w *nfdWorker) Run() error {
243243

244244
// Register to metrics server
245245
if w.args.MetricsPort > 0 {
246-
go runMetricsServer(w.args.MetricsPort)
246+
m := utils.CreateMetricsServer(w.args.MetricsPort,
247+
buildInfo,
248+
featureDiscoveryDuration)
249+
go m.Run()
247250
registerVersion(version.Get())
248-
defer stopMetricsServer()
251+
defer m.Stop()
249252
}
250253

251254
err = w.runFeatureDiscovery()

pkg/utils/metrics.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
Copyright 2023 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package utils
18+
19+
import (
20+
"fmt"
21+
"net/http"
22+
23+
"github.com/prometheus/client_golang/prometheus"
24+
"github.com/prometheus/client_golang/prometheus/promhttp"
25+
"k8s.io/klog/v2"
26+
)
27+
28+
type MetricsServer struct {
29+
srv *http.Server
30+
}
31+
32+
// RunMetricsServer starts a new http server to expose metrics.
33+
func CreateMetricsServer(port int, cs ...prometheus.Collector) *MetricsServer {
34+
r := prometheus.NewRegistry()
35+
r.MustRegister(cs...)
36+
mux := http.NewServeMux()
37+
mux.Handle("/metrics", promhttp.HandlerFor(r, promhttp.HandlerOpts{}))
38+
39+
return &MetricsServer{srv: &http.Server{Addr: fmt.Sprintf(":%d", port), Handler: mux}}
40+
}
41+
42+
// Run runs the metrics server.
43+
func (s *MetricsServer) Run() {
44+
klog.InfoS("metrics server starting", "port", s.srv.Addr)
45+
klog.InfoS("metrics server stopped", "exitCode", s.srv.ListenAndServe())
46+
}
47+
48+
// Stop stops the metrics server.
49+
func (s *MetricsServer) Stop() {
50+
if s.srv != nil {
51+
klog.InfoS("stopping metrics server", "port", s.srv.Addr)
52+
s.srv.Close()
53+
}
54+
}

0 commit comments

Comments
 (0)