Skip to content
This repository was archived by the owner on Dec 20, 2024. It is now read-only.

Commit aba48ed

Browse files
committed
add register parameter when register metrics
Signed-off-by: yeya24 <[email protected]>
1 parent 3dc9888 commit aba48ed

File tree

19 files changed

+132
-139
lines changed

19 files changed

+132
-139
lines changed

dfdaemon/server.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/dragonflyoss/Dragonfly/version"
2929

3030
"github.com/pkg/errors"
31+
"github.com/prometheus/client_golang/prometheus"
3132
"github.com/sirupsen/logrus"
3233
)
3334

@@ -83,6 +84,8 @@ func New(opts ...Option) (*Server, error) {
8384
},
8485
proxy: p,
8586
}
87+
// register dfdaemon build information
88+
version.NewBuildInfo("dfdaemon", prometheus.DefaultRegisterer)
8689

8790
for _, opt := range opts {
8891
if err := opt(s); err != nil {
@@ -121,8 +124,6 @@ func (s *Server) Start() error {
121124
} else {
122125
logrus.Infof("start dfdaemon http server on %s", s.server.Addr)
123126
}
124-
// register dfdaemon build information
125-
version.NewBuildInfo("dfdaemon")
126127
return s.server.ListenAndServe()
127128
}
128129

docs/user_guide/metrics.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ This doc contains all the metrics that Dragonfly components currently support. N
1212
- dragonfly_supernode_peers{hostname} - dragonfly peers
1313
- dragonfly_supernode_tasks{taskid, cdnstatus} - dragonfly tasks
1414
- dragonfly_supernode_dfgettasks{taskid, callsystem} - dragonfly dfget tasks
15-
- dragonfly_supernode_daemon_dfgettasks{taskid, callsystem} - dragonfly current dfget tasks, which are called from dfdaemon
1615
- dragonfly_supernode_schedule_duration_milliseconds{taskid} - duration for task scheduling in milliseconds
1716
- dragonfly_supernode_trigger_cdn_total{} - total times of triggering cdn.
1817
- dragonfly_supernode_trigger_cdn_failed_total{} - total failed times of triggering cdn.

docs/user_guide/monitoring.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ We provide several functions to add metrics easily. Here is an example to add a
125125
import "github.com/dragonflyoss/Dragonfly/pkg/util"
126126

127127
requestCounter := util.NewCounter("supernode", "http_requests_total",
128-
"Counter of HTTP requests.", []string{"code"})
128+
"Counter of HTTP requests.", []string{"code"}, nil)
129129
requestCounter.WithLabelValues("200").Inc()
130130
```
131131

pkg/metricsutils/metrics_util.go

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,19 @@ package metricsutils
1818

1919
import (
2020
"github.com/prometheus/client_golang/prometheus"
21-
"github.com/prometheus/client_golang/prometheus/promauto"
2221
)
2322

2423
const (
2524
namespace = "dragonfly"
2625
)
2726

28-
// NewCounter will auto-register a Counter metric to prometheus default registry and return it.
29-
// TODO(yeya24): Stop using default registry, add registry as a parameter instead.
30-
func NewCounter(subsystem, name, help string, labels []string) *prometheus.CounterVec {
31-
return promauto.NewCounterVec(
27+
// NewCounter will register a Counter metric to specified registry and return it.
28+
// If registry is not specified, it will register metric to default prometheus registry.
29+
func NewCounter(subsystem, name, help string, labels []string, register prometheus.Registerer) *prometheus.CounterVec {
30+
if register == nil {
31+
register = prometheus.DefaultRegisterer
32+
}
33+
m := prometheus.NewCounterVec(
3234
prometheus.CounterOpts{
3335
Namespace: namespace,
3436
Subsystem: subsystem,
@@ -37,11 +39,17 @@ func NewCounter(subsystem, name, help string, labels []string) *prometheus.Count
3739
},
3840
labels,
3941
)
42+
register.MustRegister(m)
43+
return m
4044
}
4145

42-
// NewGauge will auto-register a Gauge metric to prometheus default registry and return it.
43-
func NewGauge(subsystem, name, help string, labels []string) *prometheus.GaugeVec {
44-
return promauto.NewGaugeVec(
46+
// NewGauge will register a Gauge metric to specified registry and return it.
47+
// If registry is not specified, it will register metric to default prometheus registry.
48+
func NewGauge(subsystem, name, help string, labels []string, register prometheus.Registerer) *prometheus.GaugeVec {
49+
if register == nil {
50+
register = prometheus.DefaultRegisterer
51+
}
52+
m := prometheus.NewGaugeVec(
4553
prometheus.GaugeOpts{
4654
Namespace: namespace,
4755
Subsystem: subsystem,
@@ -50,11 +58,17 @@ func NewGauge(subsystem, name, help string, labels []string) *prometheus.GaugeVe
5058
},
5159
labels,
5260
)
61+
register.MustRegister(m)
62+
return m
5363
}
5464

55-
// NewSummary will auto-register a Summary metric to prometheus default registry and return it.
56-
func NewSummary(subsystem, name, help string, labels []string, objectives map[float64]float64) *prometheus.SummaryVec {
57-
return promauto.NewSummaryVec(
65+
// NewSummary will register a Summary metric to specified registry and return it.
66+
// If registry is not specified, it will register metric to default prometheus registry.
67+
func NewSummary(subsystem, name, help string, labels []string, objectives map[float64]float64, register prometheus.Registerer) *prometheus.SummaryVec {
68+
if register == nil {
69+
register = prometheus.DefaultRegisterer
70+
}
71+
m := prometheus.NewSummaryVec(
5872
prometheus.SummaryOpts{
5973
Namespace: namespace,
6074
Subsystem: subsystem,
@@ -64,11 +78,17 @@ func NewSummary(subsystem, name, help string, labels []string, objectives map[fl
6478
},
6579
labels,
6680
)
81+
register.MustRegister(m)
82+
return m
6783
}
6884

69-
// NewHistogram will auto-register a Histogram metric to prometheus default registry and return it.
70-
func NewHistogram(subsystem, name, help string, labels []string, buckets []float64) *prometheus.HistogramVec {
71-
return promauto.NewHistogramVec(
85+
// NewHistogram will register a Histogram metric to specified registry and return it.
86+
// If registry is not specified, it will register metric to default prometheus registry.
87+
func NewHistogram(subsystem, name, help string, labels []string, buckets []float64, register prometheus.Registerer) *prometheus.HistogramVec {
88+
if register == nil {
89+
register = prometheus.DefaultRegisterer
90+
}
91+
m := prometheus.NewHistogramVec(
7292
prometheus.HistogramOpts{
7393
Namespace: namespace,
7494
Subsystem: subsystem,
@@ -78,4 +98,6 @@ func NewHistogram(subsystem, name, help string, labels []string, buckets []float
7898
},
7999
labels,
80100
)
101+
register.MustRegister(m)
102+
return m
81103
}

pkg/timeutils/time_util.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func GetCurrentTimeMillis() int64 {
2525
return time.Now().UnixNano() / time.Millisecond.Nanoseconds()
2626
}
2727

28-
// GetCurrentTimeMillisFloat returns the time in millis for now in float64 format.
29-
func GetCurrentTimeMillisFloat() float64 {
30-
return float64(time.Now().UnixNano()) / float64(time.Millisecond.Nanoseconds())
28+
// SinceInMilliseconds gets the time since the specified start in milliseconds.
29+
func SinceInMilliseconds(start time.Time) float64 {
30+
return float64(time.Since(start).Nanoseconds()) / float64(time.Millisecond.Nanoseconds())
3131
}

supernode/daemon/daemon.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/dragonflyoss/Dragonfly/supernode/server"
2727

2828
"github.com/go-openapi/strfmt"
29+
"github.com/prometheus/client_golang/prometheus"
2930
"github.com/sirupsen/logrus"
3031
)
3132

@@ -47,7 +48,7 @@ func New(cfg *config.Config) (*Daemon, error) {
4748
return nil, err
4849
}
4950

50-
s, err := server.New(cfg)
51+
s, err := server.New(cfg, prometheus.DefaultRegisterer)
5152
if err != nil {
5253
return nil, err
5354
}

supernode/daemon/mgr/dfgettask/manager.go

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ package dfgettask
1919
import (
2020
"context"
2121
"fmt"
22-
"github.com/dragonflyoss/Dragonfly/pkg/metricsutils"
23-
"github.com/dragonflyoss/Dragonfly/supernode/config"
2422

2523
"github.com/dragonflyoss/Dragonfly/apis/types"
2624
"github.com/dragonflyoss/Dragonfly/pkg/errortypes"
25+
"github.com/dragonflyoss/Dragonfly/pkg/metricsutils"
2726
"github.com/dragonflyoss/Dragonfly/pkg/stringutils"
2827
"github.com/dragonflyoss/Dragonfly/pkg/syncmap"
28+
"github.com/dragonflyoss/Dragonfly/supernode/config"
2929
"github.com/dragonflyoss/Dragonfly/supernode/daemon/mgr"
3030
dutil "github.com/dragonflyoss/Dragonfly/supernode/daemon/util"
3131

@@ -36,17 +36,13 @@ import (
3636
var _ mgr.DfgetTaskMgr = &Manager{}
3737

3838
type metrics struct {
39-
dfgetTasks *prometheus.GaugeVec
40-
dfgetTasksDaemon *prometheus.GaugeVec
39+
dfgetTasks *prometheus.GaugeVec
4140
}
4241

43-
func newMetrics() *metrics {
42+
func newMetrics(register prometheus.Registerer) *metrics {
4443
return &metrics{
4544
dfgetTasks: metricsutils.NewGauge(config.SubsystemSupernode, "dfgettasks",
46-
"The number of dfget tasks", []string{"taskid", "callsystem"}),
47-
48-
dfgetTasksDaemon: metricsutils.NewGauge(config.SubsystemSupernode, "daemon_dfgettasks",
49-
"The number of dfget tasks from dfdaemon", []string{"taskid", "callsystem"}),
45+
"The number of dfget tasks", []string{"taskid", "callsystem"}, register),
5046
}
5147
}
5248

@@ -58,11 +54,11 @@ type Manager struct {
5854
}
5955

6056
// NewManager returns a new Manager.
61-
func NewManager() (*Manager, error) {
57+
func NewManager(register prometheus.Registerer) (*Manager, error) {
6258
return &Manager{
6359
dfgetTaskStore: dutil.NewStore(),
6460
ptoc: syncmap.NewSyncMap(),
65-
metrics: newMetrics(),
61+
metrics: newMetrics(register),
6662
}, nil
6763
}
6864

@@ -93,12 +89,7 @@ func (dtm *Manager) Add(ctx context.Context, dfgetTask *types.DfGetTask) error {
9389

9490
dtm.ptoc.Add(generatePeerKey(dfgetTask.PeerID, dfgetTask.TaskID), dfgetTask.CID)
9591
dtm.dfgetTaskStore.Put(key, dfgetTask)
96-
97-
if dfgetTask.Dfdaemon {
98-
dtm.metrics.dfgetTasksDaemon.WithLabelValues(dfgetTask.TaskID, dfgetTask.CallSystem).Inc()
99-
} else {
100-
dtm.metrics.dfgetTasks.WithLabelValues(dfgetTask.TaskID, dfgetTask.CallSystem).Inc()
101-
}
92+
dtm.metrics.dfgetTasks.WithLabelValues(dfgetTask.TaskID, dfgetTask.CallSystem).Inc()
10293

10394
return nil
10495
}
@@ -130,11 +121,7 @@ func (dtm *Manager) Delete(ctx context.Context, clientID, taskID string) error {
130121
return err
131122
}
132123
dtm.ptoc.Delete(generatePeerKey(dfgetTask.PeerID, dfgetTask.TaskID))
133-
if dfgetTask.Dfdaemon {
134-
dtm.metrics.dfgetTasksDaemon.WithLabelValues(dfgetTask.TaskID, dfgetTask.CallSystem).Dec()
135-
} else {
136-
dtm.metrics.dfgetTasks.WithLabelValues(dfgetTask.TaskID, dfgetTask.CallSystem).Dec()
137-
}
124+
dtm.metrics.dfgetTasks.WithLabelValues(dfgetTask.TaskID, dfgetTask.CallSystem).Dec()
138125
return dtm.dfgetTaskStore.Delete(key)
139126
}
140127

supernode/daemon/mgr/dfgettask/manager_test.go

Lines changed: 17 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,9 @@ func init() {
3939
type DfgetTaskMgrTestSuite struct {
4040
}
4141

42-
// SetUpTest does common setup in the beginning of each test.
43-
func (s *DfgetTaskMgrTestSuite) SetUpTest(c *check.C) {
44-
// In every test, we should reset Prometheus default registry, otherwise
45-
// it will panic because of duplicate metricsutils.
46-
prometheus.DefaultRegisterer = prometheus.NewRegistry()
47-
}
48-
4942
func (s *DfgetTaskMgrTestSuite) TestDfgetTaskAdd(c *check.C) {
50-
manager, _ := NewManager()
51-
dfgetNum := manager.metrics.dfgetTasks
52-
dfgetDaemonNum := manager.metrics.dfgetTasksDaemon
43+
manager, _ := NewManager(prometheus.NewRegistry())
44+
dfgetTasks := manager.metrics.dfgetTasks
5345

5446
var testCases = []struct {
5547
dfgetTask *types.DfGetTask
@@ -80,7 +72,7 @@ func (s *DfgetTaskMgrTestSuite) TestDfgetTaskAdd(c *check.C) {
8072
dfgetTask: &types.DfGetTask{
8173
CID: "bar",
8274
CallSystem: "bar",
83-
Dfdaemon: true,
75+
Dfdaemon: false,
8476
Path: "/peer/file/taskFileName",
8577
PieceSize: 4 * 1024 * 1024,
8678
TaskID: "test2",
@@ -89,7 +81,7 @@ func (s *DfgetTaskMgrTestSuite) TestDfgetTaskAdd(c *check.C) {
8981
Expect: &types.DfGetTask{
9082
CID: "bar",
9183
CallSystem: "bar",
92-
Dfdaemon: true,
84+
Dfdaemon: false,
9385
Path: "/peer/file/taskFileName",
9486
PieceSize: 4 * 1024 * 1024,
9587
TaskID: "test2",
@@ -102,24 +94,17 @@ func (s *DfgetTaskMgrTestSuite) TestDfgetTaskAdd(c *check.C) {
10294
for _, tc := range testCases {
10395
err := manager.Add(context.Background(), tc.dfgetTask)
10496
c.Check(err, check.IsNil)
105-
if tc.dfgetTask.Dfdaemon {
106-
c.Assert(1, check.Equals,
107-
int(prom_testutil.ToFloat64(
108-
dfgetDaemonNum.WithLabelValues(tc.dfgetTask.TaskID, tc.dfgetTask.CallSystem))))
109-
} else {
110-
c.Assert(1, check.Equals,
111-
int(prom_testutil.ToFloat64(
112-
dfgetNum.WithLabelValues(tc.dfgetTask.TaskID, tc.dfgetTask.CallSystem))))
113-
}
114-
97+
c.Assert(1, check.Equals,
98+
int(prom_testutil.ToFloat64(
99+
dfgetTasks.WithLabelValues(tc.dfgetTask.TaskID, tc.dfgetTask.CallSystem))))
115100
dt, err := manager.Get(context.Background(), tc.dfgetTask.CID, tc.dfgetTask.TaskID)
116101
c.Check(err, check.IsNil)
117102
c.Check(dt, check.DeepEquals, tc.Expect)
118103
}
119104
}
120105

121106
func (s *DfgetTaskMgrTestSuite) TestDfgetTaskUpdate(c *check.C) {
122-
manager, _ := NewManager()
107+
manager, _ := NewManager(prometheus.NewRegistry())
123108
var testCases = []struct {
124109
dfgetTask *types.DfGetTask
125110
taskStatus string
@@ -151,7 +136,7 @@ func (s *DfgetTaskMgrTestSuite) TestDfgetTaskUpdate(c *check.C) {
151136
dfgetTask: &types.DfGetTask{
152137
CID: "bar",
153138
CallSystem: "bar",
154-
Dfdaemon: true,
139+
Dfdaemon: false,
155140
Path: "/peer/file/taskFileName",
156141
PieceSize: 4 * 1024 * 1024,
157142
TaskID: "test2",
@@ -161,7 +146,7 @@ func (s *DfgetTaskMgrTestSuite) TestDfgetTaskUpdate(c *check.C) {
161146
Expect: &types.DfGetTask{
162147
CID: "bar",
163148
CallSystem: "bar",
164-
Dfdaemon: true,
149+
Dfdaemon: false,
165150
Path: "/peer/file/taskFileName",
166151
PieceSize: 4 * 1024 * 1024,
167152
TaskID: "test2",
@@ -184,9 +169,8 @@ func (s *DfgetTaskMgrTestSuite) TestDfgetTaskUpdate(c *check.C) {
184169
}
185170

186171
func (s *DfgetTaskMgrTestSuite) TestDfgetTaskDelete(c *check.C) {
187-
manager, _ := NewManager()
188-
dfgetNum := manager.metrics.dfgetTasks
189-
dfgetDaemonNum := manager.metrics.dfgetTasksDaemon
172+
manager, _ := NewManager(prometheus.NewRegistry())
173+
dfgetTasks := manager.metrics.dfgetTasks
190174

191175
var testCases = []struct {
192176
dfgetTask *types.DfGetTask
@@ -195,7 +179,7 @@ func (s *DfgetTaskMgrTestSuite) TestDfgetTaskDelete(c *check.C) {
195179
dfgetTask: &types.DfGetTask{
196180
CID: "foo",
197181
CallSystem: "foo",
198-
Dfdaemon: true,
182+
Dfdaemon: false,
199183
Path: "/peer/file/taskFileName",
200184
PieceSize: 4 * 1024 * 1024,
201185
TaskID: "test1",
@@ -221,18 +205,11 @@ func (s *DfgetTaskMgrTestSuite) TestDfgetTaskDelete(c *check.C) {
221205

222206
err = manager.Delete(context.Background(), tc.dfgetTask.CID, tc.dfgetTask.TaskID)
223207
c.Check(err, check.IsNil)
224-
if tc.dfgetTask.Dfdaemon {
225-
c.Assert(0, check.Equals,
226-
int(prom_testutil.ToFloat64(
227-
dfgetDaemonNum.WithLabelValues(tc.dfgetTask.TaskID, tc.dfgetTask.CallSystem))))
228-
} else {
229-
c.Assert(0, check.Equals,
230-
int(prom_testutil.ToFloat64(
231-
dfgetNum.WithLabelValues(tc.dfgetTask.TaskID, tc.dfgetTask.CallSystem))))
232-
}
208+
c.Assert(0, check.Equals,
209+
int(prom_testutil.ToFloat64(
210+
dfgetTasks.WithLabelValues(tc.dfgetTask.TaskID, tc.dfgetTask.CallSystem))))
233211

234212
_, err = manager.Get(context.Background(), tc.dfgetTask.CID, tc.dfgetTask.TaskID)
235-
c.Check(errors.IsDataNotFound(err), check.Equals, true)
213+
c.Check(errortypes.IsDataNotFound(err), check.Equals, true)
236214
}
237-
>>>>>>> 40bbeb8... add some supernode metrics
238215
}

0 commit comments

Comments
 (0)