Skip to content

Commit 2e70b67

Browse files
authored
TWEAK: allow custom prometheus registry (#114)
1 parent 97d74ed commit 2e70b67

File tree

2 files changed

+39
-16
lines changed

2 files changed

+39
-16
lines changed

middleware/prometheus/metrics.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,23 @@ var (
6666
)
6767
)
6868

69-
func init() {
70-
prometheus.MustRegister(jobExecutionTimeSeconds)
71-
prometheus.MustRegister(jobExecutedTotal)
72-
prometheus.MustRegister(jobBusy)
73-
74-
prometheus.MustRegister(jobEnqueuedTotal)
75-
76-
prometheus.MustRegister(jobReady)
77-
prometheus.MustRegister(jobScheduled)
78-
prometheus.MustRegister(jobLatencySeconds)
69+
// RegisterMetrics adds all metrics to a prometheus registry.
70+
func RegisterMetrics(r prometheus.Registerer) error {
71+
for _, m := range []prometheus.Collector{
72+
jobExecutionTimeSeconds,
73+
jobExecutedTotal,
74+
jobBusy,
75+
jobEnqueuedTotal,
76+
jobReady,
77+
jobScheduled,
78+
jobLatencySeconds,
79+
} {
80+
err := r.Register(m)
81+
if err != nil {
82+
return err
83+
}
84+
}
85+
return nil
7986
}
8087

8188
// HandleFuncMetrics adds prometheus metrics like executed job count.

middleware/prometheus/metrics_test.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,18 @@ import (
66
"testing"
77
"time"
88

9+
"github.com/prometheus/client_golang/prometheus"
910
"github.com/prometheus/client_golang/prometheus/promhttp"
1011
"github.com/stretchr/testify/require"
1112
"github.com/taylorchu/work"
1213
"github.com/taylorchu/work/redistest"
1314
)
1415

1516
func TestHandleFuncMetrics(t *testing.T) {
17+
reg := prometheus.NewRegistry()
18+
err := RegisterMetrics(reg)
19+
require.NoError(t, err)
20+
1621
job := work.NewJob()
1722
opt := &work.DequeueOptions{
1823
Namespace: "{ns1}",
@@ -22,7 +27,7 @@ func TestHandleFuncMetrics(t *testing.T) {
2227
return nil
2328
})
2429

25-
err := h(job, opt)
30+
err = h(job, opt)
2631
require.NoError(t, err)
2732

2833
h = HandleFuncMetrics(func(*work.Job, *work.DequeueOptions) error {
@@ -32,7 +37,8 @@ func TestHandleFuncMetrics(t *testing.T) {
3237
require.Error(t, err)
3338

3439
r := httptest.NewRecorder()
35-
promhttp.Handler().ServeHTTP(r, httptest.NewRequest("GET", "/metrics", nil))
40+
promhttp.HandlerFor(reg, promhttp.HandlerOpts{}).
41+
ServeHTTP(r, httptest.NewRequest("GET", "/metrics", nil))
3642

3743
for _, m := range []string{
3844
`work_job_executed_total{`,
@@ -44,6 +50,10 @@ func TestHandleFuncMetrics(t *testing.T) {
4450
}
4551

4652
func TestEnqueueFuncMetrics(t *testing.T) {
53+
reg := prometheus.NewRegistry()
54+
err := RegisterMetrics(reg)
55+
require.NoError(t, err)
56+
4757
job := work.NewJob()
4858
opt := &work.EnqueueOptions{
4959
Namespace: "{ns1}",
@@ -53,7 +63,7 @@ func TestEnqueueFuncMetrics(t *testing.T) {
5363
return nil
5464
})
5565

56-
err := h(job, opt)
66+
err = h(job, opt)
5767
require.NoError(t, err)
5868

5969
h = EnqueueFuncMetrics(func(*work.Job, *work.EnqueueOptions) error {
@@ -63,7 +73,8 @@ func TestEnqueueFuncMetrics(t *testing.T) {
6373
require.Error(t, err)
6474

6575
r := httptest.NewRecorder()
66-
promhttp.Handler().ServeHTTP(r, httptest.NewRequest("GET", "/metrics", nil))
76+
promhttp.HandlerFor(reg, promhttp.HandlerOpts{}).
77+
ServeHTTP(r, httptest.NewRequest("GET", "/metrics", nil))
6778

6879
for _, m := range []string{
6980
`work_job_enqueued_total{`,
@@ -73,6 +84,10 @@ func TestEnqueueFuncMetrics(t *testing.T) {
7384
}
7485

7586
func TestExportWorkerMetrics(t *testing.T) {
87+
reg := prometheus.NewRegistry()
88+
err := RegisterMetrics(reg)
89+
require.NoError(t, err)
90+
7691
client := redistest.NewClient()
7792
defer client.Close()
7893
require.NoError(t, redistest.Reset(client))
@@ -81,7 +96,7 @@ func TestExportWorkerMetrics(t *testing.T) {
8196
Namespace: "{ns1}",
8297
Queue: work.NewRedisQueue(client),
8398
})
84-
err := w.Register("test",
99+
err = w.Register("test",
85100
func(*work.Job, *work.DequeueOptions) error { return nil },
86101
&work.JobOptions{
87102
MaxExecutionTime: time.Second,
@@ -95,7 +110,8 @@ func TestExportWorkerMetrics(t *testing.T) {
95110
require.NoError(t, err)
96111

97112
r := httptest.NewRecorder()
98-
promhttp.Handler().ServeHTTP(r, httptest.NewRequest("GET", "/metrics", nil))
113+
promhttp.HandlerFor(reg, promhttp.HandlerOpts{}).
114+
ServeHTTP(r, httptest.NewRequest("GET", "/metrics", nil))
99115

100116
for _, m := range []string{
101117
`job_ready{`,

0 commit comments

Comments
 (0)